<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Apr 18, 2014 at 10:09 AM,  <span dir="ltr"><<a href="mailto:lionheart8470@gmail.com" target="_blank">lionheart8470@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hello. I'm a newbie for LLVM.<br>
<br>
What I'm trying to do is to write the simplest program containing phi IR.<br>
However, even though I wrote and if statements, what I get is LLVM IR not containing phi node. I tried the examples shown in LLVM documentation but it didn't work.<br>
<br>
At first, I thought it is because of the optimization level but without optimization, it doesn't produce phi, and when using optimization level higher and equal to O1, the meaningless while loops are just removed, so I have a problem.<br>


<br>
I think it is easy problem but, for some reasons that I don't know, I failed making one.<br>
<br>
Can any give me simplest program producing phi?<br></blockquote><div><br></div><div>An easy way to get a phi is to run the mem2reg pass with opt. For example, this C code:</div><div><br></div><div><div>int foo(int a, int b) {</div>

<div>  if (a > b) return a + b + 2;</div><div>  else return a * b * 17;</div><div>}</div></div><div><br></div><div><br></div><div><br></div><div><br></div><div>When compiled with Clang to LLVM IR, and run through 'opt -mem2reg', produces:</div>

<div><br></div><div><br></div><div><br></div><div><br></div><div><div>; ModuleID = 'f.opt.bc'</div><div>target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"</div><div>target triple = "x86_64-unknown-linux-gnu"</div>

<div><br></div><div>; Function Attrs: nounwind</div><div>define i32 @foo(i32 %a, i32 %b) #0 {</div><div>entry:</div><div>  %cmp = icmp sgt i32 %a, %b</div><div>  br i1 %cmp, label %if.then, label %if.else</div><div><br></div>

<div>if.then:                                          ; preds = %entry</div><div>  %add = add nsw i32 %a, %b</div><div>  %add1 = add nsw i32 %add, 2</div><div>  br label %return</div><div><br></div><div>if.else:                                          ; preds = %entry</div>

<div>  %mul = mul nsw i32 %a, %b</div><div>  %mul2 = mul nsw i32 %mul, 17</div><div>  br label %return</div><div><br></div><div>return:                                           ; preds = %if.else, %if.then</div><div>  %retval.0 = phi i32 [ %add1, %if.then ], [ %mul2, %if.else ]</div>

<div>  ret i32 %retval.0</div><div>}</div><div><br></div><div>attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }</div>

<div><br></div><div>!llvm.ident = !{!0}</div><div><br></div><div>!0 = metadata !{metadata !"clang version 3.5.0 "}</div></div><div><br></div><div><br></div><div>Eli</div><div><br></div><div> </div></div></div></div>