diff options
| author | Nirav Dave <niravd@google.com> | 2018-03-19 20:19:46 +0000 |
|---|---|---|
| committer | Nirav Dave <niravd@google.com> | 2018-03-19 20:19:46 +0000 |
| commit | 3264c1bdf67349add543f1981e5fdf483f5ec41a (patch) | |
| tree | 7c9c700659f5f2bcaeacfe884d91571e5b4f1b09 /llvm/lib/Target/SystemZ | |
| parent | 9a55c1b0dce1b0f03742ceea8292dcdcdcd37509 (diff) | |
| download | bcm5719-llvm-3264c1bdf67349add543f1981e5fdf483f5ec41a.tar.gz bcm5719-llvm-3264c1bdf67349add543f1981e5fdf483f5ec41a.zip | |
[DAG, X86] Revert r327197 "Revert r327170, r327171, r327172"
Reland ISel cycle checking improvements after simplifying node id
invariant traversal and correcting typo.
llvm-svn: 327898
Diffstat (limited to 'llvm/lib/Target/SystemZ')
| -rw-r--r-- | llvm/lib/Target/SystemZ/SystemZISelDAGToDAG.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/llvm/lib/Target/SystemZ/SystemZISelDAGToDAG.cpp b/llvm/lib/Target/SystemZ/SystemZISelDAGToDAG.cpp index 9bf2474915c..6e2130828bb 100644 --- a/llvm/lib/Target/SystemZ/SystemZISelDAGToDAG.cpp +++ b/llvm/lib/Target/SystemZ/SystemZISelDAGToDAG.cpp @@ -596,7 +596,13 @@ static void insertDAGNode(SelectionDAG *DAG, SDNode *Pos, SDValue N) { if (N.getNode()->getNodeId() == -1 || N.getNode()->getNodeId() > Pos->getNodeId()) { DAG->RepositionNode(Pos->getIterator(), N.getNode()); - N.getNode()->setNodeId(Pos->getNodeId()); + // Mark Node as invalid for pruning as after this it may be a successor to a + // selected node but otherwise be in the same position of Pos. + // Conservatively mark it with the same -abs(Id) to assure node id + // invariant is preserved. + int PId = Pos->getNodeId(); + int InvalidatedPId = -(PId + 1); + N->setNodeId((PId > 0) ? InvalidatedPId : PId); } } @@ -1027,8 +1033,7 @@ bool SystemZDAGToDAGISel::tryRISBGZero(SDNode *N) { }; SDValue New = convertTo( DL, VT, SDValue(CurDAG->getMachineNode(Opcode, DL, OpcodeVT, Ops), 0)); - ReplaceUses(N, New.getNode()); - CurDAG->RemoveDeadNode(N); + ReplaceNode(N, New.getNode()); return true; } @@ -1119,8 +1124,7 @@ void SystemZDAGToDAGISel::splitLargeImmediate(unsigned Opcode, SDNode *Node, SDValue Lower = CurDAG->getConstant(LowerVal, DL, VT); SDValue Or = CurDAG->getNode(Opcode, DL, VT, Upper, Lower); - ReplaceUses(Node, Or.getNode()); - CurDAG->RemoveDeadNode(Node); + ReplaceNode(Node, Or.getNode()); SelectCode(Or.getNode()); } @@ -1618,4 +1622,3 @@ void SystemZDAGToDAGISel::PreprocessISelDAG() { if (MadeChange) CurDAG->RemoveDeadNodes(); } - |

