mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-25 05:10:56 +00:00
Remove ADDC, ADDE, SUBC, SUBE and SETCCE support from the X86 backend, use the CARRY ops instead.
Summary: As per title. This cleanup some technical debt. Depends on D33374 Reviewers: jyknight, nemanjai, mkuper, spatel, RKSimon, zvi, bkramer Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D33390 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304435 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2fc2681a62
commit
097ad767f4
@ -418,8 +418,6 @@ X86DAGToDAGISel::IsProfitableToFold(SDValue N, SDNode *U, SDNode *Root) const {
|
||||
case X86ISD::XOR:
|
||||
case X86ISD::OR:
|
||||
case ISD::ADD:
|
||||
case ISD::ADDC:
|
||||
case ISD::ADDE:
|
||||
case ISD::ADDCARRY:
|
||||
case ISD::AND:
|
||||
case ISD::OR:
|
||||
|
@ -312,16 +312,6 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
|
||||
setOperationAction(ISD::UREM, VT, Expand);
|
||||
}
|
||||
|
||||
for (auto VT : { MVT::i8, MVT::i16, MVT::i32, MVT::i64 }) {
|
||||
if (VT == MVT::i64 && !Subtarget.is64Bit())
|
||||
continue;
|
||||
// Add/Sub overflow ops with MVT::Glues are lowered to EFLAGS dependences.
|
||||
setOperationAction(ISD::ADDC, VT, Custom);
|
||||
setOperationAction(ISD::ADDE, VT, Custom);
|
||||
setOperationAction(ISD::SUBC, VT, Custom);
|
||||
setOperationAction(ISD::SUBE, VT, Custom);
|
||||
}
|
||||
|
||||
setOperationAction(ISD::BR_JT , MVT::Other, Expand);
|
||||
setOperationAction(ISD::BRCOND , MVT::Other, Custom);
|
||||
for (auto VT : { MVT::f32, MVT::f64, MVT::f80, MVT::f128,
|
||||
@ -423,7 +413,6 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
|
||||
continue;
|
||||
setOperationAction(ISD::SELECT, VT, Custom);
|
||||
setOperationAction(ISD::SETCC, VT, Custom);
|
||||
setOperationAction(ISD::SETCCE, VT, Custom);
|
||||
}
|
||||
setOperationAction(ISD::EH_RETURN , MVT::Other, Custom);
|
||||
// NOTE: EH_SJLJ_SETJMP/_LONGJMP supported here is NOT intended to support
|
||||
@ -17395,25 +17384,6 @@ SDValue X86TargetLowering::LowerSETCC(SDValue Op, SelectionDAG &DAG) const {
|
||||
return SetCC;
|
||||
}
|
||||
|
||||
SDValue X86TargetLowering::LowerSETCCE(SDValue Op, SelectionDAG &DAG) const {
|
||||
SDValue LHS = Op.getOperand(0);
|
||||
SDValue RHS = Op.getOperand(1);
|
||||
SDValue Carry = Op.getOperand(2);
|
||||
SDValue Cond = Op.getOperand(3);
|
||||
SDLoc DL(Op);
|
||||
|
||||
assert(LHS.getSimpleValueType().isInteger() && "SETCCE is integer only.");
|
||||
X86::CondCode CC = TranslateIntegerX86CC(cast<CondCodeSDNode>(Cond)->get());
|
||||
|
||||
assert(Carry.getOpcode() != ISD::CARRY_FALSE);
|
||||
SDVTList VTs = DAG.getVTList(LHS.getValueType(), MVT::i32);
|
||||
SDValue Cmp = DAG.getNode(X86ISD::SBB, DL, VTs, LHS, RHS, Carry);
|
||||
SDValue SetCC = getSETCC(CC, Cmp.getValue(1), DL, DAG);
|
||||
if (Op.getSimpleValueType() == MVT::i1)
|
||||
return DAG.getNode(ISD::TRUNCATE, DL, MVT::i1, SetCC);
|
||||
return SetCC;
|
||||
}
|
||||
|
||||
SDValue X86TargetLowering::LowerSETCCCARRY(SDValue Op, SelectionDAG &DAG) const {
|
||||
SDValue LHS = Op.getOperand(0);
|
||||
SDValue RHS = Op.getOperand(1);
|
||||
@ -23290,32 +23260,6 @@ static SDValue LowerATOMIC_STORE(SDValue Op, SelectionDAG &DAG) {
|
||||
return Op;
|
||||
}
|
||||
|
||||
static SDValue LowerADDC_ADDE_SUBC_SUBE(SDValue Op, SelectionDAG &DAG) {
|
||||
MVT VT = Op.getNode()->getSimpleValueType(0);
|
||||
|
||||
// Let legalize expand this if it isn't a legal type yet.
|
||||
if (!DAG.getTargetLoweringInfo().isTypeLegal(VT))
|
||||
return SDValue();
|
||||
|
||||
SDVTList VTs = DAG.getVTList(VT, MVT::i32);
|
||||
|
||||
unsigned Opc;
|
||||
bool ExtraOp = false;
|
||||
switch (Op.getOpcode()) {
|
||||
default: llvm_unreachable("Invalid code");
|
||||
case ISD::ADDC: Opc = X86ISD::ADD; break;
|
||||
case ISD::ADDE: Opc = X86ISD::ADC; ExtraOp = true; break;
|
||||
case ISD::SUBC: Opc = X86ISD::SUB; break;
|
||||
case ISD::SUBE: Opc = X86ISD::SBB; ExtraOp = true; break;
|
||||
}
|
||||
|
||||
if (!ExtraOp)
|
||||
return DAG.getNode(Opc, SDLoc(Op), VTs, Op.getOperand(0),
|
||||
Op.getOperand(1));
|
||||
return DAG.getNode(Opc, SDLoc(Op), VTs, Op.getOperand(0),
|
||||
Op.getOperand(1), Op.getOperand(2));
|
||||
}
|
||||
|
||||
static SDValue LowerADDSUBCARRY(SDValue Op, SelectionDAG &DAG) {
|
||||
SDNode *N = Op.getNode();
|
||||
MVT VT = N->getSimpleValueType(0);
|
||||
@ -23806,7 +23750,6 @@ SDValue X86TargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
|
||||
case ISD::FCOPYSIGN: return LowerFCOPYSIGN(Op, DAG);
|
||||
case ISD::FGETSIGN: return LowerFGETSIGN(Op, DAG);
|
||||
case ISD::SETCC: return LowerSETCC(Op, DAG);
|
||||
case ISD::SETCCE: return LowerSETCCE(Op, DAG);
|
||||
case ISD::SETCCCARRY: return LowerSETCCCARRY(Op, DAG);
|
||||
case ISD::SELECT: return LowerSELECT(Op, DAG);
|
||||
case ISD::BRCOND: return LowerBRCOND(Op, DAG);
|
||||
@ -23852,10 +23795,6 @@ SDValue X86TargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
|
||||
case ISD::UMULO: return LowerXALUO(Op, DAG);
|
||||
case ISD::READCYCLECOUNTER: return LowerREADCYCLECOUNTER(Op, Subtarget,DAG);
|
||||
case ISD::BITCAST: return LowerBITCAST(Op, Subtarget, DAG);
|
||||
case ISD::ADDC:
|
||||
case ISD::ADDE:
|
||||
case ISD::SUBC:
|
||||
case ISD::SUBE: return LowerADDC_ADDE_SUBC_SUBE(Op, DAG);
|
||||
case ISD::ADDCARRY:
|
||||
case ISD::SUBCARRY: return LowerADDSUBCARRY(Op, DAG);
|
||||
case ISD::ADD:
|
||||
|
@ -1163,7 +1163,6 @@ namespace llvm {
|
||||
SDValue LowerToBT(SDValue And, ISD::CondCode CC, const SDLoc &dl,
|
||||
SelectionDAG &DAG) const;
|
||||
SDValue LowerSETCC(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerSETCCE(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerSETCCCARRY(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerSELECT(SDValue Op, SelectionDAG &DAG) const;
|
||||
SDValue LowerBRCOND(SDValue Op, SelectionDAG &DAG) const;
|
||||
|
Loading…
x
Reference in New Issue
Block a user