1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -O0 -mtriple=x86_64-unknown -mcpu=skx -o - %s | FileCheck %s --check-prefix=X86-O0
3 ; RUN: llc -mtriple=x86_64-unknown -mcpu=skx -o - %s | FileCheck %s --check-prefix=X64
4 ; RUN: llc -O0 -mtriple=i686-unknown -mcpu=skx -o - %s | FileCheck %s --check-prefix=686-O0
5 ; RUN: llc -mtriple=i686-unknown -mcpu=skx -o - %s | FileCheck %s --check-prefix=686
7 @c = external constant i8, align 1
11 ; X86-O0: # BB#0: # %entry
12 ; X86-O0-NEXT: xorl %eax, %eax
13 ; X86-O0-NEXT: movl %eax, %ecx
14 ; X86-O0-NEXT: xorl %eax, %eax
15 ; X86-O0-NEXT: movzbl c, %edx
16 ; X86-O0-NEXT: subl %edx, %eax
17 ; X86-O0-NEXT: movslq %eax, %rsi
18 ; X86-O0-NEXT: subq %rsi, %rcx
19 ; X86-O0-NEXT: movb %cl, %dil
20 ; X86-O0-NEXT: cmpb $0, %dil
21 ; X86-O0-NEXT: setne %dil
22 ; X86-O0-NEXT: andb $1, %dil
23 ; X86-O0-NEXT: movb %dil, -{{[0-9]+}}(%rsp)
24 ; X86-O0-NEXT: cmpb $0, c
25 ; X86-O0-NEXT: setne %dil
26 ; X86-O0-NEXT: xorb $-1, %dil
27 ; X86-O0-NEXT: xorb $-1, %dil
28 ; X86-O0-NEXT: andb $1, %dil
29 ; X86-O0-NEXT: movzbl %dil, %eax
30 ; X86-O0-NEXT: movzbl c, %edx
31 ; X86-O0-NEXT: cmpl %edx, %eax
32 ; X86-O0-NEXT: setle %dil
33 ; X86-O0-NEXT: andb $1, %dil
34 ; X86-O0-NEXT: movzbl %dil, %eax
35 ; X86-O0-NEXT: movl %eax, -{{[0-9]+}}(%rsp)
39 ; X64: # BB#0: # %entry
40 ; X64-NEXT: movzbl {{.*}}(%rip), %eax
41 ; X64-NEXT: testb %al, %al
42 ; X64-NEXT: setne -{{[0-9]+}}(%rsp)
43 ; X64-NEXT: xorl %ecx, %ecx
44 ; X64-NEXT: testl %eax, %eax
46 ; X64-NEXT: xorl %edx, %edx
47 ; X64-NEXT: cmpl %eax, %ecx
49 ; X64-NEXT: movl %edx, -{{[0-9]+}}(%rsp)
53 ; 686-O0: # BB#0: # %entry
54 ; 686-O0-NEXT: subl $8, %esp
55 ; 686-O0-NEXT: .cfi_def_cfa_offset 12
56 ; 686-O0-NEXT: movb c, %al
57 ; 686-O0-NEXT: cmpb $0, %al
58 ; 686-O0-NEXT: setne %al
59 ; 686-O0-NEXT: andb $1, %al
60 ; 686-O0-NEXT: movb %al, {{[0-9]+}}(%esp)
61 ; 686-O0-NEXT: cmpb $0, c
62 ; 686-O0-NEXT: setne %al
63 ; 686-O0-NEXT: xorb $-1, %al
64 ; 686-O0-NEXT: xorb $-1, %al
65 ; 686-O0-NEXT: andb $1, %al
66 ; 686-O0-NEXT: movzbl %al, %ecx
67 ; 686-O0-NEXT: movzbl c, %edx
68 ; 686-O0-NEXT: cmpl %edx, %ecx
69 ; 686-O0-NEXT: setle %al
70 ; 686-O0-NEXT: andb $1, %al
71 ; 686-O0-NEXT: movzbl %al, %ecx
72 ; 686-O0-NEXT: movl %ecx, (%esp)
73 ; 686-O0-NEXT: addl $8, %esp
77 ; 686: # BB#0: # %entry
78 ; 686-NEXT: subl $8, %esp
79 ; 686-NEXT: .cfi_def_cfa_offset 12
80 ; 686-NEXT: movzbl c, %eax
81 ; 686-NEXT: xorl %ecx, %ecx
82 ; 686-NEXT: testl %eax, %eax
84 ; 686-NEXT: testb %al, %al
85 ; 686-NEXT: setne {{[0-9]+}}(%esp)
86 ; 686-NEXT: xorl %edx, %edx
87 ; 686-NEXT: cmpl %eax, %ecx
89 ; 686-NEXT: movl %edx, {{[0-9]+}}(%esp)
90 ; 686-NEXT: addl $8, %esp
93 %a = alloca i8, align 1
94 %b = alloca i32, align 4
95 %0 = load i8, i8* @c, align 1
96 %conv = zext i8 %0 to i32
97 %sub = sub nsw i32 0, %conv
98 %conv1 = sext i32 %sub to i64
99 %sub2 = sub nsw i64 0, %conv1
100 %conv3 = trunc i64 %sub2 to i8
101 %tobool = icmp ne i8 %conv3, 0
102 %frombool = zext i1 %tobool to i8
103 store i8 %frombool, i8* %a, align 1
104 %1 = load i8, i8* @c, align 1
105 %tobool4 = icmp ne i8 %1, 0
106 %lnot = xor i1 %tobool4, true
107 %lnot5 = xor i1 %lnot, true
108 %conv6 = zext i1 %lnot5 to i32
109 %2 = load i8, i8* @c, align 1
110 %conv7 = zext i8 %2 to i32
111 %cmp = icmp sle i32 %conv6, %conv7
112 %conv8 = zext i1 %cmp to i32
113 store i32 %conv8, i32* %b, align 4
117 @var_5 = external global i32, align 4
118 @var_57 = external global i64, align 8
119 @_ZN8struct_210member_2_0E = external global i64, align 8
123 ; X86-O0: # BB#0: # %entry
124 ; X86-O0-NEXT: movabsq $8381627093, %rax # imm = 0x1F3957AD5
125 ; X86-O0-NEXT: movslq var_5, %rcx
126 ; X86-O0-NEXT: addq %rax, %rcx
127 ; X86-O0-NEXT: cmpq $0, %rcx
128 ; X86-O0-NEXT: setne %dl
129 ; X86-O0-NEXT: andb $1, %dl
130 ; X86-O0-NEXT: movb %dl, -{{[0-9]+}}(%rsp)
131 ; X86-O0-NEXT: movl var_5, %esi
132 ; X86-O0-NEXT: xorl $-1, %esi
133 ; X86-O0-NEXT: cmpl $0, %esi
134 ; X86-O0-NEXT: setne %dl
135 ; X86-O0-NEXT: xorb $-1, %dl
136 ; X86-O0-NEXT: andb $1, %dl
137 ; X86-O0-NEXT: movzbl %dl, %esi
138 ; X86-O0-NEXT: movl %esi, %eax
139 ; X86-O0-NEXT: movslq var_5, %rcx
140 ; X86-O0-NEXT: addq $7093, %rcx # imm = 0x1BB5
141 ; X86-O0-NEXT: cmpq %rcx, %rax
142 ; X86-O0-NEXT: setg %dl
143 ; X86-O0-NEXT: andb $1, %dl
144 ; X86-O0-NEXT: movzbl %dl, %esi
145 ; X86-O0-NEXT: movl %esi, %eax
146 ; X86-O0-NEXT: movq %rax, var_57
147 ; X86-O0-NEXT: movl var_5, %esi
148 ; X86-O0-NEXT: xorl $-1, %esi
149 ; X86-O0-NEXT: cmpl $0, %esi
150 ; X86-O0-NEXT: setne %dl
151 ; X86-O0-NEXT: xorb $-1, %dl
152 ; X86-O0-NEXT: andb $1, %dl
153 ; X86-O0-NEXT: movzbl %dl, %esi
154 ; X86-O0-NEXT: movl %esi, %eax
155 ; X86-O0-NEXT: movq %rax, _ZN8struct_210member_2_0E
159 ; X64: # BB#0: # %entry
160 ; X64-NEXT: movslq {{.*}}(%rip), %rax
161 ; X64-NEXT: xorl %ecx, %ecx
162 ; X64-NEXT: cmpq $-1, %rax
164 ; X64-NEXT: movabsq $-8381627093, %rdx # imm = 0xFFFFFFFE0C6A852B
165 ; X64-NEXT: cmpq %rdx, %rax
166 ; X64-NEXT: setne -{{[0-9]+}}(%rsp)
167 ; X64-NEXT: xorl %edx, %edx
168 ; X64-NEXT: cmpl $-1, %eax
170 ; X64-NEXT: addq $7093, %rax # imm = 0x1BB5
171 ; X64-NEXT: xorl %esi, %esi
172 ; X64-NEXT: cmpq %rax, %rdx
173 ; X64-NEXT: setg %sil
174 ; X64-NEXT: movq %rsi, {{.*}}(%rip)
175 ; X64-NEXT: movq %rcx, {{.*}}(%rip)
179 ; 686-O0: # BB#0: # %entry
180 ; 686-O0-NEXT: pushl %ebp
181 ; 686-O0-NEXT: .cfi_def_cfa_offset 8
182 ; 686-O0-NEXT: pushl %ebx
183 ; 686-O0-NEXT: .cfi_def_cfa_offset 12
184 ; 686-O0-NEXT: pushl %edi
185 ; 686-O0-NEXT: .cfi_def_cfa_offset 16
186 ; 686-O0-NEXT: pushl %esi
187 ; 686-O0-NEXT: .cfi_def_cfa_offset 20
188 ; 686-O0-NEXT: subl $24, %esp
189 ; 686-O0-NEXT: .cfi_def_cfa_offset 44
190 ; 686-O0-NEXT: .cfi_offset %esi, -20
191 ; 686-O0-NEXT: .cfi_offset %edi, -16
192 ; 686-O0-NEXT: .cfi_offset %ebx, -12
193 ; 686-O0-NEXT: .cfi_offset %ebp, -8
194 ; 686-O0-NEXT: movl var_5, %eax
195 ; 686-O0-NEXT: movl %eax, %ecx
196 ; 686-O0-NEXT: sarl $31, %ecx
197 ; 686-O0-NEXT: xorl $208307499, %eax # imm = 0xC6A852B
198 ; 686-O0-NEXT: xorl $-2, %ecx
199 ; 686-O0-NEXT: orl %ecx, %eax
200 ; 686-O0-NEXT: setne {{[0-9]+}}(%esp)
201 ; 686-O0-NEXT: movl var_5, %ecx
202 ; 686-O0-NEXT: movl %ecx, %edx
203 ; 686-O0-NEXT: subl $-1, %edx
204 ; 686-O0-NEXT: sete %bl
205 ; 686-O0-NEXT: movzbl %bl, %esi
206 ; 686-O0-NEXT: movl %ecx, %edi
207 ; 686-O0-NEXT: sarl $31, %edi
208 ; 686-O0-NEXT: xorl %ebp, %ebp
209 ; 686-O0-NEXT: addl $7093, %ecx # imm = 0x1BB5
210 ; 686-O0-NEXT: adcxl %ebp, %edi
211 ; 686-O0-NEXT: subl %esi, %ecx
212 ; 686-O0-NEXT: sbbl $0, %edi
213 ; 686-O0-NEXT: setl %bl
214 ; 686-O0-NEXT: movzbl %bl, %esi
215 ; 686-O0-NEXT: movl %esi, var_57
216 ; 686-O0-NEXT: movl $0, var_57+4
217 ; 686-O0-NEXT: movl var_5, %esi
218 ; 686-O0-NEXT: subl $-1, %esi
219 ; 686-O0-NEXT: sete %bl
220 ; 686-O0-NEXT: movzbl %bl, %ebp
221 ; 686-O0-NEXT: movl %ebp, _ZN8struct_210member_2_0E
222 ; 686-O0-NEXT: movl $0, _ZN8struct_210member_2_0E+4
223 ; 686-O0-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill
224 ; 686-O0-NEXT: movl %ecx, {{[0-9]+}}(%esp) # 4-byte Spill
225 ; 686-O0-NEXT: movl %edx, {{[0-9]+}}(%esp) # 4-byte Spill
226 ; 686-O0-NEXT: movl %edi, {{[0-9]+}}(%esp) # 4-byte Spill
227 ; 686-O0-NEXT: movl %esi, (%esp) # 4-byte Spill
228 ; 686-O0-NEXT: addl $24, %esp
229 ; 686-O0-NEXT: popl %esi
230 ; 686-O0-NEXT: popl %edi
231 ; 686-O0-NEXT: popl %ebx
232 ; 686-O0-NEXT: popl %ebp
236 ; 686: # BB#0: # %entry
237 ; 686-NEXT: pushl %edi
238 ; 686-NEXT: .cfi_def_cfa_offset 8
239 ; 686-NEXT: pushl %esi
240 ; 686-NEXT: .cfi_def_cfa_offset 12
241 ; 686-NEXT: subl $1, %esp
242 ; 686-NEXT: .cfi_def_cfa_offset 13
243 ; 686-NEXT: .cfi_offset %esi, -12
244 ; 686-NEXT: .cfi_offset %edi, -8
245 ; 686-NEXT: movl var_5, %edx
246 ; 686-NEXT: movl %edx, %esi
247 ; 686-NEXT: sarl $31, %esi
248 ; 686-NEXT: movl %edx, %ecx
249 ; 686-NEXT: andl %esi, %ecx
250 ; 686-NEXT: xorl %eax, %eax
251 ; 686-NEXT: cmpl $-1, %ecx
253 ; 686-NEXT: movl %edx, %ecx
254 ; 686-NEXT: xorl $208307499, %ecx # imm = 0xC6A852B
255 ; 686-NEXT: movl %esi, %edi
256 ; 686-NEXT: xorl $-2, %edi
257 ; 686-NEXT: orl %ecx, %edi
258 ; 686-NEXT: setne (%esp)
259 ; 686-NEXT: xorl %ecx, %ecx
260 ; 686-NEXT: cmpl $-1, %edx
262 ; 686-NEXT: xorl %edi, %edi
263 ; 686-NEXT: addl $7093, %edx # imm = 0x1BB5
264 ; 686-NEXT: adcxl %edi, %esi
265 ; 686-NEXT: cmpl %ecx, %edx
266 ; 686-NEXT: sbbl $0, %esi
268 ; 686-NEXT: movzbl %cl, %ecx
269 ; 686-NEXT: movl %ecx, var_57
270 ; 686-NEXT: movl $0, var_57+4
271 ; 686-NEXT: movl %eax, _ZN8struct_210member_2_0E
272 ; 686-NEXT: movl $0, _ZN8struct_210member_2_0E+4
273 ; 686-NEXT: addl $1, %esp
274 ; 686-NEXT: popl %esi
275 ; 686-NEXT: popl %edi
278 %a = alloca i8, align 1
279 %0 = load i32, i32* @var_5, align 4
280 %conv = sext i32 %0 to i64
281 %add = add nsw i64 %conv, 8381627093
282 %tobool = icmp ne i64 %add, 0
283 %frombool = zext i1 %tobool to i8
284 store i8 %frombool, i8* %a, align 1
285 %1 = load i32, i32* @var_5, align 4
286 %neg = xor i32 %1, -1
287 %tobool1 = icmp ne i32 %neg, 0
288 %lnot = xor i1 %tobool1, true
289 %conv2 = zext i1 %lnot to i64
290 %2 = load i32, i32* @var_5, align 4
291 %conv3 = sext i32 %2 to i64
292 %add4 = add nsw i64 %conv3, 7093
293 %cmp = icmp sgt i64 %conv2, %add4
294 %conv5 = zext i1 %cmp to i64
295 store i64 %conv5, i64* @var_57, align 8
296 %3 = load i32, i32* @var_5, align 4
297 %neg6 = xor i32 %3, -1
298 %tobool7 = icmp ne i32 %neg6, 0
299 %lnot8 = xor i1 %tobool7, true
300 %conv9 = zext i1 %lnot8 to i64
301 store i64 %conv9, i64* @_ZN8struct_210member_2_0E, align 8
306 @var_7 = external global i8, align 1
310 ; X86-O0: # BB#0: # %entry
311 ; X86-O0-NEXT: # implicit-def: %rax
312 ; X86-O0-NEXT: movzbl var_7, %ecx
313 ; X86-O0-NEXT: cmpb $0, var_7
314 ; X86-O0-NEXT: setne %dl
315 ; X86-O0-NEXT: xorb $-1, %dl
316 ; X86-O0-NEXT: andb $1, %dl
317 ; X86-O0-NEXT: movzbl %dl, %esi
318 ; X86-O0-NEXT: xorl %esi, %ecx
319 ; X86-O0-NEXT: movw %cx, %di
320 ; X86-O0-NEXT: movw %di, -{{[0-9]+}}(%rsp)
321 ; X86-O0-NEXT: movzbl var_7, %ecx
322 ; X86-O0-NEXT: movw %cx, %di
323 ; X86-O0-NEXT: cmpw $0, %di
324 ; X86-O0-NEXT: setne %dl
325 ; X86-O0-NEXT: xorb $-1, %dl
326 ; X86-O0-NEXT: andb $1, %dl
327 ; X86-O0-NEXT: movzbl %dl, %ecx
328 ; X86-O0-NEXT: movzbl var_7, %esi
329 ; X86-O0-NEXT: cmpl %esi, %ecx
330 ; X86-O0-NEXT: sete %dl
331 ; X86-O0-NEXT: andb $1, %dl
332 ; X86-O0-NEXT: movzbl %dl, %ecx
333 ; X86-O0-NEXT: movw %cx, %di
334 ; X86-O0-NEXT: movw %di, (%rax)
338 ; X64: # BB#0: # %entry
339 ; X64-NEXT: movzbl {{.*}}(%rip), %eax
340 ; X64-NEXT: xorl %ecx, %ecx
341 ; X64-NEXT: testl %eax, %eax
343 ; X64-NEXT: xorl %eax, %ecx
344 ; X64-NEXT: movw %cx, -{{[0-9]+}}(%rsp)
345 ; X64-NEXT: xorl %ecx, %ecx
346 ; X64-NEXT: testb %al, %al
348 ; X64-NEXT: xorl %edx, %edx
349 ; X64-NEXT: cmpl %eax, %ecx
351 ; X64-NEXT: movw %dx, (%rax)
355 ; 686-O0: # BB#0: # %entry
356 ; 686-O0-NEXT: pushl %edi
357 ; 686-O0-NEXT: .cfi_def_cfa_offset 8
358 ; 686-O0-NEXT: pushl %esi
359 ; 686-O0-NEXT: .cfi_def_cfa_offset 12
360 ; 686-O0-NEXT: subl $2, %esp
361 ; 686-O0-NEXT: .cfi_def_cfa_offset 14
362 ; 686-O0-NEXT: .cfi_offset %esi, -12
363 ; 686-O0-NEXT: .cfi_offset %edi, -8
364 ; 686-O0-NEXT: # implicit-def: %eax
365 ; 686-O0-NEXT: movzbl var_7, %ecx
366 ; 686-O0-NEXT: cmpb $0, var_7
367 ; 686-O0-NEXT: setne %dl
368 ; 686-O0-NEXT: xorb $-1, %dl
369 ; 686-O0-NEXT: andb $1, %dl
370 ; 686-O0-NEXT: movzbl %dl, %esi
371 ; 686-O0-NEXT: xorl %esi, %ecx
372 ; 686-O0-NEXT: movw %cx, %di
373 ; 686-O0-NEXT: movw %di, (%esp)
374 ; 686-O0-NEXT: movzbl var_7, %ecx
375 ; 686-O0-NEXT: movw %cx, %di
376 ; 686-O0-NEXT: cmpw $0, %di
377 ; 686-O0-NEXT: setne %dl
378 ; 686-O0-NEXT: xorb $-1, %dl
379 ; 686-O0-NEXT: andb $1, %dl
380 ; 686-O0-NEXT: movzbl %dl, %ecx
381 ; 686-O0-NEXT: movzbl var_7, %esi
382 ; 686-O0-NEXT: cmpl %esi, %ecx
383 ; 686-O0-NEXT: sete %dl
384 ; 686-O0-NEXT: andb $1, %dl
385 ; 686-O0-NEXT: movzbl %dl, %ecx
386 ; 686-O0-NEXT: movw %cx, %di
387 ; 686-O0-NEXT: movw %di, (%eax)
388 ; 686-O0-NEXT: addl $2, %esp
389 ; 686-O0-NEXT: popl %esi
390 ; 686-O0-NEXT: popl %edi
394 ; 686: # BB#0: # %entry
395 ; 686-NEXT: subl $2, %esp
396 ; 686-NEXT: .cfi_def_cfa_offset 6
397 ; 686-NEXT: movzbl var_7, %eax
398 ; 686-NEXT: xorl %ecx, %ecx
399 ; 686-NEXT: testl %eax, %eax
401 ; 686-NEXT: xorl %eax, %ecx
402 ; 686-NEXT: movw %cx, (%esp)
403 ; 686-NEXT: xorl %ecx, %ecx
404 ; 686-NEXT: testb %al, %al
406 ; 686-NEXT: xorl %edx, %edx
407 ; 686-NEXT: cmpl %eax, %ecx
409 ; 686-NEXT: movw %dx, (%eax)
410 ; 686-NEXT: addl $2, %esp
413 %a = alloca i16, align 2
414 %0 = load i8, i8* @var_7, align 1
415 %conv = zext i8 %0 to i32
416 %1 = load i8, i8* @var_7, align 1
417 %tobool = icmp ne i8 %1, 0
418 %lnot = xor i1 %tobool, true
419 %conv1 = zext i1 %lnot to i32
420 %xor = xor i32 %conv, %conv1
421 %conv2 = trunc i32 %xor to i16
422 store i16 %conv2, i16* %a, align 2
423 %2 = load i8, i8* @var_7, align 1
424 %conv3 = zext i8 %2 to i16
425 %tobool4 = icmp ne i16 %conv3, 0
426 %lnot5 = xor i1 %tobool4, true
427 %conv6 = zext i1 %lnot5 to i32
428 %3 = load i8, i8* @var_7, align 1
429 %conv7 = zext i8 %3 to i32
430 %cmp = icmp eq i32 %conv6, %conv7
431 %conv8 = zext i1 %cmp to i32
432 %conv9 = trunc i32 %conv8 to i16
433 store i16 %conv9, i16* undef, align 2
438 @var_13 = external global i32, align 4
439 @var_16 = external global i32, align 4
440 @var_46 = external global i32, align 4
442 define void @f3() #0 {
444 ; X86-O0: # BB#0: # %entry
445 ; X86-O0-NEXT: movl var_13, %eax
446 ; X86-O0-NEXT: xorl $-1, %eax
447 ; X86-O0-NEXT: movl %eax, %eax
448 ; X86-O0-NEXT: movl %eax, %ecx
449 ; X86-O0-NEXT: cmpl $0, var_13
450 ; X86-O0-NEXT: setne %dl
451 ; X86-O0-NEXT: xorb $-1, %dl
452 ; X86-O0-NEXT: andb $1, %dl
453 ; X86-O0-NEXT: movzbl %dl, %eax
454 ; X86-O0-NEXT: movl %eax, %esi
455 ; X86-O0-NEXT: movl var_13, %eax
456 ; X86-O0-NEXT: xorl $-1, %eax
457 ; X86-O0-NEXT: xorl var_16, %eax
458 ; X86-O0-NEXT: movl %eax, %eax
459 ; X86-O0-NEXT: movl %eax, %edi
460 ; X86-O0-NEXT: andq %rdi, %rsi
461 ; X86-O0-NEXT: orq %rsi, %rcx
462 ; X86-O0-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)
463 ; X86-O0-NEXT: movl var_13, %eax
464 ; X86-O0-NEXT: xorl $-1, %eax
465 ; X86-O0-NEXT: movl %eax, %eax
466 ; X86-O0-NEXT: movl %eax, %ecx
467 ; X86-O0-NEXT: cmpl $0, var_13
468 ; X86-O0-NEXT: setne %dl
469 ; X86-O0-NEXT: xorb $-1, %dl
470 ; X86-O0-NEXT: andb $1, %dl
471 ; X86-O0-NEXT: movzbl %dl, %eax
472 ; X86-O0-NEXT: movl %eax, %esi
473 ; X86-O0-NEXT: andq $0, %rsi
474 ; X86-O0-NEXT: orq %rsi, %rcx
475 ; X86-O0-NEXT: movl %ecx, %eax
476 ; X86-O0-NEXT: movl %eax, var_46
480 ; X64: # BB#0: # %entry
481 ; X64-NEXT: movl {{.*}}(%rip), %eax
482 ; X64-NEXT: movl $4294967295, %ecx # imm = 0xFFFFFFFF
483 ; X64-NEXT: xorq %rax, %rcx
484 ; X64-NEXT: xorl %edx, %edx
485 ; X64-NEXT: testq %rax, %rax
487 ; X64-NEXT: movl {{.*}}(%rip), %eax
488 ; X64-NEXT: xorl %ecx, %eax
489 ; X64-NEXT: andq %rdx, %rax
490 ; X64-NEXT: orq %rcx, %rax
491 ; X64-NEXT: movq %rax, -{{[0-9]+}}(%rsp)
492 ; X64-NEXT: movl %ecx, {{.*}}(%rip)
496 ; 686-O0: # BB#0: # %entry
497 ; 686-O0-NEXT: pushl %ebp
498 ; 686-O0-NEXT: .cfi_def_cfa_offset 8
499 ; 686-O0-NEXT: .cfi_offset %ebp, -8
500 ; 686-O0-NEXT: movl %esp, %ebp
501 ; 686-O0-NEXT: .cfi_def_cfa_register %ebp
502 ; 686-O0-NEXT: pushl %edi
503 ; 686-O0-NEXT: pushl %esi
504 ; 686-O0-NEXT: andl $-8, %esp
505 ; 686-O0-NEXT: subl $8, %esp
506 ; 686-O0-NEXT: .cfi_offset %esi, -16
507 ; 686-O0-NEXT: .cfi_offset %edi, -12
508 ; 686-O0-NEXT: movl var_13, %eax
509 ; 686-O0-NEXT: movl %eax, %ecx
510 ; 686-O0-NEXT: notl %ecx
511 ; 686-O0-NEXT: testl %eax, %eax
512 ; 686-O0-NEXT: sete %dl
513 ; 686-O0-NEXT: movzbl %dl, %eax
514 ; 686-O0-NEXT: movl var_16, %esi
515 ; 686-O0-NEXT: movl %ecx, %edi
516 ; 686-O0-NEXT: xorl %esi, %edi
517 ; 686-O0-NEXT: andl %edi, %eax
518 ; 686-O0-NEXT: movb %al, %dl
519 ; 686-O0-NEXT: movzbl %dl, %eax
520 ; 686-O0-NEXT: orl %eax, %ecx
521 ; 686-O0-NEXT: movl %ecx, (%esp)
522 ; 686-O0-NEXT: movl $0, {{[0-9]+}}(%esp)
523 ; 686-O0-NEXT: movl var_13, %eax
524 ; 686-O0-NEXT: notl %eax
525 ; 686-O0-NEXT: movl %eax, var_46
526 ; 686-O0-NEXT: leal -8(%ebp), %esp
527 ; 686-O0-NEXT: popl %esi
528 ; 686-O0-NEXT: popl %edi
529 ; 686-O0-NEXT: popl %ebp
533 ; 686: # BB#0: # %entry
534 ; 686-NEXT: pushl %ebp
535 ; 686-NEXT: .cfi_def_cfa_offset 8
536 ; 686-NEXT: .cfi_offset %ebp, -8
537 ; 686-NEXT: movl %esp, %ebp
538 ; 686-NEXT: .cfi_def_cfa_register %ebp
539 ; 686-NEXT: andl $-8, %esp
540 ; 686-NEXT: subl $8, %esp
541 ; 686-NEXT: movl var_13, %ecx
542 ; 686-NEXT: xorl %eax, %eax
543 ; 686-NEXT: testl %ecx, %ecx
544 ; 686-NEXT: notl %ecx
546 ; 686-NEXT: movl var_16, %edx
547 ; 686-NEXT: xorl %ecx, %edx
548 ; 686-NEXT: andl %eax, %edx
549 ; 686-NEXT: movzbl %dl, %eax
550 ; 686-NEXT: orl %ecx, %eax
551 ; 686-NEXT: movl %eax, (%esp)
552 ; 686-NEXT: movl $0, {{[0-9]+}}(%esp)
553 ; 686-NEXT: movl %ecx, var_46
554 ; 686-NEXT: movl %ebp, %esp
555 ; 686-NEXT: popl %ebp
558 %a = alloca i64, align 8
559 %0 = load i32, i32* @var_13, align 4
560 %neg = xor i32 %0, -1
561 %conv = zext i32 %neg to i64
562 %1 = load i32, i32* @var_13, align 4
563 %tobool = icmp ne i32 %1, 0
564 %lnot = xor i1 %tobool, true
565 %conv1 = zext i1 %lnot to i64
566 %2 = load i32, i32* @var_13, align 4
567 %neg2 = xor i32 %2, -1
568 %3 = load i32, i32* @var_16, align 4
569 %xor = xor i32 %neg2, %3
570 %conv3 = zext i32 %xor to i64
571 %and = and i64 %conv1, %conv3
572 %or = or i64 %conv, %and
573 store i64 %or, i64* %a, align 8
574 %4 = load i32, i32* @var_13, align 4
575 %neg4 = xor i32 %4, -1
576 %conv5 = zext i32 %neg4 to i64
577 %5 = load i32, i32* @var_13, align 4
578 %tobool6 = icmp ne i32 %5, 0
579 %lnot7 = xor i1 %tobool6, true
580 %conv8 = zext i1 %lnot7 to i64
581 %and9 = and i64 %conv8, 0
582 %or10 = or i64 %conv5, %and9
583 %conv11 = trunc i64 %or10 to i32
584 store i32 %conv11, i32* @var_46, align 4