summaryrefslogtreecommitdiff
path: root/compiler/optimizing/loop_optimization.cc
diff options
context:
space:
mode:
authorMingyao Yang <mingyao@google.com>2017-02-07 13:06:06 -0800
committerMingyao Yang <mingyao@google.com>2017-02-17 12:21:46 -0800
commit69d75ffac23fe1e655b7e81f0454c2841280dc1f (patch)
tree88432364dd096bdd5674f48fb26e77f08cbf0dc6 /compiler/optimizing/loop_optimization.cc
parentd8a16ba050978e4fe1447089002040a0047a5b3a (diff)
Skip loop optimization if there is no loop in the graph.
LinearizeGraph() does quite some allocations. Also add some comments on the possible false positives of some flags. Test: m test-art-host Change-Id: I80ef89a2dc031d601e7621d0b22060cd8c17fae3
Diffstat (limited to 'compiler/optimizing/loop_optimization.cc')
-rw-r--r--compiler/optimizing/loop_optimization.cc6
1 files changed, 5 insertions, 1 deletions
diff --git a/compiler/optimizing/loop_optimization.cc b/compiler/optimizing/loop_optimization.cc
index 95838380cc..26c9ab83c2 100644
--- a/compiler/optimizing/loop_optimization.cc
+++ b/compiler/optimizing/loop_optimization.cc
@@ -71,7 +71,7 @@ HLoopOptimization::HLoopOptimization(HGraph* graph,
void HLoopOptimization::Run() {
// Well-behaved loops only.
// TODO: make this less of a sledgehammer.
- if (graph_->HasTryCatch() || graph_->HasIrreducibleLoops()) {
+ if (!graph_->HasLoops() || graph_->HasTryCatch() || graph_->HasIrreducibleLoops()) {
return;
}
@@ -84,6 +84,10 @@ void HLoopOptimization::Run() {
// Perform loop optimizations.
LocalRun();
+ if (top_loop_ == nullptr) {
+ graph_->SetHasLoops(false);
+ }
+
// Detach.
loop_allocator_ = nullptr;
last_loop_ = top_loop_ = nullptr;