@@ -11733,23 +11733,30 @@ SDValue PPCTargetLowering::LowerFP_EXTEND(SDValue Op, SelectionDAG &DAG) const {
1173311733}
1173411734
1173511735static SDValue ConvertCarryValueToCarryFlag(EVT SumType, SDValue Value,
11736- SelectionDAG &DAG) {
11736+ SelectionDAG &DAG,
11737+ const PPCSubtarget &STI) {
1173711738 SDLoc DL(Value);
11738- Value = DAG.getNode(ISD::SELECT, DL, SumType, Value,
11739- DAG.getConstant(1, DL, SumType),
11740- DAG.getConstant(0, DL, SumType));
11739+ if (STI.useCRBits())
11740+ Value = DAG.getNode(ISD::SELECT, DL, SumType, Value,
11741+ DAG.getConstant(1, DL, SumType),
11742+ DAG.getConstant(0, DL, SumType));
11743+ else
11744+ Value = DAG.getZExtOrTrunc(Value, DL, SumType);
1174111745 SDValue Sum = DAG.getNode(PPCISD::ADDC, DL, DAG.getVTList(SumType, MVT::i32),
1174211746 Value, DAG.getAllOnesConstant(DL, SumType));
1174311747 return Sum.getValue(1);
1174411748}
1174511749
1174611750static SDValue ConvertCarryFlagToCarryValue(EVT SumType, SDValue Flag,
11747- EVT CarryType, SelectionDAG &DAG) {
11751+ EVT CarryType, SelectionDAG &DAG,
11752+ const PPCSubtarget &STI) {
1174811753 SDLoc DL(Flag);
1174911754 SDValue Zero = DAG.getConstant(0, DL, SumType);
1175011755 SDValue Carry = DAG.getNode(
1175111756 PPCISD::ADDE, DL, DAG.getVTList(SumType, MVT::i32), Zero, Zero, Flag);
11752- return DAG.getSetCC(DL, CarryType, Carry, Zero, ISD::SETNE);
11757+ if (STI.useCRBits())
11758+ return DAG.getSetCC(DL, CarryType, Carry, Zero, ISD::SETNE);
11759+ return DAG.getZExtOrTrunc(Carry, DL, CarryType);
1175311760}
1175411761
1175511762SDValue PPCTargetLowering::LowerADDSUBO(SDValue Op, SelectionDAG &DAG) const {
@@ -11762,8 +11769,8 @@ SDValue PPCTargetLowering::LowerADDSUBO(SDValue Op, SelectionDAG &DAG) const {
1176211769 Opc = IsAdd ? PPCISD::ADDC : PPCISD::SUBC;
1176311770 SDValue Sum = DAG.getNode(Opc, DL, DAG.getVTList(VT, MVT::i32),
1176411771 N->getOperand(0), N->getOperand(1));
11765- SDValue Carry =
11766- ConvertCarryFlagToCarryValue(VT, Sum.getValue(1), CarryType, DAG);
11772+ SDValue Carry = ConvertCarryFlagToCarryValue(VT, Sum.getValue(1), CarryType,
11773+ DAG, Subtarget );
1176711774 if (!IsAdd)
1176811775 Carry = DAG.getNode(ISD::XOR, DL, CarryType, Carry,
1176911776 DAG.getAllOnesConstant(DL, CarryType));
@@ -11783,10 +11790,11 @@ SDValue PPCTargetLowering::LowerADDSUBO_CARRY(SDValue Op,
1178311790 if (!IsAdd)
1178411791 CarryOp = DAG.getNode(ISD::XOR, DL, CarryOp.getValueType(), CarryOp,
1178511792 DAG.getAllOnesConstant(DL, CarryOp.getValueType()));
11786- CarryOp = ConvertCarryValueToCarryFlag(VT, CarryOp, DAG);
11793+ CarryOp = ConvertCarryValueToCarryFlag(VT, CarryOp, DAG, Subtarget );
1178711794 SDValue Sum = DAG.getNode(Opc, DL, DAG.getVTList(VT, MVT::i32),
1178811795 Op.getOperand(0), Op.getOperand(1), CarryOp);
11789- CarryOp = ConvertCarryFlagToCarryValue(VT, Sum.getValue(1), CarryType, DAG);
11796+ CarryOp = ConvertCarryFlagToCarryValue(VT, Sum.getValue(1), CarryType, DAG,
11797+ Subtarget);
1179011798 if (!IsAdd)
1179111799 CarryOp = DAG.getNode(ISD::XOR, DL, CarryOp.getValueType(), CarryOp,
1179211800 DAG.getAllOnesConstant(DL, CarryOp.getValueType()));
0 commit comments