| Index: pkg/compiler/lib/src/ssa/ssa_tracer.dart
|
| diff --git a/pkg/compiler/lib/src/ssa/ssa_tracer.dart b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
|
| index 4758afdc07f0083db88972548e5b17fcc43f067b..0b35432aeaf76d2eb96930d6cf8c788289df46cf 100644
|
| --- a/pkg/compiler/lib/src/ssa/ssa_tracer.dart
|
| +++ b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
|
| @@ -160,29 +160,29 @@ class HInstructionStringifier implements HVisitor<String> {
|
| return "Boolify: ${temporaryId(node.inputs[0])}";
|
| }
|
|
|
| - String handleInvokeBinary(HInvokeBinary node, String op) {
|
| + String handleInvokeBinary(HInvokeBinary node, String opcode) {
|
| String left = temporaryId(node.left);
|
| String right= temporaryId(node.right);
|
| - return '$left $op $right';
|
| + return '$opcode: $left $right';
|
| }
|
|
|
| - String visitAdd(HAdd node) => handleInvokeBinary(node, '+');
|
| + String visitAdd(HAdd node) => handleInvokeBinary(node, 'Add');
|
|
|
| - String visitBitAnd(HBitAnd node) => handleInvokeBinary(node, '&');
|
| + String visitBitAnd(HBitAnd node) => handleInvokeBinary(node, 'BitAnd');
|
|
|
| String visitBitNot(HBitNot node) {
|
| String operand = temporaryId(node.operand);
|
| - return "~$operand";
|
| + return "BitNot: $operand";
|
| }
|
|
|
| - String visitBitOr(HBitOr node) => handleInvokeBinary(node, '|');
|
| + String visitBitOr(HBitOr node) => handleInvokeBinary(node, 'BitOr');
|
|
|
| - String visitBitXor(HBitXor node) => handleInvokeBinary(node, '^');
|
| + String visitBitXor(HBitXor node) => handleInvokeBinary(node, 'BitXor');
|
|
|
| String visitBoundsCheck(HBoundsCheck node) {
|
| String lengthId = temporaryId(node.length);
|
| String indexId = temporaryId(node.index);
|
| - return "Bounds check: length = $lengthId, index = $indexId";
|
| + return "BoundsCheck: length = $lengthId, index = $indexId";
|
| }
|
|
|
| String visitBreak(HBreak node) {
|
| @@ -193,7 +193,7 @@ class HInstructionStringifier implements HVisitor<String> {
|
| return "Break: (B${target.id})";
|
| }
|
|
|
| - String visitConstant(HConstant constant) => "Constant ${constant.constant}";
|
| + String visitConstant(HConstant constant) => "Constant: ${constant.constant}";
|
|
|
| String visitContinue(HContinue node) {
|
| HBasicBlock target = currentBlock.successors[0];
|
| @@ -203,22 +203,22 @@ class HInstructionStringifier implements HVisitor<String> {
|
| return "Continue: (B${target.id})";
|
| }
|
|
|
| - String visitDivide(HDivide node) => handleInvokeBinary(node, '/');
|
| + String visitDivide(HDivide node) => handleInvokeBinary(node, 'Divide');
|
|
|
| - String visitExit(HExit node) => "exit";
|
| + String visitExit(HExit node) => "Exit";
|
|
|
| String visitFieldGet(HFieldGet node) {
|
| if (node.isNullCheck) {
|
| - return 'null check on ${temporaryId(node.receiver)}';
|
| + return 'FieldGet: NullCheck ${temporaryId(node.receiver)}';
|
| }
|
| String fieldName = node.element.name;
|
| - return 'field get ${temporaryId(node.receiver)}.$fieldName';
|
| + return 'FieldGet: ${temporaryId(node.receiver)}.$fieldName';
|
| }
|
|
|
| String visitFieldSet(HFieldSet node) {
|
| String valueId = temporaryId(node.value);
|
| String fieldName = node.element.name;
|
| - return 'field set ${temporaryId(node.receiver)}.$fieldName to $valueId';
|
| + return 'FieldSet: ${temporaryId(node.receiver)}.$fieldName to $valueId';
|
| }
|
|
|
| String visitReadModifyWrite(HReadModifyWrite node) {
|
| @@ -227,23 +227,23 @@ class HInstructionStringifier implements HVisitor<String> {
|
| String op = node.jsOp;
|
| if (node.isAssignOp) {
|
| String valueId = temporaryId(node.value);
|
| - return 'field-update $receiverId.$fieldName $op= $valueId';
|
| + return 'ReadModifyWrite: $receiverId.$fieldName $op= $valueId';
|
| } else if (node.isPreOp) {
|
| - return 'field-update $op$receiverId.$fieldName';
|
| + return 'ReadModifyWrite: $op$receiverId.$fieldName';
|
| } else {
|
| - return 'field-update $receiverId.$fieldName$op';
|
| + return 'ReadModifyWrite: $receiverId.$fieldName$op';
|
| }
|
| }
|
|
|
| String visitLocalGet(HLocalGet node) {
|
| String localName = node.variable.name;
|
| - return 'local get ${temporaryId(node.local)}.$localName';
|
| + return 'LocalGet: ${temporaryId(node.local)}.$localName';
|
| }
|
|
|
| String visitLocalSet(HLocalSet node) {
|
| String valueId = temporaryId(node.value);
|
| String localName = node.variable.name;
|
| - return 'local set ${temporaryId(node.local)}.$localName to $valueId';
|
| + return 'LocalSet: ${temporaryId(node.local)}.$localName to $valueId';
|
| }
|
|
|
| String visitGoto(HGoto node) {
|
| @@ -251,11 +251,11 @@ class HInstructionStringifier implements HVisitor<String> {
|
| return "Goto: (B${target.id})";
|
| }
|
|
|
| - String visitGreater(HGreater node) => handleInvokeBinary(node, '>');
|
| + String visitGreater(HGreater node) => handleInvokeBinary(node, 'Greater');
|
| String visitGreaterEqual(HGreaterEqual node) {
|
| - return handleInvokeBinary(node, '>=');
|
| + return handleInvokeBinary(node, 'GreaterEqual');
|
| }
|
| - String visitIdentity(HIdentity node) => handleInvokeBinary(node, '===');
|
| + String visitIdentity(HIdentity node) => handleInvokeBinary(node, 'Identity');
|
|
|
| String visitIf(HIf node) {
|
| HBasicBlock thenBlock = currentBlock.successors[0];
|
| @@ -264,8 +264,8 @@ class HInstructionStringifier implements HVisitor<String> {
|
| return "If ($conditionId): (B${thenBlock.id}) else (B${elseBlock.id})";
|
| }
|
|
|
| - String visitGenericInvoke(String invokeType, String functionName,
|
| - List<HInstruction> arguments) {
|
| + String handleGenericInvoke(String invokeType, String functionName,
|
| + List<HInstruction> arguments) {
|
| StringBuffer argumentsString = new StringBuffer();
|
| for (int i = 0; i < arguments.length; i++) {
|
| if (i != 0) argumentsString.write(", ");
|
| @@ -293,59 +293,60 @@ class HInstructionStringifier implements HVisitor<String> {
|
| JavaScriptBackend backend = compiler.backend;
|
| String cls =
|
| backend.namer.suffixForGetInterceptor(node.interceptedClasses);
|
| - return "Intercept ($cls): $value";
|
| + return "Interceptor ($cls): $value";
|
| }
|
| - return "Intercept: $value";
|
| + return "Interceptor: $value";
|
| }
|
|
|
| String visitInvokeClosure(HInvokeClosure node)
|
| - => visitInvokeDynamic(node, "closure");
|
| + => handleInvokeDynamic(node, "InvokeClosure");
|
|
|
| - String visitInvokeDynamic(HInvokeDynamic invoke, String kind) {
|
| + String handleInvokeDynamic(HInvokeDynamic invoke, String kind) {
|
| String receiver = temporaryId(invoke.receiver);
|
| String name = invoke.selector.name;
|
| - String target = "($kind) $receiver.$name";
|
| + String target = "$receiver.$name";
|
| int offset = HInvoke.ARGUMENTS_OFFSET;
|
| List arguments = invoke.inputs.sublist(offset);
|
| - return visitGenericInvoke("Invoke", target, arguments) +
|
| + return handleGenericInvoke(kind, target, arguments) +
|
| "(${invoke.mask})";
|
| }
|
|
|
| String visitInvokeDynamicMethod(HInvokeDynamicMethod node)
|
| - => visitInvokeDynamic(node, "method");
|
| + => handleInvokeDynamic(node, "InvokeDynamicMethod");
|
| String visitInvokeDynamicGetter(HInvokeDynamicGetter node)
|
| - => visitInvokeDynamic(node, "get");
|
| + => handleInvokeDynamic(node, "InvokeDynamicGetter");
|
| String visitInvokeDynamicSetter(HInvokeDynamicSetter node)
|
| - => visitInvokeDynamic(node, "set");
|
| + => handleInvokeDynamic(node, "InvokeDynamicSetter");
|
|
|
| String visitInvokeStatic(HInvokeStatic invoke) {
|
| String target = invoke.element.name;
|
| - return visitGenericInvoke("Invoke", target, invoke.inputs);
|
| + return handleGenericInvoke("InvokeStatic", target, invoke.inputs);
|
| }
|
|
|
| String visitInvokeSuper(HInvokeSuper invoke) {
|
| String target = invoke.element.name;
|
| - return visitGenericInvoke("Invoke super", target, invoke.inputs);
|
| + return handleGenericInvoke("InvokeSuper", target, invoke.inputs);
|
| }
|
|
|
| String visitInvokeConstructorBody(HInvokeConstructorBody invoke) {
|
| String target = invoke.element.name;
|
| - return visitGenericInvoke("Invoke constructor body", target, invoke.inputs);
|
| + return handleGenericInvoke("InvokeConstructorBody", target, invoke.inputs);
|
| }
|
|
|
| String visitForeignCode(HForeignCode foreign) {
|
| - return visitGenericInvoke("Foreign", "${foreign.codeTemplate.ast}",
|
| + return handleGenericInvoke("ForeignCode", "${foreign.codeTemplate.ast}",
|
| foreign.inputs);
|
| }
|
|
|
| String visitForeignNew(HForeignNew node) {
|
| - return visitGenericInvoke("New",
|
| + return handleGenericInvoke("ForeignNew",
|
| "${node.element.name}",
|
| node.inputs);
|
| }
|
|
|
| - String visitLess(HLess node) => handleInvokeBinary(node, '<');
|
| - String visitLessEqual(HLessEqual node) => handleInvokeBinary(node, '<=');
|
| + String visitLess(HLess node) => handleInvokeBinary(node, 'Less');
|
| + String visitLessEqual(HLessEqual node) =>
|
| + handleInvokeBinary(node, 'LessEqual');
|
|
|
| String visitLiteralList(HLiteralList node) {
|
| StringBuffer elementsString = new StringBuffer();
|
| @@ -353,65 +354,67 @@ class HInstructionStringifier implements HVisitor<String> {
|
| if (i != 0) elementsString.write(", ");
|
| elementsString.write(temporaryId(node.inputs[i]));
|
| }
|
| - return "Literal list: [$elementsString]";
|
| + return "LiteralList: [$elementsString]";
|
| }
|
|
|
| String visitLoopBranch(HLoopBranch branch) {
|
| HBasicBlock bodyBlock = currentBlock.successors[0];
|
| HBasicBlock exitBlock = currentBlock.successors[1];
|
| String conditionId = temporaryId(branch.inputs[0]);
|
| - return "While ($conditionId): (B${bodyBlock.id}) then (B${exitBlock.id})";
|
| + return
|
| + "LoopBranch ($conditionId): (B${bodyBlock.id}) then (B${exitBlock.id})";
|
| }
|
|
|
| - String visitMultiply(HMultiply node) => handleInvokeBinary(node, '*');
|
| + String visitMultiply(HMultiply node) => handleInvokeBinary(node, 'Multiply');
|
|
|
| String visitNegate(HNegate node) {
|
| String operand = temporaryId(node.operand);
|
| - return "-$operand";
|
| + return "Negate: $operand";
|
| }
|
|
|
| String visitNot(HNot node) => "Not: ${temporaryId(node.inputs[0])}";
|
|
|
| String visitParameterValue(HParameterValue node) {
|
| - return "p${node.sourceElement.name}";
|
| + return "ParameterValue: ${node.sourceElement.name}";
|
| }
|
|
|
| String visitLocalValue(HLocalValue node) {
|
| - return "l${node.sourceElement.name}";
|
| + return "LocalValue: ${node.sourceElement.name}";
|
| }
|
|
|
| String visitPhi(HPhi phi) {
|
| StringBuffer buffer = new StringBuffer();
|
| - buffer.write("Phi(");
|
| + buffer.write("Phi: ");
|
| for (int i = 0; i < phi.inputs.length; i++) {
|
| if (i > 0) buffer.write(", ");
|
| buffer.write(temporaryId(phi.inputs[i]));
|
| }
|
| - buffer.write(")");
|
| return buffer.toString();
|
| }
|
|
|
| String visitRef(HRef node) {
|
| - return 'Ref ${temporaryId(node.value)}';
|
| + return 'Ref: ${temporaryId(node.value)}';
|
| }
|
|
|
| - String visitReturn(HReturn node) => "Return ${temporaryId(node.inputs[0])}";
|
| + String visitReturn(HReturn node) => "Return: ${temporaryId(node.inputs[0])}";
|
|
|
| - String visitShiftLeft(HShiftLeft node) => handleInvokeBinary(node, '<<');
|
| - String visitShiftRight(HShiftRight node) => handleInvokeBinary(node, '>>');
|
| + String visitShiftLeft(HShiftLeft node) =>
|
| + handleInvokeBinary(node, 'ShiftLeft');
|
| + String visitShiftRight(HShiftRight node) =>
|
| + handleInvokeBinary(node, 'ShiftRight');
|
|
|
| String visitStatic(HStatic node)
|
| - => "Static ${node.element.name}";
|
| + => "Static: ${node.element.name}";
|
|
|
| String visitLazyStatic(HLazyStatic node)
|
| - => "LazyStatic ${node.element.name}";
|
| + => "LazyStatic: ${node.element.name}";
|
|
|
| String visitOneShotInterceptor(HOneShotInterceptor node)
|
| - => visitInvokeDynamic(node, "one shot interceptor");
|
| + => handleInvokeDynamic(node, "OneShotInterceptor");
|
|
|
| String visitStaticStore(HStaticStore node) {
|
| String lhs = node.element.name;
|
| - return "Static $lhs = ${temporaryId(node.inputs[0])}";
|
| + return "StaticStore: $lhs = ${temporaryId(node.inputs[0])}";
|
| }
|
|
|
| String visitStringConcat(HStringConcat node) {
|
| @@ -421,10 +424,10 @@ class HInstructionStringifier implements HVisitor<String> {
|
| }
|
|
|
| String visitStringify(HStringify node) {
|
| - return "Stringify ${temporaryId(node.inputs[0])}";
|
| + return "Stringify: ${temporaryId(node.inputs[0])}";
|
| }
|
|
|
| - String visitSubtract(HSubtract node) => handleInvokeBinary(node, '-');
|
| + String visitSubtract(HSubtract node) => handleInvokeBinary(node, 'Subtract');
|
|
|
| String visitSwitch(HSwitch node) {
|
| StringBuffer buf = new StringBuffer();
|
| @@ -442,20 +445,20 @@ class HInstructionStringifier implements HVisitor<String> {
|
| return buf.toString();
|
| }
|
|
|
| - String visitThis(HThis node) => "this";
|
| + String visitThis(HThis node) => "This";
|
|
|
| - String visitThrow(HThrow node) => "Throw ${temporaryId(node.inputs[0])}";
|
| + String visitThrow(HThrow node) => "Throw: ${temporaryId(node.inputs[0])}";
|
|
|
| String visitThrowExpression(HThrowExpression node) {
|
| - return "ThrowExpression ${temporaryId(node.inputs[0])}";
|
| + return "ThrowExpression: ${temporaryId(node.inputs[0])}";
|
| }
|
|
|
| String visitTruncatingDivide(HTruncatingDivide node) {
|
| - return handleInvokeBinary(node, '~/');
|
| + return handleInvokeBinary(node, 'TruncatingDivide');
|
| }
|
|
|
| String visitExitTry(HExitTry node) {
|
| - return "Exit try";
|
| + return "ExitTry";
|
| }
|
|
|
| String visitTry(HTry node) {
|
| @@ -477,12 +480,12 @@ class HInstructionStringifier implements HVisitor<String> {
|
|
|
| String visitIs(HIs node) {
|
| String type = node.typeExpression.toString();
|
| - return "TypeTest: ${temporaryId(node.expression)} is $type";
|
| + return "Is: ${temporaryId(node.expression)} is $type";
|
| }
|
|
|
| String visitIsViaInterceptor(HIsViaInterceptor node) {
|
| String type = node.typeExpression.toString();
|
| - return "TypeTest: ${temporaryId(node.inputs[0])} is $type";
|
| + return "IsViaInterceptor: ${temporaryId(node.inputs[0])} is $type";
|
| }
|
|
|
| String visitTypeConversion(HTypeConversion node) {
|
| @@ -529,10 +532,10 @@ class HInstructionStringifier implements HVisitor<String> {
|
| }
|
|
|
| String visitAwait(HAwait node) {
|
| - return "await ${temporaryId(node.inputs[0])}";
|
| + return "Await: ${temporaryId(node.inputs[0])}";
|
| }
|
|
|
| String visitYield(HYield node) {
|
| - return "yield${node.hasStar ? "*" : ""} ${temporaryId(node.inputs[0])}";
|
| + return "Yield${node.hasStar ? "*" : ""}: ${temporaryId(node.inputs[0])}";
|
| }
|
| }
|
|
|