| Index: pkg/compiler/lib/src/ssa/nodes.dart
 | 
| diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
 | 
| index df84debec05353b06d1ae50f8300a4ca754b6c68..86be86b83a4d5791fa6722fc39149b0e0b8b9365 100644
 | 
| --- a/pkg/compiler/lib/src/ssa/nodes.dart
 | 
| +++ b/pkg/compiler/lib/src/ssa/nodes.dart
 | 
| @@ -97,11 +97,6 @@ abstract class HVisitor<R> {
 | 
|    R visitTypeConversion(HTypeConversion node);
 | 
|    R visitTypeKnown(HTypeKnown node);
 | 
|    R visitYield(HYield node);
 | 
| -  R visitReadTypeVariable(HReadTypeVariable node);
 | 
| -  R visitFunctionType(HFunctionType node);
 | 
| -  R visitVoidType(HVoidType node);
 | 
| -  R visitInterfaceType(HInterfaceType node);
 | 
| -  R visitDynamicType(HDynamicType node);
 | 
|  
 | 
|    R visitTypeInfoReadRaw(HTypeInfoReadRaw node);
 | 
|    R visitTypeInfoReadVariable(HTypeInfoReadVariable node);
 | 
| @@ -416,11 +411,6 @@ class HBaseVisitor extends HGraphVisitor implements HVisitor {
 | 
|    visitIsViaInterceptor(HIsViaInterceptor node) => visitInstruction(node);
 | 
|    visitTypeConversion(HTypeConversion node) => visitCheck(node);
 | 
|    visitTypeKnown(HTypeKnown node) => visitCheck(node);
 | 
| -  visitReadTypeVariable(HReadTypeVariable node) => visitInstruction(node);
 | 
| -  visitFunctionType(HFunctionType node) => visitInstruction(node);
 | 
| -  visitVoidType(HVoidType node) => visitInstruction(node);
 | 
| -  visitInterfaceType(HInterfaceType node) => visitInstruction(node);
 | 
| -  visitDynamicType(HDynamicType node) => visitInstruction(node);
 | 
|    visitAwait(HAwait node) => visitInstruction(node);
 | 
|    visitYield(HYield node) => visitInstruction(node);
 | 
|  
 | 
| @@ -880,11 +870,7 @@ abstract class HInstruction implements Spannable {
 | 
|    static const int IS_TYPECODE = 28;
 | 
|    static const int INVOKE_DYNAMIC_TYPECODE = 29;
 | 
|    static const int SHIFT_RIGHT_TYPECODE = 30;
 | 
| -  static const int READ_TYPE_VARIABLE_TYPECODE = 31;
 | 
| -  static const int FUNCTION_TYPE_TYPECODE = 32;
 | 
| -  static const int VOID_TYPE_TYPECODE = 33;
 | 
| -  static const int INTERFACE_TYPE_TYPECODE = 34;
 | 
| -  static const int DYNAMIC_TYPE_TYPECODE = 35;
 | 
| +
 | 
|    static const int TRUNCATING_DIVIDE_TYPECODE = 36;
 | 
|    static const int IS_VIA_INTERCEPTOR_TYPECODE = 37;
 | 
|  
 | 
| @@ -2877,11 +2863,7 @@ class HTypeConversion extends HCheck {
 | 
|  
 | 
|    HInstruction get typeRepresentation => inputs[1];
 | 
|  
 | 
| -  bool get usesMethodOnType =>
 | 
| -      typeExpression != null && typeExpression.isFunctionType;
 | 
| -
 | 
| -  HInstruction get checkedInput =>
 | 
| -      usesMethodOnType ? inputs[1] : super.checkedInput;
 | 
| +  HInstruction get checkedInput => super.checkedInput;
 | 
|  
 | 
|    HInstruction convertType(ClosedWorld closedWorld, DartType type, int kind) {
 | 
|      if (typeExpression == type) {
 | 
| @@ -3405,105 +3387,3 @@ class HTypeInfoExpression extends HInstruction {
 | 
|      }
 | 
|    }
 | 
|  }
 | 
| -
 | 
| -class HReadTypeVariable extends HInstruction {
 | 
| -  /// The type variable being read.
 | 
| -  final TypeVariableType dartType;
 | 
| -
 | 
| -  final bool hasReceiver;
 | 
| -
 | 
| -  HReadTypeVariable(
 | 
| -      this.dartType, HInstruction receiver, TypeMask instructionType)
 | 
| -      : hasReceiver = true,
 | 
| -        super(<HInstruction>[receiver], instructionType) {
 | 
| -    setUseGvn();
 | 
| -  }
 | 
| -
 | 
| -  HReadTypeVariable.noReceiver(
 | 
| -      this.dartType, HInstruction typeArgument, TypeMask instructionType)
 | 
| -      : hasReceiver = false,
 | 
| -        super(<HInstruction>[typeArgument], instructionType) {
 | 
| -    setUseGvn();
 | 
| -  }
 | 
| -
 | 
| -  accept(HVisitor visitor) => visitor.visitReadTypeVariable(this);
 | 
| -
 | 
| -  bool canThrow() => false;
 | 
| -
 | 
| -  int typeCode() => HInstruction.READ_TYPE_VARIABLE_TYPECODE;
 | 
| -  bool typeEquals(HInstruction other) => other is HReadTypeVariable;
 | 
| -
 | 
| -  bool dataEquals(HReadTypeVariable other) {
 | 
| -    return dartType == other.dartType && hasReceiver == other.hasReceiver;
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -abstract class HRuntimeType extends HInstruction {
 | 
| -  final DartType dartType;
 | 
| -
 | 
| -  HRuntimeType(
 | 
| -      List<HInstruction> inputs, this.dartType, TypeMask instructionType)
 | 
| -      : super(inputs, instructionType) {
 | 
| -    setUseGvn();
 | 
| -  }
 | 
| -
 | 
| -  bool canThrow() => false;
 | 
| -
 | 
| -  int typeCode() {
 | 
| -    throw 'abstract method';
 | 
| -  }
 | 
| -
 | 
| -  bool typeEquals(HInstruction other) {
 | 
| -    throw 'abstract method';
 | 
| -  }
 | 
| -
 | 
| -  bool dataEquals(HRuntimeType other) {
 | 
| -    return dartType == other.dartType;
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -class HFunctionType extends HRuntimeType {
 | 
| -  HFunctionType(List<HInstruction> inputs, FunctionType dartType,
 | 
| -      TypeMask instructionType)
 | 
| -      : super(inputs, dartType, instructionType);
 | 
| -
 | 
| -  accept(HVisitor visitor) => visitor.visitFunctionType(this);
 | 
| -
 | 
| -  int typeCode() => HInstruction.FUNCTION_TYPE_TYPECODE;
 | 
| -
 | 
| -  bool typeEquals(HInstruction other) => other is HFunctionType;
 | 
| -}
 | 
| -
 | 
| -class HVoidType extends HRuntimeType {
 | 
| -  HVoidType(VoidType dartType, TypeMask instructionType)
 | 
| -      : super(const <HInstruction>[], dartType, instructionType);
 | 
| -
 | 
| -  accept(HVisitor visitor) => visitor.visitVoidType(this);
 | 
| -
 | 
| -  int typeCode() => HInstruction.VOID_TYPE_TYPECODE;
 | 
| -
 | 
| -  bool typeEquals(HInstruction other) => other is HVoidType;
 | 
| -}
 | 
| -
 | 
| -class HInterfaceType extends HRuntimeType {
 | 
| -  HInterfaceType(List<HInstruction> inputs, InterfaceType dartType,
 | 
| -      TypeMask instructionType)
 | 
| -      : super(inputs, dartType, instructionType);
 | 
| -
 | 
| -  accept(HVisitor visitor) => visitor.visitInterfaceType(this);
 | 
| -
 | 
| -  int typeCode() => HInstruction.INTERFACE_TYPE_TYPECODE;
 | 
| -
 | 
| -  bool typeEquals(HInstruction other) => other is HInterfaceType;
 | 
| -}
 | 
| -
 | 
| -class HDynamicType extends HRuntimeType {
 | 
| -  HDynamicType(DynamicType dartType, TypeMask instructionType)
 | 
| -      : super(const <HInstruction>[], dartType, instructionType);
 | 
| -
 | 
| -  accept(HVisitor visitor) => visitor.visitDynamicType(this);
 | 
| -
 | 
| -  int typeCode() => HInstruction.DYNAMIC_TYPE_TYPECODE;
 | 
| -
 | 
| -  bool typeEquals(HInstruction other) => other is HDynamicType;
 | 
| -}
 | 
| 
 |