描述
将嵌套循环平铺为单一循环层级。
在 RTL 实现中,在循环层级内的循环之间移动需耗时 1 个时钟周期。将嵌套循环平铺即可将其作为单一循环来加以最优化。这样可节省时钟周期,从而进一步对循环主体逻辑进行最优化。
建议: 将该指令应用于循环层级中最内层的循环。仅限完美循环和半完美循环才能以此方式进行平铺。
- 完美循环嵌套
-
- 仅限最内层循环才包含循环主体内容。
- 在循环语句之间不指定任何逻辑。
- 所有循环边界均为常量。
- 半完美循环嵌套
-
- 仅限最内层循环才包含循环主体内容。
- 在循环语句之间不指定任何逻辑。
- 最外层的循环边界可采用变量。
- 非完美循环嵌套
-
当内层循环具有变量边界或者循环主体未完全包含在内层循环内时,请尝试重构代码或者将循环主体中的循环展开以创建完美循环嵌套。
语法
syn.directive.loop_flatten=[OPTIONS] <location>
-
<location>
表示最内层循环的位置,格式为function[/label]
。
选项
-
off
- 该选项用于防止发生循环平铺,它可防止对某些循环进行平铺,同时对指定位置的所有其他循环执行平铺。重要: 存在 LOOP_FLATTEN 编译指示和指令即表示启用最优化。添加
off
则表示禁用最优化。
示例
将 foo
函数中的 loop_1
及循环层级中位于其上层的所有(完美或半完美)循环平铺为单一循环。
set_directive_loop_flatten=foo/loop_1
防止在 foo
函数的 loop_2
中进行循环平铺。
set_directive_loop_flatten=off foo/loop_2