From: Craig Topper Date: Mon, 30 Oct 2017 14:50:11 +0000 (+0000) Subject: [X86] Remove AVX512 early out from X86FastISel::X86SelectCmp. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7f36a3ae35384efcbbc552c783b074cc9a363472;p=llvm [X86] Remove AVX512 early out from X86FastISel::X86SelectCmp. This shouldn't be needed anymore since i1 isn't a legal type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@316912 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86FastISel.cpp b/lib/Target/X86/X86FastISel.cpp index 558b37ffe5d..19ee52efe1d 100644 --- a/lib/Target/X86/X86FastISel.cpp +++ b/lib/Target/X86/X86FastISel.cpp @@ -1428,9 +1428,6 @@ bool X86FastISel::X86SelectCmp(const Instruction *I) { if (!isTypeLegal(I->getOperand(0)->getType(), VT)) return false; - if (I->getType()->isIntegerTy(1) && Subtarget->hasAVX512()) - return false; - // Try to optimize or fold the cmp. CmpInst::Predicate Predicate = optimizeCmpPredicate(CI); unsigned ResultReg = 0; diff --git a/test/CodeGen/X86/avx512-fsel.ll b/test/CodeGen/X86/avx512-fsel.ll index 3ded48d5b30..9936ec75a0c 100644 --- a/test/CodeGen/X86/avx512-fsel.ll +++ b/test/CodeGen/X86/avx512-fsel.ll @@ -9,11 +9,12 @@ define i32 @test(float %a, float %b) { ; CHECK: ## BB#0: ; CHECK-NEXT: pushq %rax ; CHECK-NEXT: .cfi_def_cfa_offset 16 -; CHECK-NEXT: vcmpeqss %xmm1, %xmm0, %k0 -; CHECK-NEXT: kmovw %k0, %eax -; CHECK-NEXT: movb %al, %cl -; CHECK-NEXT: xorb $-1, %cl -; CHECK-NEXT: testb $1, %cl +; CHECK-NEXT: vucomiss %xmm1, %xmm0 +; CHECK-NEXT: sete %al +; CHECK-NEXT: setnp %cl +; CHECK-NEXT: andb %cl, %al +; CHECK-NEXT: xorb $-1, %al +; CHECK-NEXT: testb $1, %al ; CHECK-NEXT: jne LBB0_1 ; CHECK-NEXT: jmp LBB0_2 ; CHECK-NEXT: LBB0_1: ## %L_0 diff --git a/test/CodeGen/X86/pr27591.ll b/test/CodeGen/X86/pr27591.ll index b71cb8c4b3a..ec116c22c2c 100644 --- a/test/CodeGen/X86/pr27591.ll +++ b/test/CodeGen/X86/pr27591.ll @@ -7,7 +7,7 @@ define void @test1(i32 %x) #0 { ; CHECK-LABEL: test1: ; CHECK: # BB#0: # %entry ; CHECK-NEXT: pushq %rax -; CHECK-NEXT: testl %edi, %edi +; CHECK-NEXT: cmpl $0, %edi ; CHECK-NEXT: setne %al ; CHECK-NEXT: andb $1, %al ; CHECK-NEXT: movzbl %al, %edi @@ -24,7 +24,7 @@ define void @test2(i32 %x) #0 { ; CHECK-LABEL: test2: ; CHECK: # BB#0: # %entry ; CHECK-NEXT: pushq %rax -; CHECK-NEXT: testl %edi, %edi +; CHECK-NEXT: cmpl $0, %edi ; CHECK-NEXT: setne %al ; CHECK-NEXT: movzbl %al, %edi ; CHECK-NEXT: andl $1, %edi diff --git a/test/CodeGen/X86/pr32241.ll b/test/CodeGen/X86/pr32241.ll index 2ea30404632..f48fef5f7fb 100644 --- a/test/CodeGen/X86/pr32241.ll +++ b/test/CodeGen/X86/pr32241.ll @@ -6,8 +6,8 @@ define i32 @_Z3foov() { ; CHECK: # BB#0: # %entry ; CHECK-NEXT: pushl %esi ; CHECK-NEXT: .cfi_def_cfa_offset 8 -; CHECK-NEXT: subl $24, %esp -; CHECK-NEXT: .cfi_def_cfa_offset 32 +; CHECK-NEXT: subl $16, %esp +; CHECK-NEXT: .cfi_def_cfa_offset 24 ; CHECK-NEXT: .cfi_offset %esi, -8 ; CHECK-NEXT: movb $1, %al ; CHECK-NEXT: movw $10959, {{[0-9]+}}(%esp) # imm = 0x2ACF @@ -29,13 +29,12 @@ define i32 @_Z3foov() { ; CHECK-NEXT: andb $1, %al ; CHECK-NEXT: movzbl %al, %edx ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %esi # 4-byte Reload -; CHECK-NEXT: subl %edx, %esi +; CHECK-NEXT: cmpl %edx, %esi ; CHECK-NEXT: setl %al ; CHECK-NEXT: andb $1, %al ; CHECK-NEXT: movzbl %al, %edx ; CHECK-NEXT: xorl $-1, %edx ; CHECK-NEXT: cmpl $0, %edx -; CHECK-NEXT: movl %esi, {{[0-9]+}}(%esp) # 4-byte Spill ; CHECK-NEXT: movb %cl, {{[0-9]+}}(%esp) # 1-byte Spill ; CHECK-NEXT: jne .LBB0_4 ; CHECK-NEXT: # BB#3: # %lor.rhs4 @@ -50,7 +49,7 @@ define i32 @_Z3foov() { ; CHECK-NEXT: movw %cx, %dx ; CHECK-NEXT: movw %dx, {{[0-9]+}}(%esp) ; CHECK-NEXT: movzwl {{[0-9]+}}(%esp), %eax -; CHECK-NEXT: addl $24, %esp +; CHECK-NEXT: addl $16, %esp ; CHECK-NEXT: popl %esi ; CHECK-NEXT: retl entry: diff --git a/test/CodeGen/X86/pr32284.ll b/test/CodeGen/X86/pr32284.ll index 76e26c769a1..11eb6968709 100644 --- a/test/CodeGen/X86/pr32284.ll +++ b/test/CodeGen/X86/pr32284.ll @@ -9,19 +9,30 @@ define void @foo() { ; X86-O0-LABEL: foo: ; X86-O0: # BB#0: # %entry -; X86-O0-NEXT: movb {{.*}}(%rip), %al -; X86-O0-NEXT: testb %al, %al -; X86-O0-NEXT: setne -{{[0-9]+}}(%rsp) -; X86-O0-NEXT: movzbl {{.*}}(%rip), %ecx -; X86-O0-NEXT: testl %ecx, %ecx -; X86-O0-NEXT: setne %al -; X86-O0-NEXT: movzbl %al, %edx -; X86-O0-NEXT: subl %ecx, %edx -; X86-O0-NEXT: setle %al -; X86-O0-NEXT: andb $1, %al -; X86-O0-NEXT: movzbl %al, %ecx -; X86-O0-NEXT: movl %ecx, -{{[0-9]+}}(%rsp) -; X86-O0-NEXT: movl %edx, -{{[0-9]+}}(%rsp) # 4-byte Spill +; 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: @@ -40,22 +51,26 @@ define void @foo() { ; ; 686-O0-LABEL: foo: ; 686-O0: # BB#0: # %entry -; 686-O0-NEXT: subl $12, %esp -; 686-O0-NEXT: .cfi_def_cfa_offset 16 +; 686-O0-NEXT: subl $8, %esp +; 686-O0-NEXT: .cfi_def_cfa_offset 12 ; 686-O0-NEXT: movb c, %al -; 686-O0-NEXT: testb %al, %al -; 686-O0-NEXT: setne {{[0-9]+}}(%esp) -; 686-O0-NEXT: movzbl c, %ecx -; 686-O0-NEXT: testl %ecx, %ecx +; 686-O0-NEXT: cmpb $0, %al ; 686-O0-NEXT: setne %al -; 686-O0-NEXT: movzbl %al, %edx -; 686-O0-NEXT: subl %ecx, %edx +; 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, {{[0-9]+}}(%esp) -; 686-O0-NEXT: movl %edx, (%esp) # 4-byte Spill -; 686-O0-NEXT: addl $12, %esp +; 686-O0-NEXT: movl %ecx, (%esp) +; 686-O0-NEXT: addl $8, %esp ; 686-O0-NEXT: retl ; ; 686-LABEL: foo: @@ -106,34 +121,38 @@ entry: define void @f1() { ; X86-O0-LABEL: f1: ; X86-O0: # BB#0: # %entry -; X86-O0-NEXT: movslq {{.*}}(%rip), %rax -; X86-O0-NEXT: movq %rax, %rcx -; X86-O0-NEXT: subq $-1, %rcx +; 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: movabsq $-8381627093, %rsi # imm = 0xFFFFFFFE0C6A852B -; X86-O0-NEXT: movq %rax, %rdi -; X86-O0-NEXT: subq %rsi, %rdi -; X86-O0-NEXT: setne -{{[0-9]+}}(%rsp) -; X86-O0-NEXT: movl %eax, %r8d -; X86-O0-NEXT: subl $-1, %r8d -; X86-O0-NEXT: sete %r9b -; X86-O0-NEXT: movzbl %r9b, %r10d -; X86-O0-NEXT: movl %r10d, %esi -; X86-O0-NEXT: addq $7093, %rax # imm = 0x1BB5 -; X86-O0-NEXT: subq %rax, %rsi -; X86-O0-NEXT: setg %r9b -; X86-O0-NEXT: movzbl %r9b, %r10d -; X86-O0-NEXT: movl %r10d, %eax -; X86-O0-NEXT: movq %rax, {{.*}}(%rip) ; X86-O0-NEXT: xorb $-1, %dl ; X86-O0-NEXT: andb $1, %dl -; X86-O0-NEXT: movzbl %dl, %r10d -; X86-O0-NEXT: movl %r10d, %eax +; X86-O0-NEXT: movzbl %dl, %esi +; X86-O0-NEXT: movl %esi, %eax ; X86-O0-NEXT: movq %rax, _ZN8struct_210member_2_0E -; X86-O0-NEXT: movq %rsi, -{{[0-9]+}}(%rsp) # 8-byte Spill -; X86-O0-NEXT: movq %rcx, -{{[0-9]+}}(%rsp) # 8-byte Spill -; X86-O0-NEXT: movl %r8d, -{{[0-9]+}}(%rsp) # 4-byte Spill -; X86-O0-NEXT: movq %rdi, -{{[0-9]+}}(%rsp) # 8-byte Spill ; X86-O0-NEXT: retq ; ; X64-LABEL: f1: @@ -296,25 +315,29 @@ define void @f2() { ; X86-O0-LABEL: f2: ; X86-O0: # BB#0: # %entry ; X86-O0-NEXT: # implicit-def: %RAX -; X86-O0-NEXT: movzbl {{.*}}(%rip), %ecx -; X86-O0-NEXT: testl %ecx, %ecx -; X86-O0-NEXT: sete %dl -; X86-O0-NEXT: movzbl %dl, %esi -; X86-O0-NEXT: movl %ecx, %edi -; X86-O0-NEXT: xorl %esi, %edi -; X86-O0-NEXT: movw %di, %r8w -; X86-O0-NEXT: movw %r8w, -{{[0-9]+}}(%rsp) -; X86-O0-NEXT: movb %cl, %dl -; X86-O0-NEXT: testb %dl, %dl -; X86-O0-NEXT: sete %dl +; 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: subl %ecx, %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, %r8w -; X86-O0-NEXT: movw %r8w, (%rax) -; X86-O0-NEXT: movl %esi, -{{[0-9]+}}(%rsp) # 4-byte Spill +; X86-O0-NEXT: movw %cx, %di +; X86-O0-NEXT: movw %di, (%rax) ; X86-O0-NEXT: retq ; ; X64-LABEL: f2: @@ -336,42 +359,41 @@ define void @f2() { ; ; 686-O0-LABEL: f2: ; 686-O0: # BB#0: # %entry -; 686-O0-NEXT: pushl %ebx -; 686-O0-NEXT: .cfi_def_cfa_offset 8 ; 686-O0-NEXT: pushl %edi -; 686-O0-NEXT: .cfi_def_cfa_offset 12 +; 686-O0-NEXT: .cfi_def_cfa_offset 8 ; 686-O0-NEXT: pushl %esi -; 686-O0-NEXT: .cfi_def_cfa_offset 16 -; 686-O0-NEXT: subl $8, %esp -; 686-O0-NEXT: .cfi_def_cfa_offset 24 -; 686-O0-NEXT: .cfi_offset %esi, -16 -; 686-O0-NEXT: .cfi_offset %edi, -12 -; 686-O0-NEXT: .cfi_offset %ebx, -8 +; 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: testl %ecx, %ecx -; 686-O0-NEXT: sete %dl -; 686-O0-NEXT: movzbl %dl, %esi -; 686-O0-NEXT: movl %ecx, %edi -; 686-O0-NEXT: xorl %esi, %edi -; 686-O0-NEXT: movw %di, %bx -; 686-O0-NEXT: movw %bx, {{[0-9]+}}(%esp) -; 686-O0-NEXT: movl %ecx, %edx -; 686-O0-NEXT: # kill: %DL %DL %EDX -; 686-O0-NEXT: testb %dl, %dl -; 686-O0-NEXT: sete %dl +; 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: subl %ecx, %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, %bx -; 686-O0-NEXT: movw %bx, (%eax) -; 686-O0-NEXT: movl %esi, (%esp) # 4-byte Spill -; 686-O0-NEXT: addl $8, %esp +; 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: popl %ebx ; 686-O0-NEXT: retl ; ; 686-LABEL: f2: @@ -426,34 +448,37 @@ entry: define void @f3() #0 { ; X86-O0-LABEL: f3: ; X86-O0: # BB#0: # %entry -; X86-O0-NEXT: movl {{.*}}(%rip), %eax +; 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: movl $4294967295, %eax # imm = 0xFFFFFFFF -; X86-O0-NEXT: movl %eax, %edx -; X86-O0-NEXT: movq %rcx, %rsi -; X86-O0-NEXT: xorq %rdx, %rsi -; X86-O0-NEXT: movl %esi, %eax -; X86-O0-NEXT: testq %rcx, %rcx -; X86-O0-NEXT: sete %dil -; X86-O0-NEXT: movzbl %dil, %r8d -; X86-O0-NEXT: movl %r8d, %edx -; X86-O0-NEXT: movl {{.*}}(%rip), %r8d -; X86-O0-NEXT: xorl %r8d, %eax -; X86-O0-NEXT: movl %eax, %r9d -; X86-O0-NEXT: andq %r9, %rdx -; X86-O0-NEXT: movq %rsi, %r9 -; X86-O0-NEXT: orq %rdx, %r9 -; X86-O0-NEXT: movq %r9, -{{[0-9]+}}(%rsp) -; X86-O0-NEXT: movl %ecx, %eax -; X86-O0-NEXT: testl %eax, %eax -; X86-O0-NEXT: setne %dil -; X86-O0-NEXT: xorb $-1, %dil -; X86-O0-NEXT: andb $1, %dil -; X86-O0-NEXT: movzbl %dil, %eax +; 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: andq $0, %rcx -; X86-O0-NEXT: orq %rcx, %rsi -; X86-O0-NEXT: movl %esi, %eax +; 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 ;