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

Side by Side Diff: pkg/compiler/lib/src/ssa/optimize.dart

Issue 1914623002: Fix for issue 26243 - illegal motion of assignments in instruction merging (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 7 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 unified diff | Download patch
« no previous file with comments | « pkg/compiler/lib/src/ssa/nodes.dart ('k') | pkg/compiler/lib/src/ssa/types_propagation.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/ssa/nodes.dart ('k') | pkg/compiler/lib/src/ssa/types_propagation.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698