[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / X86 / machine-outliner.ll
blobb4c50e691ad8e4ae6fceb486724ed276e95d0229
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
18   ; CHECK: callq 
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
25   br label %10
27   store i32 1, i32* %4, align 4
28   br label %10
30   %11 = load i32, i32* %2, align 4
31   %12 = icmp ne i32 %11, 0
32   br i1 %12, label %14, label %13
34   ; CHECK: callq
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
40   br label %15
42   store i32 1, i32* %4, align 4
43   br label %15
45   ret i32 0
48 define i32 @empty_1() #0 {
49   ; CHECK-LABEL: _empty_1:
50   ; CHECK-NOT: OUTLINED_FUNCTION
51   ret i32 1
54 define i32 @empty_2() #0 {
55   ; CHECK-LABEL: _empty_2
56   ; CHECK-NOT: OUTLINED_FUNCTION
57   ret i32 1
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
71   ret i32 0
74 define i32 @main() #0 {
75   ; CHECK-LABEL: _main:
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
84   ; CHECK: callq
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}"()
92   ; CHECK: callq
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
98   ret i32 0
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)
108 ; CHECK-NEXT: retq
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)
115 ; CHECK-NEXT: retq