У меня есть базовый IR, сохраненный в fact.ll
файле:
define i32 @factorial(i32 %val) {
entry:
%i = add i32 0, 2
%temp = add i32 0, 1
br label %check_for_condition
check_for_condition:
%i_leq_val = icmp sle i32 %i, %val
br i1 %i_leq_val, label %for_body, label %end_loop
for_body:
%new_temp = mul i32 %temp, %i
%i_plus_one = add i32 %i, 1
br label %check_for_condition
end_loop:
ret i32 %temp
}
Это представление итеративной факториальной функции.
Как использовать инструменты LLVM для преобразования этогоИК в оптимизированном?Я попробовал эту команду, чтобы получить IR с развернутым циклом:
opt -loop-unroll fact.ll -S
Но команда, приведенная выше, печатает практически тот же код IR.Я пытался добавить различные флаги, такие как -unroll-count
, но это не имеет никакого значения.
Неужели мое понимание оптимизации развертывания цикла в LLVM неверно, и этот шаг происходит только в интерфейсе C ++?