我收到以下代码的错误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
是否有办法展开循环以避免此错误?
答案 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 似乎有助于将其转换为单条件备份表单,可以通过展开传递来处理