On Fri, Apr 18, 2014 at 10:09 AM, <lionheart8470 at gmail.com> wrote:
> Hello. I'm a newbie for LLVM.
>
> What I'm trying to do is to write the simplest program containing phi
IR.
> 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.
>
> 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.
>
> I think it is easy problem but, for some reasons that I don't know, I
> failed making one.
>
> Can any give me simplest program producing phi?
>
An easy way to get a phi is to run the mem2reg pass with opt. For example,
this C code:
int foo(int a, int b) {
if (a > b) return a + b + 2;
else return a * b * 17;
}
When compiled with Clang to LLVM IR, and run through 'opt -mem2reg',
produces:
; ModuleID = 'f.opt.bc'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
; Function Attrs: nounwind
define i32 @foo(i32 %a, i32 %b) #0 {
entry:
%cmp = icmp sgt i32 %a, %b
br i1 %cmp, label %if.then, label %if.else
if.then: ; preds = %entry
%add = add nsw i32 %a, %b
%add1 = add nsw i32 %add, 2
br label %return
if.else: ; preds = %entry
%mul = mul nsw i32 %a, %b
%mul2 = mul nsw i32 %mul, 17
br label %return
return: ; preds = %if.else,
%if.then
%retval.0 = phi i32 [ %add1, %if.then ], [ %mul2, %if.else ]
ret i32 %retval.0
}
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" }
!llvm.ident = !{!0}
!0 = metadata !{metadata !"clang version 3.5.0 "}
Eli
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20140418/1b157628/attachment.html>