| Index: pkg/compiler/lib/src/cps_ir/use_field_initializers.dart
|
| diff --git a/pkg/compiler/lib/src/cps_ir/use_field_initializers.dart b/pkg/compiler/lib/src/cps_ir/use_field_initializers.dart
|
| index a8944c627372264fa38aa1f5da118445ad169a18..ca510f78d6fa06e9e102ed7949d78d9777331213 100644
|
| --- a/pkg/compiler/lib/src/cps_ir/use_field_initializers.dart
|
| +++ b/pkg/compiler/lib/src/cps_ir/use_field_initializers.dart
|
| @@ -94,7 +94,7 @@ class UseFieldInitializers extends BlockVisitor implements Pass {
|
| }
|
|
|
| void visitLetMutable(LetMutable node) {
|
| - escape(node.value);
|
| + escape(node.valueRef);
|
| }
|
|
|
| void visitLetCont(LetCont node) {
|
| @@ -125,24 +125,24 @@ class UseFieldInitializers extends BlockVisitor implements Pass {
|
| Primitive prim = node.primitive;
|
| if (prim is CreateInstance) {
|
| unescaped.add(prim);
|
| - prim.arguments.forEach(escape);
|
| + prim.argumentRefs.forEach(escape);
|
| return;
|
| }
|
| if (unescaped.isEmpty) return;
|
| if (prim is SetField) {
|
| - escape(prim.value);
|
| - Primitive object = prim.object.definition;
|
| + escape(prim.valueRef);
|
| + Primitive object = prim.object;
|
| if (object is CreateInstance && unescaped.contains(object)) {
|
| int index = getFieldIndex(object.classElement, prim.field);
|
| if (index == -1) {
|
| // This field is not initialized at creation time, so we cannot pull
|
| // set SetField into the CreateInstance instruction. We have to
|
| // leave the instruction here, and this counts as a use of the object.
|
| - escape(prim.object);
|
| + escape(prim.objectRef);
|
| } else {
|
| // Replace the field initializer with the new value. There are no uses
|
| // of the object before this, so the old value cannot have been seen.
|
| - object.arguments[index].changeTo(prim.value.definition);
|
| + object.argumentRefs[index].changeTo(prim.value);
|
| prim.destroy();
|
| // The right-hand side might not be in scope at the CreateInstance.
|
| // Sink the creation down to this point.
|
| @@ -156,13 +156,13 @@ class UseFieldInitializers extends BlockVisitor implements Pass {
|
| // When reading the field of a newly created object, just use the initial
|
| // value and destroy the GetField. This can unblock the other optimization
|
| // since we remove a use of the object.
|
| - Primitive object = prim.object.definition;
|
| + Primitive object = prim.object;
|
| if (object is CreateInstance && unescaped.contains(object)) {
|
| int index = getFieldIndex(object.classElement, prim.field);
|
| if (index == -1) {
|
| - escape(prim.object);
|
| + escape(prim.objectRef);
|
| } else {
|
| - prim.replaceUsesWith(object.arguments[index].definition);
|
| + prim.replaceUsesWith(object.argument(index));
|
| prim.destroy();
|
| node.remove();
|
| }
|
|
|