1; RUN: opt -inline -S < %s | FileCheck %s
2; RUN: opt -passes='cgscc(inline)' -S < %s | FileCheck %s
3; RUN: opt -passes='module-inline' -S < %s | FileCheck %s
4
5define dso_local i32 @main() #0 {
6  %1 = alloca i32, align 4
7  store i32 0, i32* %1, align 4
8  %2 = call i32 @t32(i32 0)
9  ret i32 %2
10}
11
12define internal i32 @t32(i32) #0 {
13  %2 = alloca i32, align 4
14  %3 = alloca i32, align 4
15  store i32 %0, i32* %3, align 4
16  %4 = load i32, i32* %3, align 4
17  callbr void asm sideeffect "testl $0, $0; jne ${1:l};", "r,!i,!i,~{dirflag},~{fpsr},~{flags}"(i32 %4) #1
18          to label %5 [label %7, label %6]
19
20; <label>:5:                                      ; preds = %1
21  store i32 0, i32* %2, align 4
22  br label %8
23
24; <label>:6:                                      ; preds = %1
25  store i32 1, i32* %2, align 4
26  br label %8
27
28; <label>:7:                                      ; preds = %1
29  store i32 2, i32* %2, align 4
30  br label %8
31
32; <label>:8:                                      ; preds = %7, %6, %5
33  %9 = load i32, i32* %2, align 4
34  ret i32 %9
35}
36
37; Check that @t32 no longer exists after inlining, as it has now been inlined
38; into @main.
39
40; CHECK-NOT: @t32
41; CHECK: define dso_local i32 @main
42; CHECK: callbr void asm sideeffect "testl $0, $0; jne ${1:l};", "r,!i,!i,~{dirflag},~{fpsr},~{flags}"(i32 %6)
43; CHECK: to label %7 [label %9, label %8]
44; CHECK: 7:
45; CHECK-NEXT: store i32 0, i32* %1, align 4
46; CHECK-NEXT: br label %t32.exit
47; CHECK: 8:
48; CHECK-NEXT: store i32 1, i32* %1, align 4
49; CHECK-NEXT: br label %t32.exit
50; CHECK: 9:
51; CHECK-NEXT: store i32 2, i32* %1, align 4
52; CHECK-NEXT: br label %t32.exit
53; CHECK: t32.exit:
54; CHECK-NEXT: %10 = load i32, i32* %1, align 4
55; CHECK: ret i32 %10
56