[Demangle] Add a few more options to the microsoft demangler
[llvm-complete.git] / test / CodeGen / X86 / condbr_if.ll
blob7b92f712be6dd27bba1526605b5d848fc102e11b
1 ; RUN: llc -x86-condbr-folding=true -mtriple=x86_64-linux-gnu -mcpu=sandybridge %s -o - -verify-machineinstrs | FileCheck %s --check-prefix=MERGE
2 ; RUN: llc -x86-condbr-folding=true -mtriple=x86_64-linux-gnu -mcpu=ivybridge %s -o - -verify-machineinstrs | FileCheck %s --check-prefix=MERGE
3 ; RUN: llc -x86-condbr-folding=true -mtriple=x86_64-linux-gnu -mcpu=haswell %s -o - -verify-machineinstrs | FileCheck %s --check-prefix=MERGE
4 ; RUN: llc -x86-condbr-folding=true -mtriple=x86_64-linux-gnu -mcpu=broadwell %s -o - -verify-machineinstrs | FileCheck %s --check-prefix=MERGE
5 ; RUN: llc -x86-condbr-folding=true -mtriple=x86_64-linux-gnu -mcpu=skylake %s -o - -verify-machineinstrs | FileCheck %s --check-prefix=MERGE
6 ; RUN: llc -x86-condbr-folding=true -mtriple=x86_64-linux-gnu -mcpu=skx %s -o - -verify-machineinstrs | FileCheck %s --check-prefix=MERGE
7 ; RUN: llc -x86-condbr-folding=true -mtriple=x86_64-linux-gnu %s -o - -verify-machineinstrs | FileCheck %s --check-prefix=NOTMERGE
9 define i32 @length2_1(i32) {
10   %2 = icmp slt i32 %0, 3
11   br i1 %2, label %3, label %5
13 ; <label>:3:
14   %4 = tail call i32 (...) @f1()
15   br label %13
17 ; <label>:5:
18   %6 = icmp slt i32 %0, 40
19   br i1 %6, label %7, label %13
21 ; <label>:7:
22   %8 = icmp eq i32 %0, 3
23   br i1 %8, label %9, label %11
25 ; <label>:9:
26   %10 = tail call i32 (...) @f2()
27   br label %11
29 ; <label>:11:
30   %12 = tail call i32 (...) @f3() #2
31   br label %13
33 ; <label>:13:
34   ret i32 0
36 ; MERGE-LABEL: length2_1
37 ; MERGE: cmpl $3
38 ; MERGE-NEXT: jg
39 ; MERGE-NEXT: jge
40 ; NOTMERGE-LABEL: length2_1
41 ; NOTMERGE: cmpl $2
42 ; NOTMERGE-NEXT: jg
44 define i32 @length2_2(i32) {
45   %2 = icmp sle i32 %0, 2
46   br i1 %2, label %3, label %5
48 ; <label>:3:
49   %4 = tail call i32 (...) @f1()
50   br label %13
52 ; <label>:5:
53   %6 = icmp slt i32 %0, 40
54   br i1 %6, label %7, label %13
56 ; <label>:7:
57   %8 = icmp eq i32 %0, 3
58   br i1 %8, label %9, label %11
60 ; <label>:9:
61   %10 = tail call i32 (...) @f2()
62   br label %11
64 ; <label>:11:
65   %12 = tail call i32 (...) @f3() #2
66   br label %13
68 ; <label>:13:
69   ret i32 0
71 ; MERGE-LABEL: length2_2
72 ; MERGE: cmpl $3
73 ; MERGE-NEXT: jg
74 ; MERGE-NEXT: jge
75 ; NOTMERGE-LABEL: length2_2
76 ; NOTMERGE: cmpl $2
77 ; NOTMERGE-NEXT: jg
79 define i32 @length2_3(i32) {
80   %2 = icmp sgt i32 %0, 3
81   br i1 %2, label %3, label %5
83 ; <label>:3:
84   %4 = tail call i32 (...) @f1()
85   br label %13
87 ; <label>:5:
88   %6 = icmp sgt i32 %0, -40
89   br i1 %6, label %7, label %13
91 ; <label>:7:
92   %8 = icmp eq i32 %0, 3
93   br i1 %8, label %9, label %11
95 ; <label>:9:
96   %10 = tail call i32 (...) @f2()
97   br label %11
99 ; <label>:11:
100   %12 = tail call i32 (...) @f3() #2
101   br label %13
103 ; <label>:13:
104   ret i32 0
106 ; MERGE-LABEL: length2_3
107 ; MERGE: cmpl $3
108 ; MERGE-NEXT: jl
109 ; MERGE-NEXT: jle
110 ; NOTMERGE-LABEL: length2_3
111 ; NOTMERGE: cmpl $4
112 ; NOTMERGE-NEXT: jl
114 define i32 @length2_4(i32) {
115   %2 = icmp sge i32 %0, 4
116   br i1 %2, label %3, label %5
118 ; <label>:3:
119   %4 = tail call i32 (...) @f1()
120   br label %13
122 ; <label>:5:
123   %6 = icmp sgt i32 %0, -40
124   br i1 %6, label %7, label %13
126 ; <label>:7:
127   %8 = icmp eq i32 %0, 3
128   br i1 %8, label %9, label %11
130 ; <label>:9:
131   %10 = tail call i32 (...) @f2()
132   br label %11
134 ; <label>:11:
135   %12 = tail call i32 (...) @f3() #2
136   br label %13
138 ; <label>:13:
139   ret i32 0
141 ; MERGE-LABEL: length2_4
142 ; MERGE: cmpl $3
143 ; MERGE-NEXT: jl
144 ; MERGE-NEXT: jle
145 ; NOTMERGE-LABEL: length2_4
146 ; NOTMERGE: cmpl $4
147 ; NOTMERGE-NEXT: jl
149 declare i32 @f1(...)
150 declare i32 @f2(...)
151 declare i32 @f3(...)
153 define i32 @length1_1(i32) {
154   %2 = icmp sgt i32 %0, 5
155   br i1 %2, label %3, label %5
157 ; <label>:3:
158   %4 = tail call i32 (...) @f1()
159   br label %9
161 ; <label>:5:
162   %6 = icmp eq i32 %0, 5
163   br i1 %6, label %7, label %9
165 ; <label>:7:
166   %8 = tail call i32 (...) @f2()
167   br label %9
169 ; <label>:9:
170   ret i32 0
172 ; MERGE-LABEL: length1_1
173 ; MERGE: cmpl $5
174 ; MERGE-NEXT: jl
175 ; MERGE-NEXT: jle
176 ; NOTMERGE-LABEL: length1_1
177 ; NOTMERGE: cmpl $6
178 ; NOTMERGE-NEXT: jl