diff options
author | Evan Lojewski <github@meklort.com> | 2019-05-05 19:24:45 -0600 |
---|---|---|
committer | Evan Lojewski <github@meklort.com> | 2020-03-29 15:59:43 -0600 |
commit | b989c6fc93d82018b43de4a1bda74e4b58d52899 (patch) | |
tree | 8b240435de1a875c5b3567e27ef47c9a89da7fb3 | |
parent | d32170dbd5b0d54436537b6b75beaf44324e0c28 (diff) | |
download | bcm5719-llvm-meklort-10.0.0.tar.gz bcm5719-llvm-meklort-10.0.0.zip |
Add a quick hack so clang does not use mul type instructions on mips.meklort-10.0.0
-rw-r--r-- | llvm/lib/Target/Mips/MipsISelLowering.cpp | 51 |
1 files changed, 36 insertions, 15 deletions
diff --git a/llvm/lib/Target/Mips/MipsISelLowering.cpp b/llvm/lib/Target/Mips/MipsISelLowering.cpp index 46b1f35a6fc..8f7683ba1af 100644 --- a/llvm/lib/Target/Mips/MipsISelLowering.cpp +++ b/llvm/lib/Target/Mips/MipsISelLowering.cpp @@ -204,8 +204,8 @@ const char *MipsTargetLowering::getTargetNodeName(unsigned Opcode) const { case MipsISD::MFHI: return "MipsISD::MFHI"; case MipsISD::MFLO: return "MipsISD::MFLO"; case MipsISD::MTLOHI: return "MipsISD::MTLOHI"; - case MipsISD::Mult: return "MipsISD::Mult"; - case MipsISD::Multu: return "MipsISD::Multu"; +// case MipsISD::Mult: return "MipsISD::Mult"; +// case MipsISD::Multu: return "MipsISD::Multu"; case MipsISD::MAdd: return "MipsISD::MAdd"; case MipsISD::MAddu: return "MipsISD::MAddu"; case MipsISD::MSub: return "MipsISD::MSub"; @@ -341,6 +341,26 @@ MipsTargetLowering::MipsTargetLowering(const MipsTargetMachine &TM, // which is used implicitly by brcond and select operations. AddPromotedToType(ISD::SETCC, MVT::i1, MVT::i32); + setOperationAction(MipsISD::LWL, MVT::i8, Expand); + setOperationAction(MipsISD::LWL, MVT::i16, Expand); + setOperationAction(MipsISD::LWL, MVT::i32, Expand); + + setOperationAction(ISD::MUL, MVT::i8, Expand); + setOperationAction(ISD::MUL, MVT::i16, Expand); + setOperationAction(ISD::MUL, MVT::i32, Expand); + setOperationAction(ISD::MUL, MVT::i64, Expand); + + + setOperationAction(ISD::SMUL_LOHI, MVT::i8, Expand); + setOperationAction(ISD::SMUL_LOHI, MVT::i16, Expand); + setOperationAction(ISD::SMUL_LOHI, MVT::i32, Expand); + setOperationAction(ISD::SMUL_LOHI, MVT::i64, Expand); + setOperationAction(ISD::UMUL_LOHI, MVT::i8, Expand); + setOperationAction(ISD::UMUL_LOHI, MVT::i16, Expand); + setOperationAction(ISD::UMUL_LOHI, MVT::i32, Expand); + setOperationAction(ISD::UMUL_LOHI, MVT::i64, Expand); + + // Mips Custom Operations setOperationAction(ISD::BR_JT, MVT::Other, Expand); setOperationAction(ISD::GlobalAddress, MVT::i32, Custom); @@ -661,16 +681,16 @@ static SDValue createFPCmp(SelectionDAG &DAG, const SDValue &Op) { DAG.getConstant(condCodeToFCC(CC), DL, MVT::i32)); } -// Creates and returns a CMovFPT/F node. -static SDValue createCMovFP(SelectionDAG &DAG, SDValue Cond, SDValue True, - SDValue False, const SDLoc &DL) { - ConstantSDNode *CC = cast<ConstantSDNode>(Cond.getOperand(2)); - bool invert = invertFPCondCodeUser((Mips::CondCode)CC->getSExtValue()); - SDValue FCC0 = DAG.getRegister(Mips::FCC0, MVT::i32); +// // Creates and returns a CMovFPT/F node. +// static SDValue createCMovFP(SelectionDAG &DAG, SDValue Cond, SDValue True, +// SDValue False, const SDLoc &DL) { +// ConstantSDNode *CC = cast<ConstantSDNode>(Cond.getOperand(2)); +// bool invert = invertFPCondCodeUser((Mips::CondCode)CC->getSExtValue()); +// SDValue FCC0 = DAG.getRegister(Mips::FCC0, MVT::i32); - return DAG.getNode((invert ? MipsISD::CMovFP_F : MipsISD::CMovFP_T), DL, - True.getValueType(), True, FCC0, False, Cond); -} +// return DAG.getNode((invert ? MipsISD::CMovFP_F : MipsISD::CMovFP_T), DL, +// True.getValueType(), True, FCC0, False, Cond); +// } static SDValue performSELECTCombine(SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, @@ -2046,11 +2066,11 @@ lowerSELECT(SDValue Op, SelectionDAG &DAG) const SDValue Cond = createFPCmp(DAG, Op.getOperand(0)); // Return if flag is not set by a floating point comparison. - if (Cond.getOpcode() != MipsISD::FPCmp) + // if (Cond.getOpcode() != MipsISD::FPCmp) return Op; - return createCMovFP(DAG, Cond, Op.getOperand(1), Op.getOperand(2), - SDLoc(Op)); + // return createCMovFP(DAG, Cond, Op.getOperand(1), Op.getOperand(2), + // SDLoc(Op)); } SDValue MipsTargetLowering::lowerSETCC(SDValue Op, SelectionDAG &DAG) const { @@ -2064,7 +2084,8 @@ SDValue MipsTargetLowering::lowerSETCC(SDValue Op, SelectionDAG &DAG) const { SDValue True = DAG.getConstant(1, DL, MVT::i32); SDValue False = DAG.getConstant(0, DL, MVT::i32); - return createCMovFP(DAG, Cond, True, False, DL); + // return createCMovFP(DAG, Cond, True, False, DL); + return Op; } SDValue MipsTargetLowering::lowerGlobalAddress(SDValue Op, |