blob: 29cf32f79852c754940d9380dd97fce510b92793 [file] [log] [blame]
Jessica Paquette596f4832017-03-06 21:31:18 +00001; RUN: llc -enable-machine-outliner -mtriple=x86_64-apple-darwin < %s | FileCheck %s
2
3@x = global i32 0, align 4
4
5define i32 @check_boundaries() #0 {
6 ; CHECK-LABEL: _check_boundaries:
7 %1 = alloca i32, align 4
8 %2 = alloca i32, align 4
9 %3 = alloca i32, align 4
10 %4 = alloca i32, align 4
11 %5 = alloca i32, align 4
12 store i32 0, i32* %1, align 4
13 store i32 0, i32* %2, align 4
14 %6 = load i32, i32* %2, align 4
15 %7 = icmp ne i32 %6, 0
16 br i1 %7, label %9, label %8
17
Jessica Paquettec984e212017-03-13 18:39:33 +000018 ; CHECK: callq [[OFUNC1:l_OUTLINED_FUNCTION_[0-9]+]]
Jessica Paquette596f4832017-03-06 21:31:18 +000019 ; CHECK: cmpl $0, -{{[0-9]+}}(%rbp)
20 store i32 1, i32* %2, align 4
21 store i32 2, i32* %3, align 4
22 store i32 3, i32* %4, align 4
23 store i32 4, i32* %5, align 4
24 br label %10
25
26 store i32 1, i32* %4, align 4
27 br label %10
28
29 %11 = load i32, i32* %2, align 4
30 %12 = icmp ne i32 %11, 0
31 br i1 %12, label %14, label %13
32
Jessica Paquettec984e212017-03-13 18:39:33 +000033 ; CHECK: callq [[OFUNC1]]
Jessica Paquette596f4832017-03-06 21:31:18 +000034 store i32 1, i32* %2, align 4
35 store i32 2, i32* %3, align 4
36 store i32 3, i32* %4, align 4
37 store i32 4, i32* %5, align 4
38 br label %15
39
40 store i32 1, i32* %4, align 4
41 br label %15
42
43 ret i32 0
44}
45
46define i32 @empty_1() #0 {
47 ; CHECK-LABEL: _empty_1:
48 ; CHECK-NOT: callq l_OUTLINED_FUNCTION_{{[0-9]+}}
49 ret i32 1
50}
51
52define i32 @empty_2() #0 {
53 ; CHECK-LABEL: _empty_2
54 ; CHECK-NOT: callq l_OUTLINED_FUNCTION_{{[0-9]+}}
55 ret i32 1
56}
57
58define i32 @no_empty_outlining() #0 {
59 ; CHECK-LABEL: _no_empty_outlining:
60 %1 = alloca i32, align 4
61 store i32 0, i32* %1, align 4
62 ; CHECK-NOT: callq l_OUTLINED_FUNCTION_{{[0-9]+}}
63 %2 = call i32 @empty_1() #1
64 %3 = call i32 @empty_2() #1
65 %4 = call i32 @empty_1() #1
66 %5 = call i32 @empty_2() #1
67 %6 = call i32 @empty_1() #1
68 %7 = call i32 @empty_2() #1
69 ret i32 0
70}
71
72define i32 @main() #0 {
73 ; CHECK-LABEL: _main:
74 %1 = alloca i32, align 4
75 %2 = alloca i32, align 4
76 %3 = alloca i32, align 4
77 %4 = alloca i32, align 4
78 %5 = alloca i32, align 4
79
80 store i32 0, i32* %1, align 4
81 store i32 0, i32* @x, align 4
Jessica Paquettec984e212017-03-13 18:39:33 +000082 ; CHECK: callq [[OFUNC2:l_OUTLINED_FUNCTION_[0-9]+]]
Jessica Paquette596f4832017-03-06 21:31:18 +000083 store i32 1, i32* %2, align 4
84 store i32 2, i32* %3, align 4
85 store i32 3, i32* %4, align 4
86 store i32 4, i32* %5, align 4
87 store i32 1, i32* @x, align 4
Nirav Daved8397492017-07-18 20:06:24 +000088 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"()
Jessica Paquettec984e212017-03-13 18:39:33 +000089 ; CHECK: callq [[OFUNC2]]
Jessica Paquette596f4832017-03-06 21:31:18 +000090 store i32 1, i32* %2, align 4
91 store i32 2, i32* %3, align 4
92 store i32 3, i32* %4, align 4
93 store i32 4, i32* %5, align 4
94 ret i32 0
95}
96
97attributes #0 = { noredzone nounwind ssp uwtable "no-frame-pointer-elim"="true" }
98
Jessica Paquette4cf187b2017-09-27 20:47:39 +000099; CHECK-LABEL: l_OUTLINED_FUNCTION_{{[0-9]+}}:
Jessica Paquette596f4832017-03-06 21:31:18 +0000100; CHECK: movl $1, -{{[0-9]+}}(%rbp)
101; CHECK-NEXT: movl $2, -{{[0-9]+}}(%rbp)
102; CHECK-NEXT: movl $3, -{{[0-9]+}}(%rbp)
103; CHECK-NEXT: movl $4, -{{[0-9]+}}(%rbp)
104; CHECK-NEXT: retq
105
Jessica Paquette4cf187b2017-09-27 20:47:39 +0000106; CHECK-LABEL: l_OUTLINED_FUNCTION_{{[0-9]+}}:
Jessica Paquette596f4832017-03-06 21:31:18 +0000107; CHECK: movl $1, -{{[0-9]+}}(%rbp)
108; CHECK-NEXT: movl $2, -{{[0-9]+}}(%rbp)
109; CHECK-NEXT: movl $3, -{{[0-9]+}}(%rbp)
110; CHECK-NEXT: movl $4, -{{[0-9]+}}(%rbp)
111; CHECK-NEXT: retq