mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-20 14:29:27 +00:00
[SDAG] MorphNodeTo recursively deletes dead operands of the old
fromulation of the node, which isn't really the desired behavior from within the combiner or legalizer, but is necessary within ISel. I've added a hopefully helpful comment and fixed the only two places where this took place. Yet another step toward the combiner and legalizer not needing to use update listeners with virtual calls to manage the worklists behind legalization and combining. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214574 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b2df20d015
commit
04395213ab
@ -5467,6 +5467,10 @@ SDNode *SelectionDAG::UpdadeSDLocOnMergedSDNode(SDNode *N, SDLoc OLoc) {
|
||||
/// node, and because it doesn't require CSE recalculation for any of
|
||||
/// the node's users.
|
||||
///
|
||||
/// However, note that MorphNodeTo recursively deletes dead nodes from the DAG.
|
||||
/// As a consequence it isn't appropriate to use from within the DAG combiner or
|
||||
/// the legalizer which maintain worklists that would need to be updated when
|
||||
/// deleting things.
|
||||
SDNode *SelectionDAG::MorphNodeTo(SDNode *N, unsigned Opc,
|
||||
SDVTList VTs, ArrayRef<SDValue> Ops) {
|
||||
unsigned NumOps = Ops.size();
|
||||
|
@ -578,10 +578,9 @@ static SDValue performANDCombine(SDNode *N, SelectionDAG &DAG,
|
||||
if ((Op0Opcode == MipsISD::VEXTRACT_ZEXT_ELT && Log2 >= ExtendTySize) ||
|
||||
Log2 == ExtendTySize) {
|
||||
SDValue Ops[] = { Op0->getOperand(0), Op0->getOperand(1), Op0Op2 };
|
||||
DAG.MorphNodeTo(Op0.getNode(), MipsISD::VEXTRACT_ZEXT_ELT,
|
||||
Op0->getVTList(),
|
||||
makeArrayRef(Ops, Op0->getNumOperands()));
|
||||
return Op0;
|
||||
return DAG.getNode(MipsISD::VEXTRACT_ZEXT_ELT, SDLoc(Op0),
|
||||
Op0->getVTList(),
|
||||
makeArrayRef(Ops, Op0->getNumOperands()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -923,10 +922,9 @@ static SDValue performSRACombine(SDNode *N, SelectionDAG &DAG,
|
||||
TotalBits <= 32)) {
|
||||
SDValue Ops[] = { Op0Op0->getOperand(0), Op0Op0->getOperand(1),
|
||||
Op0Op0->getOperand(2) };
|
||||
DAG.MorphNodeTo(Op0Op0.getNode(), MipsISD::VEXTRACT_SEXT_ELT,
|
||||
Op0Op0->getVTList(),
|
||||
makeArrayRef(Ops, Op0Op0->getNumOperands()));
|
||||
return Op0Op0;
|
||||
return DAG.getNode(MipsISD::VEXTRACT_SEXT_ELT, SDLoc(Op0Op0),
|
||||
Op0Op0->getVTList(),
|
||||
makeArrayRef(Ops, Op0Op0->getNumOperands()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -774,7 +774,9 @@ SDValue SITargetLowering::LowerBRCOND(SDValue BRCOND,
|
||||
BR->getOperand(0),
|
||||
BRCOND.getOperand(2)
|
||||
};
|
||||
DAG.MorphNodeTo(BR, ISD::BR, BR->getVTList(), Ops);
|
||||
SDValue NewBR = DAG.getNode(ISD::BR, DL, BR->getVTList(), Ops);
|
||||
DAG.ReplaceAllUsesWith(BR, NewBR.getNode());
|
||||
BR = NewBR.getNode();
|
||||
}
|
||||
|
||||
SDValue Chain = SDValue(Result, Result->getNumValues() - 1);
|
||||
|
Loading…
x
Reference in New Issue
Block a user