aboutsummaryrefslogtreecommitdiff
path: root/test/CodeGen/X86/pr32284.ll
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-12-18 20:10:56 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-12-18 20:10:56 +0000
commit044eb2f6afba375a914ac9d8024f8f5142bb912e (patch)
tree1475247dc9f9fe5be155ebd4c9069c75aadf8c20 /test/CodeGen/X86/pr32284.ll
parenteb70dddbd77e120e5d490bd8fbe7ff3f8fa81c6b (diff)
downloadsrc-044eb2f6afba375a914ac9d8024f8f5142bb912e.tar.gz
src-044eb2f6afba375a914ac9d8024f8f5142bb912e.zip
Vendor import of llvm trunk r321017:vendor/llvm/llvm-trunk-r321017
Notes
Notes: svn path=/vendor/llvm/dist/; revision=326938 svn path=/vendor/llvm/llvm-trunk-r321017/; revision=326939; tag=vendor/llvm/llvm-trunk-r321017
Diffstat (limited to 'test/CodeGen/X86/pr32284.ll')
-rw-r--r--test/CodeGen/X86/pr32284.ll491
1 files changed, 459 insertions, 32 deletions
diff --git a/test/CodeGen/X86/pr32284.ll b/test/CodeGen/X86/pr32284.ll
index c54909cf93c1..86bb74050ad3 100644
--- a/test/CodeGen/X86/pr32284.ll
+++ b/test/CodeGen/X86/pr32284.ll
@@ -1,17 +1,94 @@
-; RUN: llc -O0 -mtriple=x86_64-unknown -mcpu=skx -o - %s | FileCheck %s --check-prefixes=CHECK,X64
-; RUN: llc -mtriple=x86_64-unknown -mcpu=skx -o - %s | FileCheck %s --check-prefixes=CHECK,X64
-; RUN: llc -O0 -mtriple=i686-unknown -mcpu=skx -o - %s | FileCheck %s --check-prefixes=CHECK,686
-; RUN: llc -mtriple=i686-unknown -mcpu=skx -o - %s | FileCheck %s --check-prefixes=CHECK,686
-; REQUIRES: asserts
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -O0 -mtriple=x86_64-unknown -mcpu=skx -o - %s | FileCheck %s --check-prefix=X86-O0
+; RUN: llc -mtriple=x86_64-unknown -mcpu=skx -o - %s | FileCheck %s --check-prefix=X64
+; RUN: llc -O0 -mtriple=i686-unknown -mcpu=skx -o - %s | FileCheck %s --check-prefix=686-O0
+; RUN: llc -mtriple=i686-unknown -mcpu=skx -o - %s | FileCheck %s --check-prefix=686
@c = external constant i8, align 1
define void @foo() {
-; CHECK-LABEL: foo:
-; CHECK: # BB#0: # %entry
-; CHECK-DAG: setne
-; CHECK-DAG: setle
-; CHECK: ret
+; X86-O0-LABEL: foo:
+; X86-O0: # %bb.0: # %entry
+; X86-O0-NEXT: xorl %eax, %eax
+; X86-O0-NEXT: movl %eax, %ecx
+; X86-O0-NEXT: xorl %eax, %eax
+; X86-O0-NEXT: movzbl c, %edx
+; X86-O0-NEXT: subl %edx, %eax
+; X86-O0-NEXT: movslq %eax, %rsi
+; X86-O0-NEXT: subq %rsi, %rcx
+; X86-O0-NEXT: movb %cl, %dil
+; X86-O0-NEXT: cmpb $0, %dil
+; X86-O0-NEXT: setne %dil
+; X86-O0-NEXT: andb $1, %dil
+; X86-O0-NEXT: movb %dil, -{{[0-9]+}}(%rsp)
+; X86-O0-NEXT: cmpb $0, c
+; X86-O0-NEXT: setne %dil
+; X86-O0-NEXT: xorb $-1, %dil
+; X86-O0-NEXT: xorb $-1, %dil
+; X86-O0-NEXT: andb $1, %dil
+; X86-O0-NEXT: movzbl %dil, %eax
+; X86-O0-NEXT: movzbl c, %edx
+; X86-O0-NEXT: cmpl %edx, %eax
+; X86-O0-NEXT: setle %dil
+; X86-O0-NEXT: andb $1, %dil
+; X86-O0-NEXT: movzbl %dil, %eax
+; X86-O0-NEXT: movl %eax, -{{[0-9]+}}(%rsp)
+; X86-O0-NEXT: retq
+;
+; X64-LABEL: foo:
+; X64: # %bb.0: # %entry
+; X64-NEXT: movzbl {{.*}}(%rip), %eax
+; X64-NEXT: testb %al, %al
+; X64-NEXT: setne -{{[0-9]+}}(%rsp)
+; X64-NEXT: xorl %ecx, %ecx
+; X64-NEXT: testl %eax, %eax
+; X64-NEXT: setne %cl
+; X64-NEXT: xorl %edx, %edx
+; X64-NEXT: cmpl %eax, %ecx
+; X64-NEXT: setle %dl
+; X64-NEXT: movl %edx, -{{[0-9]+}}(%rsp)
+; X64-NEXT: retq
+;
+; 686-O0-LABEL: foo:
+; 686-O0: # %bb.0: # %entry
+; 686-O0-NEXT: subl $8, %esp
+; 686-O0-NEXT: .cfi_def_cfa_offset 12
+; 686-O0-NEXT: movb c, %al
+; 686-O0-NEXT: cmpb $0, %al
+; 686-O0-NEXT: setne %al
+; 686-O0-NEXT: andb $1, %al
+; 686-O0-NEXT: movb %al, {{[0-9]+}}(%esp)
+; 686-O0-NEXT: cmpb $0, c
+; 686-O0-NEXT: setne %al
+; 686-O0-NEXT: xorb $-1, %al
+; 686-O0-NEXT: xorb $-1, %al
+; 686-O0-NEXT: andb $1, %al
+; 686-O0-NEXT: movzbl %al, %ecx
+; 686-O0-NEXT: movzbl c, %edx
+; 686-O0-NEXT: cmpl %edx, %ecx
+; 686-O0-NEXT: setle %al
+; 686-O0-NEXT: andb $1, %al
+; 686-O0-NEXT: movzbl %al, %ecx
+; 686-O0-NEXT: movl %ecx, (%esp)
+; 686-O0-NEXT: addl $8, %esp
+; 686-O0-NEXT: retl
+;
+; 686-LABEL: foo:
+; 686: # %bb.0: # %entry
+; 686-NEXT: subl $8, %esp
+; 686-NEXT: .cfi_def_cfa_offset 12
+; 686-NEXT: movzbl c, %eax
+; 686-NEXT: xorl %ecx, %ecx
+; 686-NEXT: testl %eax, %eax
+; 686-NEXT: setne %cl
+; 686-NEXT: testb %al, %al
+; 686-NEXT: setne {{[0-9]+}}(%esp)
+; 686-NEXT: xorl %edx, %edx
+; 686-NEXT: cmpl %eax, %ecx
+; 686-NEXT: setle %dl
+; 686-NEXT: movl %edx, {{[0-9]+}}(%esp)
+; 686-NEXT: addl $8, %esp
+; 686-NEXT: retl
entry:
%a = alloca i8, align 1
%b = alloca i32, align 4
@@ -42,12 +119,161 @@ entry:
@_ZN8struct_210member_2_0E = external global i64, align 8
define void @f1() {
-; CHECK-LABEL: f1:
-; CHECK: # BB#0: # %entry
-; CHECK: sete
-; X64: addq $7093, {{.*}}
-; 686: addl $7093, {{.*}}
-; CHECK: ret
+; X86-O0-LABEL: f1:
+; X86-O0: # %bb.0: # %entry
+; X86-O0-NEXT: movabsq $8381627093, %rax # imm = 0x1F3957AD5
+; X86-O0-NEXT: movslq var_5, %rcx
+; X86-O0-NEXT: addq %rax, %rcx
+; X86-O0-NEXT: cmpq $0, %rcx
+; X86-O0-NEXT: setne %dl
+; X86-O0-NEXT: andb $1, %dl
+; X86-O0-NEXT: movb %dl, -{{[0-9]+}}(%rsp)
+; X86-O0-NEXT: movl var_5, %esi
+; X86-O0-NEXT: xorl $-1, %esi
+; X86-O0-NEXT: cmpl $0, %esi
+; X86-O0-NEXT: setne %dl
+; X86-O0-NEXT: xorb $-1, %dl
+; X86-O0-NEXT: andb $1, %dl
+; X86-O0-NEXT: movzbl %dl, %esi
+; X86-O0-NEXT: movl %esi, %eax
+; X86-O0-NEXT: movslq var_5, %rcx
+; X86-O0-NEXT: addq $7093, %rcx # imm = 0x1BB5
+; X86-O0-NEXT: cmpq %rcx, %rax
+; X86-O0-NEXT: setg %dl
+; X86-O0-NEXT: andb $1, %dl
+; X86-O0-NEXT: movzbl %dl, %esi
+; X86-O0-NEXT: movl %esi, %eax
+; X86-O0-NEXT: movq %rax, var_57
+; X86-O0-NEXT: movl var_5, %esi
+; X86-O0-NEXT: xorl $-1, %esi
+; X86-O0-NEXT: cmpl $0, %esi
+; X86-O0-NEXT: setne %dl
+; X86-O0-NEXT: xorb $-1, %dl
+; X86-O0-NEXT: andb $1, %dl
+; X86-O0-NEXT: movzbl %dl, %esi
+; X86-O0-NEXT: movl %esi, %eax
+; X86-O0-NEXT: movq %rax, _ZN8struct_210member_2_0E
+; X86-O0-NEXT: retq
+;
+; X64-LABEL: f1:
+; X64: # %bb.0: # %entry
+; X64-NEXT: movslq {{.*}}(%rip), %rax
+; X64-NEXT: xorl %ecx, %ecx
+; X64-NEXT: cmpq $-1, %rax
+; X64-NEXT: sete %cl
+; X64-NEXT: movabsq $-8381627093, %rdx # imm = 0xFFFFFFFE0C6A852B
+; X64-NEXT: cmpq %rdx, %rax
+; X64-NEXT: setne -{{[0-9]+}}(%rsp)
+; X64-NEXT: xorl %edx, %edx
+; X64-NEXT: cmpl $-1, %eax
+; X64-NEXT: sete %dl
+; X64-NEXT: addq $7093, %rax # imm = 0x1BB5
+; X64-NEXT: xorl %esi, %esi
+; X64-NEXT: cmpq %rax, %rdx
+; X64-NEXT: setg %sil
+; X64-NEXT: movq %rsi, {{.*}}(%rip)
+; X64-NEXT: movq %rcx, {{.*}}(%rip)
+; X64-NEXT: retq
+;
+; 686-O0-LABEL: f1:
+; 686-O0: # %bb.0: # %entry
+; 686-O0-NEXT: pushl %ebp
+; 686-O0-NEXT: .cfi_def_cfa_offset 8
+; 686-O0-NEXT: pushl %ebx
+; 686-O0-NEXT: .cfi_def_cfa_offset 12
+; 686-O0-NEXT: pushl %edi
+; 686-O0-NEXT: .cfi_def_cfa_offset 16
+; 686-O0-NEXT: pushl %esi
+; 686-O0-NEXT: .cfi_def_cfa_offset 20
+; 686-O0-NEXT: subl $24, %esp
+; 686-O0-NEXT: .cfi_def_cfa_offset 44
+; 686-O0-NEXT: .cfi_offset %esi, -20
+; 686-O0-NEXT: .cfi_offset %edi, -16
+; 686-O0-NEXT: .cfi_offset %ebx, -12
+; 686-O0-NEXT: .cfi_offset %ebp, -8
+; 686-O0-NEXT: movl var_5, %eax
+; 686-O0-NEXT: movl %eax, %ecx
+; 686-O0-NEXT: sarl $31, %ecx
+; 686-O0-NEXT: xorl $208307499, %eax # imm = 0xC6A852B
+; 686-O0-NEXT: xorl $-2, %ecx
+; 686-O0-NEXT: orl %ecx, %eax
+; 686-O0-NEXT: setne {{[0-9]+}}(%esp)
+; 686-O0-NEXT: movl var_5, %ecx
+; 686-O0-NEXT: movl %ecx, %edx
+; 686-O0-NEXT: subl $-1, %edx
+; 686-O0-NEXT: sete %bl
+; 686-O0-NEXT: movzbl %bl, %esi
+; 686-O0-NEXT: movl %ecx, %edi
+; 686-O0-NEXT: sarl $31, %edi
+; 686-O0-NEXT: xorl %ebp, %ebp
+; 686-O0-NEXT: addl $7093, %ecx # imm = 0x1BB5
+; 686-O0-NEXT: adcxl %ebp, %edi
+; 686-O0-NEXT: subl %esi, %ecx
+; 686-O0-NEXT: sbbl $0, %edi
+; 686-O0-NEXT: setl %bl
+; 686-O0-NEXT: movzbl %bl, %esi
+; 686-O0-NEXT: movl %esi, var_57
+; 686-O0-NEXT: movl $0, var_57+4
+; 686-O0-NEXT: movl var_5, %esi
+; 686-O0-NEXT: subl $-1, %esi
+; 686-O0-NEXT: sete %bl
+; 686-O0-NEXT: movzbl %bl, %ebp
+; 686-O0-NEXT: movl %ebp, _ZN8struct_210member_2_0E
+; 686-O0-NEXT: movl $0, _ZN8struct_210member_2_0E+4
+; 686-O0-NEXT: movl %eax, {{[0-9]+}}(%esp) # 4-byte Spill
+; 686-O0-NEXT: movl %ecx, {{[0-9]+}}(%esp) # 4-byte Spill
+; 686-O0-NEXT: movl %edx, {{[0-9]+}}(%esp) # 4-byte Spill
+; 686-O0-NEXT: movl %edi, {{[0-9]+}}(%esp) # 4-byte Spill
+; 686-O0-NEXT: movl %esi, (%esp) # 4-byte Spill
+; 686-O0-NEXT: addl $24, %esp
+; 686-O0-NEXT: popl %esi
+; 686-O0-NEXT: popl %edi
+; 686-O0-NEXT: popl %ebx
+; 686-O0-NEXT: popl %ebp
+; 686-O0-NEXT: retl
+;
+; 686-LABEL: f1:
+; 686: # %bb.0: # %entry
+; 686-NEXT: pushl %edi
+; 686-NEXT: .cfi_def_cfa_offset 8
+; 686-NEXT: pushl %esi
+; 686-NEXT: .cfi_def_cfa_offset 12
+; 686-NEXT: subl $1, %esp
+; 686-NEXT: .cfi_def_cfa_offset 13
+; 686-NEXT: .cfi_offset %esi, -12
+; 686-NEXT: .cfi_offset %edi, -8
+; 686-NEXT: movl var_5, %edx
+; 686-NEXT: movl %edx, %esi
+; 686-NEXT: sarl $31, %esi
+; 686-NEXT: movl %edx, %ecx
+; 686-NEXT: andl %esi, %ecx
+; 686-NEXT: xorl %eax, %eax
+; 686-NEXT: cmpl $-1, %ecx
+; 686-NEXT: sete %al
+; 686-NEXT: movl %edx, %ecx
+; 686-NEXT: xorl $208307499, %ecx # imm = 0xC6A852B
+; 686-NEXT: movl %esi, %edi
+; 686-NEXT: xorl $-2, %edi
+; 686-NEXT: orl %ecx, %edi
+; 686-NEXT: setne (%esp)
+; 686-NEXT: xorl %ecx, %ecx
+; 686-NEXT: cmpl $-1, %edx
+; 686-NEXT: sete %cl
+; 686-NEXT: xorl %edi, %edi
+; 686-NEXT: addl $7093, %edx # imm = 0x1BB5
+; 686-NEXT: adcxl %edi, %esi
+; 686-NEXT: cmpl %ecx, %edx
+; 686-NEXT: sbbl $0, %esi
+; 686-NEXT: setl %cl
+; 686-NEXT: movzbl %cl, %ecx
+; 686-NEXT: movl %ecx, var_57
+; 686-NEXT: movl $0, var_57+4
+; 686-NEXT: movl %eax, _ZN8struct_210member_2_0E
+; 686-NEXT: movl $0, _ZN8struct_210member_2_0E+4
+; 686-NEXT: addl $1, %esp
+; 686-NEXT: popl %esi
+; 686-NEXT: popl %edi
+; 686-NEXT: retl
entry:
%a = alloca i8, align 1
%0 = load i32, i32* @var_5, align 4
@@ -80,13 +306,109 @@ entry:
@var_7 = external global i8, align 1
define void @f2() {
-; CHECK-LABEL: f2:
-; CHECK: # BB#0: # %entry
-; X64: movzbl {{.*}}(%rip), %[[R:[a-z]*]]
-; 686: movzbl {{.*}}, %[[R:[a-z]*]]
-; CHECK: test{{[qlwb]}} %[[R]], %[[R]]
-; CHECK: sete {{.*}}
-; CHECK: ret
+; X86-O0-LABEL: f2:
+; X86-O0: # %bb.0: # %entry
+; X86-O0-NEXT: # implicit-def: %rax
+; X86-O0-NEXT: movzbl var_7, %ecx
+; X86-O0-NEXT: cmpb $0, var_7
+; X86-O0-NEXT: setne %dl
+; X86-O0-NEXT: xorb $-1, %dl
+; X86-O0-NEXT: andb $1, %dl
+; X86-O0-NEXT: movzbl %dl, %esi
+; X86-O0-NEXT: xorl %esi, %ecx
+; X86-O0-NEXT: movw %cx, %di
+; X86-O0-NEXT: movw %di, -{{[0-9]+}}(%rsp)
+; X86-O0-NEXT: movzbl var_7, %ecx
+; X86-O0-NEXT: movw %cx, %di
+; X86-O0-NEXT: cmpw $0, %di
+; X86-O0-NEXT: setne %dl
+; X86-O0-NEXT: xorb $-1, %dl
+; X86-O0-NEXT: andb $1, %dl
+; X86-O0-NEXT: movzbl %dl, %ecx
+; X86-O0-NEXT: movzbl var_7, %esi
+; X86-O0-NEXT: cmpl %esi, %ecx
+; X86-O0-NEXT: sete %dl
+; X86-O0-NEXT: andb $1, %dl
+; X86-O0-NEXT: movzbl %dl, %ecx
+; X86-O0-NEXT: movw %cx, %di
+; X86-O0-NEXT: movw %di, (%rax)
+; X86-O0-NEXT: retq
+;
+; X64-LABEL: f2:
+; X64: # %bb.0: # %entry
+; X64-NEXT: movzbl {{.*}}(%rip), %eax
+; X64-NEXT: xorl %ecx, %ecx
+; X64-NEXT: testl %eax, %eax
+; X64-NEXT: sete %cl
+; X64-NEXT: xorl %eax, %ecx
+; X64-NEXT: movw %cx, -{{[0-9]+}}(%rsp)
+; X64-NEXT: xorl %ecx, %ecx
+; X64-NEXT: testb %al, %al
+; X64-NEXT: sete %cl
+; X64-NEXT: xorl %edx, %edx
+; X64-NEXT: cmpl %eax, %ecx
+; X64-NEXT: sete %dl
+; X64-NEXT: movw %dx, (%rax)
+; X64-NEXT: retq
+;
+; 686-O0-LABEL: f2:
+; 686-O0: # %bb.0: # %entry
+; 686-O0-NEXT: pushl %edi
+; 686-O0-NEXT: .cfi_def_cfa_offset 8
+; 686-O0-NEXT: pushl %esi
+; 686-O0-NEXT: .cfi_def_cfa_offset 12
+; 686-O0-NEXT: subl $2, %esp
+; 686-O0-NEXT: .cfi_def_cfa_offset 14
+; 686-O0-NEXT: .cfi_offset %esi, -12
+; 686-O0-NEXT: .cfi_offset %edi, -8
+; 686-O0-NEXT: # implicit-def: %eax
+; 686-O0-NEXT: movzbl var_7, %ecx
+; 686-O0-NEXT: cmpb $0, var_7
+; 686-O0-NEXT: setne %dl
+; 686-O0-NEXT: xorb $-1, %dl
+; 686-O0-NEXT: andb $1, %dl
+; 686-O0-NEXT: movzbl %dl, %esi
+; 686-O0-NEXT: xorl %esi, %ecx
+; 686-O0-NEXT: movw %cx, %di
+; 686-O0-NEXT: movw %di, (%esp)
+; 686-O0-NEXT: movzbl var_7, %ecx
+; 686-O0-NEXT: movw %cx, %di
+; 686-O0-NEXT: cmpw $0, %di
+; 686-O0-NEXT: setne %dl
+; 686-O0-NEXT: xorb $-1, %dl
+; 686-O0-NEXT: andb $1, %dl
+; 686-O0-NEXT: movzbl %dl, %ecx
+; 686-O0-NEXT: movzbl var_7, %esi
+; 686-O0-NEXT: cmpl %esi, %ecx
+; 686-O0-NEXT: sete %dl
+; 686-O0-NEXT: andb $1, %dl
+; 686-O0-NEXT: movzbl %dl, %ecx
+; 686-O0-NEXT: movw %cx, %di
+; 686-O0-NEXT: movw %di, (%eax)
+; 686-O0-NEXT: addl $2, %esp
+; 686-O0-NEXT: popl %esi
+; 686-O0-NEXT: popl %edi
+; 686-O0-NEXT: retl
+;
+; 686-LABEL: f2:
+; 686: # %bb.0: # %entry
+; 686-NEXT: subl $2, %esp
+; 686-NEXT: .cfi_def_cfa_offset 6
+; 686-NEXT: movzbl var_7, %eax
+; 686-NEXT: xorl %ecx, %ecx
+; 686-NEXT: testl %eax, %eax
+; 686-NEXT: sete %cl
+; 686-NEXT: xorl %eax, %ecx
+; 686-NEXT: movw %cx, (%esp)
+; 686-NEXT: xorl %ecx, %ecx
+; 686-NEXT: testb %al, %al
+; 686-NEXT: sete %cl
+; 686-NEXT: xorl %edx, %edx
+; 686-NEXT: cmpl %eax, %ecx
+; 686-NEXT: sete %dl
+; 686-NEXT: movw %dx, (%eax)
+; 686-NEXT: addl $2, %esp
+; 686-NEXT: retl
entry:
%a = alloca i16, align 2
%0 = load i8, i8* @var_7, align 1
@@ -118,15 +440,120 @@ entry:
@var_46 = external global i32, align 4
define void @f3() #0 {
-; CHECK-LABEL: f3:
-; X64-DAG: movl var_13(%rip), {{.*}}
-; X64-DAG: movl var_16(%rip), {{.*}}
-; X64-DAG: movl {{.*}},{{.*}}var_46{{.*}}
-; X64: retq
-; 686-DAG: movl var_13, {{.*}}
-; 686-DAG: movl var_16, {{.*}}
-; 686-DAG: movl {{.*}},{{.*}}var_46{{.*}}
-; 686: retl
+; X86-O0-LABEL: f3:
+; X86-O0: # %bb.0: # %entry
+; X86-O0-NEXT: movl var_13, %eax
+; X86-O0-NEXT: xorl $-1, %eax
+; X86-O0-NEXT: movl %eax, %eax
+; X86-O0-NEXT: movl %eax, %ecx
+; X86-O0-NEXT: cmpl $0, var_13
+; X86-O0-NEXT: setne %dl
+; X86-O0-NEXT: xorb $-1, %dl
+; X86-O0-NEXT: andb $1, %dl
+; X86-O0-NEXT: movzbl %dl, %eax
+; X86-O0-NEXT: movl %eax, %esi
+; X86-O0-NEXT: movl var_13, %eax
+; X86-O0-NEXT: xorl $-1, %eax
+; X86-O0-NEXT: xorl var_16, %eax
+; X86-O0-NEXT: movl %eax, %eax
+; X86-O0-NEXT: movl %eax, %edi
+; X86-O0-NEXT: andq %rdi, %rsi
+; X86-O0-NEXT: orq %rsi, %rcx
+; X86-O0-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)
+; X86-O0-NEXT: movl var_13, %eax
+; X86-O0-NEXT: xorl $-1, %eax
+; X86-O0-NEXT: movl %eax, %eax
+; X86-O0-NEXT: movl %eax, %ecx
+; X86-O0-NEXT: cmpl $0, var_13
+; X86-O0-NEXT: setne %dl
+; X86-O0-NEXT: xorb $-1, %dl
+; X86-O0-NEXT: andb $1, %dl
+; X86-O0-NEXT: movzbl %dl, %eax
+; X86-O0-NEXT: movl %eax, %esi
+; X86-O0-NEXT: andq $0, %rsi
+; X86-O0-NEXT: orq %rsi, %rcx
+; X86-O0-NEXT: movl %ecx, %eax
+; X86-O0-NEXT: movl %eax, var_46
+; X86-O0-NEXT: retq
+;
+; X64-LABEL: f3:
+; X64: # %bb.0: # %entry
+; X64-NEXT: movl {{.*}}(%rip), %eax
+; X64-NEXT: movl $4294967295, %ecx # imm = 0xFFFFFFFF
+; X64-NEXT: xorq %rax, %rcx
+; X64-NEXT: xorl %edx, %edx
+; X64-NEXT: testq %rax, %rax
+; X64-NEXT: sete %dl
+; X64-NEXT: movl {{.*}}(%rip), %eax
+; X64-NEXT: xorl %ecx, %eax
+; X64-NEXT: andq %rdx, %rax
+; X64-NEXT: orq %rcx, %rax
+; X64-NEXT: movq %rax, -{{[0-9]+}}(%rsp)
+; X64-NEXT: movl %ecx, {{.*}}(%rip)
+; X64-NEXT: retq
+;
+; 686-O0-LABEL: f3:
+; 686-O0: # %bb.0: # %entry
+; 686-O0-NEXT: pushl %ebp
+; 686-O0-NEXT: .cfi_def_cfa_offset 8
+; 686-O0-NEXT: .cfi_offset %ebp, -8
+; 686-O0-NEXT: movl %esp, %ebp
+; 686-O0-NEXT: .cfi_def_cfa_register %ebp
+; 686-O0-NEXT: pushl %edi
+; 686-O0-NEXT: pushl %esi
+; 686-O0-NEXT: andl $-8, %esp
+; 686-O0-NEXT: subl $8, %esp
+; 686-O0-NEXT: .cfi_offset %esi, -16
+; 686-O0-NEXT: .cfi_offset %edi, -12
+; 686-O0-NEXT: movl var_13, %eax
+; 686-O0-NEXT: movl %eax, %ecx
+; 686-O0-NEXT: notl %ecx
+; 686-O0-NEXT: testl %eax, %eax
+; 686-O0-NEXT: sete %dl
+; 686-O0-NEXT: movzbl %dl, %eax
+; 686-O0-NEXT: movl var_16, %esi
+; 686-O0-NEXT: movl %ecx, %edi
+; 686-O0-NEXT: xorl %esi, %edi
+; 686-O0-NEXT: andl %edi, %eax
+; 686-O0-NEXT: movb %al, %dl
+; 686-O0-NEXT: movzbl %dl, %eax
+; 686-O0-NEXT: orl %eax, %ecx
+; 686-O0-NEXT: movl %ecx, (%esp)
+; 686-O0-NEXT: movl $0, {{[0-9]+}}(%esp)
+; 686-O0-NEXT: movl var_13, %eax
+; 686-O0-NEXT: notl %eax
+; 686-O0-NEXT: movl %eax, var_46
+; 686-O0-NEXT: leal -8(%ebp), %esp
+; 686-O0-NEXT: popl %esi
+; 686-O0-NEXT: popl %edi
+; 686-O0-NEXT: popl %ebp
+; 686-O0-NEXT: retl
+;
+; 686-LABEL: f3:
+; 686: # %bb.0: # %entry
+; 686-NEXT: pushl %ebp
+; 686-NEXT: .cfi_def_cfa_offset 8
+; 686-NEXT: .cfi_offset %ebp, -8
+; 686-NEXT: movl %esp, %ebp
+; 686-NEXT: .cfi_def_cfa_register %ebp
+; 686-NEXT: andl $-8, %esp
+; 686-NEXT: subl $8, %esp
+; 686-NEXT: movl var_13, %ecx
+; 686-NEXT: xorl %eax, %eax
+; 686-NEXT: testl %ecx, %ecx
+; 686-NEXT: notl %ecx
+; 686-NEXT: sete %al
+; 686-NEXT: movl var_16, %edx
+; 686-NEXT: xorl %ecx, %edx
+; 686-NEXT: andl %eax, %edx
+; 686-NEXT: movzbl %dl, %eax
+; 686-NEXT: orl %ecx, %eax
+; 686-NEXT: movl %eax, (%esp)
+; 686-NEXT: movl $0, {{[0-9]+}}(%esp)
+; 686-NEXT: movl %ecx, var_46
+; 686-NEXT: movl %ebp, %esp
+; 686-NEXT: popl %ebp
+; 686-NEXT: retl
entry:
%a = alloca i64, align 8
%0 = load i32, i32* @var_13, align 4