LLVM无法展开循环[无法展开;循环没有被条件分支终止]

时间:2015-07-10 12:01:13

标签: loops llvm


我收到以下代码的错误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
是否有办法展开循环以避免此错误?

1 个答案:

答案 0 :(得分:2)

使用此命令它应该可以工作(我在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 让你的bitcode从(如果还没有)转换为SSA,另一方面,循环有两个条件退出分支和一个无条件的后备,所以 simplifycfg 似乎有助于将其转换为单条件备份表单,可以通过展开传递来处理