2015-07-10 1 views
1


Я получаю сообщение об ошибке 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 не может развернуть петли [Невозможно развернуть; цикл не завершается условной ветвью]

ответ

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 иметь свой битовый код преобразуются в SSA из (если он не уже), в другой руке петля имеет два условных выходящие ветви и одну безусловную backedge, так что simplifycfg кажется полезным, чтобы преобразовать его в одной условной форме backedge, который может быть обработан раскатать проход

+0

мы также можем использовать '-unroll-threshold' для разворачивания больших циклов –

Смежные вопросы