Next: , Previous: Dependency analysis, Up: Loop Analysis and Representation


14.9 线性循环转换框架

Lambda是一个允许循环转换使用基于迭代空间和循环边界的非退化矩阵的框架。这允许组合使用skewing,scaling,interchange,和reversal转换。这些转换常用来提高cache行为,或者移除内部循环依赖使得可以进行并行化或者向量化。

为了执行这些转换,Lambda需要loopnest转化为可以被很容易的进行矩阵转换的内部形式。函数gcc_loopnest_to_lambda_loopnest用来做这种转换。如果循环不能够使用lambda转换,这个函数将返回NULL。

一旦通过转换函数获得lambda_loopnest,便可以使用lambda_loopnest_transform来进行各种转换处理,其接受一个转换矩阵。注意这是由调用者来检验转换矩阵是否合法,即可以应用到循环上的。Lambda只是简单的应用提供给它的矩阵。可以扩展为使用任何非退化矩阵之外的矩阵,不过现在还没有实现。可以使用lambda_transform_legal_p来检验给定loopnest的矩阵的合法性。

给定一个转换过的loopnest,可以通过lambda_loopnest_to_gcc_loopnest来将其转化回到gcc IR。该函数会修改循环使得它们匹配转换过的loopnest。