[Alignment][NFC] Use Align with TargetLowering::setMinFunctionAlignment
[llvm-core.git] / test / CodeGen / X86 / testb-je-fusion.ll
blobe631d8993dc82a0d9db3e40135d879ca12528c6d
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-- -mattr=-macrofusion,-branchfusion -post-RA-scheduler=0 | FileCheck %s --check-prefix=NOFUSION_NOPOSTRA
3 ; RUN: llc < %s -mtriple=x86_64-- -mattr=-macrofusion,+branchfusion -post-RA-scheduler=0 | FileCheck %s --check-prefix=BRANCHFUSION_NOPOSTRA --check-prefix=BRANCHFUSIONONLY_NOPOSTRA
4 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+macrofusion,-branchfusion -post-RA-scheduler=0 | FileCheck %s --check-prefix=BRANCHFUSION_NOPOSTRA --check-prefix=MACROFUSION_NOPOSTRA
5 ; RUN: llc < %s -mtriple=x86_64-- -mattr=-macrofusion,-branchfusion -post-RA-scheduler=1 | FileCheck %s --check-prefix=NOFUSION_POSTRA
6 ; RUN: llc < %s -mtriple=x86_64-- -mattr=-macrofusion,+branchfusion -post-RA-scheduler=1 | FileCheck %s --check-prefix=BRANCHFUSION_POSTRA --check-prefix=BRANCHFUSIONONLY_POSTRA
7 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+macrofusion,-branchfusion -post-RA-scheduler=1 | FileCheck %s --check-prefix=BRANCHFUSION_POSTRA --check-prefix=MACROFUSION_POSTRA
8 ; RUN: llc < %s -mtriple=x86_64-- -mattr=-macrofusion,-branchfusion -enable-misched=0 -misched-postra=1 -enable-post-misched | FileCheck %s --check-prefix=NOFUSION_MISCHEDPOSTRA
9 ; RUN: llc < %s -mtriple=x86_64-- -mattr=-macrofusion,+branchfusion -enable-misched=0 -misched-postra=1 -enable-post-misched | FileCheck %s --check-prefix=BRANCHFUSION_MISCHEDPOSTRA --check-prefix=BRANCHFUSIONONLY_MISCHEDPOSTRA
10 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+macrofusion,-branchfusion -enable-misched=0 -misched-postra=1 -enable-post-misched | FileCheck %s --check-prefix=BRANCHFUSION_MISCHEDPOSTRA --check-prefix=MACROFUSION_MISCHEDPOSTRA
14 ; testb should be scheduled right before je to enable macro-fusion.
16 define i32 @macrofuse_test_je(i32 %flags, i8* %p) nounwind {
17 ; NOFUSION_NOPOSTRA-LABEL: macrofuse_test_je:
18 ; NOFUSION_NOPOSTRA:       # %bb.0: # %entry
19 ; NOFUSION_NOPOSTRA-NEXT:    xorl %eax, %eax
20 ; NOFUSION_NOPOSTRA-NEXT:    testl $512, %edi # imm = 0x200
21 ; NOFUSION_NOPOSTRA-NEXT:    movb $1, (%rsi)
22 ; NOFUSION_NOPOSTRA-NEXT:    je .LBB0_2
23 ; NOFUSION_NOPOSTRA-NEXT:  # %bb.1: # %if.then
24 ; NOFUSION_NOPOSTRA-NEXT:    movl $1, %eax
25 ; NOFUSION_NOPOSTRA-NEXT:  .LBB0_2: # %if.end
26 ; NOFUSION_NOPOSTRA-NEXT:    retq
28 ; BRANCHFUSION_NOPOSTRA-LABEL: macrofuse_test_je:
29 ; BRANCHFUSION_NOPOSTRA:       # %bb.0: # %entry
30 ; BRANCHFUSION_NOPOSTRA-NEXT:    xorl %eax, %eax
31 ; BRANCHFUSION_NOPOSTRA-NEXT:    movb $1, (%rsi)
32 ; BRANCHFUSION_NOPOSTRA-NEXT:    testl $512, %edi # imm = 0x200
33 ; BRANCHFUSION_NOPOSTRA-NEXT:    je .LBB0_2
34 ; BRANCHFUSION_NOPOSTRA-NEXT:  # %bb.1: # %if.then
35 ; BRANCHFUSION_NOPOSTRA-NEXT:    movl $1, %eax
36 ; BRANCHFUSION_NOPOSTRA-NEXT:  .LBB0_2: # %if.end
37 ; BRANCHFUSION_NOPOSTRA-NEXT:    retq
39 ; NOFUSION_POSTRA-LABEL: macrofuse_test_je:
40 ; NOFUSION_POSTRA:       # %bb.0: # %entry
41 ; NOFUSION_POSTRA-NEXT:    xorl %eax, %eax
42 ; NOFUSION_POSTRA-NEXT:    testl $512, %edi # imm = 0x200
43 ; NOFUSION_POSTRA-NEXT:    movb $1, (%rsi)
44 ; NOFUSION_POSTRA-NEXT:    je .LBB0_2
45 ; NOFUSION_POSTRA-NEXT:  # %bb.1: # %if.then
46 ; NOFUSION_POSTRA-NEXT:    movl $1, %eax
47 ; NOFUSION_POSTRA-NEXT:  .LBB0_2: # %if.end
48 ; NOFUSION_POSTRA-NEXT:    retq
50 ; BRANCHFUSION_POSTRA-LABEL: macrofuse_test_je:
51 ; BRANCHFUSION_POSTRA:       # %bb.0: # %entry
52 ; BRANCHFUSION_POSTRA-NEXT:    xorl %eax, %eax
53 ; BRANCHFUSION_POSTRA-NEXT:    movb $1, (%rsi)
54 ; BRANCHFUSION_POSTRA-NEXT:    testl $512, %edi # imm = 0x200
55 ; BRANCHFUSION_POSTRA-NEXT:    je .LBB0_2
56 ; BRANCHFUSION_POSTRA-NEXT:  # %bb.1: # %if.then
57 ; BRANCHFUSION_POSTRA-NEXT:    movl $1, %eax
58 ; BRANCHFUSION_POSTRA-NEXT:  .LBB0_2: # %if.end
59 ; BRANCHFUSION_POSTRA-NEXT:    retq
61 ; NOFUSION_MISCHEDPOSTRA-LABEL: macrofuse_test_je:
62 ; NOFUSION_MISCHEDPOSTRA:       # %bb.0: # %entry
63 ; NOFUSION_MISCHEDPOSTRA-NEXT:    xorl %eax, %eax
64 ; NOFUSION_MISCHEDPOSTRA-NEXT:    testl $512, %edi # imm = 0x200
65 ; NOFUSION_MISCHEDPOSTRA-NEXT:    movb $1, (%rsi)
66 ; NOFUSION_MISCHEDPOSTRA-NEXT:    je .LBB0_2
67 ; NOFUSION_MISCHEDPOSTRA-NEXT:  # %bb.1: # %if.then
68 ; NOFUSION_MISCHEDPOSTRA-NEXT:    movl $1, %eax
69 ; NOFUSION_MISCHEDPOSTRA-NEXT:  .LBB0_2: # %if.end
70 ; NOFUSION_MISCHEDPOSTRA-NEXT:    retq
72 ; BRANCHFUSION_MISCHEDPOSTRA-LABEL: macrofuse_test_je:
73 ; BRANCHFUSION_MISCHEDPOSTRA:       # %bb.0: # %entry
74 ; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    xorl %eax, %eax
75 ; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    movb $1, (%rsi)
76 ; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    testl $512, %edi # imm = 0x200
77 ; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    je .LBB0_2
78 ; BRANCHFUSION_MISCHEDPOSTRA-NEXT:  # %bb.1: # %if.then
79 ; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    movl $1, %eax
80 ; BRANCHFUSION_MISCHEDPOSTRA-NEXT:  .LBB0_2: # %if.end
81 ; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    retq
82 entry:
83   %and = and i32 %flags, 512
84   %tobool = icmp eq i32 %and, 0
85   store i8 1, i8* %p
86   br i1 %tobool, label %if.end, label %if.then
88 if.then:
89   br label %if.end
91 if.end:
92   %hasflag = phi i32 [ 1, %if.then ], [ 0, %entry ]
93   ret i32 %hasflag
96 define i32 @macrofuse_cmp_je(i32 %flags, i8* %p) nounwind {
97 ; NOFUSION_NOPOSTRA-LABEL: macrofuse_cmp_je:
98 ; NOFUSION_NOPOSTRA:       # %bb.0: # %entry
99 ; NOFUSION_NOPOSTRA-NEXT:    cmpl $512, %edi # imm = 0x200
100 ; NOFUSION_NOPOSTRA-NEXT:    movb $1, (%rsi)
101 ; NOFUSION_NOPOSTRA-NEXT:    je .LBB1_1
102 ; NOFUSION_NOPOSTRA-NEXT:  # %bb.2: # %if.then
103 ; NOFUSION_NOPOSTRA-NEXT:    movl $1, %eax
104 ; NOFUSION_NOPOSTRA-NEXT:    retq
105 ; NOFUSION_NOPOSTRA-NEXT:  .LBB1_1:
106 ; NOFUSION_NOPOSTRA-NEXT:    xorl %eax, %eax
107 ; NOFUSION_NOPOSTRA-NEXT:    retq
109 ; BRANCHFUSION_NOPOSTRA-LABEL: macrofuse_cmp_je:
110 ; BRANCHFUSION_NOPOSTRA:       # %bb.0: # %entry
111 ; BRANCHFUSION_NOPOSTRA-NEXT:    movb $1, (%rsi)
112 ; BRANCHFUSION_NOPOSTRA-NEXT:    cmpl $512, %edi # imm = 0x200
113 ; BRANCHFUSION_NOPOSTRA-NEXT:    je .LBB1_1
114 ; BRANCHFUSION_NOPOSTRA-NEXT:  # %bb.2: # %if.then
115 ; BRANCHFUSION_NOPOSTRA-NEXT:    movl $1, %eax
116 ; BRANCHFUSION_NOPOSTRA-NEXT:    retq
117 ; BRANCHFUSION_NOPOSTRA-NEXT:  .LBB1_1:
118 ; BRANCHFUSION_NOPOSTRA-NEXT:    xorl %eax, %eax
119 ; BRANCHFUSION_NOPOSTRA-NEXT:    retq
121 ; NOFUSION_POSTRA-LABEL: macrofuse_cmp_je:
122 ; NOFUSION_POSTRA:       # %bb.0: # %entry
123 ; NOFUSION_POSTRA-NEXT:    cmpl $512, %edi # imm = 0x200
124 ; NOFUSION_POSTRA-NEXT:    movb $1, (%rsi)
125 ; NOFUSION_POSTRA-NEXT:    je .LBB1_1
126 ; NOFUSION_POSTRA-NEXT:  # %bb.2: # %if.then
127 ; NOFUSION_POSTRA-NEXT:    movl $1, %eax
128 ; NOFUSION_POSTRA-NEXT:    retq
129 ; NOFUSION_POSTRA-NEXT:  .LBB1_1:
130 ; NOFUSION_POSTRA-NEXT:    xorl %eax, %eax
131 ; NOFUSION_POSTRA-NEXT:    retq
133 ; BRANCHFUSION_POSTRA-LABEL: macrofuse_cmp_je:
134 ; BRANCHFUSION_POSTRA:       # %bb.0: # %entry
135 ; BRANCHFUSION_POSTRA-NEXT:    movb $1, (%rsi)
136 ; BRANCHFUSION_POSTRA-NEXT:    cmpl $512, %edi # imm = 0x200
137 ; BRANCHFUSION_POSTRA-NEXT:    je .LBB1_1
138 ; BRANCHFUSION_POSTRA-NEXT:  # %bb.2: # %if.then
139 ; BRANCHFUSION_POSTRA-NEXT:    movl $1, %eax
140 ; BRANCHFUSION_POSTRA-NEXT:    retq
141 ; BRANCHFUSION_POSTRA-NEXT:  .LBB1_1:
142 ; BRANCHFUSION_POSTRA-NEXT:    xorl %eax, %eax
143 ; BRANCHFUSION_POSTRA-NEXT:    retq
145 ; NOFUSION_MISCHEDPOSTRA-LABEL: macrofuse_cmp_je:
146 ; NOFUSION_MISCHEDPOSTRA:       # %bb.0: # %entry
147 ; NOFUSION_MISCHEDPOSTRA-NEXT:    cmpl $512, %edi # imm = 0x200
148 ; NOFUSION_MISCHEDPOSTRA-NEXT:    movb $1, (%rsi)
149 ; NOFUSION_MISCHEDPOSTRA-NEXT:    je .LBB1_1
150 ; NOFUSION_MISCHEDPOSTRA-NEXT:  # %bb.2: # %if.then
151 ; NOFUSION_MISCHEDPOSTRA-NEXT:    movl $1, %eax
152 ; NOFUSION_MISCHEDPOSTRA-NEXT:    retq
153 ; NOFUSION_MISCHEDPOSTRA-NEXT:  .LBB1_1:
154 ; NOFUSION_MISCHEDPOSTRA-NEXT:    xorl %eax, %eax
155 ; NOFUSION_MISCHEDPOSTRA-NEXT:    retq
157 ; BRANCHFUSION_MISCHEDPOSTRA-LABEL: macrofuse_cmp_je:
158 ; BRANCHFUSION_MISCHEDPOSTRA:       # %bb.0: # %entry
159 ; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    movb $1, (%rsi)
160 ; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    cmpl $512, %edi # imm = 0x200
161 ; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    je .LBB1_1
162 ; BRANCHFUSION_MISCHEDPOSTRA-NEXT:  # %bb.2: # %if.then
163 ; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    movl $1, %eax
164 ; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    retq
165 ; BRANCHFUSION_MISCHEDPOSTRA-NEXT:  .LBB1_1:
166 ; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    xorl %eax, %eax
167 ; BRANCHFUSION_MISCHEDPOSTRA-NEXT:    retq
168 entry:
169   %sub = sub i32 %flags, 512
170   %tobool = icmp eq i32 %sub, 0
171   store i8 1, i8* %p
172   br i1 %tobool, label %if.end, label %if.then
174 if.then:
175   br label %if.end
177 if.end:
178   %hasflag = phi i32 [ 1, %if.then ], [ 0, %entry ]
179   ret i32 %hasflag
182 define i32 @macrofuse_alu_je(i32 %flags, i8* %p) nounwind {
183 ; NOFUSION_NOPOSTRA-LABEL: macrofuse_alu_je:
184 ; NOFUSION_NOPOSTRA:       # %bb.0: # %entry
185 ; NOFUSION_NOPOSTRA-NEXT:    movl %edi, %eax
186 ; NOFUSION_NOPOSTRA-NEXT:    addl $-512, %eax # imm = 0xFE00
187 ; NOFUSION_NOPOSTRA-NEXT:    movb $1, (%rsi)
188 ; NOFUSION_NOPOSTRA-NEXT:    je .LBB2_2
189 ; NOFUSION_NOPOSTRA-NEXT:  # %bb.1: # %if.then
190 ; NOFUSION_NOPOSTRA-NEXT:    movl $1, %eax
191 ; NOFUSION_NOPOSTRA-NEXT:  .LBB2_2: # %if.end
192 ; NOFUSION_NOPOSTRA-NEXT:    retq
194 ; BRANCHFUSIONONLY_NOPOSTRA-LABEL: macrofuse_alu_je:
195 ; BRANCHFUSIONONLY_NOPOSTRA:       # %bb.0: # %entry
196 ; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    movl %edi, %eax
197 ; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    addl $-512, %eax # imm = 0xFE00
198 ; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    movb $1, (%rsi)
199 ; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    je .LBB2_2
200 ; BRANCHFUSIONONLY_NOPOSTRA-NEXT:  # %bb.1: # %if.then
201 ; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    movl $1, %eax
202 ; BRANCHFUSIONONLY_NOPOSTRA-NEXT:  .LBB2_2: # %if.end
203 ; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    retq
205 ; MACROFUSION_NOPOSTRA-LABEL: macrofuse_alu_je:
206 ; MACROFUSION_NOPOSTRA:       # %bb.0: # %entry
207 ; MACROFUSION_NOPOSTRA-NEXT:    movl %edi, %eax
208 ; MACROFUSION_NOPOSTRA-NEXT:    movb $1, (%rsi)
209 ; MACROFUSION_NOPOSTRA-NEXT:    addl $-512, %eax # imm = 0xFE00
210 ; MACROFUSION_NOPOSTRA-NEXT:    je .LBB2_2
211 ; MACROFUSION_NOPOSTRA-NEXT:  # %bb.1: # %if.then
212 ; MACROFUSION_NOPOSTRA-NEXT:    movl $1, %eax
213 ; MACROFUSION_NOPOSTRA-NEXT:  .LBB2_2: # %if.end
214 ; MACROFUSION_NOPOSTRA-NEXT:    retq
216 ; NOFUSION_POSTRA-LABEL: macrofuse_alu_je:
217 ; NOFUSION_POSTRA:       # %bb.0: # %entry
218 ; NOFUSION_POSTRA-NEXT:    movl %edi, %eax
219 ; NOFUSION_POSTRA-NEXT:    movb $1, (%rsi)
220 ; NOFUSION_POSTRA-NEXT:    addl $-512, %eax # imm = 0xFE00
221 ; NOFUSION_POSTRA-NEXT:    je .LBB2_2
222 ; NOFUSION_POSTRA-NEXT:  # %bb.1: # %if.then
223 ; NOFUSION_POSTRA-NEXT:    movl $1, %eax
224 ; NOFUSION_POSTRA-NEXT:  .LBB2_2: # %if.end
225 ; NOFUSION_POSTRA-NEXT:    retq
227 ; BRANCHFUSION_POSTRA-LABEL: macrofuse_alu_je:
228 ; BRANCHFUSION_POSTRA:       # %bb.0: # %entry
229 ; BRANCHFUSION_POSTRA-NEXT:    movl %edi, %eax
230 ; BRANCHFUSION_POSTRA-NEXT:    movb $1, (%rsi)
231 ; BRANCHFUSION_POSTRA-NEXT:    addl $-512, %eax # imm = 0xFE00
232 ; BRANCHFUSION_POSTRA-NEXT:    je .LBB2_2
233 ; BRANCHFUSION_POSTRA-NEXT:  # %bb.1: # %if.then
234 ; BRANCHFUSION_POSTRA-NEXT:    movl $1, %eax
235 ; BRANCHFUSION_POSTRA-NEXT:  .LBB2_2: # %if.end
236 ; BRANCHFUSION_POSTRA-NEXT:    retq
238 ; NOFUSION_MISCHEDPOSTRA-LABEL: macrofuse_alu_je:
239 ; NOFUSION_MISCHEDPOSTRA:       # %bb.0: # %entry
240 ; NOFUSION_MISCHEDPOSTRA-NEXT:    movl %edi, %eax
241 ; NOFUSION_MISCHEDPOSTRA-NEXT:    addl $-512, %eax # imm = 0xFE00
242 ; NOFUSION_MISCHEDPOSTRA-NEXT:    movb $1, (%rsi)
243 ; NOFUSION_MISCHEDPOSTRA-NEXT:    je .LBB2_2
244 ; NOFUSION_MISCHEDPOSTRA-NEXT:  # %bb.1: # %if.then
245 ; NOFUSION_MISCHEDPOSTRA-NEXT:    movl $1, %eax
246 ; NOFUSION_MISCHEDPOSTRA-NEXT:  .LBB2_2: # %if.end
247 ; NOFUSION_MISCHEDPOSTRA-NEXT:    retq
249 ; BRANCHFUSIONONLY_MISCHEDPOSTRA-LABEL: macrofuse_alu_je:
250 ; BRANCHFUSIONONLY_MISCHEDPOSTRA:       # %bb.0: # %entry
251 ; BRANCHFUSIONONLY_MISCHEDPOSTRA-NEXT:    movl %edi, %eax
252 ; BRANCHFUSIONONLY_MISCHEDPOSTRA-NEXT:    addl $-512, %eax # imm = 0xFE00
253 ; BRANCHFUSIONONLY_MISCHEDPOSTRA-NEXT:    movb $1, (%rsi)
254 ; BRANCHFUSIONONLY_MISCHEDPOSTRA-NEXT:    je .LBB2_2
255 ; BRANCHFUSIONONLY_MISCHEDPOSTRA-NEXT:  # %bb.1: # %if.then
256 ; BRANCHFUSIONONLY_MISCHEDPOSTRA-NEXT:    movl $1, %eax
257 ; BRANCHFUSIONONLY_MISCHEDPOSTRA-NEXT:  .LBB2_2: # %if.end
258 ; BRANCHFUSIONONLY_MISCHEDPOSTRA-NEXT:    retq
260 ; MACROFUSION_MISCHEDPOSTRA-LABEL: macrofuse_alu_je:
261 ; MACROFUSION_MISCHEDPOSTRA:       # %bb.0: # %entry
262 ; MACROFUSION_MISCHEDPOSTRA-NEXT:    movl %edi, %eax
263 ; MACROFUSION_MISCHEDPOSTRA-NEXT:    movb $1, (%rsi)
264 ; MACROFUSION_MISCHEDPOSTRA-NEXT:    addl $-512, %eax # imm = 0xFE00
265 ; MACROFUSION_MISCHEDPOSTRA-NEXT:    je .LBB2_2
266 ; MACROFUSION_MISCHEDPOSTRA-NEXT:  # %bb.1: # %if.then
267 ; MACROFUSION_MISCHEDPOSTRA-NEXT:    movl $1, %eax
268 ; MACROFUSION_MISCHEDPOSTRA-NEXT:  .LBB2_2: # %if.end
269 ; MACROFUSION_MISCHEDPOSTRA-NEXT:    retq
270 entry:
271   %sub = sub i32 %flags, 512
272   %tobool = icmp eq i32 %sub, 0
273   store i8 1, i8* %p
274   br i1 %tobool, label %if.end, label %if.then
276 if.then:
277   br label %if.end
279 if.end:
280   %hasflag = phi i32 [ 1, %if.then ], [ %sub, %entry ]
281   ret i32 %hasflag
284 define i32 @macrofuse_dec_je(i32 %flags, i8* %p) nounwind {
285 ; NOFUSION_NOPOSTRA-LABEL: macrofuse_dec_je:
286 ; NOFUSION_NOPOSTRA:       # %bb.0: # %entry
287 ; NOFUSION_NOPOSTRA-NEXT:    movl %edi, %eax
288 ; NOFUSION_NOPOSTRA-NEXT:    decl %eax
289 ; NOFUSION_NOPOSTRA-NEXT:    movb $1, (%rsi)
290 ; NOFUSION_NOPOSTRA-NEXT:    je .LBB3_2
291 ; NOFUSION_NOPOSTRA-NEXT:  # %bb.1: # %if.then
292 ; NOFUSION_NOPOSTRA-NEXT:    movl $1, %eax
293 ; NOFUSION_NOPOSTRA-NEXT:  .LBB3_2: # %if.end
294 ; NOFUSION_NOPOSTRA-NEXT:    retq
296 ; BRANCHFUSIONONLY_NOPOSTRA-LABEL: macrofuse_dec_je:
297 ; BRANCHFUSIONONLY_NOPOSTRA:       # %bb.0: # %entry
298 ; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    movl %edi, %eax
299 ; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    decl %eax
300 ; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    movb $1, (%rsi)
301 ; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    je .LBB3_2
302 ; BRANCHFUSIONONLY_NOPOSTRA-NEXT:  # %bb.1: # %if.then
303 ; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    movl $1, %eax
304 ; BRANCHFUSIONONLY_NOPOSTRA-NEXT:  .LBB3_2: # %if.end
305 ; BRANCHFUSIONONLY_NOPOSTRA-NEXT:    retq
307 ; MACROFUSION_NOPOSTRA-LABEL: macrofuse_dec_je:
308 ; MACROFUSION_NOPOSTRA:       # %bb.0: # %entry
309 ; MACROFUSION_NOPOSTRA-NEXT:    movl %edi, %eax
310 ; MACROFUSION_NOPOSTRA-NEXT:    movb $1, (%rsi)
311 ; MACROFUSION_NOPOSTRA-NEXT:    decl %eax
312 ; MACROFUSION_NOPOSTRA-NEXT:    je .LBB3_2
313 ; MACROFUSION_NOPOSTRA-NEXT:  # %bb.1: # %if.then
314 ; MACROFUSION_NOPOSTRA-NEXT:    movl $1, %eax
315 ; MACROFUSION_NOPOSTRA-NEXT:  .LBB3_2: # %if.end
316 ; MACROFUSION_NOPOSTRA-NEXT:    retq
318 ; NOFUSION_POSTRA-LABEL: macrofuse_dec_je:
319 ; NOFUSION_POSTRA:       # %bb.0: # %entry
320 ; NOFUSION_POSTRA-NEXT:    movl %edi, %eax
321 ; NOFUSION_POSTRA-NEXT:    movb $1, (%rsi)
322 ; NOFUSION_POSTRA-NEXT:    decl %eax
323 ; NOFUSION_POSTRA-NEXT:    je .LBB3_2
324 ; NOFUSION_POSTRA-NEXT:  # %bb.1: # %if.then
325 ; NOFUSION_POSTRA-NEXT:    movl $1, %eax
326 ; NOFUSION_POSTRA-NEXT:  .LBB3_2: # %if.end
327 ; NOFUSION_POSTRA-NEXT:    retq
329 ; BRANCHFUSION_POSTRA-LABEL: macrofuse_dec_je:
330 ; BRANCHFUSION_POSTRA:       # %bb.0: # %entry
331 ; BRANCHFUSION_POSTRA-NEXT:    movl %edi, %eax
332 ; BRANCHFUSION_POSTRA-NEXT:    movb $1, (%rsi)
333 ; BRANCHFUSION_POSTRA-NEXT:    decl %eax
334 ; BRANCHFUSION_POSTRA-NEXT:    je .LBB3_2
335 ; BRANCHFUSION_POSTRA-NEXT:  # %bb.1: # %if.then
336 ; BRANCHFUSION_POSTRA-NEXT:    movl $1, %eax
337 ; BRANCHFUSION_POSTRA-NEXT:  .LBB3_2: # %if.end
338 ; BRANCHFUSION_POSTRA-NEXT:    retq
340 ; NOFUSION_MISCHEDPOSTRA-LABEL: macrofuse_dec_je:
341 ; NOFUSION_MISCHEDPOSTRA:       # %bb.0: # %entry
342 ; NOFUSION_MISCHEDPOSTRA-NEXT:    movl %edi, %eax
343 ; NOFUSION_MISCHEDPOSTRA-NEXT:    decl %eax
344 ; NOFUSION_MISCHEDPOSTRA-NEXT:    movb $1, (%rsi)
345 ; NOFUSION_MISCHEDPOSTRA-NEXT:    je .LBB3_2
346 ; NOFUSION_MISCHEDPOSTRA-NEXT:  # %bb.1: # %if.then
347 ; NOFUSION_MISCHEDPOSTRA-NEXT:    movl $1, %eax
348 ; NOFUSION_MISCHEDPOSTRA-NEXT:  .LBB3_2: # %if.end
349 ; NOFUSION_MISCHEDPOSTRA-NEXT:    retq
351 ; BRANCHFUSIONONLY_MISCHEDPOSTRA-LABEL: macrofuse_dec_je:
352 ; BRANCHFUSIONONLY_MISCHEDPOSTRA:       # %bb.0: # %entry
353 ; BRANCHFUSIONONLY_MISCHEDPOSTRA-NEXT:    movl %edi, %eax
354 ; BRANCHFUSIONONLY_MISCHEDPOSTRA-NEXT:    decl %eax
355 ; BRANCHFUSIONONLY_MISCHEDPOSTRA-NEXT:    movb $1, (%rsi)
356 ; BRANCHFUSIONONLY_MISCHEDPOSTRA-NEXT:    je .LBB3_2
357 ; BRANCHFUSIONONLY_MISCHEDPOSTRA-NEXT:  # %bb.1: # %if.then
358 ; BRANCHFUSIONONLY_MISCHEDPOSTRA-NEXT:    movl $1, %eax
359 ; BRANCHFUSIONONLY_MISCHEDPOSTRA-NEXT:  .LBB3_2: # %if.end
360 ; BRANCHFUSIONONLY_MISCHEDPOSTRA-NEXT:    retq
362 ; MACROFUSION_MISCHEDPOSTRA-LABEL: macrofuse_dec_je:
363 ; MACROFUSION_MISCHEDPOSTRA:       # %bb.0: # %entry
364 ; MACROFUSION_MISCHEDPOSTRA-NEXT:    movl %edi, %eax
365 ; MACROFUSION_MISCHEDPOSTRA-NEXT:    movb $1, (%rsi)
366 ; MACROFUSION_MISCHEDPOSTRA-NEXT:    decl %eax
367 ; MACROFUSION_MISCHEDPOSTRA-NEXT:    je .LBB3_2
368 ; MACROFUSION_MISCHEDPOSTRA-NEXT:  # %bb.1: # %if.then
369 ; MACROFUSION_MISCHEDPOSTRA-NEXT:    movl $1, %eax
370 ; MACROFUSION_MISCHEDPOSTRA-NEXT:  .LBB3_2: # %if.end
371 ; MACROFUSION_MISCHEDPOSTRA-NEXT:    retq
372 entry:
373   %sub = sub i32 %flags, 1
374   %tobool = icmp eq i32 %sub, 0
375   store i8 1, i8* %p
376   br i1 %tobool, label %if.end, label %if.then
378 if.then:
379   br label %if.end
381 if.end:
382   %hasflag = phi i32 [ 1, %if.then ], [ %sub, %entry ]
383   ret i32 %hasflag