diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2023-12-18 20:30:12 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2024-04-19 21:12:03 +0000 | 
| commit | c9157d925c489f07ba9c0b2ce47e5149b75969a5 (patch) | |
| tree | 08bc4a3d9cad3f9ebffa558ddf140b9d9257b219 /contrib/llvm-project/llvm/lib/Target/Sparc/SparcISelLowering.cpp | |
| parent | 2a66844f606a35d68ad8a8061f4bea204274b3bc (diff) | |
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Target/Sparc/SparcISelLowering.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/Target/Sparc/SparcISelLowering.cpp | 24 | 
1 files changed, 15 insertions, 9 deletions
diff --git a/contrib/llvm-project/llvm/lib/Target/Sparc/SparcISelLowering.cpp b/contrib/llvm-project/llvm/lib/Target/Sparc/SparcISelLowering.cpp index 0aa3c875a14f..4f0801479211 100644 --- a/contrib/llvm-project/llvm/lib/Target/Sparc/SparcISelLowering.cpp +++ b/contrib/llvm-project/llvm/lib/Target/Sparc/SparcISelLowering.cpp @@ -1748,6 +1748,7 @@ SparcTargetLowering::SparcTargetLowering(const TargetMachine &TM,    if (!Subtarget->is64Bit()) {      // These libcalls are not available in 32-bit.      setLibcallName(RTLIB::MULO_I64, nullptr); +    setLibcallName(RTLIB::MUL_I128, nullptr);      setLibcallName(RTLIB::SHL_I128, nullptr);      setLibcallName(RTLIB::SRL_I128, nullptr);      setLibcallName(RTLIB::SRA_I128, nullptr); @@ -2603,9 +2604,8 @@ static SDValue LowerBR_CC(SDValue Op, SelectionDAG &DAG,    if (LHS.getValueType().isInteger()) {      // On V9 processors running in 64-bit mode, if CC compares two `i64`s      // and the RHS is zero we might be able to use a specialized branch. -    const ConstantSDNode *RHSC = dyn_cast<ConstantSDNode>(RHS); -    if (is64Bit && isV9 && LHS.getValueType() == MVT::i64 && RHSC && -        RHSC->isZero() && !ISD::isUnsignedIntSetCC(CC)) +    if (is64Bit && isV9 && LHS.getValueType() == MVT::i64 && +        isNullConstant(RHS) && !ISD::isUnsignedIntSetCC(CC))        return DAG.getNode(SPISD::BR_REG, dl, MVT::Other, Chain, Dest,                           DAG.getConstant(intCondCCodeToRcond(CC), dl, MVT::i32),                           LHS); @@ -3427,15 +3427,13 @@ getSingleConstraintMatchWeight(AsmOperandInfo &info,  /// LowerAsmOperandForConstraint - Lower the specified operand into the Ops  /// vector.  If it is invalid, don't add anything to Ops. -void SparcTargetLowering:: -LowerAsmOperandForConstraint(SDValue Op, -                             std::string &Constraint, -                             std::vector<SDValue> &Ops, -                             SelectionDAG &DAG) const { +void SparcTargetLowering::LowerAsmOperandForConstraint( +    SDValue Op, StringRef Constraint, std::vector<SDValue> &Ops, +    SelectionDAG &DAG) const {    SDValue Result;    // Only support length 1 constraints for now. -  if (Constraint.length() > 1) +  if (Constraint.size() > 1)      return;    char ConstraintLetter = Constraint[0]; @@ -3643,3 +3641,11 @@ void SparcTargetLowering::insertSSPDeclarations(Module &M) const {    if (!Subtarget->isTargetLinux())      return TargetLowering::insertSSPDeclarations(M);  } + +void SparcTargetLowering::AdjustInstrPostInstrSelection(MachineInstr &MI, +                                                        SDNode *Node) const { +  assert(MI.getOpcode() == SP::SUBCCrr || MI.getOpcode() == SP::SUBCCri); +  // If the result is dead, replace it with %g0. +  if (!Node->hasAnyUseOfValue(0)) +    MI.getOperand(0).setReg(SP::G0); +}  | 
