|
1 |
|
2 declare i32 @printf(i8*, ...) |
|
3 |
|
4 @.str_nl = private constant [2 x i8] c"\0A\00" |
|
5 @.str_star = private constant [2 x i8] c"*\00" |
|
6 @.str_space = private constant [2 x i8] c" \00" |
|
7 |
|
8 define void @new_line() #0 { |
|
9 %t0 = getelementptr [2 x i8], [2 x i8]* @.str_nl, i32 0, i32 0 |
|
10 %1 = call i32 (i8*, ...) @printf(i8* %t0) |
|
11 ret void |
|
12 } |
|
13 |
|
14 define void @print_star() #0 { |
|
15 %t0 = getelementptr [2 x i8], [2 x i8]* @.str_star, i32 0, i32 0 |
|
16 %1 = call i32 (i8*, ...) @printf(i8* %t0) |
|
17 ret void |
|
18 } |
|
19 |
|
20 define void @print_space() #0 { |
|
21 %t0 = getelementptr [2 x i8], [2 x i8]* @.str_space, i32 0, i32 0 |
|
22 %1 = call i32 (i8*, ...) @printf(i8* %t0) |
|
23 ret void |
|
24 } |
|
25 |
|
26 define void @skip() #0 { |
|
27 ret void |
|
28 } |
|
29 |
|
30 @.str = private constant [4 x i8] c"%d\0A\00" |
|
31 |
|
32 define void @print_int(i32 %x) { |
|
33 %t0 = getelementptr [4 x i8], [4 x i8]* @.str, i32 0, i32 0 |
|
34 call i32 (i8*, ...) @printf(i8* %t0, i32 %x) |
|
35 ret void |
|
36 } |
|
37 |
|
38 ; END OF BUILD-IN FUNCTIONS (prelude) |
|
39 @Max = global i32 10 |
|
40 |
|
41 define i32 @sqr (i32 %x) { |
|
42 %tmp_20 = mul i32 %x, %x |
|
43 ret i32 %tmp_20 |
|
44 } |
|
45 |
|
46 define void @all (i32 %n) { |
|
47 %tmp_22 = load i32, i32* @Max |
|
48 %tmp_21 = icmp sle i32 %n, %tmp_22 |
|
49 br i1 %tmp_21, label %if_branch_28, label %else_branch_29 |
|
50 |
|
51 if_branch_28: |
|
52 %tmp_23 = call i32 @sqr (i32 %n) |
|
53 call void @print_int (i32 %tmp_23) |
|
54 %tmp_25 = add i32 %n, 1 |
|
55 call void @all (i32 %tmp_25) |
|
56 ret void |
|
57 |
|
58 else_branch_29: |
|
59 call void @skip () |
|
60 ret void |
|
61 } |
|
62 |
|
63 define i32 @main() { |
|
64 call void @all (i32 0) |
|
65 ret i32 0 |
|
66 } |
|
67 |