Skip to content
This repository was archived by the owner on Mar 28, 2020. It is now read-only.

Commit 10c072c

Browse files
author
Igor Breger
committed
[AVX512] Fix intrinsic cmp{sd|ss} lowering.
Differential Revision: http://reviews.llvm.org/D20615 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270843 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent f653fb8 commit 10c072c

File tree

2 files changed

+12
-16
lines changed

2 files changed

+12
-16
lines changed

lib/Target/X86/X86ISelLowering.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17455,9 +17455,7 @@ static SDValue LowerINTRINSIC_WO_CHAIN(SDValue Op, const X86Subtarget &Subtarget
1745517455
MVT::i1),
1745617456
Subtarget, DAG);
1745717457

17458-
return DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, MVT::i8,
17459-
DAG.getNode(ISD::ANY_EXTEND, dl, MVT::i8, CmpMask),
17460-
DAG.getValueType(MVT::i1));
17458+
return DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i8, CmpMask);
1746117459
}
1746217460
case COMI: { // Comparison intrinsics
1746317461
ISD::CondCode CC = (ISD::CondCode)IntrData->Opc1;

test/CodeGen/X86/avx512-intrinsics.ll

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5659,8 +5659,7 @@ define i8@test_int_x86_avx512_mask_cmp_sd(<2 x double> %x0, <2 x double> %x1, i8
56595659
; CHECK-NEXT: kmovw %edi, %k1
56605660
; CHECK-NEXT: vcmpnltsd {sae}, %xmm1, %xmm0, %k0 {%k1}
56615661
; CHECK-NEXT: kmovw %k0, %eax
5662-
; CHECK-NEXT: shlb $7, %al
5663-
; CHECK-NEXT: sarb $7, %al
5662+
; CHECK-NEXT: andl $1, %eax
56645663
; CHECK-NEXT: retq
56655664

56665665
%res4 = call i8 @llvm.x86.avx512.mask.cmp.sd(<2 x double> %x0, <2 x double> %x1, i32 5, i8 %x3, i32 8)
@@ -5681,8 +5680,7 @@ define i8@test_int_x86_avx512_mask_cmp_sd_all(<2 x double> %x0, <2 x double> %x1
56815680
; CHECK-NEXT: kandw %k2, %k1, %k1
56825681
; CHECK-NEXT: korw %k1, %k0, %k0
56835682
; CHECK-NEXT: kmovw %k0, %eax
5684-
; CHECK-NEXT: shlb $7, %al
5685-
; CHECK-NEXT: sarb $7, %al
5683+
; CHECK-NEXT: andl $1, %eax
56865684
; CHECK-NEXT: retq
56875685

56885686
%res1 = call i8 @llvm.x86.avx512.mask.cmp.sd(<2 x double> %x0, <2 x double> %x1, i32 2, i8 -1, i32 4)
@@ -5705,8 +5703,7 @@ define i8@test_int_x86_avx512_mask_cmp_ss(<4 x float> %x0, <4 x float> %x1, i8 %
57055703
; CHECK-NEXT: kmovw %edi, %k1
57065704
; CHECK-NEXT: vcmpunordss %xmm1, %xmm0, %k0 {%k1}
57075705
; CHECK-NEXT: kmovw %k0, %eax
5708-
; CHECK-NEXT: shlb $7, %al
5709-
; CHECK-NEXT: sarb $7, %al
5706+
; CHECK-NEXT: andl $1, %eax
57105707
; CHECK-NEXT: retq
57115708

57125709
%res2 = call i8 @llvm.x86.avx512.mask.cmp.ss(<4 x float> %x0, <4 x float> %x1, i32 3, i8 %x3, i32 4)
@@ -5719,15 +5716,16 @@ define i8@test_int_x86_avx512_mask_cmp_ss_all(<4 x float> %x0, <4 x float> %x1,
57195716
; CHECK: ## BB#0:
57205717
; CHECK-NEXT: vcmpless %xmm1, %xmm0, %k1
57215718
; CHECK-NEXT: vcmpunordss {sae}, %xmm1, %xmm0, %k0 {%k1}
5722-
; CHECK-NEXT: vcmpneqss %xmm1, %xmm0, %k1
5723-
; CHECK-NEXT: vcmpnltss {sae}, %xmm1, %xmm0, %k1 {%k1}
57245719
; CHECK-NEXT: andl $1, %edi
5725-
; CHECK-NEXT: kmovw %edi, %k2
5726-
; CHECK-NEXT: kandw %k2, %k1, %k1
5727-
; CHECK-NEXT: kandw %k1, %k0, %k0
5720+
; CHECK-NEXT: kmovw %edi, %k1
5721+
; CHECK-NEXT: vcmpneqss %xmm1, %xmm0, %k2 {%k1}
5722+
; CHECK-NEXT: kmovw %k2, %ecx
5723+
; CHECK-NEXT: vcmpnltss {sae}, %xmm1, %xmm0, %k1 {%k1}
5724+
; CHECK-NEXT: kmovw %k1, %edx
5725+
; CHECK-NEXT: andl $1, %edx
57285726
; CHECK-NEXT: kmovw %k0, %eax
5729-
; CHECK-NEXT: shlb $7, %al
5730-
; CHECK-NEXT: sarb $7, %al
5727+
; CHECK-NEXT: andb %cl, %al
5728+
; CHECK-NEXT: andb %dl, %al
57315729
; CHECK-NEXT: retq
57325730
%res1 = call i8 @llvm.x86.avx512.mask.cmp.ss(<4 x float> %x0, <4 x float> %x1, i32 2, i8 -1, i32 4)
57335731
%res2 = call i8 @llvm.x86.avx512.mask.cmp.ss(<4 x float> %x0, <4 x float> %x1, i32 3, i8 -1, i32 8)

0 commit comments

Comments
 (0)