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

Unified Diff: lib/compiler/implementation/ssa/optimize.dart

Issue 10735051: Fix usage of UNKNOWN/CONFLICTING types for union. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Cosmetic change in comment. Created 8 years, 5 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: lib/compiler/implementation/ssa/optimize.dart
diff --git a/lib/compiler/implementation/ssa/optimize.dart b/lib/compiler/implementation/ssa/optimize.dart
index 91645dfda12193de36bb7ed5dc615c0f027976ce..1c637c1b3738ca894188a84582eba2fa2c8f7941 100644
--- a/lib/compiler/implementation/ssa/optimize.dart
+++ b/lib/compiler/implementation/ssa/optimize.dart
@@ -1175,15 +1175,13 @@ class SsaProcessRecompileCandidates
if (!node.element.enclosingElement.isClass()) return;
Element field = node.element;
HType type = backend.optimisticFieldTypeAfterConstruction(field);
- switch (compiler.phase) {
- case Compiler.PHASE_COMPILING:
- if (!type.isConflicting()) {
+ if (!type.isConflicting() && !type.isUnknown()) {
Mads Ager (google) 2012/07/11 10:24:34 I think we can relax this check but I will look in
+ switch (compiler.phase) {
+ case Compiler.PHASE_COMPILING:
compiler.enqueuer.codegen.registerRecompilationCandidate(
work.element);
- }
- break;
- case Compiler.PHASE_RECOMPILING:
- if (!type.isConflicting() && !type.isUnknown()) {
+ break;
+ case Compiler.PHASE_RECOMPILING:
// Check if optimistic type is based on a setter in the constructor
// body.
if (backend.hasConstructorBodyFieldSetter(field)) {
@@ -1204,8 +1202,8 @@ class SsaProcessRecompileCandidates
node.propagatedType = type;
}
}
- }
- break;
+ break;
+ }
}
}
@@ -1223,15 +1221,14 @@ class SsaProcessRecompileCandidates
// Try to optimize the case where a field which is known to always be an
// integer is compared with a constant integer literal.
if (other != null &&
- other is HConstant &&
- other.isInteger() &&
+ other.isConstantInteger() &&
field.element != null &&
field.element.enclosingElement.isClass()) {
// Calculate the field type from the information available.
HType type =
backend.fieldSettersTypeSoFar(field.element).union(
backend.typeFromInitializersSoFar(field.element));
- if (!type.isConflicting()) {
+ if (!type.isUnknown()) {
switch (compiler.phase) {
case Compiler.PHASE_COMPILING:
compiler.enqueuer.codegen.registerRecompilationCandidate(
@@ -1274,8 +1271,7 @@ class SsaProcessRecompileCandidates
// Check that the other operand is a number and that we have type
// information for the field get.
if (other != null &&
- other is HConstant &&
- other.isNumber() &&
+ other.isConstantNumber() &&
field.element != null &&
field.element.enclosingElement.isClass()) {
// If we have type information for the field and it contains
@@ -1285,7 +1281,7 @@ class SsaProcessRecompileCandidates
HType initializersType = backend.typeFromInitializersSoFar(fieldElement);
HType fieldType = fieldSettersType.union(initializersType);
HType type = HType.NUMBER.union(fieldType);
- if (!type.isConflicting()) {
+ if (type == HType.NUMBER) {
switch (compiler.phase) {
case Compiler.PHASE_COMPILING:
compiler.enqueuer.codegen.registerRecompilationCandidate(

Powered by Google App Engine
This is Rietveld 408576698