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

LLVM unable to unroll loops [Can't unroll; loop not terminated by a conditional branch]


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

使用这个命令,它应该可以工作(我已经在 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 似乎有助于将其转换为可以处理的单条件后备形式通过展开通行证