-
Notifications
You must be signed in to change notification settings - Fork 0
/
out
115 lines (100 loc) · 3.15 KB
/
out
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
; ModuleID = 'Compiler for CPy'
source_filename = "Compiler for CPy"
@temp = global i32 0
@num = global i32 0
@k = global i32 0
@ans = global i32 0
@i = global i32 0
@0 = private unnamed_addr constant [5 x i8] c"\22%d\22\00"
define i32 @mod(i32 %a, i32 %b) {
entry:
%b2 = alloca i32
%a1 = alloca i32
store i32 %a, i32* %a1
store i32 %b, i32* %b2
br label %"Start Condition"
"Start Condition": ; preds = %LoopStart, %entry
%0 = load i32, i32* %b2
%1 = load i32, i32* %a1
%gecompare = icmp sge i32 %1, %0
br i1 %gecompare, label %LoopStart, label %LoopEnd
LoopStart: ; preds = %"Start Condition"
%2 = load i32, i32* %a1
%3 = load i32, i32* %b2
%4 = load i32, i32* %a1
%sub = sub i32 %4, %3
store i32 %sub, i32* %a1
br label %"Start Condition"
LoopEnd: ; preds = %"Start Condition"
%5 = load i32, i32* %a1
ret i32 %5
}
define i32 @pow(i32 %x, i32 %n) {
entry:
%n2 = alloca i32
%x1 = alloca i32
store i32 %x, i32* %x1
store i32 %n, i32* %n2
%0 = load i32, i32* %n2
%equalcompare = icmp eq i32 %0, 0
br i1 %equalcompare, label %if, label %"after if"
if: ; preds = %entry
ret i32 1
"after if": ; preds = %entry
%1 = load i32, i32* @temp
%2 = load i32, i32* %x1
%3 = load i32, i32* %n2
%div = sdiv i32 %3, 2
%4 = call i32 @pow(i32 %2, i32 %div)
store i32 %4, i32* @temp
%5 = load i32, i32* %n2
%6 = call i32 @mod(i32 %5, i32 2)
%equalcompare3 = icmp eq i32 %6, 0
br i1 %equalcompare3, label %if4, label %"after if5"
if4: ; preds = %"after if"
%7 = load i32, i32* @temp
%8 = load i32, i32* @temp
%mul = mul i32 %8, %7
ret i32 %mul
"after if5": ; preds = %"after if"
%9 = load i32, i32* @temp
%10 = load i32, i32* %x1
%mul6 = mul i32 %10, %9
%11 = load i32, i32* @temp
%mul7 = mul i32 %mul6, %11
ret i32 %mul7
}
define i32 @main() {
entry:
%i = alloca i32
%0 = load i32, i32* @num
store i32 5, i32* @num
%1 = load i32, i32* @k
store i32 2, i32* @k
%2 = load i32, i32* @ans
store i32 0, i32* @ans
store i32 1, i32* %i
br label %"Start Condition"
LoopStart: ; preds = %"Start Condition"
%NextVal = add i32 %i1, 1
store i32 %NextVal, i32* %i
br label %"Start Condition"
LoopEnd: ; preds = %"Start Condition"
%3 = load i32, i32* @ans
%4 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @0, i32 0, i32 0), i32 %3)
ret i32 0
"Start Condition": ; preds = %LoopStart, %entry
%i1 = phi i32 [ 1, %entry ], [ %NextVal, %LoopStart ]
%5 = load i32, i32* @num
%6 = load i32, i32* %i
%ltcompare = icmp slt i32 %6, %5
%7 = load i32, i32* @ans
%8 = load i32, i32* %i
%9 = load i32, i32* @k
%10 = call i32 @pow(i32 %8, i32 %9)
%11 = load i32, i32* @ans
%add = add i32 %11, %10
store i32 %add, i32* @ans
br i1 %ltcompare, label %LoopStart, label %LoopEnd
}
declare i32 @printf(i8*, i32)