@@ -11733,23 +11733,30 @@ SDValue PPCTargetLowering::LowerFP_EXTEND(SDValue Op, SelectionDAG &DAG) const {
11733
11733
}
11734
11734
11735
11735
static SDValue ConvertCarryValueToCarryFlag(EVT SumType, SDValue Value,
11736
- SelectionDAG &DAG) {
11736
+ SelectionDAG &DAG,
11737
+ const PPCSubtarget &STI) {
11737
11738
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);
11741
11745
SDValue Sum = DAG.getNode(PPCISD::ADDC, DL, DAG.getVTList(SumType, MVT::i32),
11742
11746
Value, DAG.getAllOnesConstant(DL, SumType));
11743
11747
return Sum.getValue(1);
11744
11748
}
11745
11749
11746
11750
static SDValue ConvertCarryFlagToCarryValue(EVT SumType, SDValue Flag,
11747
- EVT CarryType, SelectionDAG &DAG) {
11751
+ EVT CarryType, SelectionDAG &DAG,
11752
+ const PPCSubtarget &STI) {
11748
11753
SDLoc DL(Flag);
11749
11754
SDValue Zero = DAG.getConstant(0, DL, SumType);
11750
11755
SDValue Carry = DAG.getNode(
11751
11756
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);
11753
11760
}
11754
11761
11755
11762
SDValue PPCTargetLowering::LowerADDSUBO(SDValue Op, SelectionDAG &DAG) const {
@@ -11762,8 +11769,8 @@ SDValue PPCTargetLowering::LowerADDSUBO(SDValue Op, SelectionDAG &DAG) const {
11762
11769
Opc = IsAdd ? PPCISD::ADDC : PPCISD::SUBC;
11763
11770
SDValue Sum = DAG.getNode(Opc, DL, DAG.getVTList(VT, MVT::i32),
11764
11771
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 );
11767
11774
if (!IsAdd)
11768
11775
Carry = DAG.getNode(ISD::XOR, DL, CarryType, Carry,
11769
11776
DAG.getAllOnesConstant(DL, CarryType));
@@ -11783,10 +11790,11 @@ SDValue PPCTargetLowering::LowerADDSUBO_CARRY(SDValue Op,
11783
11790
if (!IsAdd)
11784
11791
CarryOp = DAG.getNode(ISD::XOR, DL, CarryOp.getValueType(), CarryOp,
11785
11792
DAG.getAllOnesConstant(DL, CarryOp.getValueType()));
11786
- CarryOp = ConvertCarryValueToCarryFlag(VT, CarryOp, DAG);
11793
+ CarryOp = ConvertCarryValueToCarryFlag(VT, CarryOp, DAG, Subtarget );
11787
11794
SDValue Sum = DAG.getNode(Opc, DL, DAG.getVTList(VT, MVT::i32),
11788
11795
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);
11790
11798
if (!IsAdd)
11791
11799
CarryOp = DAG.getNode(ISD::XOR, DL, CarryOp.getValueType(), CarryOp,
11792
11800
DAG.getAllOnesConstant(DL, CarryOp.getValueType()));
0 commit comments