【问题标题】:LLVM unable to unroll loops [Can't unroll; loop not terminated by a conditional branch]LLVM 无法展开循环 [无法展开;循环没有被条件分支终止]
【发布时间】:2015-07-13 23:02:20
【问题描述】:


对于以下代码,我收到错误 Can't unroll; loop not terminated by a conditional branch
for(i=0 ; j<10 && i<5 ; i++) j= j+2; 我正在使用以下命令在文件 a.bc 中展开循环:
opt -loops -loop-rotate -loop-simplify -loop-unroll -unroll-count=3 -unroll-allow-partial -debug a.bc -o a.loop.bc
有没有办法展开循环以避免此错误?

【问题讨论】:

    标签: loops llvm


    【解决方案1】:

    使用这个命令,它应该可以工作(我已经在 LLVM 3.6 和 3.7 上测试过)

        opt -mem2reg  -simplifycfg  -loops  -lcssa -loop-simplify -loop-rotate   
    -loop-unroll -unroll-count=3 -unroll-allow-partial -debug a.bc -o a.loop.bc
    

    您首先需要 mem2reg 将您的位码从(如果尚未)转换为 SSA,另一方面,循环有两个条件退出分支和一个无条件的后端,因此 simplifycfg 似乎有助于将其转换为可以通过展开传递处理的单条件后端形式

    【讨论】:

    • 我们可能还想使用-unroll-threshold 展开更大的循环
    猜你喜欢
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    相关资源
    最近更新 更多