Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(182)

Unified Diff: src/data-flow.h

Issue 1155006: Include initial definitions in reaching definitions analysis. (Closed)
Patch Set: Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler.cc ('k') | src/data-flow.cc » ('j') | src/data-flow.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/data-flow.h
diff --git a/src/data-flow.h b/src/data-flow.h
index 74a370c0da446898e94feb6ac336e9243f4e5973..f380702c77ef32cd0915e9d8daffe1da18d776c8 100644
--- a/src/data-flow.h
+++ b/src/data-flow.h
@@ -485,19 +485,20 @@ class FlowGraph BASE_EMBEDDED {
// traversal orders as a byproduct.
class FlowGraphBuilder: public AstVisitor {
public:
- FlowGraphBuilder()
+ explicit FlowGraphBuilder(int variable_count)
: graph_(FlowGraph::Empty()),
global_exit_(NULL),
preorder_(4),
postorder_(4),
- definitions_(4) {
+ variable_count_(variable_count),
+ body_definitions_(4) {
}
void Build(FunctionLiteral* lit);
FlowGraph* graph() { return &graph_; }
ZoneList<Node*>* postorder() { return &postorder_; }
- ZoneList<Expression*>* definitions() { return &definitions_; }
+ ZoneList<Expression*>* body_definitions() { return &body_definitions_; }
private:
ExitNode* global_exit() { return global_exit_; }
@@ -512,11 +513,13 @@ class FlowGraphBuilder: public AstVisitor {
ZoneList<Node*> preorder_;
ZoneList<Node*> postorder_;
- // The flow graph builder collects a list of definitions (assignments and
- // count operations) to stack-allocated variables to use for reaching
- // definitions analysis. AST node numbers in the AST are used to refer
- // into this list.
- ZoneList<Expression*> definitions_;
+ // The flow graph builder collects a list of explicit definitions
+ // (assignments and count operations) to stack-allocated variables to use
+ // for reaching definitions analysis. It does not count the implicit
+ // definition at function entry. AST node numbers in the AST are used to
+ // refer into this list.
+ int variable_count_;
+ ZoneList<Expression*> body_definitions_;
DISALLOW_COPY_AND_ASSIGN(FlowGraphBuilder);
};
@@ -589,15 +592,11 @@ class AssignedVariablesAnalyzer : public AstVisitor {
class ReachingDefinitions BASE_EMBEDDED {
public:
ReachingDefinitions(ZoneList<Node*>* postorder,
- ZoneList<Expression*>* definitions,
+ ZoneList<Expression*>* body_definitions,
int variable_count)
: postorder_(postorder),
- definitions_(definitions),
- variables_(variable_count) {
- int definition_count = definitions->length();
- for (int i = 0; i < variable_count; i++) {
- variables_.Add(new BitVector(definition_count));
- }
+ body_definitions_(body_definitions),
+ variable_count_(variable_count) {
}
static int IndexFor(Variable* var, int variable_count);
@@ -609,10 +608,9 @@ class ReachingDefinitions BASE_EMBEDDED {
ZoneList<Node*>* postorder_;
// A list of all the definitions in the body.
- ZoneList<Expression*>* definitions_;
+ ZoneList<Expression*>* body_definitions_;
- // For each variable, the set of all its definitions.
- List<BitVector*> variables_;
+ int variable_count_;
DISALLOW_COPY_AND_ASSIGN(ReachingDefinitions);
};
« no previous file with comments | « src/compiler.cc ('k') | src/data-flow.cc » ('j') | src/data-flow.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698