[LLVMdev] Question about the IR code of conditional flow
胡渐飞
hujianfei258 at gmail.com
Sun Apr 15 21:51:33 PDT 2012
I used llvm.org/demo to generate IR code from c code.
And I found that: when "return " statement appears several times in
different conditional block, IR code does not genrate one "ret "
instruction for each return statement,
it just put a phi node instruction at the end of the function. Just like
this:
int factorial(int X) {
if (X <100)
X*=3;
else
X += 1;
return X + 3;
}
the IR code genrated would be as follow:
define i32 @factorial(i32 %X) nounwind uwtable readnone {
%1 = icmp slt i32 %X, 100
br i1 %1, label %2, label %4
; <label>:2 ; preds = %0
%3 = mul nsw i32 %X, 3
br label %6
; <label>:4 ; preds = %0
%5 = add nsw i32 %X, 1
br label %6
; <label>:6 ; preds = %4, %2
%.0 = phi i32 [ %3, %2 ], [ %5, %4 ]
%7 = add nsw i32 %.0, 3
ret i32 %7
}
Is there any reason or rull to do like this, to use one phi
instruction and only one ret instruction?
As I am trying to generate llvm IR code for my language, can I put
each each ret at each conditional block like follows?
; <label>:2 ; preds = %0
%3 = mul nsw i32 %X, 3
ret %3
; <label>:4 ; preds = %0
%5 = add nsw i32 %X, 1
ret %5
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120416/fe93da60/attachment.html>
More information about the llvm-dev
mailing list