我有一个基本的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转换为优化的IR?我尝试使用此命令获取展开循环的IR:
opt -loop-unroll fact.ll -S
但是上面的命令打印几乎相同的IR代码。我尝试添加-unroll-count
之类的不同标志,但这没有任何区别。
我对LLVM中的循环展开优化的理解是否错误,并且此步骤仅在C ++前端中发生?