Как заставить LLVM -loop-unroll оптимизировать? - PullRequest
0 голосов
/ 05 июня 2019

У меня есть базовый 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 ++?

...