diff options
author | Jan Vesely <jan.vesely@rutgers.edu> | 2015-04-13 17:47:15 +0000 |
---|---|---|
committer | Jan Vesely <jan.vesely@rutgers.edu> | 2015-04-13 17:47:15 +0000 |
commit | ffcd96864721a8901412c5c51e08120c103948d4 (patch) | |
tree | e02974e95f5cf2a3d2435ae1a6f675775a4848ae /llvm/lib | |
parent | 6f1fadf989a2ecff98521895b2540140f1aeaada (diff) | |
download | bcm5719-llvm-ffcd96864721a8901412c5c51e08120c103948d4.tar.gz bcm5719-llvm-ffcd96864721a8901412c5c51e08120c103948d4.zip |
Revert revisions r234755, r234759, r234760
Revert "Remove default in fully-covered switch (to fix Clang -Werror -Wcovered-switch-default)"
Revert "R600: Add carry and borrow instructions. Use them to implement UADDO/USUBO"
Revert "LegalizeDAG: Try to use Overflow operations when expanding ADD/SUB"
Using overflow operations fails CodeGen/Generic/2011-07-07-ScheduleDAGCrash.ll
on hexagon, nvptx, and r600. Revert while I investigate.
llvm-svn: 234768
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp | 32 | ||||
-rw-r--r-- | llvm/lib/Target/R600/AMDGPUISelLowering.cpp | 10 | ||||
-rw-r--r-- | llvm/lib/Target/R600/AMDGPUISelLowering.h | 2 | ||||
-rw-r--r-- | llvm/lib/Target/R600/AMDGPUInstrInfo.td | 7 | ||||
-rw-r--r-- | llvm/lib/Target/R600/AMDGPUSubtarget.h | 8 | ||||
-rw-r--r-- | llvm/lib/Target/R600/EvergreenInstructions.td | 3 | ||||
-rw-r--r-- | llvm/lib/Target/R600/R600ISelLowering.cpp | 31 | ||||
-rw-r--r-- | llvm/lib/Target/R600/R600ISelLowering.h | 2 |
8 files changed, 2 insertions, 93 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp index e4fc3ff318f..25e80b9c736 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp @@ -1629,38 +1629,6 @@ void DAGTypeLegalizer::ExpandIntRes_ADDSUB(SDNode *N, return; } - bool hasOVF = - TLI.isOperationLegalOrCustom(N->getOpcode() == ISD::ADD ? - ISD::UADDO : ISD::USUBO, - TLI.getTypeToExpandTo(*DAG.getContext(), NVT)); - if (hasOVF) { - SDVTList VTList = DAG.getVTList(NVT, NVT); - TargetLoweringBase::BooleanContent BoolType = TLI.getBooleanContents(NVT); - int RevOpc; - if (N->getOpcode() == ISD::ADD) { - RevOpc = ISD::SUB; - Lo = DAG.getNode(ISD::UADDO, dl, VTList, LoOps); - Hi = DAG.getNode(ISD::ADD, dl, NVT, makeArrayRef(HiOps, 2)); - } else { - RevOpc = ISD::ADD; - Lo = DAG.getNode(ISD::USUBO, dl, VTList, LoOps); - Hi = DAG.getNode(ISD::SUB, dl, NVT, makeArrayRef(HiOps, 2)); - } - SDValue OVF = Lo.getValue(1); - - switch (BoolType) { - case TargetLoweringBase::UndefinedBooleanContent: - OVF = DAG.getNode(ISD::AND, dl, NVT, DAG.getConstant(1, NVT), OVF); - // Fallthrough - case TargetLoweringBase::ZeroOrOneBooleanContent: - Hi = DAG.getNode(N->getOpcode(), dl, NVT, Hi, OVF); - break; - case TargetLoweringBase::ZeroOrNegativeOneBooleanContent: - Hi = DAG.getNode(RevOpc, dl, NVT, Hi, OVF); - } - return; - } - if (N->getOpcode() == ISD::ADD) { Lo = DAG.getNode(ISD::ADD, dl, NVT, LoOps); Hi = DAG.getNode(ISD::ADD, dl, NVT, makeArrayRef(HiOps, 2)); diff --git a/llvm/lib/Target/R600/AMDGPUISelLowering.cpp b/llvm/lib/Target/R600/AMDGPUISelLowering.cpp index 41ab6c29b1e..7c5235d1507 100644 --- a/llvm/lib/Target/R600/AMDGPUISelLowering.cpp +++ b/llvm/lib/Target/R600/AMDGPUISelLowering.cpp @@ -2763,12 +2763,6 @@ void AMDGPUTargetLowering::computeKnownBitsForTargetNode( KnownZero, KnownOne, DAG, Depth); break; - case AMDGPUISD::CARRY: - case AMDGPUISD::BORROW: { - KnownZero = APInt::getHighBitsSet(32, 31); - break; - } - case AMDGPUISD::BFE_I32: case AMDGPUISD::BFE_U32: { ConstantSDNode *CWidth = dyn_cast<ConstantSDNode>(Op.getOperand(2)); @@ -2811,10 +2805,6 @@ unsigned AMDGPUTargetLowering::ComputeNumSignBitsForTargetNode( return Width ? 32 - (Width->getZExtValue() & 0x1f) : 1; } - case AMDGPUISD::CARRY: - case AMDGPUISD::BORROW: - return 31; - default: return 1; } diff --git a/llvm/lib/Target/R600/AMDGPUISelLowering.h b/llvm/lib/Target/R600/AMDGPUISelLowering.h index d231bcac2ab..6bc6ca5bbc5 100644 --- a/llvm/lib/Target/R600/AMDGPUISelLowering.h +++ b/llvm/lib/Target/R600/AMDGPUISelLowering.h @@ -250,8 +250,6 @@ enum { LDEXP, FP_CLASS, DOT4, - CARRY, - BORROW, BFE_U32, // Extract range of bits with zero extension to 32-bits. BFE_I32, // Extract range of bits with sign extension to 32-bits. BFI, // (src0 & src1) | (~src0 & src2) diff --git a/llvm/lib/Target/R600/AMDGPUInstrInfo.td b/llvm/lib/Target/R600/AMDGPUInstrInfo.td index d72cb1d7f8c..901eb5110f2 100644 --- a/llvm/lib/Target/R600/AMDGPUInstrInfo.td +++ b/llvm/lib/Target/R600/AMDGPUInstrInfo.td @@ -136,13 +136,6 @@ def AMDGPUumin3 : SDNode<"AMDGPUISD::UMIN3", AMDGPUDTIntTernaryOp, [/*SDNPCommutative, SDNPAssociative*/] >; -// out = (src0 + src1 > 0xFFFFFFFF) ? 1 : 0 -def AMDGPUcarry : SDNode<"AMDGPUISD::CARRY", SDTIntBinOp, []>; - -// out = (src1 > src0) ? 1 : 0 -def AMDGPUborrow : SDNode<"AMDGPUISD::BORROW", SDTIntBinOp, []>; - - def AMDGPUcvt_f32_ubyte0 : SDNode<"AMDGPUISD::CVT_F32_UBYTE0", SDTIntToFPOp, []>; def AMDGPUcvt_f32_ubyte1 : SDNode<"AMDGPUISD::CVT_F32_UBYTE1", diff --git a/llvm/lib/Target/R600/AMDGPUSubtarget.h b/llvm/lib/Target/R600/AMDGPUSubtarget.h index 2b7f6f22110..aeb0817553d 100644 --- a/llvm/lib/Target/R600/AMDGPUSubtarget.h +++ b/llvm/lib/Target/R600/AMDGPUSubtarget.h @@ -183,14 +183,6 @@ public: return (getGeneration() >= EVERGREEN); } - bool hasCARRY() const { - return (getGeneration() >= EVERGREEN); - } - - bool hasBORROW() const { - return (getGeneration() >= EVERGREEN); - } - bool IsIRStructurizerEnabled() const { return EnableIRStructurizer; } diff --git a/llvm/lib/Target/R600/EvergreenInstructions.td b/llvm/lib/Target/R600/EvergreenInstructions.td index 7adcd46fe19..55601469009 100644 --- a/llvm/lib/Target/R600/EvergreenInstructions.td +++ b/llvm/lib/Target/R600/EvergreenInstructions.td @@ -335,9 +335,6 @@ defm CUBE_eg : CUBE_Common<0xC0>; def BCNT_INT : R600_1OP_Helper <0xAA, "BCNT_INT", ctpop, VecALU>; -def ADDC_UINT : R600_2OP_Helper <0x52, "ADDC_UINT", AMDGPUcarry>; -def SUBB_UINT : R600_2OP_Helper <0x53, "SUBB_UINT", AMDGPUborrow>; - def FFBH_UINT : R600_1OP_Helper <0xAB, "FFBH_UINT", ctlz_zero_undef, VecALU>; def FFBL_INT : R600_1OP_Helper <0xAC, "FFBL_INT", cttz_zero_undef, VecALU>; diff --git a/llvm/lib/Target/R600/R600ISelLowering.cpp b/llvm/lib/Target/R600/R600ISelLowering.cpp index 8d466b9c891..b6b7067f7e1 100644 --- a/llvm/lib/Target/R600/R600ISelLowering.cpp +++ b/llvm/lib/Target/R600/R600ISelLowering.cpp @@ -91,15 +91,6 @@ R600TargetLowering::R600TargetLowering(TargetMachine &TM, setOperationAction(ISD::SELECT, MVT::v2i32, Expand); setOperationAction(ISD::SELECT, MVT::v4i32, Expand); - // ADD, SUB overflow. These need to be Custom because - // SelectionDAGLegalize::LegalizeOp (LegalizeDAG.cpp) - // turns Legal into expand - if (Subtarget->hasCARRY()) - setOperationAction(ISD::UADDO, MVT::i32, Custom); - - if (Subtarget->hasBORROW()) - setOperationAction(ISD::USUBO, MVT::i32, Custom); - // Expand sign extension of vectors if (!Subtarget->hasBFE()) setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i1, Expand); @@ -172,6 +163,8 @@ R600TargetLowering::R600TargetLowering(TargetMachine &TM, setTargetDAGCombine(ISD::SELECT_CC); setTargetDAGCombine(ISD::INSERT_VECTOR_ELT); + setOperationAction(ISD::SUB, MVT::i64, Expand); + // These should be replaced by UDVIREM, but it does not happen automatically // during Type Legalization setOperationAction(ISD::UDIV, MVT::i64, Custom); @@ -592,8 +585,6 @@ SDValue R600TargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const case ISD::SHL_PARTS: return LowerSHLParts(Op, DAG); case ISD::SRA_PARTS: case ISD::SRL_PARTS: return LowerSRXParts(Op, DAG); - case ISD::UADDO: return LowerUADDSUBO(Op, DAG, ISD::ADD, AMDGPUISD::CARRY); - case ISD::USUBO: return LowerUADDSUBO(Op, DAG, ISD::SUB, AMDGPUISD::BORROW); case ISD::FCOS: case ISD::FSIN: return LowerTrig(Op, DAG); case ISD::SELECT_CC: return LowerSELECT_CC(Op, DAG); @@ -1085,24 +1076,6 @@ SDValue R600TargetLowering::LowerSRXParts(SDValue Op, SelectionDAG &DAG) const { return DAG.getNode(ISD::MERGE_VALUES, DL, DAG.getVTList(VT,VT), Lo, Hi); } -SDValue R600TargetLowering::LowerUADDSUBO(SDValue Op, SelectionDAG &DAG, - unsigned mainop, unsigned ovf) const { - SDLoc DL(Op); - EVT VT = Op.getValueType(); - - SDValue Lo = Op.getOperand(0); - SDValue Hi = Op.getOperand(1); - - SDValue OVF = DAG.getNode(ovf, DL, VT, Lo, Hi); - // Extend sign. - OVF = DAG.getNode(ISD::SIGN_EXTEND_INREG, DL, VT, OVF, - DAG.getValueType(MVT::i1)); - - SDValue Res = DAG.getNode(mainop, DL, VT, Lo, Hi); - - return DAG.getNode(ISD::MERGE_VALUES, DL, DAG.getVTList(VT, VT), Res, OVF); -} - SDValue R600TargetLowering::LowerFPTOUINT(SDValue Op, SelectionDAG &DAG) const { return DAG.getNode( ISD::SETCC, diff --git a/llvm/lib/Target/R600/R600ISelLowering.h b/llvm/lib/Target/R600/R600ISelLowering.h index 5eb63e389e1..c54719574f9 100644 --- a/llvm/lib/Target/R600/R600ISelLowering.h +++ b/llvm/lib/Target/R600/R600ISelLowering.h @@ -63,8 +63,6 @@ private: SDValue LowerTrig(SDValue Op, SelectionDAG &DAG) const; SDValue LowerSHLParts(SDValue Op, SelectionDAG &DAG) const; SDValue LowerSRXParts(SDValue Op, SelectionDAG &DAG) const; - SDValue LowerUADDSUBO(SDValue Op, SelectionDAG &DAG, - unsigned mainop, unsigned ovf) const; SDValue stackPtrToRegIndex(SDValue Ptr, unsigned StackWidth, SelectionDAG &DAG) const; |