SDAG: Have SelectNodeTo replace uses if it CSE's instead of morphing a node

It's awkward to force callers of SelectNodeTo to figure out whether
the node was morphed or CSE'd. Update uses here instead of requiring
callers to (sometimes) do it.

llvm-svn: 269235
This commit is contained in:
Justin Bogner 2016-05-11 21:00:33 +00:00
parent 29ebd4979a
commit b3534c494f
2 changed files with 8 additions and 9 deletions
llvm/lib/CodeGen/SelectionDAG

View File

@ -5942,10 +5942,14 @@ SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
SDVTList VTs,ArrayRef<SDValue> Ops) { SDVTList VTs,ArrayRef<SDValue> Ops) {
N = MorphNodeTo(N, ~MachineOpc, VTs, Ops); SDNode *New = MorphNodeTo(N, ~MachineOpc, VTs, Ops);
// Reset the NodeID to -1. // Reset the NodeID to -1.
N->setNodeId(-1); New->setNodeId(-1);
return N; if (New != N) {
ReplaceAllUsesWith(N, New);
RemoveDeadNode(N);
}
return New;
} }
/// UpdadeSDLocOnMergedSDNode - If the opt level is -O0 then it throws away /// UpdadeSDLocOnMergedSDNode - If the opt level is -O0 then it throws away

View File

@ -2127,12 +2127,7 @@ void SelectionDAGISel::Select_WRITE_REGISTER(SDNode *Op) {
} }
void SelectionDAGISel::Select_UNDEF(SDNode *N) { void SelectionDAGISel::Select_UNDEF(SDNode *N) {
SDNode *New = CurDAG->SelectNodeTo(N, TargetOpcode::IMPLICIT_DEF, N->getValueType(0));
CurDAG->SelectNodeTo(N, TargetOpcode::IMPLICIT_DEF, N->getValueType(0));
if (New != N) {
ReplaceUses(N, New);
CurDAG->RemoveDeadNode(N);
}
} }
/// GetVBR - decode a vbr encoding whose top bit is set. /// GetVBR - decode a vbr encoding whose top bit is set.