From: Craig Topper Date: Thu, 15 Mar 2018 17:38:59 +0000 (+0000) Subject: [X86] Simplify the type legality checking for (FM)ADDSUB/SUBADD matching. NFCI X-Git-Tag: llvmorg-7.0.0-rc1~10483 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5a0251fe67f5cf36e11598eb4d5e08f1ad80719a;p=platform%2Fupstream%2Fllvm.git [X86] Simplify the type legality checking for (FM)ADDSUB/SUBADD matching. NFCI Rather than enumerating all specific types, for the DAG combine we can just use TLI::isTypeLegal and an SSE3 check. For the BUILD_VECTOR version we already know the type is legal so we just need to check SSE3. llvm-svn: 327649 --- diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 11cbd5b..8c681cd 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -7515,9 +7515,7 @@ static bool isAddSubOrSubAdd(const BuildVectorSDNode *BV, bool matchSubAdd) { MVT VT = BV->getSimpleValueType(0); - if ((!Subtarget.hasSSE3() || (VT != MVT::v4f32 && VT != MVT::v2f64)) && - (!Subtarget.hasAVX() || (VT != MVT::v8f32 && VT != MVT::v4f64)) && - (!Subtarget.hasAVX512() || (VT != MVT::v16f32 && VT != MVT::v8f64))) + if (!Subtarget.hasSSE3() || !VT.isFloatingPoint()) return false; unsigned NumElts = VT.getVectorNumElements(); @@ -30456,13 +30454,13 @@ static SDValue combineTargetShuffle(SDValue N, SelectionDAG &DAG, /// by this operation to try to flow through the rest of the combiner /// the fact that they're unused. static bool isAddSubOrSubAdd(SDNode *N, const X86Subtarget &Subtarget, - SDValue &Opnd0, SDValue &Opnd1, + SelectionDAG &DAG, SDValue &Opnd0, SDValue &Opnd1, bool matchSubAdd) { EVT VT = N->getValueType(0); - if ((!Subtarget.hasSSE3() || (VT != MVT::v4f32 && VT != MVT::v2f64)) && - (!Subtarget.hasAVX() || (VT != MVT::v8f32 && VT != MVT::v4f64)) && - (!Subtarget.useAVX512Regs() || (VT != MVT::v16f32 && VT != MVT::v8f64))) + const TargetLowering &TLI = DAG.getTargetLoweringInfo(); + if (!Subtarget.hasSSE3() || !TLI.isTypeLegal(VT) || + !VT.getSimpleVT().isFloatingPoint()) return false; // We only handle target-independent shuffles. @@ -30521,7 +30519,7 @@ static SDValue combineShuffleToAddSubOrFMAddSub(SDNode *N, const X86Subtarget &Subtarget, SelectionDAG &DAG) { SDValue Opnd0, Opnd1; - if (!isAddSubOrSubAdd(N, Subtarget, Opnd0, Opnd1, /*matchSubAdd*/false)) + if (!isAddSubOrSubAdd(N, Subtarget, DAG, Opnd0, Opnd1, /*matchSubAdd*/false)) return SDValue(); MVT VT = N->getSimpleValueType(0); @@ -30547,7 +30545,7 @@ static SDValue combineShuffleToFMSubAdd(SDNode *N, const X86Subtarget &Subtarget, SelectionDAG &DAG) { SDValue Opnd0, Opnd1; - if (!isAddSubOrSubAdd(N, Subtarget, Opnd0, Opnd1, /*matchSubAdd*/true)) + if (!isAddSubOrSubAdd(N, Subtarget, DAG, Opnd0, Opnd1, /*matchSubAdd*/true)) return SDValue(); MVT VT = N->getSimpleValueType(0);