summaryrefslogtreecommitdiff
path: root/compiler/optimizing/loop_optimization.cc
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2016-10-05 16:03:30 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2016-10-05 16:03:30 +0000
commit4aa6a93c46a959df1ab71ee7a68ad345338046ef (patch)
tree30fe24096f6c3dcf3e0eecfb56a9372be49fef72 /compiler/optimizing/loop_optimization.cc
parent99ce62c3475765821024616b1223d37576e327dc (diff)
parent5ed20f90acd05e1f8697340f11113f0c61c22492 (diff)
Merge "Make it possible to pass an arena allocator to HLoopOptimization."
Diffstat (limited to 'compiler/optimizing/loop_optimization.cc')
-rw-r--r--compiler/optimizing/loop_optimization.cc15
1 files changed, 12 insertions, 3 deletions
diff --git a/compiler/optimizing/loop_optimization.cc b/compiler/optimizing/loop_optimization.cc
index 383a0278c6..b12a7f76c6 100644
--- a/compiler/optimizing/loop_optimization.cc
+++ b/compiler/optimizing/loop_optimization.cc
@@ -126,9 +126,14 @@ static void RemoveFromCycle(HInstruction* instruction) {
HLoopOptimization::HLoopOptimization(HGraph* graph,
HInductionVarAnalysis* induction_analysis)
+ : HLoopOptimization(graph, induction_analysis, nullptr) {}
+
+HLoopOptimization::HLoopOptimization(HGraph* graph,
+ HInductionVarAnalysis* induction_analysis,
+ ArenaAllocator* allocator)
: HOptimization(graph, kLoopOptimizationPassName),
induction_range_(induction_analysis),
- loop_allocator_(nullptr),
+ loop_allocator_(allocator),
top_loop_(nullptr),
last_loop_(nullptr) {
}
@@ -141,7 +146,9 @@ void HLoopOptimization::Run() {
}
ArenaAllocator allocator(graph_->GetArena()->GetArenaPool());
- loop_allocator_ = &allocator;
+ if (loop_allocator_ == nullptr) {
+ loop_allocator_ = &allocator;
+ }
// Build the linear order. This step enables building a loop hierarchy that
// properly reflects the outer-inner and previous-next relation.
@@ -157,7 +164,9 @@ void HLoopOptimization::Run() {
// Traverse the loop hierarchy inner-to-outer and optimize.
TraverseLoopsInnerToOuter(top_loop_);
}
- loop_allocator_ = nullptr;
+ if (loop_allocator_ == &allocator) {
+ loop_allocator_ = nullptr;
+ }
}
void HLoopOptimization::AddLoop(HLoopInformation* loop_info) {