progs/fun2/sqr.ll
changeset 820 7fd1f611c21d
child 826 b0352633bf48
equal deleted inserted replaced
819:fd88a0656164 820:7fd1f611c21d
       
     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