Previous: Maintaining the CFG, Up: Control Flow
活跃信息有助于决定在程序的给定点是否一些寄存器是“活跃”的, 即其包含的值可能在程序之后的地方被使用。 例如,这些信息被使用在寄存器分配过程, 伪寄存器只有在活跃的时候才需要被分配给唯一的硬件寄存器或者栈存储单元。 当一个寄存器无用的时候,硬件寄存器和栈存储单元可以被随意重用于其它值。
在后端从pass_df_initialize
起始到pass_df_finish
结束之间,
活跃信息是有效的。有三种活跃分析:LR
,能够确定在函数的任意点P
,
寄存器是否会在从P
到函数结束之间的某处被使用。
UR
,能够确定是否从函数的起始到P之间定义了变量。
LIVE
是LR
和UR
的交集,变量在P
点是活跃的,
如果同时从函数的开始到现在存在一个赋值,
并且从P
到函数的结束之间存在对其的使用。
通常这三种信息里,LIVE
最有帮助。
宏DF_[LR,UR,LIVE]_[IN,OUT]
可以用来访问这些信息。
这些宏接受一个基本块号,并返回一个以寄存器号为索引的位图。
该信息只保证截至在调用df_analyze
之后是最新的。
关于使用数据流的详细信息参见df-core.c文件。
活跃信息部分存在RTL指令流里,部分存在流程图里。局部信息存在指令流中:
每条指令可以包含REG_DEAD
注解(note),
来表示给定寄存器的值已经不再被需要了,或者REG_UNUSED
注解,
来表示由指令计算所得的值从来没有被使用。第二个可以有助于指令一次计算多值。