summaryrefslogtreecommitdiff
path: root/compiler/optimizing/nodes.cc
diff options
context:
space:
mode:
author Nicolas Geoffray <ngeoffray@google.com> 2019-04-26 14:21:14 +0100
committer Nicolas Geoffray <ngeoffray@google.com> 2019-04-26 15:11:41 +0000
commit2cc9d343550d22e08536e0077893e6d86647c91a (patch)
treed816a9d053620bf756dbc97cb3615a264568ae33 /compiler/optimizing/nodes.cc
parentc45b5897e65d8713f008732277db2544b9af1e67 (diff)
Fix wrong assumption in RemoveInstructionsAsUsersFromDeadBlocks.
It can be called in a situation where dead blocks can have phis: the DCE pass would re-build the dominator tree and RemoveInstructionsAsUsersFromDeadBlocks used to assume there cannot be phis. Test: 695-simplify-throws Bug: 131174581 Change-Id: I853956482487a8c7c8fb99499aef318d099754e4
Diffstat (limited to 'compiler/optimizing/nodes.cc')
-rw-r--r--compiler/optimizing/nodes.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/compiler/optimizing/nodes.cc b/compiler/optimizing/nodes.cc
index f7c16d1d02..1940d55a9d 100644
--- a/compiler/optimizing/nodes.cc
+++ b/compiler/optimizing/nodes.cc
@@ -147,7 +147,9 @@ void HGraph::RemoveInstructionsAsUsersFromDeadBlocks(const ArenaBitVector& visit
if (!visited.IsBitSet(i)) {
HBasicBlock* block = blocks_[i];
if (block == nullptr) continue;
- DCHECK(block->GetPhis().IsEmpty()) << "Phis are not inserted at this stage";
+ for (HInstructionIterator it(block->GetPhis()); !it.Done(); it.Advance()) {
+ RemoveAsUser(it.Current());
+ }
for (HInstructionIterator it(block->GetInstructions()); !it.Done(); it.Advance()) {
RemoveAsUser(it.Current());
}