From e14463e07e4d4e19f2d26b6f6d5df79371e4d17c Mon Sep 17 00:00:00 2001 From: "bmeurer@chromium.org" Date: Thu, 6 Feb 2014 12:35:17 +0000 Subject: [PATCH] Cosmetic cleanup for GVN. R=hpayer@chromium.org Review URL: https://codereview.chromium.org/153563006 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19150 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/hydrogen-gvn.cc | 61 +++++++++++++++++++++++++++-------------------------- src/hydrogen-gvn.h | 11 +--------- 2 files changed, 32 insertions(+), 40 deletions(-) diff --git a/src/hydrogen-gvn.cc b/src/hydrogen-gvn.cc index 0628ff7..daca593 100644 --- a/src/hydrogen-gvn.cc +++ b/src/hydrogen-gvn.cc @@ -364,47 +364,48 @@ void HSideEffectMap::Store(GVNFlagSet flags, HInstruction* instr) { HGlobalValueNumberingPhase::HGlobalValueNumberingPhase(HGraph* graph) - : HPhase("H_Global value numbering", graph), - removed_side_effects_(false), - block_side_effects_(graph->blocks()->length(), zone()), - loop_side_effects_(graph->blocks()->length(), zone()), - visited_on_paths_(graph->blocks()->length(), zone()) { - ASSERT(!AllowHandleAllocation::IsAllowed()); - block_side_effects_.AddBlock(GVNFlagSet(), graph->blocks()->length(), - zone()); - loop_side_effects_.AddBlock(GVNFlagSet(), graph->blocks()->length(), + : HPhase("H_Global value numbering", graph), + removed_side_effects_(false), + block_side_effects_(graph->blocks()->length(), zone()), + loop_side_effects_(graph->blocks()->length(), zone()), + visited_on_paths_(graph->blocks()->length(), zone()) { + ASSERT(!AllowHandleAllocation::IsAllowed()); + block_side_effects_.AddBlock(GVNFlagSet(), graph->blocks()->length(), zone()); + loop_side_effects_.AddBlock(GVNFlagSet(), graph->blocks()->length(), + zone()); } -void HGlobalValueNumberingPhase::Reset() { - ASSERT(block_side_effects_.length() == graph()->blocks()->length()); - ASSERT(loop_side_effects_.length() == graph()->blocks()->length()); - for (int i = 0; i < graph()->blocks()->length(); ++i) { - block_side_effects_[i] = GVNFlagSet(); - loop_side_effects_[i] = GVNFlagSet(); - } - visited_on_paths_.Clear(); -} +void HGlobalValueNumberingPhase::Run() { + ASSERT(!removed_side_effects_); + for (int i = FLAG_gvn_iterations; i > 0; --i) { + // Compute the side effects. + ComputeBlockSideEffects(); + + // Perform loop invariant code motion if requested. + if (FLAG_loop_invariant_code_motion) LoopInvariantCodeMotion(); + // Perform the actual value numbering. + AnalyzeGraph(); -void HGlobalValueNumberingPhase::Analyze() { - removed_side_effects_ = false; - ComputeBlockSideEffects(); - if (FLAG_loop_invariant_code_motion) { - LoopInvariantCodeMotion(); + // Continue GVN if we removed any side effects. + if (!removed_side_effects_) break; + removed_side_effects_ = false; + + // Clear all side effects. + ASSERT_EQ(block_side_effects_.length(), graph()->blocks()->length()); + ASSERT_EQ(loop_side_effects_.length(), graph()->blocks()->length()); + for (int i = 0; i < graph()->blocks()->length(); ++i) { + block_side_effects_[i].RemoveAll(); + loop_side_effects_[i].RemoveAll(); + } + visited_on_paths_.Clear(); } - AnalyzeGraph(); } void HGlobalValueNumberingPhase::ComputeBlockSideEffects() { - // The Analyze phase of GVN can be called multiple times. Clear loop side - // effects before computing them to erase the contents from previous Analyze - // passes. - for (int i = 0; i < loop_side_effects_.length(); ++i) { - loop_side_effects_[i].RemoveAll(); - } for (int i = graph()->blocks()->length() - 1; i >= 0; --i) { // Compute side effects for the block. HBasicBlock* block = graph()->blocks()->at(i); diff --git a/src/hydrogen-gvn.h b/src/hydrogen-gvn.h index 23b2440..4e4f349 100644 --- a/src/hydrogen-gvn.h +++ b/src/hydrogen-gvn.h @@ -41,18 +41,9 @@ class HGlobalValueNumberingPhase : public HPhase { public: explicit HGlobalValueNumberingPhase(HGraph* graph); - void Run() { - int max_fixpoint_iteration_count = FLAG_gvn_iterations; - for (int i = 0; i < max_fixpoint_iteration_count; i++) { - Analyze(); - if (!removed_side_effects_) break; - Reset(); - } - } + void Run(); private: - void Reset(); - void Analyze(); GVNFlagSet CollectSideEffectsOnPathsToDominatedBlock( HBasicBlock* dominator, HBasicBlock* dominated); -- 2.7.4