Skip to content

Commit 991192b

Browse files
authored
[Sparc] Remove custom lowering for ADD[CE] / SUB[CE] (#100861)
The default lowering produces fewer instructions.
1 parent 77f89f1 commit 991192b

File tree

5 files changed

+605
-320
lines changed

5 files changed

+605
-320
lines changed

llvm/lib/Target/Sparc/SparcISelLowering.cpp

Lines changed: 4 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1731,16 +1731,12 @@ SparcTargetLowering::SparcTargetLowering(const TargetMachine &TM,
17311731
setOperationAction(ISD::SELECT_CC, MVT::f64, Custom);
17321732
setOperationAction(ISD::SELECT_CC, MVT::f128, Custom);
17331733

1734-
setOperationAction(ISD::ADDC, MVT::i32, Custom);
1735-
setOperationAction(ISD::ADDE, MVT::i32, Custom);
1736-
setOperationAction(ISD::SUBC, MVT::i32, Custom);
1737-
setOperationAction(ISD::SUBE, MVT::i32, Custom);
1734+
setOperationAction(ISD::ADDC, MVT::i32, Legal);
1735+
setOperationAction(ISD::ADDE, MVT::i32, Legal);
1736+
setOperationAction(ISD::SUBC, MVT::i32, Legal);
1737+
setOperationAction(ISD::SUBE, MVT::i32, Legal);
17381738

17391739
if (Subtarget->is64Bit()) {
1740-
setOperationAction(ISD::ADDC, MVT::i64, Custom);
1741-
setOperationAction(ISD::ADDE, MVT::i64, Custom);
1742-
setOperationAction(ISD::SUBC, MVT::i64, Custom);
1743-
setOperationAction(ISD::SUBE, MVT::i64, Custom);
17441740
setOperationAction(ISD::BITCAST, MVT::f64, Expand);
17451741
setOperationAction(ISD::BITCAST, MVT::i64, Expand);
17461742
setOperationAction(ISD::SELECT, MVT::i64, Expand);
@@ -3102,55 +3098,6 @@ static SDValue LowerFNEGorFABS(SDValue Op, SelectionDAG &DAG, bool isV9) {
31023098
return DstReg128;
31033099
}
31043100

3105-
static SDValue LowerADDC_ADDE_SUBC_SUBE(SDValue Op, SelectionDAG &DAG) {
3106-
3107-
if (Op.getValueType() != MVT::i64)
3108-
return Op;
3109-
3110-
SDLoc dl(Op);
3111-
SDValue Src1 = Op.getOperand(0);
3112-
SDValue Src1Lo = DAG.getNode(ISD::TRUNCATE, dl, MVT::i32, Src1);
3113-
SDValue Src1Hi = DAG.getNode(ISD::SRL, dl, MVT::i64, Src1,
3114-
DAG.getConstant(32, dl, MVT::i64));
3115-
Src1Hi = DAG.getNode(ISD::TRUNCATE, dl, MVT::i32, Src1Hi);
3116-
3117-
SDValue Src2 = Op.getOperand(1);
3118-
SDValue Src2Lo = DAG.getNode(ISD::TRUNCATE, dl, MVT::i32, Src2);
3119-
SDValue Src2Hi = DAG.getNode(ISD::SRL, dl, MVT::i64, Src2,
3120-
DAG.getConstant(32, dl, MVT::i64));
3121-
Src2Hi = DAG.getNode(ISD::TRUNCATE, dl, MVT::i32, Src2Hi);
3122-
3123-
3124-
bool hasChain = false;
3125-
unsigned hiOpc = Op.getOpcode();
3126-
switch (Op.getOpcode()) {
3127-
default: llvm_unreachable("Invalid opcode");
3128-
case ISD::ADDC: hiOpc = ISD::ADDE; break;
3129-
case ISD::ADDE: hasChain = true; break;
3130-
case ISD::SUBC: hiOpc = ISD::SUBE; break;
3131-
case ISD::SUBE: hasChain = true; break;
3132-
}
3133-
SDValue Lo;
3134-
SDVTList VTs = DAG.getVTList(MVT::i32, MVT::Glue);
3135-
if (hasChain) {
3136-
Lo = DAG.getNode(Op.getOpcode(), dl, VTs, Src1Lo, Src2Lo,
3137-
Op.getOperand(2));
3138-
} else {
3139-
Lo = DAG.getNode(Op.getOpcode(), dl, VTs, Src1Lo, Src2Lo);
3140-
}
3141-
SDValue Hi = DAG.getNode(hiOpc, dl, VTs, Src1Hi, Src2Hi, Lo.getValue(1));
3142-
SDValue Carry = Hi.getValue(1);
3143-
3144-
Lo = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i64, Lo);
3145-
Hi = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i64, Hi);
3146-
Hi = DAG.getNode(ISD::SHL, dl, MVT::i64, Hi,
3147-
DAG.getConstant(32, dl, MVT::i64));
3148-
3149-
SDValue Dst = DAG.getNode(ISD::OR, dl, MVT::i64, Hi, Lo);
3150-
SDValue Ops[2] = { Dst, Carry };
3151-
return DAG.getMergeValues(Ops, dl);
3152-
}
3153-
31543101
static SDValue LowerATOMIC_LOAD_STORE(SDValue Op, SelectionDAG &DAG) {
31553102
if (isStrongerThanMonotonic(cast<AtomicSDNode>(Op)->getSuccessOrdering())) {
31563103
// Expand with a fence.
@@ -3225,10 +3172,6 @@ LowerOperation(SDValue Op, SelectionDAG &DAG) const {
32253172
case ISD::FNEG: return LowerFNEGorFABS(Op, DAG, isV9);
32263173
case ISD::FP_EXTEND: return LowerF128_FPEXTEND(Op, DAG, *this);
32273174
case ISD::FP_ROUND: return LowerF128_FPROUND(Op, DAG, *this);
3228-
case ISD::ADDC:
3229-
case ISD::ADDE:
3230-
case ISD::SUBC:
3231-
case ISD::SUBE: return LowerADDC_ADDE_SUBC_SUBE(Op, DAG);
32323175
case ISD::ATOMIC_LOAD:
32333176
case ISD::ATOMIC_STORE: return LowerATOMIC_LOAD_STORE(Op, DAG);
32343177
case ISD::INTRINSIC_WO_CHAIN: return LowerINTRINSIC_WO_CHAIN(Op, DAG);

0 commit comments

Comments
 (0)