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

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

Issue 2563443007: Reduce use of Compiler.closedWorld (Closed)
Patch Set: Created 4 years 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/type_builder.dart ('k') | pkg/compiler/lib/src/ssa/value_range_analyzer.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/ssa/types_propagation.dart
diff --git a/pkg/compiler/lib/src/ssa/types_propagation.dart b/pkg/compiler/lib/src/ssa/types_propagation.dart
index 63da62838697773958f65cb1560c06e0625eb856..b02072de894eaefd1b57a1d31d96a76759d677df 100644
--- a/pkg/compiler/lib/src/ssa/types_propagation.dart
+++ b/pkg/compiler/lib/src/ssa/types_propagation.dart
@@ -109,18 +109,21 @@ class SsaTypePropagator extends HBaseVisitor implements OptimizationPhase {
TypeMask visitBinaryArithmetic(HBinaryArithmetic instruction) {
HInstruction left = instruction.left;
HInstruction right = instruction.right;
- if (left.isInteger(compiler) && right.isInteger(compiler)) {
- return backend.intType;
+ if (left.isInteger(closedWorld) && right.isInteger(closedWorld)) {
+ return closedWorld.commonMasks.intType;
}
- if (left.isDouble(compiler)) return backend.doubleType;
- return backend.numType;
+ if (left.isDouble(closedWorld)) {
+ return closedWorld.commonMasks.doubleType;
+ }
+ return closedWorld.commonMasks.numType;
}
TypeMask checkPositiveInteger(HBinaryArithmetic instruction) {
HInstruction left = instruction.left;
HInstruction right = instruction.right;
- if (left.isPositiveInteger(compiler) && right.isPositiveInteger(compiler)) {
- return backend.positiveIntType;
+ if (left.isPositiveInteger(closedWorld) &&
+ right.isPositiveInteger(closedWorld)) {
+ return closedWorld.commonMasks.positiveIntType;
}
return visitBinaryArithmetic(instruction);
}
@@ -147,7 +150,9 @@ class SsaTypePropagator extends HBaseVisitor implements OptimizationPhase {
HInstruction operand = instruction.operand;
// We have integer subclasses that represent ranges, so widen any int
// subclass to full integer.
- if (operand.isInteger(compiler)) return backend.intType;
+ if (operand.isInteger(closedWorld)) {
+ return closedWorld.commonMasks.intType;
+ }
return instruction.operand.instructionType;
}
@@ -157,7 +162,7 @@ class SsaTypePropagator extends HBaseVisitor implements OptimizationPhase {
}
TypeMask visitPhi(HPhi phi) {
- TypeMask candidateType = backend.emptyType;
+ TypeMask candidateType = closedWorld.commonMasks.emptyType;
for (int i = 0, length = phi.inputs.length; i < length; i++) {
TypeMask inputType = phi.inputs[i].instructionType;
candidateType = candidateType.union(inputType, closedWorld);
@@ -175,11 +180,11 @@ class SsaTypePropagator extends HBaseVisitor implements OptimizationPhase {
// We only do an int check if the input is integer or null.
if (checkedType.containsOnlyNum(closedWorld) &&
!checkedType.containsOnlyDouble(closedWorld) &&
- input.isIntegerOrNull(compiler)) {
- instruction.checkedType = backend.intType;
+ input.isIntegerOrNull(closedWorld)) {
+ instruction.checkedType = closedWorld.commonMasks.intType;
} else if (checkedType.containsOnlyInt(closedWorld) &&
- !input.isIntegerOrNull(compiler)) {
- instruction.checkedType = backend.numType;
+ !input.isIntegerOrNull(closedWorld)) {
+ instruction.checkedType = closedWorld.commonMasks.numType;
}
}
@@ -193,9 +198,9 @@ class SsaTypePropagator extends HBaseVisitor implements OptimizationPhase {
if (inputType.containsOnlyInt(closedWorld) &&
checkedType.containsOnlyDouble(closedWorld)) {
if (inputType.isNullable && checkedType.isNullable) {
- outputType = backend.doubleType.nullable();
+ outputType = closedWorld.commonMasks.doubleType.nullable();
} else {
- outputType = backend.doubleType;
+ outputType = closedWorld.commonMasks.doubleType;
}
}
}
@@ -248,7 +253,7 @@ class SsaTypePropagator extends HBaseVisitor implements OptimizationPhase {
// If the instruction's type is integer or null, the codegen
// will emit a null check, which is enough to know if it will
// hit a noSuchMethod.
- return instruction.isIntegerOrNull(compiler);
+ return instruction.isIntegerOrNull(closedWorld);
}
return true;
}
@@ -259,8 +264,8 @@ class SsaTypePropagator extends HBaseVisitor implements OptimizationPhase {
bool checkReceiver(HInvokeDynamic instruction) {
assert(instruction.isInterceptedCall);
HInstruction receiver = instruction.inputs[1];
- if (receiver.isNumber(compiler)) return false;
- if (receiver.isNumberOrNull(compiler)) {
+ if (receiver.isNumber(closedWorld)) return false;
+ if (receiver.isNumberOrNull(closedWorld)) {
convertInput(
instruction,
receiver,
@@ -268,7 +273,7 @@ class SsaTypePropagator extends HBaseVisitor implements OptimizationPhase {
HTypeConversion.RECEIVER_TYPE_CHECK);
return true;
} else if (instruction.element == null) {
- Iterable<Element> targets = compiler.closedWorld.allFunctions
+ Iterable<Element> targets = closedWorld.allFunctions
.filter(instruction.selector, instruction.mask);
if (targets.length == 1) {
MemberElement target = targets.first;
@@ -302,11 +307,11 @@ class SsaTypePropagator extends HBaseVisitor implements OptimizationPhase {
HInstruction right = instruction.inputs[2];
Selector selector = instruction.selector;
- if (selector.isOperator && left.isNumber(compiler)) {
- if (right.isNumber(compiler)) return false;
- TypeMask type = right.isIntegerOrNull(compiler)
+ if (selector.isOperator && left.isNumber(closedWorld)) {
+ if (right.isNumber(closedWorld)) return false;
+ TypeMask type = right.isIntegerOrNull(closedWorld)
? right.instructionType.nonNullable()
- : backend.numType;
+ : closedWorld.commonMasks.numType;
// TODO(ngeoffray): Some number operations don't have a builtin
// variant and will do the check in their method anyway. We
// still add a check because it allows to GVN these operations,
@@ -371,7 +376,7 @@ class SsaTypePropagator extends HBaseVisitor implements OptimizationPhase {
if (!instruction.selector.isClosureCall) {
TypeMask newType;
TypeMask computeNewType() {
- newType = compiler.closedWorld.allFunctions
+ newType = closedWorld.allFunctions
.receiverType(instruction.selector, instruction.mask);
newType = newType.intersection(receiverType, closedWorld);
return newType;
@@ -406,6 +411,6 @@ class SsaTypePropagator extends HBaseVisitor implements OptimizationPhase {
}
return instruction.specializer
- .computeTypeFromInputTypes(instruction, compiler);
+ .computeTypeFromInputTypes(instruction, compiler, closedWorld);
}
}
« no previous file with comments | « pkg/compiler/lib/src/ssa/type_builder.dart ('k') | pkg/compiler/lib/src/ssa/value_range_analyzer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698