diff options
| author | Bjorn Pettersson <bjorn.a.pettersson@ericsson.com> | 2018-06-20 16:06:09 +0000 |
|---|---|---|
| committer | Bjorn Pettersson <bjorn.a.pettersson@ericsson.com> | 2018-06-20 16:06:09 +0000 |
| commit | 7bf676662af29a3bf9b8cdb8fae9c26c95c352f7 (patch) | |
| tree | 0142f75258433c06946b938abfc135abe916fd8f /llvm/lib/CodeGen | |
| parent | 6d163c5feb2b4cc7d1ffac82800caab74da93a68 (diff) | |
| download | bcm5719-llvm-7bf676662af29a3bf9b8cdb8fae9c26c95c352f7.tar.gz bcm5719-llvm-7bf676662af29a3bf9b8cdb8fae9c26c95c352f7.zip | |
[DAG] Don't map a TableId to itself in the ReplacedValues map
Summary:
Found some regressions (infinite loop in DAGTypeLegalizer::RemapId)
after r334880. This patch makes sure that we do map a TableId to
itself.
Reviewers: niravd
Reviewed By: niravd
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D48364
llvm-svn: 335141
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp | 7 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h | 3 |
2 files changed, 7 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp index 77e167dfb08..a9f144c06e9 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp @@ -575,6 +575,7 @@ void DAGTypeLegalizer::RemapValue(SDValue &V) { void DAGTypeLegalizer::RemapId(TableId &Id) { auto I = ReplacedValues.find(Id); if (I != ReplacedValues.end()) { + assert(Id != I->second && "Id is mapped to itself."); // Use path compression to speed up future lookups if values get multiply // replaced with other values. RemapId(I->second); @@ -652,7 +653,8 @@ void DAGTypeLegalizer::ReplaceValueWith(SDValue From, SDValue To) { auto FromId = getTableId(From); auto ToId = getTableId(To); - ReplacedValues[FromId] = ToId; + if (FromId != ToId) + ReplacedValues[FromId] = ToId; DAG.ReplaceAllUsesOfValueWith(From, To); // Process the list of nodes that need to be reanalyzed. @@ -685,7 +687,8 @@ void DAGTypeLegalizer::ReplaceValueWith(SDValue From, SDValue To) { auto OldValId = getTableId(OldVal); auto NewValId = getTableId(NewVal); DAG.ReplaceAllUsesOfValueWith(OldVal, NewVal); - ReplacedValues[OldValId] = NewValId; + if (OldValId != NewValId) + ReplacedValues[OldValId] = NewValId; } // The original node continues to exist in the DAG, marked NewNode. } diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h index 6d577adc6f4..e4d4aac3340 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h @@ -186,7 +186,8 @@ public: TableId NewId = getTableId(SDValue(New, i)); TableId OldId = getTableId(SDValue(Old, i)); - ReplacedValues[OldId] = NewId; + if (OldId != NewId) + ReplacedValues[OldId] = NewId; // Delete Node from tables. ValueToIdMap.erase(SDValue(Old, i)); |

