| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 library dart2js.cps_ir.scalar_replacement; | 4 library dart2js.cps_ir.scalar_replacement; |
| 5 | 5 |
| 6 import 'optimizers.dart'; | 6 import 'optimizers.dart'; |
| 7 | 7 |
| 8 import 'dart:collection' show Queue; | 8 import 'dart:collection' show Queue; |
| 9 | 9 |
| 10 import '../common.dart'; | 10 import '../common.dart'; |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 // field's value. | 135 // field's value. |
| 136 for (Reference ref = allocation.firstRef; ref != null; ref = ref.next) { | 136 for (Reference ref = allocation.firstRef; ref != null; ref = ref.next) { |
| 137 Node use = ref.parent; | 137 Node use = ref.parent; |
| 138 if (use is GetField) { | 138 if (use is GetField) { |
| 139 GetField getField = use; | 139 GetField getField = use; |
| 140 MutableVariable variable = cells[getField.field]; | 140 MutableVariable variable = cells[getField.field]; |
| 141 if (variable != null) { | 141 if (variable != null) { |
| 142 GetMutable getter = new GetMutable(variable); | 142 GetMutable getter = new GetMutable(variable); |
| 143 getter.type = getField.type; | 143 getter.type = getField.type; |
| 144 getter.variable.parent = getter; | 144 getter.variable.parent = getter; |
| 145 getter.substituteFor(getField); | 145 getField.replaceUsesWith(getter); |
| 146 replacePrimitive(getField, getter); | 146 replacePrimitive(getField, getter); |
| 147 deletePrimitive(getField); | 147 deletePrimitive(getField); |
| 148 } else { | 148 } else { |
| 149 Primitive value = fieldInitialValues[getField.field]; | 149 Primitive value = fieldInitialValues[getField.field]; |
| 150 value.substituteFor(getField); | 150 getField.replaceUsesWith(value); |
| 151 deleteLetPrimOf(getField); | 151 deleteLetPrimOf(getField); |
| 152 } | 152 } |
| 153 } else if (use is SetField && use.object == ref) { | 153 } else if (use is SetField && use.object == ref) { |
| 154 SetField setField = use; | 154 SetField setField = use; |
| 155 MutableVariable variable = cells[setField.field]; | 155 MutableVariable variable = cells[setField.field]; |
| 156 Primitive value = setField.value.definition; | 156 Primitive value = setField.value.definition; |
| 157 variable.type = variable.type.union(value.type, classWorld); | 157 variable.type = variable.type.union(value.type, classWorld); |
| 158 SetMutable setter = new SetMutable(variable, value); | 158 SetMutable setter = new SetMutable(variable, value); |
| 159 setter.variable.parent = setter; | 159 setter.variable.parent = setter; |
| 160 setter.value.parent = setter; | 160 setter.value.parent = setter; |
| 161 setter.substituteFor(setField); | 161 setField.replaceUsesWith(setter); |
| 162 replacePrimitive(setField, setter); | 162 replacePrimitive(setField, setter); |
| 163 deletePrimitive(setField); | 163 deletePrimitive(setField); |
| 164 } else { | 164 } else { |
| 165 assert(false); | 165 assert(false); |
| 166 } | 166 } |
| 167 } | 167 } |
| 168 | 168 |
| 169 // Delete [allocation] since that might 'free' another scalar replacement | 169 // Delete [allocation] since that might 'free' another scalar replacement |
| 170 // candidate by deleting the last non-field-access. | 170 // candidate by deleting the last non-field-access. |
| 171 deleteLetPrimOf(allocation); | 171 deleteLetPrimOf(allocation); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 class ScalarReplacementRemovalVisitor extends TrampolineRecursiveVisitor { | 220 class ScalarReplacementRemovalVisitor extends TrampolineRecursiveVisitor { |
| 221 ScalarReplacementVisitor process; | 221 ScalarReplacementVisitor process; |
| 222 | 222 |
| 223 ScalarReplacementRemovalVisitor(this.process); | 223 ScalarReplacementRemovalVisitor(this.process); |
| 224 | 224 |
| 225 processReference(Reference reference) { | 225 processReference(Reference reference) { |
| 226 process.reconsider(reference.definition); | 226 process.reconsider(reference.definition); |
| 227 reference.unlink(); | 227 reference.unlink(); |
| 228 } | 228 } |
| 229 } | 229 } |
| OLD | NEW |