1target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 2target triple = "x86_64-grtev4-linux-gnu" 3 4declare void @external_fct(i32) 5 6define dso_local i32 @top() { 7 %a = call i32 @multiplier(i32 5) 8 %b = call i32 @adder(i32 10) 9 %ret = add nsw i32 %a, %b 10 call void @external_fct(i32 %ret) 11 ret i32 %ret 12} 13 14define internal dso_local i32 @adder(i32) { 15 %2 = alloca i32, align 4 16 store i32 %0, ptr %2, align 4 17 %3 = load i32, ptr %2, align 4 18 %4 = call i32 @multiplier(i32 %3) 19 %5 = load i32, ptr %2, align 4 20 %6 = call i32 @switcher(i32 1) 21 %7 = add nsw i32 %4, %6 22 ret i32 %7 23} 24 25define internal i32 @multiplier(i32) { 26 %2 = alloca i32, align 4 27 store i32 %0, ptr %2, align 4 28 %3 = load i32, ptr %2, align 4 29 %4 = load i32, ptr %2, align 4 30 %5 = mul nsw i32 %3, %4 31 ret i32 %5 32} 33 34define i32 @switcher(i32) { 35 %2 = alloca i32, align 4 36 %3 = alloca i32, align 4 37 store i32 %0, ptr %3, align 4 38 %4 = load i32, ptr %3, align 4 39 switch i32 %4, label %11 [ 40 i32 1, label %5 41 i32 2, label %6 42 ] 43 44; <label>:5: ; preds = %1 45 store i32 2, ptr %2, align 4 46 br label %12 47 48; <label>:6: ; preds = %1 49 %7 = load i32, ptr %3, align 4 50 %8 = load i32, ptr %3, align 4 51 %9 = call i32 @multiplier(i32 %8) 52 %10 = add nsw i32 %7, %9 53 store i32 %10, ptr %2, align 4 54 br label %12 55 56; <label>:11: ; preds = %1 57 %adder.result = call i32 @adder(i32 2) 58 store i32 %adder.result, ptr %2, align 4 59 br label %12 60 61; <label>:12: ; preds = %11, %6, %5 62 %13 = load i32, ptr %2, align 4 63 ret i32 %13 64} 65 66; CHECK-NOT: @adder 67; DEFAULT-LABEL: @adder 68; DEFAULT-NEXT: %2 = mul