diff options
author | Eric Christopher <echristo@gmail.com> | 2016-03-14 23:59:57 +0000 |
---|---|---|
committer | Eric Christopher <echristo@gmail.com> | 2016-03-14 23:59:57 +0000 |
commit | da8b3f1914e0cc4eb25af376583a23e660718115 (patch) | |
tree | 51d9243b87c6a48708793fbd3651609d1e3cadeb /llvm/lib | |
parent | abde7dfbe9816c59795e4b94f1d1a4d7c60700f2 (diff) | |
download | bcm5719-llvm-da8b3f1914e0cc4eb25af376583a23e660718115.tar.gz bcm5719-llvm-da8b3f1914e0cc4eb25af376583a23e660718115.zip |
Temporarily Revert "[X86][SSE] Simplify vector LOAD + EXTEND on
pre-SSE41 hardware" as it seems to be causing crashes during code
generation in halide. PR forthcoming.
This reverts commit r263303.
llvm-svn: 263512
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h | 1 | ||||
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp | 39 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 4 |
3 files changed, 1 insertions, 43 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h index c79505683e8..8ba19f76797 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h @@ -653,7 +653,6 @@ private: void SplitVecRes_UnaryOp(SDNode *N, SDValue &Lo, SDValue &Hi); void SplitVecRes_ExtendOp(SDNode *N, SDValue &Lo, SDValue &Hi); void SplitVecRes_InregOp(SDNode *N, SDValue &Lo, SDValue &Hi); - void SplitVecRes_ExtVecInRegOp(SDNode *N, SDValue &Lo, SDValue &Hi); void SplitVecRes_BITCAST(SDNode *N, SDValue &Lo, SDValue &Hi); void SplitVecRes_BUILD_VECTOR(SDNode *N, SDValue &Lo, SDValue &Hi); diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp index 0d6d9987211..452f0fdbcd9 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp @@ -621,12 +621,6 @@ void DAGTypeLegalizer::SplitVectorResult(SDNode *N, unsigned ResNo) { SplitVecRes_VECTOR_SHUFFLE(cast<ShuffleVectorSDNode>(N), Lo, Hi); break; - case ISD::ANY_EXTEND_VECTOR_INREG: - case ISD::SIGN_EXTEND_VECTOR_INREG: - case ISD::ZERO_EXTEND_VECTOR_INREG: - SplitVecRes_ExtVecInRegOp(N, Lo, Hi); - break; - case ISD::BITREVERSE: case ISD::BSWAP: case ISD::CONVERT_RNDSAT: @@ -923,39 +917,6 @@ void DAGTypeLegalizer::SplitVecRes_InregOp(SDNode *N, SDValue &Lo, DAG.getValueType(HiVT)); } -void DAGTypeLegalizer::SplitVecRes_ExtVecInRegOp(SDNode *N, SDValue &Lo, - SDValue &Hi) { - unsigned Opcode = N->getOpcode(); - SDValue N0 = N->getOperand(0); - - SDLoc dl(N); - SDValue InLo, InHi; - GetSplitVector(N0, InLo, InHi); - EVT InLoVT = InLo.getValueType(); - unsigned InNumElements = InLoVT.getVectorNumElements(); - - EVT OutLoVT, OutHiVT; - std::tie(OutLoVT, OutHiVT) = DAG.GetSplitDestVTs(N->getValueType(0)); - unsigned OutNumElements = OutLoVT.getVectorNumElements(); - assert((2 * OutNumElements) <= InNumElements && - "Illegal extend vector in reg split"); - - // *_EXTEND_VECTOR_INREG instructions extend the lowest elements of the - // input vector (i.e. we only use InLo): - // OutLo will extend the first OutNumElements from InLo. - // OutHi will extend the next OutNumElements from InLo. - - // Shuffle the elements from InLo for OutHi into the bottom elements to - // create a 'fake' InHi. - SmallVector<int, 8> SplitHi(InNumElements, -1); - for (unsigned i = 0; i != OutNumElements; ++i) - SplitHi[i] = i + OutNumElements; - InHi = DAG.getVectorShuffle(InLoVT, dl, InLo, DAG.getUNDEF(InLoVT), SplitHi); - - Lo = DAG.getNode(Opcode, dl, OutLoVT, InLo); - Hi = DAG.getNode(Opcode, dl, OutHiVT, InHi); -} - void DAGTypeLegalizer::SplitVecRes_INSERT_VECTOR_ELT(SDNode *N, SDValue &Lo, SDValue &Hi) { SDValue Vec = N->getOperand(0); diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index e08e26e0ecd..bf4cc0fb392 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -28585,9 +28585,7 @@ static SDValue combineToExtendVectorInReg(SDNode *N, SelectionDAG &DAG, // If target-size is 128-bits (or 256-bits on AVX2 target), then convert to // ISD::*_EXTEND_VECTOR_INREG which ensures lowering to X86ISD::V*EXT. - // Also use this if we don't have SSE41 to allow the legalizer do its job. - if (!Subtarget.hasSSE41() || VT.is128BitVector() || - (VT.is256BitVector() && Subtarget.hasInt256())) { + if (VT.is128BitVector() || (VT.is256BitVector() && Subtarget.hasInt256())) { SDValue ExOp = ExtendVecSize(DL, N0, VT.getSizeInBits()); return Opcode == ISD::SIGN_EXTEND ? DAG.getSignExtendVectorInReg(ExOp, DL, VT) |