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

Unified Diff: pkg/compiler/lib/src/ssa/builder_kernel.dart

Issue 2954463002: Refactoring to prepare for kernel based jump targets (Closed)
Patch Set: Created 3 years, 6 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
Index: pkg/compiler/lib/src/ssa/builder_kernel.dart
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 3b99d41a9118892dca5ed2581417a263c1eec67b..8238709d3051ced7f01cfe45e88ee96a9c12f13c 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -911,6 +911,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
forStatement,
localsMap.getClosureRepresentationInfoForLoop(
closureDataLookup, forStatement),
+ localsMap.getJumpTargetForFor(forStatement),
buildInitializer,
buildCondition,
buildUpdate,
@@ -1040,6 +1041,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
forInStatement,
localsMap.getClosureRepresentationInfoForLoop(
closureDataLookup, forInStatement),
+ localsMap.getJumpTargetForForIn(forInStatement),
buildInitializer,
buildCondition,
buildUpdate,
@@ -1091,6 +1093,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
forInStatement,
localsMap.getClosureRepresentationInfoForLoop(
closureDataLookup, forInStatement),
+ localsMap.getJumpTargetForForIn(forInStatement),
buildInitializer,
buildCondition,
() {},
@@ -1138,6 +1141,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
forInStatement,
localsMap.getClosureRepresentationInfoForLoop(
closureDataLookup, forInStatement),
+ localsMap.getJumpTargetForForIn(forInStatement),
buildInitializer,
buildCondition,
buildUpdate,
@@ -1189,6 +1193,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
whileStatement,
localsMap.getClosureRepresentationInfoForLoop(
closureDataLookup, whileStatement),
+ localsMap.getJumpTargetForWhile(whileStatement),
() {},
buildCondition,
() {}, () {
@@ -1204,11 +1209,11 @@ class KernelSsaGraphBuilder extends ir.Visitor
LoopClosureRepresentationInfo loopClosureInfo = localsMap
.getClosureRepresentationInfoForLoop(closureDataLookup, doStatement);
localsHandler.startLoop(loopClosureInfo);
- JumpHandler jumpHandler = loopHandler.beginLoopHeader(doStatement);
+ JumpTarget target = localsMap.getJumpTargetForDo(doStatement);
+ JumpHandler jumpHandler = loopHandler.beginLoopHeader(doStatement, target);
HLoopInformation loopInfo = current.loopInformation;
HBasicBlock loopEntryBlock = current;
HBasicBlock bodyEntryBlock = current;
- JumpTarget target = localsMap.getJumpTarget(doStatement);
bool hasContinues = target != null && target.isContinueTarget;
if (hasContinues) {
// Add extra block to hang labels on.
@@ -1322,9 +1327,9 @@ class KernelSsaGraphBuilder extends ir.Visitor
// Since the body of the loop has a break, we attach a synthesized label
// to the body.
SubGraph bodyGraph = new SubGraph(bodyEntryBlock, bodyExitBlock);
- JumpTarget target = localsMap.getJumpTarget(doStatement);
- LabelDefinition label = target.addLabel(null, 'loop');
- label.setBreakTarget();
+ JumpTarget target = localsMap.getJumpTargetForDo(doStatement);
+ LabelDefinition label =
+ target.addLabel(null, 'loop', isBreakTarget: true);
HLabeledBlockInformation info = new HLabeledBlockInformation(
new HSubGraphBlockInformation(bodyGraph), <LabelDefinition>[label]);
loopEntryBlock.setBlockFlow(info, current);
@@ -1446,8 +1451,8 @@ class KernelSsaGraphBuilder extends ir.Visitor
/// [isLoopJump] is true when the jump handler is for a loop. This is used
/// to distinguish the synthesized loop created for a switch statement with
/// continue statements from simple switch statements.
- JumpHandler createJumpHandler(ir.TreeNode node, {bool isLoopJump: false}) {
- JumpTarget target = localsMap.getJumpTarget(node);
+ JumpHandler createJumpHandler(ir.TreeNode node, JumpTarget target,
+ {bool isLoopJump: false}) {
if (target == null) {
// No breaks or continues to this node.
return new NullJumpHandler(reporter);
@@ -1463,7 +1468,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
void visitBreakStatement(ir.BreakStatement breakStatement) {
assert(!isAborted());
handleInTryStatement();
- JumpTarget target = localsMap.getJumpTarget(breakStatement.target);
+ JumpTarget target = localsMap.getJumpTargetForBreak(breakStatement);
assert(target != null);
JumpHandler handler = jumpTargets[target];
assert(handler != null);
@@ -1486,7 +1491,8 @@ class KernelSsaGraphBuilder extends ir.Visitor
body.accept(this);
return;
}
- JumpHandler handler = createJumpHandler(labeledStatement);
+ JumpHandler handler = createJumpHandler(
+ labeledStatement, localsMap.getJumpTargetForLabel(labeledStatement));
LocalsHandler beforeLocals = new LocalsHandler.from(localsHandler);
@@ -1536,7 +1542,8 @@ class KernelSsaGraphBuilder extends ir.Visitor
void visitContinueSwitchStatement(
ir.ContinueSwitchStatement switchStatement) {
handleInTryStatement();
- JumpTarget target = localsMap.getJumpTarget(switchStatement.target);
+ JumpTarget target =
+ localsMap.getJumpTargetForContinueSwitch(switchStatement);
assert(target != null);
JumpHandler handler = jumpTargets[target];
assert(handler != null);
@@ -1563,7 +1570,8 @@ class KernelSsaGraphBuilder extends ir.Visitor
switchIndex++;
}
- JumpHandler jumpHandler = createJumpHandler(switchStatement);
+ JumpHandler jumpHandler = createJumpHandler(
+ switchStatement, localsMap.getJumpTargetForSwitch(switchStatement));
if (!hasContinue) {
// If the switch statement has no switch cases targeted by continue
// statements we encode the switch statement directly.
@@ -1656,7 +1664,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
// This is because JS does not have this same "continue label" semantics so
// we encode it in the form of a state machine.
- JumpTarget switchTarget = localsMap.getJumpTarget(switchStatement);
+ JumpTarget switchTarget = localsMap.getJumpTargetForSwitch(switchStatement);
localsHandler.updateLocal(switchTarget, graph.addConstantNull(closedWorld));
var switchCases = switchStatement.cases;
@@ -1725,6 +1733,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
switchStatement,
localsMap.getClosureRepresentationInfoForLoop(
closureDataLookup, switchStatement),
+ switchTarget,
() {},
buildCondition,
() {},

Powered by Google App Engine
This is Rietveld 408576698