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*, ...)