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 似乎有助于将其转换为可以处理的单条件后备形式通过展开通行证
我收到以下代码的错误 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 似乎有助于将其转换为可以处理的单条件后备形式通过展开通行证