diff options
author | Craig Topper <craig.topper@intel.com> | 2018-06-26 01:37:02 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@intel.com> | 2018-06-26 01:37:02 +0000 |
commit | 689e363ff2294f43d2ee35d08777f7a7ea0ce7dd (patch) | |
tree | 9fbdd280f09e5a2adf4917f2477a50bf8224000a /llvm/lib/Target/X86/X86ISelLowering.cpp | |
parent | 9766fd64fba0c3a8a118aee795133a3bab69a0f5 (diff) | |
download | llvm-689e363ff2294f43d2ee35d08777f7a7ea0ce7dd.zip llvm-689e363ff2294f43d2ee35d08777f7a7ea0ce7dd.tar.gz llvm-689e363ff2294f43d2ee35d08777f7a7ea0ce7dd.tar.bz2 |
[X86] Redefine avx512 packed fpclass intrinsics to return a vXi1 mask and implement the mask input argument using an 'and' IR instruction.
This recommits r335562 and 335563 as a single commit.
The frontend will surround the intrinsic with the appropriate marshalling to/from a scalar type to match the sigature of the builtin that software expects.
By exposing the vXi1 type directly in the llvm intrinsic we make it available to optimizers much earlier. This can enable the scalar marshalling code to be optimized away.
llvm-svn: 335568
Diffstat (limited to 'llvm/lib/Target/X86/X86ISelLowering.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 25 |
1 files changed, 6 insertions, 19 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index e063709..660e555 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -20748,23 +20748,11 @@ SDValue X86TargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op, Mask, PassThru, Subtarget, DAG); } case FPCLASS: { - // FPclass intrinsics with mask - SDValue Src1 = Op.getOperand(1); - MVT VT = Src1.getSimpleValueType(); - MVT MaskVT = MVT::getVectorVT(MVT::i1, VT.getVectorNumElements()); - SDValue Imm = Op.getOperand(2); - SDValue Mask = Op.getOperand(3); - MVT BitcastVT = MVT::getVectorVT(MVT::i1, - Mask.getSimpleValueType().getSizeInBits()); - SDValue FPclass = DAG.getNode(IntrData->Opc0, dl, MaskVT, Src1, Imm); - SDValue FPclassMask = getVectorMaskingNode(FPclass, Mask, SDValue(), - Subtarget, DAG); - // Need to fill with zeros to ensure the bitcast will produce zeroes - // for the upper bits in the v2i1/v4i1 case. - SDValue Res = DAG.getNode(ISD::INSERT_SUBVECTOR, dl, BitcastVT, - DAG.getConstant(0, dl, BitcastVT), - FPclassMask, DAG.getIntPtrConstant(0, dl)); - return DAG.getBitcast(Op.getValueType(), Res); + // FPclass intrinsics + SDValue Src1 = Op.getOperand(1); + MVT MaskVT = Op.getSimpleValueType(); + SDValue Imm = Op.getOperand(2); + return DAG.getNode(IntrData->Opc0, dl, MaskVT, Src1, Imm); } case FPCLASSS: { SDValue Src1 = Op.getOperand(1); @@ -20808,8 +20796,7 @@ SDValue X86TargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op, } case CMP_MASK_CC: { - MVT VT = Op.getOperand(1).getSimpleValueType(); - MVT MaskVT = MVT::getVectorVT(MVT::i1, VT.getVectorNumElements()); + MVT MaskVT = Op.getSimpleValueType(); SDValue Cmp; SDValue CC = Op.getOperand(3); CC = DAG.getNode(ISD::TRUNCATE, dl, MVT::i8, CC); |