Next: , Previous: Scalar evolutions, Up: Loop Analysis and Representation


14.6 RTL上的IV分析

RTL之上的归约变量很简单,并且只允许一次在一个循环中,仿射归约变量的分析。接口在cfgloop.h中声明。在循环L中分析归约变量之前,必须在L上调用iv_analysis_loop_init函数。分析完成之后(可能会为多个循环调用iv_analysis_loop_init),应该调用iv_analysis_done。下面的函数能够被用来访问分析结果:

归约变量的描述在struct rtx_iv中。为了处理子寄存器,该表示有些复杂;如果extend域的值不是UNKNOWN,则归约变量在第i次迭代时的值为

     delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)),

不过下面的情况例外:如果first_special为真,则在首次迭代时(当i为0时),值为delta + mult * base。然而,如果extend等于UNKNOWN,则first_special必须为假,delta为0,mult为1,并且在第i次迭代时的值为

     subreg_{mode} (base + i * step)

函数get_iv_value可以用来执行这些计算。