1 ; RUN: llc -enable-machine-outliner -mtriple=x86_64-apple-darwin < %s | FileCheck %s
3 @x = global i32 0, align 4
5 define 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
19 ; CHECK-SAME: [[OFUNC1:OUTLINED_FUNCTION_[0-9]+]]
20 ; CHECK: cmpl $0, -{{[0-9]+}}(%rbp)
21 store i32 1, i32* %2, align 4
22 store i32 2, i32* %3, align 4
23 store i32 3, i32* %4, align 4
24 store i32 4, i32* %5, align 4
27 store i32 1, i32* %4, align 4
30 %11 = load i32, i32* %2, align 4
31 %12 = icmp ne i32 %11, 0
32 br i1 %12, label %14, label %13
35 ; CHECK-SAME: [[OFUNC1]]
36 store i32 1, i32* %2, align 4
37 store i32 2, i32* %3, align 4
38 store i32 3, i32* %4, align 4
39 store i32 4, i32* %5, align 4
42 store i32 1, i32* %4, align 4
48 define i32 @empty_1() #0 {
49 ; CHECK-LABEL: _empty_1:
50 ; CHECK-NOT: OUTLINED_FUNCTION
54 define i32 @empty_2() #0 {
55 ; CHECK-LABEL: _empty_2
56 ; CHECK-NOT: OUTLINED_FUNCTION
60 define i32 @no_empty_outlining() #0 {
61 ; CHECK-LABEL: _no_empty_outlining:
62 %1 = alloca i32, align 4
63 store i32 0, i32* %1, align 4
64 ; CHECK-NOT: OUTLINED_FUNCTION
65 %2 = call i32 @empty_1() #1
66 %3 = call i32 @empty_2() #1
67 %4 = call i32 @empty_1() #1
68 %5 = call i32 @empty_2() #1
69 %6 = call i32 @empty_1() #1
70 %7 = call i32 @empty_2() #1
74 define i32 @main() #0 {
76 %1 = alloca i32, align 4
77 %2 = alloca i32, align 4
78 %3 = alloca i32, align 4
79 %4 = alloca i32, align 4
80 %5 = alloca i32, align 4
82 store i32 0, i32* %1, align 4
83 store i32 0, i32* @x, align 4
85 ; CHECK-SAME: [[OFUNC2:OUTLINED_FUNCTION_[0-9]+]]
86 store i32 1, i32* %2, align 4
87 store i32 2, i32* %3, align 4
88 store i32 3, i32* %4, align 4
89 store i32 4, i32* %5, align 4
90 store i32 1, i32* @x, align 4
91 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"()
93 ; CHECK-SAME: [[OFUNC2]]
94 store i32 1, i32* %2, align 4
95 store i32 2, i32* %3, align 4
96 store i32 3, i32* %4, align 4
97 store i32 4, i32* %5, align 4
101 attributes #0 = { noredzone nounwind ssp uwtable "no-frame-pointer-elim"="true" }
103 ; CHECK: OUTLINED_FUNCTION_{{[0-9]+}}:
104 ; CHECK-DAG: movl $1, -{{[0-9]+}}(%rbp)
105 ; CHECK-NEXT: movl $2, -{{[0-9]+}}(%rbp)
106 ; CHECK-NEXT: movl $3, -{{[0-9]+}}(%rbp)
107 ; CHECK-NEXT: movl $4, -{{[0-9]+}}(%rbp)
110 ; CHECK: OUTLINED_FUNCTION_{{[0-9]+}}:
111 ; CHECK-DAG: movl $1, -{{[0-9]+}}(%rbp)
112 ; CHECK-NEXT: movl $2, -{{[0-9]+}}(%rbp)
113 ; CHECK-NEXT: movl $3, -{{[0-9]+}}(%rbp)
114 ; CHECK-NEXT: movl $4, -{{[0-9]+}}(%rbp)