diff --git a/pkg/compiler/lib/src/inferrer/builder_kernel.dart b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
index aebbf7b..d6def19 100644
--- a/pkg/compiler/lib/src/inferrer/builder_kernel.dart
+++ b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
@@ -922,18 +922,10 @@
   @override
   TypeInformation visitEqualsNull(ir.EqualsNull node) {
     visit(node.expression);
-    if (node.fileOffset < node.expression.fileOffset) {
-      // Hack to detect `null == o`.
-      // TODO(johnniwinther): Remove this after the new method invocation has
-      //  landed stably. This is only included to make the transition a no-op.
-      KernelGlobalTypeInferenceElementData data = _memberData;
-      data.setReceiverTypeMask(node, _closedWorld.abstractValueDomain.nullType);
-    } else {
-      // TODO(johnniwinther). This triggers the computation of the mask for the
-      // receiver of the call to `==`, which doesn't happen in this case. Remove
-      // this when the ssa builder recognized `== null` directly.
-      _typeOfReceiver(node, node.expression);
-    }
+    // TODO(johnniwinther). This triggers the computation of the mask for the
+    // receiver of the call to `==`, which doesn't happen in this case. Remove
+    // this when the ssa builder recognizes `== null` directly.
+    _typeOfReceiver(node, node.expression);
     _potentiallyAddNullCheck(node, node.expression);
     return _types.boolType;
   }
@@ -986,7 +978,7 @@
       TypeInformation rightType) {
     // TODO(johnniwinther). This triggers the computation of the mask for the
     // receiver of the call to `==`, which might not happen in this case. Remove
-    // this when the ssa builder recognized `== null` directly.
+    // this when the ssa builder recognizes `== null` directly.
     _typeOfReceiver(node, left);
     bool leftIsNull = _types.isNull(leftType);
     bool rightIsNull = _types.isNull(rightType);
@@ -1065,7 +1057,7 @@
         receiver.variable.parent is ir.FunctionDeclaration) {
       // TODO(johnniwinther). This triggers the computation of the mask for the
       // receiver of the call to `call`. Remove this when the ssa builder
-      // recognized local function invocation directly.
+      // recognizes local function invocation directly.
       _typeOfReceiver(node, node.receiver);
       // This is an invocation of a named local function.
       return _handleLocalFunctionInvocation(
diff --git a/pkg/compiler/lib/src/ir/impact.dart b/pkg/compiler/lib/src/ir/impact.dart
index 803aed8..7fabac6 100644
--- a/pkg/compiler/lib/src/ir/impact.dart
+++ b/pkg/compiler/lib/src/ir/impact.dart
@@ -598,15 +598,6 @@
 
   @override
   void handleEqualsNull(ir.EqualsNull node, ir.DartType expressionType) {
-    // TODO(johnniwinther): Remove this after the new method invocation has landed
-    // stably. This is only included to make the transition a no-op.
-    if (node.fileOffset < node.expression.fileOffset) {
-      // Hack to detect `null == o`.
-      expressionType = const ir.NullType();
-    }
-    ClassRelation relation = computeClassRelationFromType(expressionType);
-    registerDynamicInvocation(
-        expressionType, relation, ir.Name.equalsName, 1, const [], const []);
     registerNullLiteral();
   }
 
diff --git a/pkg/compiler/lib/src/ir/static_type.dart b/pkg/compiler/lib/src/ir/static_type.dart
index fd85772..224a793 100644
--- a/pkg/compiler/lib/src/ir/static_type.dart
+++ b/pkg/compiler/lib/src/ir/static_type.dart
@@ -1115,8 +1115,6 @@
     return super.visitEqualsCall(node);
   }
 
-  // TODO(johnniwinther): Remove this after the new method invocation has landed
-  // stably. This is only included to make the transition a no-op.
   void handleEqualsNull(ir.EqualsNull node, ir.DartType expressionType) {}
 
   @override
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 0051870..0520273 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -5284,28 +5284,8 @@
   void visitEqualsNull(ir.EqualsNull node) {
     node.expression.accept(this);
     HInstruction receiverInstruction = pop();
-
-    // Hack to detect `null == o`.
-    // TODO(johnniwinther): Remove this after the new method invocation has
-    // landed stably. This is only included to make the transition a no-op.
-    if (node.fileOffset < node.expression.fileOffset) {
-      _pushDynamicInvocation(
-          node,
-          new StaticType(
-              _elementMap.commonElements.nullType, ClassRelation.subtype),
-          _typeInferenceMap.receiverTypeOfInvocation(
-              node, _abstractValueDomain),
-          Selectors.equals,
-          <HInstruction>[
-            graph.addConstantNull(closedWorld),
-            receiverInstruction
-          ],
-          const <DartType>[],
-          _sourceInformationBuilder.buildCall(node.expression, node));
-    } else {
-      _handleEquals(node, node.expression, receiverInstruction,
-          graph.addConstantNull(closedWorld));
-    }
+    _handleEquals(node, node.expression, receiverInstruction,
+        graph.addConstantNull(closedWorld));
   }
 
   @override
diff --git a/pkg/compiler/test/codegen/builtin_equals_test.dart b/pkg/compiler/test/codegen/builtin_equals_test.dart
index d5281f8..c91d5d2 100644
--- a/pkg/compiler/test/codegen/builtin_equals_test.dart
+++ b/pkg/compiler/test/codegen/builtin_equals_test.dart
@@ -27,7 +27,9 @@
 
       RegExp regexp = new RegExp('==');
       Iterator<Match> matches = regexp.allMatches(generated).iterator;
-      checkNumberOfMatches(matches, 4);
+      // `s == null` and `null == s` now both encoded as `s == null` allowing
+      // the second to be optimized away.
+      checkNumberOfMatches(matches, 3);
     });
   }
 
diff --git a/pkg/compiler/test/codegen/constant_folding_test.dart b/pkg/compiler/test/codegen/constant_folding_test.dart
index a3471c3..ee8d440 100644
--- a/pkg/compiler/test/codegen/constant_folding_test.dart
+++ b/pkg/compiler/test/codegen/constant_folding_test.dart
@@ -67,7 +67,7 @@
       RegExp regexp = new RegExp(r'a == null');
       Expect.isTrue(regexp.hasMatch(generated), 'No match found for ${regexp}');
 
-      regexp = new RegExp(r'null == b');
+      regexp = new RegExp(r'b == null');
       Expect.isTrue(regexp.hasMatch(generated), 'No match found for ${regexp}');
 
       regexp = new RegExp(r'4 === c');
diff --git a/pkg/compiler/test/impact/data/expressions.dart b/pkg/compiler/test/impact/data/expressions.dart
index 6b4b041..2beebc8 100644
--- a/pkg/compiler/test/impact/data/expressions.dart
+++ b/pkg/compiler/test/impact/data/expressions.dart
@@ -364,13 +364,14 @@
  type=[inst:JSString]*/
 testThrow() => throw '';
 
-/*member: testIfNotNull:dynamic=[Object.==,foo],type=[inst:JSNull]*/
+/*member: testIfNotNull:
+ dynamic=[foo],
+ type=[inst:JSNull]
+*/
 testIfNotNull(o) => o?.foo;
 
 /*member: testTypedIfNotNull:
- dynamic=[
-  Class.==,
-  Class.field],
+ dynamic=[Class.field],
  static=[
   Rti._bind(1),
   Rti._eval(1),
@@ -415,13 +416,22 @@
 */
 testTypedIfNotNull(Class o) => o?.field;
 
-/*member: testIfNotNullSet:dynamic=[Object.==,foo=],type=[inst:JSBool,inst:JSNull]*/
+/*member: testIfNotNullSet:
+ dynamic=[foo=],
+ type=[
+  inst:JSBool,
+  inst:JSNull]
+*/
 testIfNotNullSet(o) => o?.foo = true;
 
-/*member: testIfNull:dynamic=[Object.==],type=[inst:JSBool,inst:JSNull]*/
+/*member: testIfNull:type=[
+  inst:JSBool,
+  inst:JSNull]*/
 testIfNull(o) => o ?? true;
 
-/*member: testSetIfNull:dynamic=[Object.==],type=[inst:JSBool,inst:JSNull]*/
+/*member: testSetIfNull:type=[
+  inst:JSBool,
+  inst:JSNull]*/
 testSetIfNull(o) => o ??= true;
 
 class Class {
diff --git a/pkg/compiler/test/impact/data/jsinterop_setter1.dart b/pkg/compiler/test/impact/data/jsinterop_setter1.dart
index 4042ca9..b2b6e34 100644
--- a/pkg/compiler/test/impact/data/jsinterop_setter1.dart
+++ b/pkg/compiler/test/impact/data/jsinterop_setter1.dart
@@ -68,9 +68,7 @@
 external set foo(Function f);
 
 /*member: _doStuff:
- dynamic=[
-  File.==,
-  File.name],
+ dynamic=[File.name],
  static=[
   Rti._bind(1),
   Rti._eval(1),
diff --git a/pkg/compiler/test/impact/data/jsinterop_setter2.dart b/pkg/compiler/test/impact/data/jsinterop_setter2.dart
index d62e98f..82f71cb 100644
--- a/pkg/compiler/test/impact/data/jsinterop_setter2.dart
+++ b/pkg/compiler/test/impact/data/jsinterop_setter2.dart
@@ -75,9 +75,7 @@
 external set foo(void Function(String, File) f);
 
 /*member: _doStuff:
- dynamic=[
-  File.==,
-  File.name],
+ dynamic=[File.name],
  static=[
   Rti._bind(1),
   Rti._eval(1),
diff --git a/pkg/compiler/test/impact/data/promotion.dart b/pkg/compiler/test/impact/data/promotion.dart
index 7aaba1c..713e6a0 100644
--- a/pkg/compiler/test/impact/data/promotion.dart
+++ b/pkg/compiler/test/impact/data/promotion.dart
@@ -197,7 +197,7 @@
   cls.toString;
 }
 
-/*member: dynamicToEquals:dynamic=[Object.==],type=[inst:JSNull]*/
+/*member: dynamicToEquals:type=[inst:JSNull]*/
 dynamicToEquals(dynamic cls) {
   cls == null;
 }
diff --git a/pkg/compiler/test/impact/data/runtime_type.dart b/pkg/compiler/test/impact/data/runtime_type.dart
index 2c8dd9a..926936d 100644
--- a/pkg/compiler/test/impact/data/runtime_type.dart
+++ b/pkg/compiler/test/impact/data/runtime_type.dart
@@ -36,7 +36,6 @@
 class Class1c<T> implements Class1a<T> {
   /*member: Class1c.==:
    dynamic=[
-    Object.==,
     Object.runtimeType,
     Type.==,
     this:Class1c.runtimeType],
@@ -52,7 +51,6 @@
 class Class1d<T> implements Class1a<T> {
   /*member: Class1d.==:
    dynamic=[
-    Object.==,
     Object.runtimeType,
     Type.==,
     this:Class1d.runtimeType],
@@ -134,7 +132,6 @@
 
 /*member: toString2:
  dynamic=[
-  Class2.==,
   Class2.runtimeType,
   toString(0)],
  runtimeType=[string:Class2<int*>*],
@@ -247,7 +244,6 @@
 /*member: toString4:
  dynamic=[
   Class2.runtimeType,
-  Type.==,
   Type.toString(0)],
  runtimeType=[string:Class2<int*>*],
  static=[
@@ -302,9 +298,7 @@
 
 /*member: toString5:
  dynamic=[
-  Class2.==,
   Class2.runtimeType,
-  Type.==,
   Type.toString(0)],
  runtimeType=[string:Class2<int*>*],
  static=[
@@ -359,7 +353,6 @@
 
 /*member: toString6:
  dynamic=[
-  Class2.==,
   Class2.runtimeType,
   Type.toString(0)],
  runtimeType=[string:Class2<int*>*],
@@ -467,9 +460,7 @@
 
 /*member: equals1:
  dynamic=[
-  Class1a.==,
   Class1a.runtimeType,
-  Class1d.==,
   Class1d.runtimeType,
   Type.==],
  runtimeType=[equals:Class1a<int*>*==Class1d<int*>*],
@@ -525,9 +516,7 @@
 equals1(Class1a<int> a, Class1d<int> b) => a?.runtimeType == b?.runtimeType;
 
 /*member: almostEquals1:
- dynamic=[
-  Class3.runtimeType,
-  Type.==],
+ dynamic=[Class3.runtimeType],
  runtimeType=[unknown:Class3*],
  static=[
   Rti._bind(1),
@@ -574,10 +563,7 @@
 almostEquals1(Class3 a) => a.runtimeType == null;
 
 /*member: almostEquals2:
- dynamic=[
-  Class3.==,
-  Class3.runtimeType,
-  Type.==],
+ dynamic=[Class3.runtimeType],
  runtimeType=[unknown:Class3*],
  static=[
   Rti._bind(1),
@@ -624,9 +610,7 @@
 almostEquals2(Class3 a) => a?.runtimeType == null;
 
 /*member: almostEquals3:
- dynamic=[
-  Class3.runtimeType,
-  Null.==],
+ dynamic=[Class3.runtimeType],
  runtimeType=[unknown:Class3*],
  static=[
   Rti._bind(1),
@@ -673,10 +657,7 @@
 almostEquals3(Class3 a) => null == a.runtimeType;
 
 /*member: almostEquals4:
- dynamic=[
-  Class3.==,
-  Class3.runtimeType,
-  Null.==],
+ dynamic=[Class3.runtimeType],
  runtimeType=[unknown:Class3*],
  static=[
   Rti._bind(1),
@@ -773,7 +754,6 @@
 
 /*member: almostEquals6:
  dynamic=[
-  Class3.==,
   Class3.field,
   Class3.runtimeType,
   Type.==],
@@ -824,7 +804,6 @@
 
 /*member: almostEquals7:
  dynamic=[
-  Class3.==,
   Class3.field,
   Class3.runtimeType,
   Type.==],
@@ -875,7 +854,6 @@
 
 /*member: almostEquals8:
  dynamic=[
-  Class3.==,
   Class3.field,
   Class3.runtimeType,
   Type.==],
@@ -975,7 +953,6 @@
 
 /*member: almostEquals10:
  dynamic=[
-  Class3.==,
   Class3.field,
   Class3.runtimeType,
   Object.==],
@@ -1026,7 +1003,6 @@
 
 /*member: almostEquals11:
  dynamic=[
-  Class3.==,
   Class3.field,
   Class3.runtimeType,
   Object.==],
@@ -1077,7 +1053,6 @@
 
 /*member: almostEquals12:
  dynamic=[
-  Class3.==,
   Class3.field,
   Class3.runtimeType,
   Object.==],
@@ -1176,9 +1151,7 @@
 
 /*member: almostToString2:
  dynamic=[
-  Class3.==,
   Class3.runtimeType,
-  Type.==,
   Type.toString],
  runtimeType=[unknown:Class3*],
  static=[
@@ -1276,7 +1249,6 @@
 
 /*member: almostToString4:
  dynamic=[
-  Class3.==,
   Class3.runtimeType,
   Type.noSuchMethod(1)],
  runtimeType=[unknown:Class3*],
@@ -1376,7 +1348,6 @@
 
 /*member: notEquals2:
  dynamic=[
-  Class3.==,
   Class3.runtimeType,
   Class4.runtimeType,
   Type.==],
@@ -1429,7 +1400,6 @@
 /*member: notEquals3:
  dynamic=[
   Class3.runtimeType,
-  Class4.==,
   Class4.runtimeType,
   Type.==],
  runtimeType=[equals:Class3*==Class4*],
@@ -1480,9 +1450,7 @@
 
 /*member: notEquals4:
  dynamic=[
-  Class3.==,
   Class3.runtimeType,
-  Class4.==,
   Class4.runtimeType,
   Type.==],
  runtimeType=[equals:Class3*==Class4*],
diff --git a/pkg/compiler/test/static_type/data/assert.dart b/pkg/compiler/test/static_type/data/assert.dart
index 39ecf52..cf39c87 100644
--- a/pkg/compiler/test/static_type/data/assert.dart
+++ b/pkg/compiler/test/static_type/data/assert.dart
@@ -20,25 +20,25 @@
 }
 
 assert1(Class c) {
-  assert(/*Class*/ c /*invoke: [Class]->bool*/ != null);
+  assert(/*Class*/ c != null);
   /*Class*/ c.next;
 }
 
 assert2(Class c) {
-  assert(/*Class*/ c /*invoke: [Class]->bool*/ == null);
+  assert(/*Class*/ c == null);
   /*Class*/ c.next;
 }
 
 assert3(Class c) {
   bool b;
-  assert(/*Class*/ c /*invoke: [Class]->bool*/ != null);
+  assert(/*Class*/ c != null);
   if (/*bool*/ b) return;
   /*Class*/ c.next;
 }
 
 assert4(Class c) {
   bool b;
-  assert(/*Class*/ c /*invoke: [Class]->bool*/ == null);
+  assert(/*Class*/ c == null);
   if (/*bool*/ b) return;
   /*Class*/ c.next;
 }
diff --git a/pkg/compiler/test/static_type/data/assert_ea.dart b/pkg/compiler/test/static_type/data/assert_ea.dart
index e178bbc..4851158 100644
--- a/pkg/compiler/test/static_type/data/assert_ea.dart
+++ b/pkg/compiler/test/static_type/data/assert_ea.dart
@@ -20,25 +20,25 @@
 }
 
 assert1(Class c) {
-  assert(/*Class*/ c /*invoke: [Class]->bool*/ != null);
+  assert(/*Class*/ c != null);
   /*Class*/ c.next;
 }
 
 assert2(Class c) {
-  assert(/*Class*/ c /*invoke: [Class]->bool*/ == null);
+  assert(/*Class*/ c == null);
   /*Null*/ c.next;
 }
 
 assert3(Class c) {
   bool b;
-  assert(/*Class*/ c /*invoke: [Class]->bool*/ != null);
+  assert(/*Class*/ c != null);
   if (/*bool*/ b) return;
   /*Class*/ c.next;
 }
 
 assert4(Class c) {
   bool b;
-  assert(/*Class*/ c /*invoke: [Class]->bool*/ == null);
+  assert(/*Class*/ c == null);
   if (/*bool*/ b) return;
   /*Null*/ c.next;
 }
diff --git a/pkg/compiler/test/static_type/data/do.dart b/pkg/compiler/test/static_type/data/do.dart
index 072fb39..7c1defa 100644
--- a/pkg/compiler/test/static_type/data/do.dart
+++ b/pkg/compiler/test/static_type/data/do.dart
@@ -22,7 +22,7 @@
         /*Class*/ c.next;
       }
       c = 0;
-    } while (/*dynamic*/ c /*invoke: [dynamic]->bool*/ != null);
+    } while (/*dynamic*/ c != null);
     /*dynamic*/ c.next;
   }
 }
@@ -32,7 +32,7 @@
     /*Class*/ c.next;
     do {
       /*Class*/ c.next;
-    } while (/*Class*/ c /*invoke: [Class]->bool*/ != null);
+    } while (/*Class*/ c != null);
     /*Class*/ c.next;
   }
 }
diff --git a/pkg/compiler/test/static_type/data/for.dart b/pkg/compiler/test/static_type/data/for.dart
index 1128ac9..df400d8 100644
--- a/pkg/compiler/test/static_type/data/for.dart
+++ b/pkg/compiler/test/static_type/data/for.dart
@@ -19,7 +19,7 @@
   if (/*dynamic*/ c is Class) {
     /*Class*/ c.next;
     for (/*Class*/ c.next;
-        /*dynamic*/ c /*invoke: [dynamic]->bool*/ != null;
+        /*dynamic*/ c != null;
         /*dynamic*/ c.next) {
       /*dynamic*/ c.next;
       if (/*dynamic*/ c is Class) {
@@ -35,7 +35,7 @@
   if (/*dynamic*/ c is Class) {
     /*Class*/ c.next;
     for (/*Class*/ c.next;
-        /*Class*/ c /*invoke: [Class]->bool*/ != null;
+        /*Class*/ c != null;
         /*Class*/ c.next) {
       /*Class*/ c.next;
     }
diff --git a/pkg/compiler/test/static_type/data/issue42281.dart b/pkg/compiler/test/static_type/data/issue42281.dart
index c8d8fdf..efe3a5d 100644
--- a/pkg/compiler/test/static_type/data/issue42281.dart
+++ b/pkg/compiler/test/static_type/data/issue42281.dart
@@ -16,8 +16,8 @@
 }
 
 method1(Class c, Type type, [o]) {
-  if (/*Class*/ c /*invoke: [Class]->bool*/ == null) {
-    if (/*dynamic*/ o /*invoke: [dynamic]->bool*/ != null) {
+  if (/*Class*/ c == null) {
+    if (/*dynamic*/ o != null) {
       c = new Class(String);
     }
     /*Class*/ c;
@@ -26,8 +26,8 @@
 }
 
 method2(Class c, Type type, [o]) {
-  if (/*Class*/ c /*invoke: [Class]->bool*/ == null) {
-    if (/*dynamic*/ o /*invoke: [dynamic]->bool*/ != null) {
+  if (/*Class*/ c == null) {
+    if (/*dynamic*/ o != null) {
       c = new SubClass(String);
     }
     /*Class*/ c;
@@ -37,8 +37,8 @@
 
 method3(Class c, Type type, [o]) {
   if (/*Class*/ c is SubClass) {
-    if (/*SubClass*/ c /*invoke: [SubClass]->bool*/ == null) {
-      if (/*dynamic*/ o /*invoke: [dynamic]->bool*/ != null) {
+    if (/*SubClass*/ c == null) {
+      if (/*dynamic*/ o != null) {
         c = new SubClass(String);
       }
       /*SubClass*/ c;
diff --git a/pkg/compiler/test/static_type/data/marker.options b/pkg/compiler/test/static_type/data/marker.options
index 3d9c6d9..478f33e 100644
--- a/pkg/compiler/test/static_type/data/marker.options
+++ b/pkg/compiler/test/static_type/data/marker.options
@@ -1,2 +1 @@
 spec=pkg/compiler/test/static_type/static_type_test.dart
-prod=pkg/compiler/test/static_type/static_type_test.dart
diff --git a/pkg/compiler/test/static_type/data/null.dart b/pkg/compiler/test/static_type/data/null.dart
index 5fd9622..a421ef1 100644
--- a/pkg/compiler/test/static_type/data/null.dart
+++ b/pkg/compiler/test/static_type/data/null.dart
@@ -21,46 +21,46 @@
 
 null1(dynamic c) {
   /*dynamic*/ c.next;
-  /*dynamic*/ c /*invoke: [dynamic]->bool*/ != null;
+  /*dynamic*/ c != null;
   /*dynamic*/ c.next;
 }
 
 null2(dynamic c) {
   /*dynamic*/ c.next;
-  /*dynamic*/ c /*invoke: [dynamic]->bool*/ == null;
+  /*dynamic*/ c == null;
   /*dynamic*/ c.next;
 }
 
 null3(dynamic c) {
-  if (/*dynamic*/ c /*invoke: [dynamic]->bool*/ == null) return;
+  if (/*dynamic*/ c == null) return;
   /*dynamic*/ c.next;
 }
 
 null4(dynamic c) {
-  if (/*dynamic*/ c /*invoke: [dynamic]->bool*/ != null) return;
+  if (/*dynamic*/ c != null) return;
   /*Null*/ c.next;
 }
 
 null5(dynamic c) {
-  if (/*dynamic*/ c /*invoke: [dynamic]->bool*/ != null) {
+  if (/*dynamic*/ c != null) {
     /*dynamic*/ c.next;
   }
 }
 
 null6(dynamic c) {
-  if (/*dynamic*/ c /*invoke: [dynamic]->bool*/ == null) {
+  if (/*dynamic*/ c == null) {
     /*Null*/ c.next;
   }
 }
 
 null7(dynamic c) {
-  while (/*dynamic*/ c /*invoke: [dynamic]->bool*/ != null) {
+  while (/*dynamic*/ c != null) {
     /*dynamic*/ c.next;
   }
 }
 
 null8(dynamic c) {
-  while (/*dynamic*/ c /*invoke: [dynamic]->bool*/ == null) {
+  while (/*dynamic*/ c == null) {
     /*Null*/ c.next;
   }
 }
diff --git a/pkg/compiler/test/static_type/data/while.dart b/pkg/compiler/test/static_type/data/while.dart
index 671d6da..881015a 100644
--- a/pkg/compiler/test/static_type/data/while.dart
+++ b/pkg/compiler/test/static_type/data/while.dart
@@ -26,7 +26,7 @@
 while1(dynamic c) {
   if (/*dynamic*/ c is Class) {
     /*Class*/ c.next;
-    while (/*dynamic*/ c /*invoke: [dynamic]->bool*/ != null) {
+    while (/*dynamic*/ c != null) {
       /*dynamic*/ c.next;
       if (/*dynamic*/ c is Class) {
         /*Class*/ c.next;
@@ -40,7 +40,7 @@
 while2(dynamic c) {
   if (/*dynamic*/ c is Class) {
     /*Class*/ c.next;
-    while (/*Class*/ c /*invoke: [Class]->bool*/ != null) {
+    while (/*Class*/ c != null) {
       /*Class*/ c.next;
     }
     /*Class*/ c.next;
@@ -48,7 +48,7 @@
 }
 
 whileNext(Class c) {
-  while (/*Class*/ c /*invoke: [Class]->bool*/ != null) {
+  while (/*Class*/ c != null) {
     c = /*Class*/ c.next;
   }
   return /*Class*/ c;
@@ -56,7 +56,7 @@
 
 whileNextGeneric(GenericClass<int> c) {
   while (
-      /*GenericClass<int>*/ c /*invoke: [GenericClass<int>]->bool*/ != null) {
+      /*GenericClass<int>*/ c != null) {
     c = /*GenericClass<int>*/ c.next;
   }
   return /*GenericClass<int>*/ c;
@@ -80,7 +80,7 @@
   whileNext2() {
     bool b;
     GenericClass<T> c;
-    while (/*GenericClass<T>*/ c /*invoke: [GenericClass<T>]->bool*/ != null) {
+    while (/*GenericClass<T>*/ c != null) {
       if (/*bool*/ b) {
         GenericClass<T> next = /*GenericClass<T>*/ c.next;
         c = /*GenericClass<T>*/ next;
@@ -94,7 +94,7 @@
   whileNext3() {
     bool b;
     GenericClass<T> c;
-    while (/*GenericClass<T>*/ c /*invoke: [GenericClass<T>]->bool*/ == null) {
+    while (/*GenericClass<T>*/ c == null) {
       if (/*bool*/ b) {
         GenericClass<T> next = /*Null*/ c.next;
         c = /*GenericClass<T>*/ next;
diff --git a/pkg/compiler/test/static_type/static_type_test.dart b/pkg/compiler/test/static_type/static_type_test.dart
index fca7c8a..15cf87d 100644
--- a/pkg/compiler/test/static_type/static_type_test.dart
+++ b/pkg/compiler/test/static_type/static_type_test.dart
@@ -107,11 +107,6 @@
     } else if (node is ir.EqualsCall) {
       return '[${typeToText(node.left.accept(staticTypeCache))}]->'
           '${typeToText(node.accept(staticTypeCache))}';
-    } else if (node is ir.EqualsNull) {
-      // TODO(johnniwinther): Remove this after the new method invocation has
-      // landed stably. This is only included to make the transition a no-op.
-      return '[${typeToText(node.expression.accept(staticTypeCache))}]->'
-          '${typeToText(node.accept(staticTypeCache))}';
     }
     return null;
   }
diff --git a/tools/VERSION b/tools/VERSION
index ca6b26c..0c01fa4 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 19
+PRERELEASE 20
 PRERELEASE_PATCH 0
\ No newline at end of file
