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

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

Issue 2941033002: Finish strong mode cleaning of dart2js. (Closed)
Patch Set: Created 3 years, 6 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
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 CodegenRegistry, CodegenWorkItem; 5 import '../common/codegen.dart' show CodegenRegistry, CodegenWorkItem;
6 import '../common/names.dart' show Selectors; 6 import '../common/names.dart' show Selectors;
7 import '../common/tasks.dart' show CompilerTask; 7 import '../common/tasks.dart' show CompilerTask;
8 import '../compiler.dart' show Compiler; 8 import '../compiler.dart' show Compiler;
9 import '../constants/constant_system.dart'; 9 import '../constants/constant_system.dart';
10 import '../constants/values.dart'; 10 import '../constants/values.dart';
(...skipping 905 matching lines...) Expand 10 before | Expand all | Expand 10 after
916 if (value != null) { 916 if (value != null) {
917 return _graph.addConstant(value, _closedWorld); 917 return _graph.addConstant(value, _closedWorld);
918 } 918 }
919 } 919 }
920 } 920 }
921 921
922 return node; 922 return node;
923 } 923 }
924 924
925 HInstruction visitGetLength(HGetLength node) { 925 HInstruction visitGetLength(HGetLength node) {
926 var receiver = node.receiver; 926 dynamic receiver = node.receiver;
927 if (_graph.allocatedFixedLists.contains(receiver)) { 927 if (_graph.allocatedFixedLists.contains(receiver)) {
928 // TODO(ngeoffray): checking if the second input is an integer 928 // TODO(ngeoffray): checking if the second input is an integer
929 // should not be necessary but it currently makes it easier for 929 // should not be necessary but it currently makes it easier for
930 // other optimizations to reason about a fixed length constructor 930 // other optimizations to reason about a fixed length constructor
931 // that we know takes an int. 931 // that we know takes an int.
932 if (receiver.inputs[0].isInteger(_closedWorld)) { 932 if (receiver.inputs[0].isInteger(_closedWorld)) {
933 return receiver.inputs[0]; 933 return receiver.inputs[0];
934 } 934 }
935 } else if (receiver.isConstantList() || receiver.isConstantString()) { 935 } else if (receiver.isConstantList() || receiver.isConstantString()) {
936 return _graph.addConstantInt(receiver.constant.length, _closedWorld); 936 return _graph.addConstantInt(receiver.constant.length, _closedWorld);
937 } else { 937 } else {
938 var type = receiver.instructionType; 938 dynamic type = receiver.instructionType;
939 if (type.isContainer && type.length != null) { 939 if (type.isContainer && type.length != null) {
940 HInstruction constant = 940 HInstruction constant =
941 _graph.addConstantInt(type.length, _closedWorld); 941 _graph.addConstantInt(type.length, _closedWorld);
942 if (type.isNullable) { 942 if (type.isNullable) {
943 // If the container can be null, we update all uses of the length 943 // If the container can be null, we update all uses of the length
944 // access to use the constant instead, but keep the length access in 944 // access to use the constant instead, but keep the length access in
945 // the graph, to ensure we still have a null check. 945 // the graph, to ensure we still have a null check.
946 node.block.rewrite(node, constant); 946 node.block.rewrite(node, constant);
947 return node; 947 return node;
948 } else { 948 } else {
949 return constant; 949 return constant;
950 } 950 }
951 } 951 }
952 } 952 }
953 953
954 if (node.isAssignable && 954 if (node.isAssignable &&
955 isFixedLength(receiver.instructionType, _closedWorld)) { 955 isFixedLength(receiver.instructionType, _closedWorld)) {
956 // The input type has changed to fixed-length so change to an unassignable 956 // The input type has changed to fixed-length so change to an unassignable
957 // HGetLength to allow more GVN optimizations. 957 // HGetLength to allow more GVN optimizations.
958 return new HGetLength(receiver, node.instructionType, 958 return new HGetLength(receiver, node.instructionType,
959 isAssignable: false); 959 isAssignable: false);
960 } 960 }
961 return node; 961 return node;
962 } 962 }
963 963
964 HInstruction visitIndex(HIndex node) { 964 HInstruction visitIndex(HIndex node) {
965 if (node.receiver.isConstantList() && node.index.isConstantInteger()) { 965 if (node.receiver.isConstantList() && node.index.isConstantInteger()) {
966 var instruction = node.receiver; 966 dynamic instruction = node.receiver;
967 List<ConstantValue> entries = instruction.constant.entries; 967 List<ConstantValue> entries = instruction.constant.entries;
968 instruction = node.index; 968 instruction = node.index;
969 int index = instruction.constant.primitiveValue; 969 int index = instruction.constant.primitiveValue;
970 if (index >= 0 && index < entries.length) { 970 if (index >= 0 && index < entries.length) {
971 return _graph.addConstant(entries[index], _closedWorld); 971 return _graph.addConstant(entries[index], _closedWorld);
972 } 972 }
973 } 973 }
974 return node; 974 return node;
975 } 975 }
976 976
(...skipping 2011 matching lines...) Expand 10 before | Expand all | Expand 10 after
2988 2988
2989 keyedValues.forEach((receiver, values) { 2989 keyedValues.forEach((receiver, values) {
2990 result.keyedValues[receiver] = 2990 result.keyedValues[receiver] =
2991 new Map<HInstruction, HInstruction>.from(values); 2991 new Map<HInstruction, HInstruction>.from(values);
2992 }); 2992 });
2993 2993
2994 result.nonEscapingReceivers.addAll(nonEscapingReceivers); 2994 result.nonEscapingReceivers.addAll(nonEscapingReceivers);
2995 return result; 2995 return result;
2996 } 2996 }
2997 } 2997 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698