@@ -1731,16 +1731,12 @@ SparcTargetLowering::SparcTargetLowering(const TargetMachine &TM,
1731
1731
setOperationAction (ISD::SELECT_CC, MVT::f64, Custom);
1732
1732
setOperationAction (ISD::SELECT_CC, MVT::f128, Custom);
1733
1733
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 );
1738
1738
1739
1739
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);
1744
1740
setOperationAction (ISD::BITCAST, MVT::f64, Expand);
1745
1741
setOperationAction (ISD::BITCAST, MVT::i64, Expand);
1746
1742
setOperationAction (ISD::SELECT, MVT::i64, Expand);
@@ -3102,55 +3098,6 @@ static SDValue LowerFNEGorFABS(SDValue Op, SelectionDAG &DAG, bool isV9) {
3102
3098
return DstReg128;
3103
3099
}
3104
3100
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
-
3154
3101
static SDValue LowerATOMIC_LOAD_STORE (SDValue Op, SelectionDAG &DAG) {
3155
3102
if (isStrongerThanMonotonic (cast<AtomicSDNode>(Op)->getSuccessOrdering ())) {
3156
3103
// Expand with a fence.
@@ -3225,10 +3172,6 @@ LowerOperation(SDValue Op, SelectionDAG &DAG) const {
3225
3172
case ISD::FNEG: return LowerFNEGorFABS (Op, DAG, isV9);
3226
3173
case ISD::FP_EXTEND: return LowerF128_FPEXTEND (Op, DAG, *this );
3227
3174
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);
3232
3175
case ISD::ATOMIC_LOAD:
3233
3176
case ISD::ATOMIC_STORE: return LowerATOMIC_LOAD_STORE (Op, DAG);
3234
3177
case ISD::INTRINSIC_WO_CHAIN: return LowerINTRINSIC_WO_CHAIN (Op, DAG);
0 commit comments