Skip to content

Commit

Permalink
[dart2js] Migrate ssa/tracer.dart, finish migrating src/tracer.dart
Browse files Browse the repository at this point in the history
Change-Id: Ie6a69b5e655cb1e01f3f0ba337db69d66076722d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/268110
Reviewed-by: Nate Biggs <[email protected]>
Commit-Queue: Stephen Adams <[email protected]>
  • Loading branch information
rakudrama authored and Commit Queue committed Nov 7, 2022
1 parent dab3697 commit 890ec93
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 58 deletions.
2 changes: 1 addition & 1 deletion pkg/compiler/lib/src/js_backend/codegen_inputs.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import '../tracer_interfaces.dart';
import '../tracer.dart' show Tracer;
import 'checked_mode_helpers.dart';
import 'namer_migrated.dart';
import 'runtime_types_codegen.dart';
Expand Down
2 changes: 1 addition & 1 deletion pkg/compiler/lib/src/ssa/builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,7 @@ class KernelSsaGraphBuilder extends ir.Visitor<void> with ir.VisitorVoidMixin {

if (_tracer.isEnabled) {
MemberEntity member = _initialTargetElement;
String name = member.name;
String name = member.name ?? '<null>';
if (member.isInstanceMember ||
member is ConstructorEntity ||
member.isStatic) {
Expand Down
2 changes: 1 addition & 1 deletion pkg/compiler/lib/src/ssa/codegen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ import '../js_model/js_world.dart' show JClosedWorld;
import '../js_model/type_recipe.dart';
import '../native/behavior.dart';
import '../options.dart';
import '../tracer_interfaces.dart';
import '../tracer.dart' show Tracer;
import '../universe/call_structure.dart' show CallStructure;
import '../universe/selector.dart' show Selector;
import '../universe/use.dart' show ConstantUse, DynamicUse, StaticUse, TypeUse;
Expand Down
56 changes: 27 additions & 29 deletions pkg/compiler/lib/src/ssa/tracer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.10

library ssa.tracer;

import '../../compiler_api.dart' as api show OutputSink;
Expand Down Expand Up @@ -89,7 +87,7 @@ class HTracer extends HGraphVisitor with TracerUtil {

void addInstructions(
HInstructionStringifier stringifier, HInstructionList list) {
for (HInstruction instruction = list.first;
for (HInstruction? instruction = list.first;
instruction != null;
instruction = instruction.next) {
int bci = 0;
Expand All @@ -107,7 +105,7 @@ class HTracer extends HGraphVisitor with TracerUtil {
void visitBasicBlock(HBasicBlock block) {
HInstructionStringifier stringifier =
HInstructionStringifier(block, closedWorld);
assert(block.id != null);
assert(block.id >= 0);
tag("block", () {
printProperty("name", "B${block.id}");
printProperty("from_bci", -1);
Expand All @@ -117,7 +115,7 @@ class HTracer extends HGraphVisitor with TracerUtil {
printEmptyProperty("xhandlers");
printEmptyProperty("flags");
if (block.dominator != null) {
printProperty("dominator", "B${block.dominator.id}");
printProperty("dominator", "B${block.dominator!.id}");
}
tag("states", () {
tag("locals", () {
Expand Down Expand Up @@ -247,7 +245,7 @@ class HInstructionStringifier implements HVisitor<String> {
String visitBreak(HBreak node) {
HBasicBlock target = currentBlock.successors[0];
if (node.label != null) {
return "Break ${node.label.labelName}: (B${target.id})";
return "Break ${node.label!.labelName}: (B${target.id})";
}
return "Break: (B${target.id})";
}
Expand All @@ -259,7 +257,7 @@ class HInstructionStringifier implements HVisitor<String> {
String visitContinue(HContinue node) {
HBasicBlock target = currentBlock.successors[0];
if (node.label != null) {
return "Continue ${node.label.labelName}: (B${target.id})";
return "Continue ${node.label!.labelName}: (B${target.id})";
}
return "Continue: (B${target.id})";
}
Expand All @@ -282,14 +280,14 @@ class HInstructionStringifier implements HVisitor<String> {

@override
String visitFieldGet(HFieldGet node) {
String fieldName = node.element.name;
String? fieldName = node.element.name;
return 'FieldGet: ${temporaryId(node.receiver)}.$fieldName';
}

@override
String visitFieldSet(HFieldSet node) {
String valueId = temporaryId(node.value);
String fieldName = node.element.name;
String? fieldName = node.element.name;
return 'FieldSet: ${temporaryId(node.receiver)}.$fieldName to $valueId';
}

Expand All @@ -300,7 +298,7 @@ class HInstructionStringifier implements HVisitor<String> {

@override
String visitReadModifyWrite(HReadModifyWrite node) {
String fieldName = node.element.name;
String? fieldName = node.element.name;
String receiverId = temporaryId(node.receiver);
String op = node.jsOp;
if (node.isAssignOp) {
Expand All @@ -320,14 +318,14 @@ class HInstructionStringifier implements HVisitor<String> {

@override
String visitLocalGet(HLocalGet node) {
String localName = node.variable.name;
String? localName = node.variable.name;
return 'LocalGet: ${temporaryId(node.receiver)}.$localName';
}

@override
String visitLocalSet(HLocalSet node) {
String valueId = temporaryId(node.value);
String localName = node.variable.name;
String? localName = node.variable.name;
return 'LocalSet: ${temporaryId(node.receiver)}.$localName to $valueId';
}

Expand Down Expand Up @@ -356,7 +354,7 @@ class HInstructionStringifier implements HVisitor<String> {
}

String handleGenericInvoke(
String invokeType, String functionName, List<HInstruction> arguments) {
String invokeType, String? functionName, List<HInstruction> arguments) {
StringBuffer argumentsString = StringBuffer();
for (int i = 0; i < arguments.length; i++) {
if (i != 0) argumentsString.write(", ");
Expand Down Expand Up @@ -385,7 +383,7 @@ class HInstructionStringifier implements HVisitor<String> {
String value = temporaryId(node.inputs[0]);
if (node.interceptedClasses != null) {
String cls = suffixForGetInterceptor(closedWorld.commonElements,
closedWorld.nativeData, node.interceptedClasses);
closedWorld.nativeData, node.interceptedClasses!);
return "Interceptor (${cls}): $value";
}
return "Interceptor: $value";
Expand All @@ -398,9 +396,9 @@ class HInstructionStringifier implements HVisitor<String> {
String handleInvokeDynamic(HInvokeDynamic invoke, String kind) {
String receiver = temporaryId(invoke.receiver);
String name = invoke.selector.name;
String target = "$receiver.$name";
String target = '$receiver.$name';
int offset = HInvoke.ARGUMENTS_OFFSET;
List arguments = invoke.inputs.sublist(offset);
List<HInstruction> arguments = invoke.inputs.sublist(offset);
final attributes = {
if (invoke.isInvariant) 'Invariant',
if (invoke.isBoundsSafe) 'BoundSafe',
Expand All @@ -424,33 +422,33 @@ class HInstructionStringifier implements HVisitor<String> {

@override
String visitInvokeStatic(HInvokeStatic invoke) {
String target = invoke.element.name;
String? target = invoke.element.name;
return handleGenericInvoke("InvokeStatic", target, invoke.inputs);
}

@override
String visitInvokeSuper(HInvokeSuper invoke) {
String target = invoke.element.name;
String? target = invoke.element.name;
return handleGenericInvoke("InvokeSuper", target, invoke.inputs);
}

@override
String visitInvokeConstructorBody(HInvokeConstructorBody invoke) {
String target = invoke.element.name;
String? target = invoke.element.name;
return handleGenericInvoke("InvokeConstructorBody", target, invoke.inputs);
}

@override
String visitInvokeGeneratorBody(HInvokeGeneratorBody invoke) {
String target = invoke.element.name;
String? target = invoke.element.name;
return handleGenericInvoke("InvokeGeneratorBody", target, invoke.inputs);
}

@override
String visitInvokeExternal(HInvokeExternal node) {
var target = node.element;
var inputs = node.inputs;
String targetString;
String? targetString;
if (target.isInstanceMember) {
targetString = temporaryId(inputs.first) + '.${target.name}';
inputs = inputs.sublist(1);
Expand Down Expand Up @@ -506,12 +504,12 @@ class HInstructionStringifier implements HVisitor<String> {

@override
String visitParameterValue(HParameterValue node) {
return "ParameterValue: ${node.sourceElement.name}";
return "ParameterValue: ${node.sourceElement!.name}";
}

@override
String visitLocalValue(HLocalValue node) {
return "LocalValue: ${node.sourceElement.name}";
return "LocalValue: ${node.sourceElement!.name}";
}

@override
Expand Down Expand Up @@ -556,7 +554,7 @@ class HInstructionStringifier implements HVisitor<String> {

@override
String visitStaticStore(HStaticStore node) {
String lhs = node.element.name;
String? lhs = node.element.name;
return "StaticStore: $lhs = ${temporaryId(node.inputs[0])}";
}

Expand Down Expand Up @@ -584,7 +582,7 @@ class HInstructionStringifier implements HVisitor<String> {
for (int i = 1; i < node.inputs.length; i++) {
buf.write(temporaryId(node.inputs[i]));
buf.write(": B");
buf.write(node.block.successors[i - 1].id);
buf.write(node.block!.successors[i - 1].id);
buf.write(", ");
}
buf.write("default: B");
Expand Down Expand Up @@ -630,7 +628,7 @@ class HInstructionStringifier implements HVisitor<String> {

String finallyBlock = 'none';
if (node.finallyBlock != null) {
finallyBlock = 'B${node.finallyBlock.id}';
finallyBlock = 'B${node.finallyBlock!.id}';
}

return "Try: $tryBlock, Catch: $catchBlock, Finally: $finallyBlock, "
Expand Down Expand Up @@ -661,8 +659,8 @@ class HInstructionStringifier implements HVisitor<String> {
String visitNullCheck(HNullCheck node) {
String checkedInput = temporaryId(node.checkedInput);
var comments = [
if (node.selector != null) 'for ${node.selector}',
if (node.field != null) 'for ${node.field}',
if (node.selector != null) 'for ${node.selector!}',
if (node.field != null) 'for ${node.field!}',
].join(', ');
return "NullCheck: $checkedInput $comments";
}
Expand Down Expand Up @@ -697,7 +695,7 @@ class HInstructionStringifier implements HVisitor<String> {
String result =
"TypeKnown: ${temporaryId(node.checkedInput)} is ${node.knownType}";
if (node.witness != null) {
result += " witnessed by ${temporaryId(node.witness)}";
result += " witnessed by ${temporaryId(node.witness!)}";
}
return result;
}
Expand Down
28 changes: 11 additions & 17 deletions pkg/compiler/lib/src/tracer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.10

library tracer;

import 'package:kernel/text/indentation.dart' show Indentation;
Expand All @@ -13,24 +11,23 @@ import 'js_model/js_world.dart' show JClosedWorld;
import 'options.dart' show CompilerOptions;
import 'ssa/nodes.dart' as ssa show HGraph;
import 'ssa/tracer.dart' show HTracer;
import 'tracer_interfaces.dart' as interfaces;

String TRACE_FILTER_PATTERN_FOR_TEST;
String? TRACE_FILTER_PATTERN_FOR_TEST;

/// Dumps the intermediate representation after each phase in a format
/// readable by IR Hydra.
class Tracer extends TracerUtil implements interfaces.Tracer {
class Tracer extends TracerUtil {
final JClosedWorld closedWorld;
bool traceActive = false;
@override
final api.OutputSink output;
final RegExp traceFilter;
final api.OutputSink? output;
final RegExp? traceFilter;

Tracer._(this.closedWorld, this.traceFilter, this.output);

factory Tracer(JClosedWorld closedWorld, CompilerOptions options,
api.CompilerOutput compilerOutput) {
String pattern = options.dumpSsaPattern ?? TRACE_FILTER_PATTERN_FOR_TEST;
String? pattern = options.dumpSsaPattern ?? TRACE_FILTER_PATTERN_FOR_TEST;
if (pattern == null) return Tracer._(closedWorld, null, null);
var traceFilter = RegExp(pattern);
var output =
Expand All @@ -42,7 +39,7 @@ class Tracer extends TracerUtil implements interfaces.Tracer {

void traceCompilation(String methodName) {
if (!isEnabled) return;
traceActive = traceFilter.hasMatch(methodName);
traceActive = traceFilter!.hasMatch(methodName);
if (!traceActive) return;
tag("compilation", () {
printProperty("name", methodName);
Expand All @@ -51,30 +48,27 @@ class Tracer extends TracerUtil implements interfaces.Tracer {
});
}

@override
void traceGraph(String name, var irObject) {
if (!traceActive) return;
if (irObject is ssa.HGraph) {
HTracer(output, closedWorld).traceGraph(name, irObject);
HTracer(output!, closedWorld).traceGraph(name, irObject);
}
}

@override
void traceJavaScriptText(String name, String Function() getText) {
if (!traceActive) return;
HTracer(output, closedWorld).traceJavaScriptText(name, getText());
HTracer(output!, closedWorld).traceJavaScriptText(name, getText());
}

@override
void close() {
if (output != null) {
output.close();
output!.close();
}
}
}

abstract class TracerUtil {
api.OutputSink get output;
api.OutputSink? get output;
final Indentation _ind = Indentation();

void tag(String tagName, Function f) {
Expand Down Expand Up @@ -110,7 +104,7 @@ abstract class TracerUtil {
}

void add(String string) {
output.add(string);
output!.add(string);
}

void addIndent() {
Expand Down
9 changes: 0 additions & 9 deletions pkg/compiler/lib/src/tracer_interfaces.dart

This file was deleted.

0 comments on commit 890ec93

Please sign in to comment.