@@ -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-
31543101static 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