forked from OSchip/llvm-project
[Mips] Remove uneeded variants of ADDC/ADDE lowering
Summary: As it turns out, the lowering for the Mips16* family of target is the exact same thing as what the ops expands to, so the code handling them can be removed and the ops only enabled for the MipsSE* family of targets. Reviewers: smaksimovic, atanasyan, abeserminji Subscribers: sdardis, arichardson, llvm-commits Differential Revision: https://reviews.llvm.org/D47703 llvm-svn: 334052
This commit is contained in:
parent
11899b04a4
commit
a79b6b3ef0
|
@ -192,41 +192,6 @@ bool Mips16DAGToDAGISel::trySelect(SDNode *Node) {
|
|||
default:
|
||||
break;
|
||||
|
||||
case ISD::SUBE:
|
||||
case ISD::ADDE: {
|
||||
SDValue InFlag = Node->getOperand(2), CmpLHS;
|
||||
unsigned Opc = InFlag.getOpcode();
|
||||
(void)Opc;
|
||||
assert(((Opc == ISD::ADDC || Opc == ISD::ADDE) ||
|
||||
(Opc == ISD::SUBC || Opc == ISD::SUBE)) &&
|
||||
"(ADD|SUB)E flag operand must come from (ADD|SUB)C/E insn");
|
||||
|
||||
unsigned MOp;
|
||||
if (Opcode == ISD::ADDE) {
|
||||
CmpLHS = InFlag.getValue(0);
|
||||
MOp = Mips::AdduRxRyRz16;
|
||||
} else {
|
||||
CmpLHS = InFlag.getOperand(0);
|
||||
MOp = Mips::SubuRxRyRz16;
|
||||
}
|
||||
|
||||
SDValue Ops[] = {CmpLHS, InFlag.getOperand(1)};
|
||||
|
||||
SDValue LHS = Node->getOperand(0);
|
||||
SDValue RHS = Node->getOperand(1);
|
||||
|
||||
EVT VT = LHS.getValueType();
|
||||
|
||||
unsigned Sltu_op = Mips::SltuRxRyRz16;
|
||||
SDNode *Carry = CurDAG->getMachineNode(Sltu_op, DL, VT, Ops);
|
||||
unsigned Addu_op = Mips::AdduRxRyRz16;
|
||||
SDNode *AddCarry =
|
||||
CurDAG->getMachineNode(Addu_op, DL, VT, SDValue(Carry, 0), RHS);
|
||||
|
||||
CurDAG->SelectNodeTo(Node, MOp, VT, MVT::Glue, LHS, SDValue(AddCarry, 0));
|
||||
return true;
|
||||
}
|
||||
|
||||
/// Mul with two results
|
||||
case ISD::SMUL_LOHI:
|
||||
case ISD::UMUL_LOHI: {
|
||||
|
|
|
@ -1407,14 +1407,6 @@ def: Mips16Pat<(i32 addr16sp:$addr), (AddiuRxRyOffMemX16 addr16sp:$addr)>;
|
|||
// Large (>16 bit) immediate loads
|
||||
def : Mips16Pat<(i32 imm:$imm), (LwConstant32 imm:$imm, -1)>;
|
||||
|
||||
// Carry MipsPatterns
|
||||
def : Mips16Pat<(subc CPU16Regs:$lhs, CPU16Regs:$rhs),
|
||||
(SubuRxRyRz16 CPU16Regs:$lhs, CPU16Regs:$rhs)>;
|
||||
def : Mips16Pat<(addc CPU16Regs:$lhs, CPU16Regs:$rhs),
|
||||
(AdduRxRyRz16 CPU16Regs:$lhs, CPU16Regs:$rhs)>;
|
||||
def : Mips16Pat<(addc CPU16Regs:$src, immSExt16:$imm),
|
||||
(AddiuRxRxImmX16 CPU16Regs:$src, imm:$imm)>;
|
||||
|
||||
//
|
||||
// Some branch conditional patterns are not generated by llvm at this time.
|
||||
// Some are for seemingly arbitrary reasons not used: i.e. with signed number
|
||||
|
|
|
@ -393,11 +393,6 @@ MipsTargetLowering::MipsTargetLowering(const MipsTargetMachine &TM,
|
|||
setOperationAction(ISD::UDIV, MVT::i64, Expand);
|
||||
setOperationAction(ISD::UREM, MVT::i64, Expand);
|
||||
|
||||
if (Subtarget.hasDSP() && Subtarget.hasMips32r2()) {
|
||||
setOperationAction(ISD::ADDC, MVT::i32, Legal);
|
||||
setOperationAction(ISD::ADDE, MVT::i32, Legal);
|
||||
}
|
||||
|
||||
// Operations not directly supported by Mips.
|
||||
setOperationAction(ISD::BR_CC, MVT::f32, Expand);
|
||||
setOperationAction(ISD::BR_CC, MVT::f64, Expand);
|
||||
|
|
|
@ -104,6 +104,11 @@ MipsSETargetLowering::MipsSETargetLowering(const MipsTargetMachine &TM,
|
|||
setTargetDAGCombine(ISD::SRL);
|
||||
setTargetDAGCombine(ISD::SETCC);
|
||||
setTargetDAGCombine(ISD::VSELECT);
|
||||
|
||||
if (Subtarget.hasMips32r2()) {
|
||||
setOperationAction(ISD::ADDC, MVT::i32, Legal);
|
||||
setOperationAction(ISD::ADDE, MVT::i32, Legal);
|
||||
}
|
||||
}
|
||||
|
||||
if (Subtarget.hasDSPR2())
|
||||
|
|
Loading…
Reference in New Issue