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

Unified Diff: pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart

Issue 1068243002: Overhaul tree IR visitor and rename IR classes. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Add dummy use for RootVisitor and InitializerVisitor without arguments Created 5 years, 8 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 | « pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart ('k') | pkg/compiler/lib/src/cps_ir/optimizers.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart
index f15418f2188f2903ea1b6b692149abfaff6cc589..92b81e2c76378684c06be9124bad8bbac488b2d4 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart
@@ -21,63 +21,60 @@ class IRTracer extends TracerUtil implements cps_ir.Visitor {
visit(cps_ir.Node node) => node.accept(this);
- void traceGraph(String name, cps_ir.ExecutableDefinition graph) {
+ void traceGraph(String name, cps_ir.RootNode node) {
+ if (node.isEmpty) return; // Don't bother printing an empty trace.
tag("cfg", () {
printProperty("name", name);
- visit(graph);
+
+ names = new Names();
+ BlockCollector builder = new BlockCollector(names);
+ builder.visit(node);
+
+ for (Block block in builder.entries) {
+ printBlock(block, entryPointParameters: node.parameters);
+ }
+ for (Block block in builder.cont2block.values) {
+ printBlock(block);
+ }
+ names = null;
});
}
// Temporary field used during tree walk
Names names;
- printDefinition(cps_ir.ExecutableDefinition node) {
- names = new Names();
- BlockCollector builder = new BlockCollector(names);
- builder.visit(node);
-
- for (Block block in builder.entries) {
- printBlock(block);
- }
- for (Block block in builder.cont2block.values) {
- printBlock(block);
- }
- names = null;
- }
-
visitFieldDefinition(cps_ir.FieldDefinition node) {
- if (node.hasInitializer) {
- printDefinition(node);
- }
+ unexpectedNode(node);
}
visitFunctionDefinition(cps_ir.FunctionDefinition node) {
- if (node.isAbstract) return;
- printDefinition(node);
+ unexpectedNode(node);
}
visitConstructorDefinition(cps_ir.ConstructorDefinition node) {
- if (node.isAbstract) return;
- printDefinition(node);
+ unexpectedNode(node);
}
- // Bodies and initializers are not visited. They contain continuations which
- // are found by a BlockCollector, then those continuations are processed by
- // this visitor.
- unexpectedNode(cps_ir.Node node) {
- throw 'The IR tracer reached an unexpected IR instruction: $node';
+ visitFieldInitializer(cps_ir.FieldInitializer node) {
+ unexpectedNode(node);
}
- visitRunnableBody(cps_ir.RunnableBody node) {
+ visitSuperInitializer(cps_ir.SuperInitializer node) {
unexpectedNode(node);
}
- visitFieldInitializer(cps_ir.FieldInitializer node) {
+
+ visitBody(cps_ir.Body node) {
unexpectedNode(node);
}
- visitSuperInitializer(cps_ir.SuperInitializer node) {
- unexpectedNode(node);
+
+ // Bodies and initializers are not visited. They contain continuations which
+ // are found by a BlockCollector, then those continuations are processed by
+ // this visitor.
+ unexpectedNode(cps_ir.Node node) {
+ throw 'The IR tracer reached an unexpected IR instruction: $node';
}
+
int countUses(cps_ir.Definition definition) {
int count = 0;
cps_ir.Reference ref = definition.firstRef;
@@ -88,7 +85,9 @@ class IRTracer extends TracerUtil implements cps_ir.Visitor {
return count;
}
- printBlock(Block block) {
+ /// If [entryPointParameters] is given, this block is an entry point
+ /// and [entryPointParameters] is the list of function parameters.
+ printBlock(Block block, {List<cps_ir.Definition> entryPointParameters}) {
tag("block", () {
printProperty("name", block.name);
printProperty("from_bci", -1);
@@ -104,6 +103,10 @@ class IRTracer extends TracerUtil implements cps_ir.Visitor {
});
});
tag("HIR", () {
+ if (entryPointParameters != null) {
+ String params = entryPointParameters.map(names.name).join(', ');
+ printStmt('x0', 'Entry ($params)');
+ }
for (cps_ir.Parameter param in block.parameters) {
String name = names.name(param);
printStmt(name, "Parameter $name [useCount=${countUses(param)}]");
@@ -412,7 +415,7 @@ class BlockCollector implements cps_ir.Visitor {
final Map<cps_ir.Continuation, Block> cont2block =
<cps_ir.Continuation, Block>{};
final Set<Block> entries = new Set<Block>();
- Block current_block;
+ Block currentBlock;
Names names;
BlockCollector(this.names);
@@ -429,9 +432,7 @@ class BlockCollector implements cps_ir.Visitor {
visit(cps_ir.Node node) => node.accept(this);
visitFieldDefinition(cps_ir.FieldDefinition node) {
- if (node.hasInitializer) {
- visit(node.body);
- }
+ visit(node.body);
}
visitFunctionDefinition(cps_ir.FunctionDefinition node) {
@@ -439,12 +440,13 @@ class BlockCollector implements cps_ir.Visitor {
}
visitConstructorDefinition(cps_ir.ConstructorDefinition node) {
+ node.initializers.forEach(visit);
visit(node.body);
}
- visitRunnableBody(cps_ir.RunnableBody node) {
- current_block = new Block(names.name(node), [], node.body);
- entries.add(current_block);
+ visitBody(cps_ir.Body node) {
+ currentBlock = new Block(names.name(node), [], node.body);
+ entries.add(currentBlock);
visit(node.body);
}
@@ -477,7 +479,7 @@ class BlockCollector implements cps_ir.Visitor {
void addEdgeToContinuation(cps_ir.Reference continuation) {
cps_ir.Definition target = continuation.definition;
if (target is cps_ir.Continuation && !target.isReturnContinuation) {
- current_block.addEdgeTo(getBlock(target));
+ currentBlock.addEdgeTo(getBlock(target));
}
}
@@ -520,11 +522,11 @@ class BlockCollector implements cps_ir.Visitor {
visitBranch(cps_ir.Branch exp) {
cps_ir.Continuation trueTarget = exp.trueContinuation.definition;
if (!trueTarget.isReturnContinuation) {
- current_block.addEdgeTo(getBlock(trueTarget));
+ currentBlock.addEdgeTo(getBlock(trueTarget));
}
cps_ir.Continuation falseTarget = exp.falseContinuation.definition;
if (!falseTarget.isReturnContinuation) {
- current_block.addEdgeTo(getBlock(falseTarget));
+ currentBlock.addEdgeTo(getBlock(falseTarget));
}
}
@@ -533,10 +535,10 @@ class BlockCollector implements cps_ir.Visitor {
}
visitContinuation(cps_ir.Continuation c) {
- var old_node = current_block;
- current_block = getBlock(c);
+ var old_node = currentBlock;
+ currentBlock = getBlock(c);
visit(c.body);
- current_block = old_node;
+ currentBlock = old_node;
}
// Primitives and conditions are not visited when searching for blocks.
« no previous file with comments | « pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart ('k') | pkg/compiler/lib/src/cps_ir/optimizers.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698