github.com/llir/llvm@v0.3.6/ir/testdata/eval.ll (about)

     1  @format = constant [6 x i8] c"%08X\0A\00"
     2  
     3  define i32 @add(i32 %a, i32 %b) {
     4  0:
     5  	%result = add i32 %a, %b
     6  	ret i32 %result
     7  }
     8  
     9  define i32 @sub(i32 %0, i32 %1) {
    10  2:
    11  	%result = sub i32 %0, %1
    12  	ret i32 %result
    13  }
    14  
    15  define i32 @f(i32 %a, i32 %b) {
    16  0:
    17  	%tmp1 = add i32 %a, %b
    18  	%tmp2 = sub i32 %tmp1, 1
    19  	%tmp3 = mul i32 %tmp2, 12345678
    20  	%tmp4 = udiv i32 %tmp3, 2
    21  	%tmp5 = sdiv i32 %tmp4, 3
    22  	%tmp6 = urem i32 %tmp5, 14594
    23  	%tmp7 = srem i32 %tmp6, 1000
    24  	%tmp8 = shl i32 %tmp7, 1
    25  	%tmp9 = lshr i32 %tmp8, 2
    26  	%tmp10 = mul i32 %tmp9, -1
    27  	%tmp11 = ashr i32 %tmp10, 2
    28  	%tmp12 = and i32 %tmp11, 249  ; 0b11111001
    29  	%tmp13 = or i32 %tmp12, 4     ; 0b00000100
    30  	%result = xor i32 %tmp13, 255 ; 0b11111111
    31  	call i32(i8*, ...) @printf(i8* getelementptr ([6 x i8], [6 x i8]* @format, i32 0, i32 0), i32 %result)
    32  	ret i32 %result
    33  }
    34  
    35  define i32 @main() {
    36  0:
    37  	%tmp1 = call i32 @add(i32 -1, i32 3)
    38  	%tmp2 = call i32 @sub(i32 13, i32 5)
    39  	%result = call i32 @f(i32 %tmp1, i32 %tmp2)
    40  	ret i32 %result
    41  }
    42  
    43  declare i32 @printf(i8*, ...)