summaryrefslogtreecommitdiff
path: root/compiler/optimizing/loop_optimization.cc
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2016-10-05 10:30:14 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2016-10-05 10:30:15 +0000
commitd3a9ce9d30a59587413310e66ea51c8f7adb0a1d (patch)
tree60bb0084030cadfed694261c36c5722f4f945869 /compiler/optimizing/loop_optimization.cc
parent2a5c5160771ad528bc9b3ac36ac5785a184c956d (diff)
parentebe167422f6197b9df0698bbeb944a0e4eea5f2d (diff)
Merge "Properly scope HLoopOptimization's allocator."
Diffstat (limited to 'compiler/optimizing/loop_optimization.cc')
-rw-r--r--compiler/optimizing/loop_optimization.cc15
1 files changed, 9 insertions, 6 deletions
diff --git a/compiler/optimizing/loop_optimization.cc b/compiler/optimizing/loop_optimization.cc
index 7dfa4f160b..383a0278c6 100644
--- a/compiler/optimizing/loop_optimization.cc
+++ b/compiler/optimizing/loop_optimization.cc
@@ -128,7 +128,7 @@ HLoopOptimization::HLoopOptimization(HGraph* graph,
HInductionVarAnalysis* induction_analysis)
: HOptimization(graph, kLoopOptimizationPassName),
induction_range_(induction_analysis),
- loop_allocator_(graph_->GetArena()->GetArenaPool()), // phase-local allocator on global pool
+ loop_allocator_(nullptr),
top_loop_(nullptr),
last_loop_(nullptr) {
}
@@ -140,6 +140,9 @@ void HLoopOptimization::Run() {
return;
}
+ ArenaAllocator allocator(graph_->GetArena()->GetArenaPool());
+ loop_allocator_ = &allocator;
+
// Build the linear order. This step enables building a loop hierarchy that
// properly reflects the outer-inner and previous-next relation.
graph_->Linearize();
@@ -150,16 +153,16 @@ void HLoopOptimization::Run() {
AddLoop(block->GetLoopInformation());
}
}
- if (top_loop_ == nullptr) {
- return; // no loops
+ if (top_loop_ != nullptr) {
+ // Traverse the loop hierarchy inner-to-outer and optimize.
+ TraverseLoopsInnerToOuter(top_loop_);
}
- // Traverse the loop hierarchy inner-to-outer and optimize.
- TraverseLoopsInnerToOuter(top_loop_);
+ loop_allocator_ = nullptr;
}
void HLoopOptimization::AddLoop(HLoopInformation* loop_info) {
DCHECK(loop_info != nullptr);
- LoopNode* node = new (&loop_allocator_) LoopNode(loop_info); // phase-local allocator
+ LoopNode* node = new (loop_allocator_) LoopNode(loop_info); // phase-local allocator
if (last_loop_ == nullptr) {
// First loop.
DCHECK(top_loop_ == nullptr);