Skip to content

Commit fabf3d9

Browse files
author
Kai Luo
committed
CRbits
1 parent 4ae3a53 commit fabf3d9

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

llvm/lib/Target/PowerPC/PPCISelLowering.cpp

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11733,23 +11733,30 @@ SDValue PPCTargetLowering::LowerFP_EXTEND(SDValue Op, SelectionDAG &DAG) const {
1173311733
}
1173411734

1173511735
static 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

1174611750
static 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

1175511762
SDValue 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

Comments
 (0)