Skip to content

Commit 0c796a5

Browse files
natebiggsCommit Bot
authored and
Commit Bot
committed
[dart2js] Remove references to global growable list checks.
This is dead code, the field 'isFixedArrayCheckedForGrowable' is never read. Also drop code used to set this field. The check suggested in the TODO in ssa/builder.dart doesn't reduce code size for cm_shell at all so it seems like all arrays that go through there end up getting "marked" anyway. Change-Id: Ia4bf3eec3757fc7eadb503a7ccc58b8f60f86b6e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/244482 Reviewed-by: Stephen Adams <[email protected]> Reviewed-by: Sigmund Cherem <[email protected]> Commit-Queue: Nate Biggs <[email protected]>
1 parent 30d0fd7 commit 0c796a5

File tree

5 files changed

+7
-44
lines changed

5 files changed

+7
-44
lines changed

pkg/compiler/lib/src/inferrer/engine.dart

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -261,10 +261,6 @@ class InferrerEngine {
261261

262262
info.bailedOut = false;
263263
info.elementType.inferred = true;
264-
if (abstractValueDomain.isSpecializationOf(
265-
info.originalType, abstractValueDomain.fixedListType)) {
266-
info.checksGrowable = tracer.callsGrowableMethod;
267-
}
268264
tracer.inputs.forEach(info.elementType.addInput);
269265
// Enqueue the list for later refinement
270266
_workQueue.add(info);

pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -161,13 +161,8 @@ class TypeGraphInferrer implements TypesInferrer {
161161
});
162162

163163
Map<ir.TreeNode, AbstractValue> allocatedLists = {};
164-
Set<ir.TreeNode> checkedForGrowableLists = {};
165164
inferrer.types.allocatedLists
166165
.forEach((ir.TreeNode node, ListTypeInformation typeInformation) {
167-
ListTypeInformation info = inferrer.types.allocatedLists[node];
168-
if (info.checksGrowable) {
169-
checkedForGrowableLists.add(node);
170-
}
171166
allocatedLists[node] = typeInformation.type;
172167
});
173168

@@ -177,7 +172,6 @@ class TypeGraphInferrer implements TypesInferrer {
177172
_inferredDataBuilder.close(closedWorld),
178173
memberResults,
179174
parameterResults,
180-
checkedForGrowableLists,
181175
inferrer.returnsListElementTypeSet,
182176
allocatedLists);
183177

pkg/compiler/lib/src/inferrer/type_graph_nodes.dart

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1757,10 +1757,6 @@ class ListTypeInformation extends TypeInformation with TracedTypeInformation {
17571757
/// The length after the container has been traced.
17581758
int inferredLength;
17591759

1760-
/// Whether this list goes through a growable check.
1761-
/// We conservatively assume it does.
1762-
bool checksGrowable = true;
1763-
17641760
ListTypeInformation(
17651761
AbstractValueDomain abstractValueDomain,
17661762
MemberTypeInformation context,

pkg/compiler/lib/src/inferrer/types.dart

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,6 @@ abstract class GlobalTypeInferenceResults {
146146
/// the given [receiver] type.
147147
AbstractValue resultTypeOfSelector(Selector selector, AbstractValue receiver);
148148

149-
/// Returns whether a fixed-length constructor call goes through a growable
150-
/// check.
151-
bool isFixedArrayCheckedForGrowable(ir.TreeNode node);
152-
153149
/// Returns the type of a list new expression [node]. Returns `null` if
154150
/// [node] does not represent the construction of a new list.
155151
AbstractValue typeOfNewList(ir.TreeNode node);
@@ -225,7 +221,6 @@ class GlobalTypeInferenceResultsImpl implements GlobalTypeInferenceResults {
225221

226222
final Map<MemberEntity, GlobalTypeInferenceMemberResult> memberResults;
227223
final Map<Local, AbstractValue> parameterResults;
228-
final Set<ir.TreeNode> checkedForGrowableLists;
229224
final Set<Selector> returnsListElementTypeSet;
230225
final Map<ir.TreeNode, AbstractValue> _allocatedLists;
231226

@@ -235,7 +230,6 @@ class GlobalTypeInferenceResultsImpl implements GlobalTypeInferenceResults {
235230
this.inferredData,
236231
this.memberResults,
237232
this.parameterResults,
238-
this.checkedForGrowableLists,
239233
this.returnsListElementTypeSet,
240234
this._allocatedLists)
241235
: _deadFieldResult =
@@ -262,7 +256,6 @@ class GlobalTypeInferenceResultsImpl implements GlobalTypeInferenceResults {
262256
Map<Local, AbstractValue> parameterResults = source.readLocalMap(() =>
263257
closedWorld.abstractValueDomain
264258
.readAbstractValueFromDataSource(source));
265-
Set<ir.TreeNode> checkedForGrowableLists = source.readTreeNodes().toSet();
266259
Set<Selector> returnsListElementTypeSet =
267260
source.readList(() => Selector.readFromDataSource(source)).toSet();
268261
Map<ir.TreeNode, AbstractValue> allocatedLists = source.readTreeNodeMap(
@@ -275,7 +268,6 @@ class GlobalTypeInferenceResultsImpl implements GlobalTypeInferenceResults {
275268
inferredData,
276269
memberResults,
277270
parameterResults,
278-
checkedForGrowableLists,
279271
returnsListElementTypeSet,
280272
allocatedLists);
281273
}
@@ -295,7 +287,6 @@ class GlobalTypeInferenceResultsImpl implements GlobalTypeInferenceResults {
295287
parameterResults,
296288
(AbstractValue value) => closedWorld.abstractValueDomain
297289
.writeAbstractValueToDataSink(sink, value));
298-
sink.writeTreeNodes(checkedForGrowableLists);
299290
sink.writeList(returnsListElementTypeSet,
300291
(Selector selector) => selector.writeToDataSink(sink));
301292
sink.writeTreeNodeMap(
@@ -407,14 +398,6 @@ class GlobalTypeInferenceResultsImpl implements GlobalTypeInferenceResults {
407398
}
408399
}
409400

410-
/// Returns whether a fixed-length constructor call goes through a growable
411-
/// check.
412-
// TODO(sigmund): move into the result of the element containing such
413-
// constructor call.
414-
@override
415-
bool isFixedArrayCheckedForGrowable(ir.Node ctorCall) =>
416-
checkedForGrowableLists.contains(ctorCall);
417-
418401
@override
419402
AbstractValue typeOfNewList(ir.Node node) => _allocatedLists[node];
420403

@@ -507,9 +490,6 @@ class TrivialGlobalTypeInferenceResults implements GlobalTypeInferenceResults {
507490
sink.writeBool(true); // Is trivial.
508491
}
509492

510-
@override
511-
bool isFixedArrayCheckedForGrowable(ir.Node node) => false;
512-
513493
@override
514494
AbstractValue resultTypeOfSelector(Selector selector, AbstractValue mask) {
515495
return closedWorld.abstractValueDomain.dynamicType;

pkg/compiler/lib/src/ssa/builder.dart

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4082,16 +4082,13 @@ class KernelSsaGraphBuilder extends ir.Visitor<void> with ir.VisitorVoidMixin {
40824082
canThrow ? NativeThrowBehavior.MAY : NativeThrowBehavior.NEVER)
40834083
..sourceInformation = sourceInformation;
40844084
push(foreign);
4085-
// TODO(redemption): Global type analysis tracing may have determined that
4086-
// the fixed-length property is never checked. If so, we can avoid marking
4087-
// the array.
4088-
{
4089-
js.Template code = js.js.parseForeignJS(r'#.fixed$length = Array');
4090-
// We set the instruction as [canThrow] to avoid it being dead code.
4091-
// We need a finer grained side effect.
4092-
add(HForeignCode(code, _abstractValueDomain.nullType, [stack.last],
4093-
throwBehavior: NativeThrowBehavior.MAY));
4094-
}
4085+
js.Template fixedLengthMarker =
4086+
js.js.parseForeignJS(r'#.fixed$length = Array');
4087+
// We set the instruction as [canThrow] to avoid it being dead code.
4088+
// We need a finer grained side effect.
4089+
add(HForeignCode(
4090+
fixedLengthMarker, _abstractValueDomain.nullType, [stack.last],
4091+
throwBehavior: NativeThrowBehavior.MAY));
40954092

40964093
HInstruction newInstance = stack.last;
40974094

0 commit comments

Comments
 (0)