LLVM Assembly Generated from Apex’s example.code

; ModuleID = ‘my module’
source_filename = “my module”

@0 = private unnamed_addr constant [15 x i8] c”I am Complex.\0A\00″, align 1
@1 = private unnamed_addr constant [20 x i8] c”I’m very moderate.\0A\00″, align 1
@2 = private unnamed_addr constant [8 x i8] c”x = %d\0A\00″, align 1
@3 = private unnamed_addr constant [8 x i8] c”y = %d\0A\00″, align 1
@4 = private unnamed_addr constant [27 x i8] c”The answer to x + y is %d\0A\00″, align 1
@5 = private unnamed_addr constant [17 x i8] c”I’m not simple!\0A\00″, align 1
@6 = private unnamed_addr constant [20 x i8] c”simple returns: %d\0A\00″, align 1
@7 = private unnamed_addr constant [22 x i8] c”moderate returns: %d\0A\00″, align 1
@8 = private unnamed_addr constant [21 x i8] c”complex returns: %d\0A\00″, align 1

define i32 @complex() {
entry:
%0 = alloca i32
store i32 9, i32* %0
%1 = alloca i32
store i32 8, i32* %1
%2 = alloca i32
%3 = load i32, i32* %0
%4 = load i32, i32* %1
%multmp = mul nsw i32 %3, %4
store i32 %multmp, i32* %2
%5 = call i32 (i8*, …) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @0, i32 0, i32 0))
%6 = load i32, i32* %2
%addtmp = add i32 %6, 1
ret i32 %addtmp
}

declare i32 @printf(i8*, …)

define i32 @moderate() {
entry:
%0 = alloca i32
store i32 7, i32* %0
%1 = alloca i32
store i32 5, i32* %1
%2 = alloca i32
store i32 0, i32* %2
%3 = load i32, i32* %0
%4 = load i32, i32* %0
%multmp = mul nsw i32 %3, %4
store i32 %multmp, i32* %0
%5 = load i32, i32* %1
%6 = load i32, i32* %1
%addtmp = add i32 %5, %6
store i32 %addtmp, i32* %1
%7 = load i32, i32* %1
%8 = load i32, i32* %0
%addtmp1 = add i32 %7, %8
store i32 %addtmp1, i32* %2
%9 = call i32 (i8*, …) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @1, i32 0, i32 0))
%10 = load i32, i32* %0
%11 = call i32 (i8*, …) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @2, i32 0, i32 0), i32 %10)
%12 = load i32, i32* %1
%13 = call i32 (i8*, …) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @3, i32 0, i32 0), i32 %12)
%14 = load i32, i32* %2
%15 = call i32 (i8*, …) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @4, i32 0, i32 0), i32 %14)
%16 = load i32, i32* %2
ret i32 %16
}

define i32 @simple() {
entry:
%0 = alloca double
store double 4.200000e+01, double* %0
%1 = alloca i32
store i32 2, i32* %1
%2 = call i32 (i8*, …) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @5, i32 0, i32 0))
%3 = load i32, i32* %1
ret i32 %3
}

define i32 @entry() {
entry:
%0 = alloca float
store float 4.300000e+01, float* %0
%1 = alloca i32
%2 = call i32 @simple()
store i32 %2, i32* %1
%3 = alloca i32
%4 = call i32 @moderate()
store i32 %4, i32* %3
%5 = alloca i32
%6 = call i32 @complex()
store i32 %6, i32* %5
%7 = load i32, i32* %1
%8 = load i32, i32* %3
%addtmp = add i32 %7, %8
store i32 %addtmp, i32* %5
%9 = load i32, i32* %5
%multmp = mul nsw i32 %9, 2
store i32 %multmp, i32* %5
%10 = load i32, i32* %1
%11 = call i32 (i8*, …) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @6, i32 0, i32 0), i32 %10)
%12 = load i32, i32* %3
%13 = call i32 (i8*, …) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @7, i32 0, i32 0), i32 %12)
%14 = load i32, i32* %5
%15 = call i32 (i8*, …) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @8, i32 0, i32 0), i32 %14)
ret i32 0
}

define void @main() {
entry:
%0 = call i32 @entry()
ret void
}