Commit 2f81a79d authored by bmeurer@chromium.org's avatar bmeurer@chromium.org

Refactor Hydrogen environment liveness analysis into an HPhase.

Rename EnvironmentSlotLivenessAnalyzer to HEnvironmentLivenessAnalysisPhase,
following naming scheme suggested by danno@chromium.org in
https://codereview.chromium.org/17458002

The environment slot liveness analysis now uses the phase zone for
all its allocations.

Depends on https://codereview.chromium.org/18034003

R=danno@chromium.org
BUG=

Review URL: https://codereview.chromium.org/17587008

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15356 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 32f5e099
This diff is collapsed.
...@@ -43,11 +43,11 @@ namespace internal { ...@@ -43,11 +43,11 @@ namespace internal {
// the last lookup that refers to them. // the last lookup that refers to them.
// Slots are identified by their index and only affected if whitelisted in // Slots are identified by their index and only affected if whitelisted in
// HOptimizedGraphBuilder::IsEligibleForEnvironmentLivenessAnalysis(). // HOptimizedGraphBuilder::IsEligibleForEnvironmentLivenessAnalysis().
class EnvironmentSlotLivenessAnalyzer { class HEnvironmentLivenessAnalysisPhase : public HPhase {
public: public:
explicit EnvironmentSlotLivenessAnalyzer(HGraph* graph); explicit HEnvironmentLivenessAnalysisPhase(HGraph* graph);
void AnalyzeAndTrim(); void Run();
private: private:
void ZapEnvironmentSlot(int index, HSimulate* simulate); void ZapEnvironmentSlot(int index, HSimulate* simulate);
...@@ -56,13 +56,6 @@ class EnvironmentSlotLivenessAnalyzer { ...@@ -56,13 +56,6 @@ class EnvironmentSlotLivenessAnalyzer {
void UpdateLivenessAtBlockEnd(HBasicBlock* block, BitVector* live); void UpdateLivenessAtBlockEnd(HBasicBlock* block, BitVector* live);
void UpdateLivenessAtInstruction(HInstruction* instr, BitVector* live); void UpdateLivenessAtInstruction(HInstruction* instr, BitVector* live);
Zone* zone() { return &zone_; }
HGraph* graph_;
// Use a dedicated Zone for this phase, with a ZoneScope to ensure it
// gets freed.
Zone zone_;
int block_count_; int block_count_;
// Largest number of local variables in any environment in the graph // Largest number of local variables in any environment in the graph
...@@ -70,21 +63,23 @@ class EnvironmentSlotLivenessAnalyzer { ...@@ -70,21 +63,23 @@ class EnvironmentSlotLivenessAnalyzer {
int maximum_environment_size_; int maximum_environment_size_;
// Per-block data. All these lists are indexed by block_id. // Per-block data. All these lists are indexed by block_id.
ZoneList<BitVector*>* live_at_block_start_; ZoneList<BitVector*> live_at_block_start_;
ZoneList<HSimulate*>* first_simulate_; ZoneList<HSimulate*> first_simulate_;
ZoneList<BitVector*>* first_simulate_invalid_for_index_; ZoneList<BitVector*> first_simulate_invalid_for_index_;
// List of all HEnvironmentMarker instructions for quick iteration/deletion. // List of all HEnvironmentMarker instructions for quick iteration/deletion.
// It is populated during the first pass over the graph, controlled by // It is populated during the first pass over the graph, controlled by
// |collect_markers_|. // |collect_markers_|.
ZoneList<HEnvironmentMarker*>* markers_; ZoneList<HEnvironmentMarker*> markers_;
bool collect_markers_; bool collect_markers_;
// Keeps track of the last simulate seen, as well as the environment slots // Keeps track of the last simulate seen, as well as the environment slots
// for which a new live range has started since (so they must not be zapped // for which a new live range has started since (so they must not be zapped
// in that simulate when the end of another live range of theirs is found). // in that simulate when the end of another live range of theirs is found).
HSimulate* last_simulate_; HSimulate* last_simulate_;
BitVector* went_live_since_last_simulate_; BitVector went_live_since_last_simulate_;
DISALLOW_COPY_AND_ASSIGN(HEnvironmentLivenessAnalysisPhase);
}; };
......
...@@ -3962,9 +3962,8 @@ bool HGraph::Optimize(SmartArrayPointer<char>* bailout_reason) { ...@@ -3962,9 +3962,8 @@ bool HGraph::Optimize(SmartArrayPointer<char>* bailout_reason) {
Verify(true); Verify(true);
#endif #endif
if (FLAG_analyze_environment_liveness) { if (FLAG_analyze_environment_liveness && maximum_environment_size() != 0) {
EnvironmentSlotLivenessAnalyzer esla(this); Run<HEnvironmentLivenessAnalysisPhase>();
esla.AnalyzeAndTrim();
} }
PropagateDeoptimizingMark(); PropagateDeoptimizingMark();
......
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