Index: pkg/compiler/lib/src/ssa/optimize.dart |
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart |
index 4700112b3211ec528f9b1bd3194091f8c985be00..031922228f881912a882b621935a64d4a3312644 100644 |
--- a/pkg/compiler/lib/src/ssa/optimize.dart |
+++ b/pkg/compiler/lib/src/ssa/optimize.dart |
@@ -1057,34 +1057,6 @@ class SsaInstructionSimplifier extends HBaseVisitor |
return node; |
} |
- /// Read the type variable from an allocation of type [createdClass], where |
- /// [selectTypeArgumentFromObjectCreation] extracts the type argument from |
- /// the allocation for factory constructor call. |
- HInstruction finishSubstituted(ClassElement createdClass, |
- HInstruction selectTypeArgumentFromObjectCreation(int index)) { |
- HInstruction instructionForTypeVariable(TypeVariableType tv) { |
- return selectTypeArgumentFromObjectCreation( |
- createdClass.thisType.typeArguments.indexOf(tv)); |
- } |
- |
- DartType type = createdClass.thisType |
- .asInstanceOf(variable.element.enclosingClass) |
- .typeArguments[variable.element.index]; |
- if (type is TypeVariableType) { |
- return instructionForTypeVariable(type); |
- } |
- List<HInstruction> arguments = <HInstruction>[]; |
- type.forEachTypeVariable((v) { |
- arguments.add(instructionForTypeVariable(v)); |
- }); |
- HInstruction replacement = new HTypeInfoExpression( |
- TypeInfoExpressionKind.COMPLETE, |
- type, |
- arguments, |
- backend.dynamicType); |
- return replacement; |
- } |
- |
// Type variable evaluated in the context of a constant can be replaced with |
// a ground term type. |
if (object is HConstant) { |
@@ -1095,42 +1067,10 @@ class SsaInstructionSimplifier extends HBaseVisitor |
return node; |
} |
- // Look for an allocation with type information and re-write type variable |
- // as a function of the type parameters of the allocation. This effectively |
- // store-forwards a type variable read through an allocation. |
- |
- // Match: |
- // |
- // setRuntimeTypeInfo( |
- // HForeignNew(ClassElement), |
- // HTypeInfoExpression(t_0, t_1, t_2, ...)); |
- // |
- // The `t_i` are the values of the type parameters of ClassElement. |
- if (object is HInvokeStatic) { |
- if (object.element == helpers.setRuntimeTypeInfo) { |
- HInstruction allocation = object.inputs[0]; |
- if (allocation is HForeignNew) { |
- HInstruction typeInfo = object.inputs[1]; |
- if (typeInfo is HTypeInfoExpression) { |
- return finishSubstituted( |
- allocation.element, (int index) => typeInfo.inputs[index]); |
- } |
- } |
- return node; |
- } |
- // TODO(sra): Factory constructors pass type arguments after the value |
- // arguments. The [select] argument indexes into these type arguments. |
- } |
- |
- // Non-generic type (which extends or mixes in a generic type, for example |
- // CodeUnits extends UnmodifiableListBase<int>). |
- // Also used for raw-type when the type parameters are elided. |
- if (object is HForeignNew) { |
- return finishSubstituted( |
- object.element, |
- // If there are type arguments, all type arguments are 'dynamic'. |
- (int i) => graph.addConstantNull(compiler)); |
- } |
+ // TODO(sra): HTypeInfoReadVariable on an instance creation can be replaced |
+ // with an input of the instance creation's HTypeInfoExpression (or a |
+ // HTypeInfoExpression of an input). This would in effect store-forward the |
+ // type parameters. |
return node; |
} |