Commit e14463e0 authored by bmeurer@chromium.org's avatar bmeurer@chromium.org

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
parent 4ab3270d
......@@ -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);
......
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment