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

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

Issue 1413213004: Move remaining helpers to BackendHelpers (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 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/ssa/codegen.dart ('k') | pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/ssa/interceptor_simplifier.dart
diff --git a/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart b/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart
index d61c49dc5189f817f6eace8d9924be06c79728d1..9cfb66bda09ca6182e050c78dfd49bc305db9a21 100644
--- a/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart
+++ b/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart
@@ -34,6 +34,12 @@ class SsaSimplifyInterceptors extends HBaseVisitor
SsaSimplifyInterceptors(this.compiler, this.constantSystem, this.work);
+ JavaScriptBackend get backend => compiler.backend;
+
+ BackendHelpers get helpers => backend.helpers;
+
+ ClassWorld get classWorld => compiler.world;
+
void visitGraph(HGraph graph) {
this.graph = graph;
visitDominatorTree(graph);
@@ -80,22 +86,20 @@ class SsaSimplifyInterceptors extends HBaseVisitor
bool canUseSelfForInterceptor(HInstruction receiver,
Set<ClassElement> interceptedClasses) {
- JavaScriptBackend backend = compiler.backend;
- ClassWorld classWorld = compiler.world;
if (receiver.canBePrimitive(compiler)) {
// Primitives always need interceptors.
return false;
}
if (receiver.canBeNull() &&
- interceptedClasses.contains(backend.jsNullClass)) {
+ interceptedClasses.contains(helpers.jsNullClass)) {
// Need the JSNull interceptor.
return false;
}
// All intercepted classes extend `Interceptor`, so if the receiver can't be
// a class extending `Interceptor` then it can be called directly.
- return new TypeMask.nonNullSubclass(backend.jsInterceptorClass, classWorld)
+ return new TypeMask.nonNullSubclass(helpers.jsInterceptorClass, classWorld)
.intersection(receiver.instructionType, classWorld)
.isEmpty;
}
@@ -131,29 +135,27 @@ class SsaSimplifyInterceptors extends HBaseVisitor
TypeMask type,
Set<ClassElement> interceptedClasses) {
- ClassWorld classWorld = compiler.world;
- JavaScriptBackend backend = compiler.backend;
if (type.isNullable) {
if (type.isEmpty) {
- return backend.jsNullClass;
+ return helpers.jsNullClass;
}
} else if (type.containsOnlyInt(classWorld)) {
- return backend.jsIntClass;
+ return helpers.jsIntClass;
} else if (type.containsOnlyDouble(classWorld)) {
- return backend.jsDoubleClass;
+ return helpers.jsDoubleClass;
} else if (type.containsOnlyBool(classWorld)) {
- return backend.jsBoolClass;
+ return helpers.jsBoolClass;
} else if (type.containsOnlyString(classWorld)) {
- return backend.jsStringClass;
- } else if (type.satisfies(backend.jsArrayClass, classWorld)) {
- return backend.jsArrayClass;
+ return helpers.jsStringClass;
+ } else if (type.satisfies(helpers.jsArrayClass, classWorld)) {
+ return helpers.jsArrayClass;
} else if (type.containsOnlyNum(classWorld) &&
- !interceptedClasses.contains(backend.jsIntClass) &&
- !interceptedClasses.contains(backend.jsDoubleClass)) {
+ !interceptedClasses.contains(helpers.jsIntClass) &&
+ !interceptedClasses.contains(helpers.jsDoubleClass)) {
// If the method being intercepted is not defined in [int] or [double] we
// can safely use the number interceptor. This is because none of the
// [int] or [double] methods are called from a method defined on [num].
- return backend.jsNumberClass;
+ return helpers.jsNumberClass;
} else {
// Try to find constant interceptor for a native class. If the receiver
// is constrained to a leaf native class, we can use the class's
@@ -209,7 +211,6 @@ class SsaSimplifyInterceptors extends HBaseVisitor
user.inputs.where((input) => input == used).length;
Set<ClassElement> interceptedClasses;
- JavaScriptBackend backend = compiler.backend;
HInstruction dominator = findDominator(node.usedBy);
// If there is a call that dominates all other uses, we can use just the
// selector of that instruction.
@@ -222,18 +223,18 @@ class SsaSimplifyInterceptors extends HBaseVisitor
// If we found that we need number, we must still go through all
// uses to check if they require int, or double.
- if (interceptedClasses.contains(backend.jsNumberClass) &&
- !(interceptedClasses.contains(backend.jsDoubleClass) ||
- interceptedClasses.contains(backend.jsIntClass))) {
+ if (interceptedClasses.contains(helpers.jsNumberClass) &&
+ !(interceptedClasses.contains(helpers.jsDoubleClass) ||
+ interceptedClasses.contains(helpers.jsIntClass))) {
for (HInstruction user in node.usedBy) {
if (user is! HInvoke) continue;
Set<ClassElement> intercepted =
backend.getInterceptedClassesOn(user.selector.name);
- if (intercepted.contains(backend.jsIntClass)) {
- interceptedClasses.add(backend.jsIntClass);
+ if (intercepted.contains(helpers.jsIntClass)) {
+ interceptedClasses.add(helpers.jsIntClass);
}
- if (intercepted.contains(backend.jsDoubleClass)) {
- interceptedClasses.add(backend.jsDoubleClass);
+ if (intercepted.contains(helpers.jsDoubleClass)) {
+ interceptedClasses.add(helpers.jsDoubleClass);
}
}
}
@@ -291,7 +292,7 @@ class SsaSimplifyInterceptors extends HBaseVisitor
// constant interceptor `C`. Then we can use `(receiver && C)` for the
// interceptor.
if (receiver.canBeNull() && !node.isConditionalConstantInterceptor) {
- if (!interceptedClasses.contains(backend.jsNullClass)) {
+ if (!interceptedClasses.contains(helpers.jsNullClass)) {
// Can use `(receiver && C)` only if receiver is either null or truthy.
if (!(receiver.canBePrimitiveNumber(compiler) ||
receiver.canBePrimitiveBoolean(compiler) ||
@@ -331,7 +332,6 @@ class SsaSimplifyInterceptors extends HBaseVisitor
// See if we can rewrite the is-check to use 'instanceof', i.e. rewrite
// "getInterceptor(x).$isT" to "x instanceof T".
if (node == user.interceptor) {
- JavaScriptBackend backend = compiler.backend;
if (backend.mayGenerateInstanceofCheck(user.typeExpression)) {
HInstruction instanceofCheck = new HIs.instanceOf(
user.typeExpression, user.expression, user.instructionType);
« no previous file with comments | « pkg/compiler/lib/src/ssa/codegen.dart ('k') | pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698