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

Unified Diff: pkg/compiler/lib/src/cps_ir/scalar_replacement.dart

Issue 1305863010: dart2js cps: Store the TypeMask for each primitive in a field. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Rebase Created 5 years, 3 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: pkg/compiler/lib/src/cps_ir/scalar_replacement.dart
diff --git a/pkg/compiler/lib/src/cps_ir/scalar_replacement.dart b/pkg/compiler/lib/src/cps_ir/scalar_replacement.dart
index 81df9567fb27e1bc05ac7bcf69a18dcceefd332f..fb6b539325d5ed7fb7b0b27fc1f8bbc3b32ed0de 100644
--- a/pkg/compiler/lib/src/cps_ir/scalar_replacement.dart
+++ b/pkg/compiler/lib/src/cps_ir/scalar_replacement.dart
@@ -40,16 +40,18 @@ class ScalarReplacer extends Pass {
String get passName => 'Scalar replacement';
final dart2js.InternalErrorFunction _internalError;
+ final World _classWorld;
ScalarReplacer(dart2js.Compiler compiler)
- : _internalError = compiler.internalError;
+ : _internalError = compiler.internalError,
+ _classWorld = compiler.world;
@override
void rewrite(FunctionDefinition root) {
// Set all parent pointers.
new ParentVisitor().visit(root);
ScalarReplacementVisitor analyzer =
- new ScalarReplacementVisitor(_internalError);
+ new ScalarReplacementVisitor(_internalError, _classWorld);
analyzer.analyze(root);
analyzer.process();
}
@@ -62,13 +64,14 @@ class ScalarReplacer extends Pass {
class ScalarReplacementVisitor extends RecursiveVisitor {
final dart2js.InternalErrorFunction internalError;
+ final World classWorld;
ScalarReplacementRemovalVisitor removalVisitor;
Primitive _current = null;
Set<Primitive> _allocations = new Set<Primitive>();
Queue<Primitive> _queue = new Queue<Primitive>();
- ScalarReplacementVisitor(this.internalError) {
+ ScalarReplacementVisitor(this.internalError, this.classWorld) {
removalVisitor = new ScalarReplacementRemovalVisitor(this);
}
@@ -130,6 +133,7 @@ class ScalarReplacementVisitor extends RecursiveVisitor {
InteriorNode insertionPoint = allocation.parent; // LetPrim
for (FieldElement field in writes) {
MutableVariable variable = new MutableVariable(field);
+ variable.type = new TypeMask.nonNullEmpty();
cells[field] = variable;
Primitive initialValue = fieldInitialValues[field];
if (initialValue == null) {
@@ -153,6 +157,7 @@ class ScalarReplacementVisitor extends RecursiveVisitor {
MutableVariable variable = cells[getField.field];
if (variable != null) {
GetMutable getter = new GetMutable(variable);
+ getter.type = getField.type;
getter.variable.parent = getter;
getter.substituteFor(getField);
replacePrimitive(getField, getter);
@@ -166,6 +171,7 @@ class ScalarReplacementVisitor extends RecursiveVisitor {
SetField setField = use;
MutableVariable variable = cells[setField.field];
Primitive value = setField.value.definition;
+ variable.type = variable.type.union(value.type, classWorld);
SetMutable setter = new SetMutable(variable, value);
setter.variable.parent = setter;
setter.value.parent = setter;
« no previous file with comments | « pkg/compiler/lib/src/cps_ir/redundant_join.dart ('k') | pkg/compiler/lib/src/cps_ir/share_interceptors.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698