diff options
| author | Igor Breger <igor.breger@intel.com> | 2016-08-14 13:58:57 +0000 |
|---|---|---|
| committer | Igor Breger <igor.breger@intel.com> | 2016-08-14 13:58:57 +0000 |
| commit | 505f2cc468d49868216e66af58ea57bceaa80fc4 (patch) | |
| tree | 878c0285f6e78228189773c582c099b2b909090d | |
| parent | 0767b40e25f03babf01e6bc6c06aaa45a09fd370 (diff) | |
| download | bcm5719-llvm-505f2cc468d49868216e66af58ea57bceaa80fc4.tar.gz bcm5719-llvm-505f2cc468d49868216e66af58ea57bceaa80fc4.zip | |
[AVX512] Fix VFPCLASSSD/VFPCLASSSS intrinsic lowering. The i1 result should be zero extended according to SPEC.
Differential Revision: http://reviews.llvm.org/D23489
llvm-svn: 278626
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 2 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/avx512dq-intrinsics.ll | 28 |
2 files changed, 5 insertions, 25 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 69a02dc5d9a..489d9687c81 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -17951,7 +17951,7 @@ static SDValue LowerINTRINSIC_WO_CHAIN(SDValue Op, const X86Subtarget &Subtarget SDValue FPclass = DAG.getNode(IntrData->Opc0, dl, MVT::i1, Src1, Imm); SDValue FPclassMask = getScalarMaskingNode(FPclass, Mask, DAG.getTargetConstant(0, dl, MVT::i1), Subtarget, DAG); - return DAG.getNode(ISD::SIGN_EXTEND, dl, MVT::i8, FPclassMask); + return DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i8, FPclassMask); } case CMP_MASK: case CMP_MASK_CC: { diff --git a/llvm/test/CodeGen/X86/avx512dq-intrinsics.ll b/llvm/test/CodeGen/X86/avx512dq-intrinsics.ll index 12d376e8676..f8360098604 100644 --- a/llvm/test/CodeGen/X86/avx512dq-intrinsics.ll +++ b/llvm/test/CodeGen/X86/avx512dq-intrinsics.ll @@ -490,19 +490,9 @@ define i8 @test_int_x86_avx512_mask_fpclass_sd(<2 x double> %x0, i8 %x1) { ; CHECK-NEXT: andl $1, %edi ; CHECK-NEXT: kmovw %edi, %k1 ; CHECK-NEXT: vfpclasssd $2, %xmm0, %k0 {%k1} -; CHECK-NEXT: kmovw %k0, %eax -; CHECK-NEXT: testb %al, %al -; CHECK-NEXT: je LBB28_2 -; CHECK-NEXT: ## BB#1: -; CHECK-NEXT: movb $-1, %al -; CHECK-NEXT: LBB28_2: -; CHECK-NEXT: vfpclasssd $4, %xmm0, %k0 ; CHECK-NEXT: kmovw %k0, %ecx -; CHECK-NEXT: testb %cl, %cl -; CHECK-NEXT: je LBB28_4 -; CHECK-NEXT: ## BB#3: -; CHECK-NEXT: movb $-1, %cl -; CHECK-NEXT: LBB28_4: +; CHECK-NEXT: vfpclasssd $4, %xmm0, %k0 +; CHECK-NEXT: kmovw %k0, %eax ; CHECK-NEXT: addb %cl, %al ; CHECK-NEXT: ## kill: %AL<def> %AL<kill> %AX<kill> ; CHECK-NEXT: retq @@ -520,19 +510,9 @@ define i8 @test_int_x86_avx512_mask_fpclass_ss(<4 x float> %x0, i8 %x1) { ; CHECK-NEXT: andl $1, %edi ; CHECK-NEXT: kmovw %edi, %k1 ; CHECK-NEXT: vfpclassss $4, %xmm0, %k0 {%k1} -; CHECK-NEXT: kmovw %k0, %eax -; CHECK-NEXT: testb %al, %al -; CHECK-NEXT: je LBB29_2 -; CHECK-NEXT: ## BB#1: -; CHECK-NEXT: movb $-1, %al -; CHECK-NEXT: LBB29_2: -; CHECK-NEXT: vfpclassss $4, %xmm0, %k0 ; CHECK-NEXT: kmovw %k0, %ecx -; CHECK-NEXT: testb %cl, %cl -; CHECK-NEXT: je LBB29_4 -; CHECK-NEXT: ## BB#3: -; CHECK-NEXT: movb $-1, %cl -; CHECK-NEXT: LBB29_4: +; CHECK-NEXT: vfpclassss $4, %xmm0, %k0 +; CHECK-NEXT: kmovw %k0, %eax ; CHECK-NEXT: addb %cl, %al ; CHECK-NEXT: ## kill: %AL<def> %AL<kill> %AX<kill> ; CHECK-NEXT: retq |

