From 505f2cc468d49868216e66af58ea57bceaa80fc4 Mon Sep 17 00:00:00 2001 From: Igor Breger Date: Sun, 14 Aug 2016 13:58:57 +0000 Subject: [PATCH] [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 --- llvm/lib/Target/X86/X86ISelLowering.cpp | 2 +- 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 69a02dc..489d968 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 12d376e..f836009 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 %AL %AX ; 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 %AL %AX ; CHECK-NEXT: retq -- 2.7.4