summaryrefslogtreecommitdiff
path: root/compiler/optimizing/nodes.cc
diff options
context:
space:
mode:
author Nicolas Geoffray <ngeoffray@google.com> 2017-03-02 16:14:53 +0000
committer Nicolas Geoffray <ngeoffray@google.com> 2017-03-08 10:17:57 +0000
commit1eede6ae9b08d305d0c1123284ff958373916474 (patch)
tree7827df0c9fd45bfe68e29b4105ad0b16f0076662 /compiler/optimizing/nodes.cc
parent48b795efcb504b71fbf038fabdd3d05366793197 (diff)
Don't inline methods that throw in graph with irreducible loops.
Re-computing the loop information is not supported in graphs with irreducible loops, as it is not deterministic, and the loop header of a loop could change. That would lead to having the suspend check in the wrong block. Test: test-art-host Test: 641-irreducible-inline bug: 35757766 Change-Id: I6a435885461fbeca035e4f5d94f055fc3262adca
Diffstat (limited to 'compiler/optimizing/nodes.cc')
-rw-r--r--compiler/optimizing/nodes.cc3
1 files changed, 3 insertions, 0 deletions
diff --git a/compiler/optimizing/nodes.cc b/compiler/optimizing/nodes.cc
index 62c89100eb..020e4463d4 100644
--- a/compiler/optimizing/nodes.cc
+++ b/compiler/optimizing/nodes.cc
@@ -2179,6 +2179,9 @@ HInstruction* HGraph::InlineInto(HGraph* outer_graph, HInvoke* invoke) {
}
}
if (rerun_loop_analysis) {
+ DCHECK(!outer_graph->HasIrreducibleLoops())
+ << "Recomputing loop information in graphs with irreducible loops "
+ << "is unsupported, as it could lead to loop header changes";
outer_graph->ClearLoopInformation();
outer_graph->ClearDominanceInformation();
outer_graph->BuildDominatorTree();