Mercurial > hg > Members > kaito > slides
comparison 2013/old/factorial.ll @ 0:845ff8ff4fc9
1st
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 14 Jan 2014 01:31:42 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:845ff8ff4fc9 |
---|---|
1 ; ModuleID = 'factorial/factorial.c' | |
2 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" | |
3 target triple = "x86_64-apple-macosx10.8.0" | |
4 | |
5 @.str = private unnamed_addr constant [16 x i8] c"factorial = %d\0A\00", align 1 | |
6 | |
7 ; Function Attrs: noreturn nounwind ssp uwtable | |
8 define fastcc void @print_factorial(i32 %prod) #0 { | |
9 entry: | |
10 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([16 x i8]* @.str, i64 0, i64 0), i32 %prod) #5 | |
11 call void @exit(i32 0) #6 | |
12 unreachable | |
13 } | |
14 | |
15 ; Function Attrs: nounwind | |
16 declare i32 @printf(i8* nocapture, ...) #1 | |
17 | |
18 ; Function Attrs: noreturn | |
19 declare void @exit(i32) #2 | |
20 | |
21 ; Function Attrs: nounwind ssp uwtable | |
22 define fastcc void @factorial0(i32 %prod, i32 %x) #3 { | |
23 entry: | |
24 %cmp4 = icmp sgt i32 %x, 0 | |
25 br i1 %cmp4, label %return, label %if.else | |
26 | |
27 if.else: ; preds = %return, %entry | |
28 %prod.tr.lcssa = phi i32 [ %prod, %entry ], [ %mul, %return ] | |
29 tail call fastcc void @print_factorial(i32 %prod.tr.lcssa) | |
30 unreachable | |
31 | |
32 return: ; preds = %entry, %return | |
33 %x.tr6 = phi i32 [ %sub, %return ], [ %x, %entry ] | |
34 %prod.tr5 = phi i32 [ %mul, %return ], [ %prod, %entry ] | |
35 %mul = mul nsw i32 %x.tr6, %prod.tr5 | |
36 %sub = add nsw i32 %x.tr6, -1 | |
37 %cmp = icmp sgt i32 %sub, 0 | |
38 br i1 %cmp, label %return, label %if.else | |
39 } | |
40 | |
41 ; Function Attrs: nounwind ssp uwtable | |
42 define fastcc void @factorial(i32 %x) #3 { | |
43 entry: | |
44 %cmp4.i = icmp sgt i32 %x, 0 | |
45 br i1 %cmp4.i, label %return.i, label %if.else.i | |
46 | |
47 if.else.i: ; preds = %return.i, %entry | |
48 %prod.tr.lcssa.i = phi i32 [ 1, %entry ], [ %mul.i, %return.i ] | |
49 tail call fastcc void @print_factorial(i32 %prod.tr.lcssa.i) #5 | |
50 unreachable | |
51 | |
52 return.i: ; preds = %entry, %return.i | |
53 %x.tr6.i = phi i32 [ %sub.i, %return.i ], [ %x, %entry ] | |
54 %prod.tr5.i = phi i32 [ %mul.i, %return.i ], [ 1, %entry ] | |
55 %mul.i = mul nsw i32 %prod.tr5.i, %x.tr6.i | |
56 %sub.i = add nsw i32 %x.tr6.i, -1 | |
57 %cmp.i = icmp sgt i32 %sub.i, 0 | |
58 br i1 %cmp.i, label %return.i, label %if.else.i | |
59 } | |
60 | |
61 ; Function Attrs: nounwind ssp uwtable | |
62 define i32 @main(i32 %argc, i8** nocapture %argv) #3 { | |
63 entry: | |
64 %arrayidx = getelementptr inbounds i8** %argv, i64 1 | |
65 %0 = load i8** %arrayidx, align 8, !tbaa !0 | |
66 %call = call i32 @atoi(i8* %0) #5 | |
67 %cmp4.i.i = icmp sgt i32 %call, 0 | |
68 br i1 %cmp4.i.i, label %return.i.i, label %if.else.i.i | |
69 | |
70 if.else.i.i: ; preds = %return.i.i, %entry | |
71 %prod.tr.lcssa.i.i = phi i32 [ 1, %entry ], [ %mul.i.i, %return.i.i ] | |
72 tail call fastcc void @print_factorial(i32 %prod.tr.lcssa.i.i) #5 | |
73 unreachable | |
74 | |
75 return.i.i: ; preds = %entry, %return.i.i | |
76 %x.tr6.i.i = phi i32 [ %sub.i.i, %return.i.i ], [ %call, %entry ] | |
77 %prod.tr5.i.i = phi i32 [ %mul.i.i, %return.i.i ], [ 1, %entry ] | |
78 %mul.i.i = mul nsw i32 %prod.tr5.i.i, %x.tr6.i.i | |
79 %sub.i.i = add nsw i32 %x.tr6.i.i, -1 | |
80 %cmp.i.i = icmp sgt i32 %sub.i.i, 0 | |
81 br i1 %cmp.i.i, label %return.i.i, label %if.else.i.i | |
82 } | |
83 | |
84 ; Function Attrs: nounwind readonly | |
85 declare i32 @atoi(i8* nocapture) #4 | |
86 | |
87 attributes #0 = { noreturn nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } | |
88 attributes #1 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } | |
89 attributes #2 = { noreturn "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } | |
90 attributes #3 = { nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } | |
91 attributes #4 = { nounwind readonly "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } | |
92 attributes #5 = { nounwind } | |
93 attributes #6 = { noreturn nounwind } | |
94 | |
95 !0 = metadata !{metadata !"any pointer", metadata !1} | |
96 !1 = metadata !{metadata !"omnipotent char", metadata !2} | |
97 !2 = metadata !{metadata !"Simple C/C++ TBAA"} |