| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 | 4 |
| 5 import '../common/codegen.dart' show CodegenWorkItem; | 5 import '../common/codegen.dart' show CodegenWorkItem; |
| 6 import '../common/tasks.dart' show CompilerTask; | 6 import '../common/tasks.dart' show CompilerTask; |
| 7 import '../compiler.dart' show Compiler; | 7 import '../compiler.dart' show Compiler; |
| 8 import '../constants/constant_system.dart'; | 8 import '../constants/constant_system.dart'; |
| 9 import '../constants/values.dart'; | 9 import '../constants/values.dart'; |
| 10 import '../core_types.dart' show CoreClasses; | 10 import '../core_types.dart' show CoreClasses; |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 ConstantValue value = getConstantFromType(node); | 240 ConstantValue value = getConstantFromType(node); |
| 241 if (value != null) { | 241 if (value != null) { |
| 242 HConstant constant = graph.addConstant(value, compiler); | 242 HConstant constant = graph.addConstant(value, compiler); |
| 243 for (HInstruction user in node.usedBy.toList()) { | 243 for (HInstruction user in node.usedBy.toList()) { |
| 244 user.changeUse(node, constant); | 244 user.changeUse(node, constant); |
| 245 } | 245 } |
| 246 } | 246 } |
| 247 } | 247 } |
| 248 | 248 |
| 249 HInstruction visitParameterValue(HParameterValue node) { | 249 HInstruction visitParameterValue(HParameterValue node) { |
| 250 // It is possible for the parameter value to be assigned to in the function | 250 // If the parameter is used as a mutable variable we cannot replace the |
| 251 // body. If that happens then we should not forward the constant value to | 251 // variable with a value. |
| 252 // its uses since since the uses reachable from the assignment may have | 252 if (node.usedAsVariable()) return node; |
| 253 // values in addition to the constant passed to the function. | |
| 254 if (node.usedBy | |
| 255 .any((user) => user is HLocalSet && identical(user.local, node))) { | |
| 256 return node; | |
| 257 } | |
| 258 propagateConstantValueToUses(node); | 253 propagateConstantValueToUses(node); |
| 259 return node; | 254 return node; |
| 260 } | 255 } |
| 261 | 256 |
| 262 HInstruction visitBoolify(HBoolify node) { | 257 HInstruction visitBoolify(HBoolify node) { |
| 263 List<HInstruction> inputs = node.inputs; | 258 List<HInstruction> inputs = node.inputs; |
| 264 assert(inputs.length == 1); | 259 assert(inputs.length == 1); |
| 265 HInstruction input = inputs[0]; | 260 HInstruction input = inputs[0]; |
| 266 if (input.isBoolean(compiler)) return input; | 261 if (input.isBoolean(compiler)) return input; |
| 267 | 262 |
| (...skipping 2116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2384 | 2379 |
| 2385 keyedValues.forEach((receiver, values) { | 2380 keyedValues.forEach((receiver, values) { |
| 2386 result.keyedValues[receiver] = | 2381 result.keyedValues[receiver] = |
| 2387 new Map<HInstruction, HInstruction>.from(values); | 2382 new Map<HInstruction, HInstruction>.from(values); |
| 2388 }); | 2383 }); |
| 2389 | 2384 |
| 2390 result.nonEscapingReceivers.addAll(nonEscapingReceivers); | 2385 result.nonEscapingReceivers.addAll(nonEscapingReceivers); |
| 2391 return result; | 2386 return result; |
| 2392 } | 2387 } |
| 2393 } | 2388 } |
| OLD | NEW |