Compiler construction 外部循环的寄存器分配

Compiler construction 外部循环的寄存器分配,compiler-construction,code-generation,register-allocation,Compiler Construction,Code Generation,Register Allocation,我正在翻阅红龙书,在“外部循环的注册分配”一节中,我遇到了以下我不太清楚的陈述 如果一个外循环L1包含一个内循环L2,则L2中分配的寄存器的名称不需要分配到L1-L2 他们想说什么?他们谈论的是在L1和L2中使用的变量,这些名称是在L2中分配的寄存器。我不太明白课文中的意思 有人能给我解释一个可能的例子吗 一种常见的优化方法是在循环期间将循环中使用的变量保留在寄存器中。这可以在紧密循环中产生巨大的差异,因为它避免了内存的使用 与此表单的任何优化一样,在循环开始之前,需要使用变量的值初始化寄存器,

我正在翻阅红龙书,在“外部循环的注册分配”一节中,我遇到了以下我不太清楚的陈述

如果一个外循环
L1
包含一个内循环
L2
,则
L2
中分配的寄存器的名称不需要分配到
L1-L2

他们想说什么?他们谈论的是在
L1
L2
中使用的变量,这些名称是在
L2
中分配的寄存器。我不太明白课文中的意思

有人能给我解释一个可能的例子吗


一种常见的优化方法是在循环期间将循环中使用的变量保留在寄存器中。这可以在紧密循环中产生巨大的差异,因为它避免了内存的使用

与此表单的任何优化一样,在循环开始之前,需要使用变量的值初始化寄存器,这可能意味着从内存中读取变量。如果变量在循环过程中被修改,之后仍在使用,则可能需要将其保存回其内存位置。不过,这最多是一次内存读取和一次写入,而不是在每次迭代中读取和写入变量的值

决定以这种方式优化哪些变量很重要。这里出现了一种可能性,一个变量被用于内部循环,而不是封闭的外部循环。在这种情况下,可能在外循环中有更有益的寄存器使用


因此,为内部循环中的优化变量保留的寄存器也不必保留在包含循环中。在启动内部循环之前保存寄存器的值,并在内部循环退出时恢复它,这甚至可能是值得的。所有这一切都取决于优化人员对循环重复计数的最佳猜测,变量的优化使用站点的数量,当然还有可用寄存器的数量。

因此,为内部循环中的优化变量保留的寄存器也将保留在包含循环中,这不是给定的。
没有得到它@rici@AbhishekGhosh英语是个问题吗?“非此即彼”的意思是不一定如此。是的,我听不懂英语。对不起…:(现在我明白了。在阅读了你的解释并向我解释了英语之后,作者想说什么,或者我问题中引用的文本是什么意思。非常感谢。我发现我在这本书的很多地方都被卡住了,仅仅是因为我无法理解或将文本中句子的含义与上下文关联起来。)(