diff --git a/BUILD.gn b/BUILD.gn
index b7f3457..dc28b54 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -74,13 +74,13 @@
   ]
 }
 
-if (dont_use_nnbd) {
+if (use_nnbd) {
   group("create_sdk") {
-    public_deps = [ "sdk:create_sdk" ]
+    public_deps = [ "sdk_nnbd:create_sdk" ]
   }
 } else {
   group("create_sdk") {
-    public_deps = [ "sdk_nnbd:create_sdk" ]
+    public_deps = [ "sdk:create_sdk" ]
   }
 }
 
diff --git a/pkg/dartdev/test/commands/migrate_test.dart b/pkg/dartdev/test/commands/migrate_test.dart
index c5f8882..c3d2c97 100644
--- a/pkg/dartdev/test/commands/migrate_test.dart
+++ b/pkg/dartdev/test/commands/migrate_test.dart
@@ -11,7 +11,9 @@
   group('migrate', defineMigrateTests, timeout: longTimeout);
 }
 
-bool _nnbdIsEnabled = true;
+// TODO(jcollins-g): Set to true and/or remove when when NNBD is enabled in the
+//  SDK running this test.
+bool _nnbdIsEnabled = false;
 
 void defineMigrateTests() {
   final didYouForgetToRunPubGet = contains('Did you forget to run "pub get"?');
diff --git a/pkg/dev_compiler/test/modular_suite.dart b/pkg/dev_compiler/test/modular_suite.dart
index 2452fa1..573238d 100644
--- a/pkg/dev_compiler/test/modular_suite.dart
+++ b/pkg/dev_compiler/test/modular_suite.dart
@@ -75,12 +75,7 @@
     List<String> extraArgs;
     if (module.isSdk) {
       sources = ['dart:core'];
-      extraArgs = [
-        '--libraries-file',
-        '$rootScheme:///sdk_nnbd/lib/libraries.json',
-        '--enable-experiment',
-        'non-nullable',
-      ];
+      extraArgs = ['--libraries-file', '$rootScheme:///sdk/lib/libraries.json'];
       assert(transitiveDependencies.isEmpty);
     } else {
       sources = module.sources.map(sourceToImportUri).toList();
@@ -154,13 +149,7 @@
     List<String> extraArgs;
     if (module.isSdk) {
       sources = ['dart:core'];
-      extraArgs = [
-        '--compile-sdk',
-        '--libraries-file',
-        '$rootScheme:///sdk_nnbd/lib/libraries.json',
-        '--enable-experiment',
-        'non-nullable',
-      ];
+      extraArgs = ['--compile-sdk'];
       assert(transitiveDependencies.isEmpty);
     } else {
       var sdkModule = module.dependencies.firstWhere((m) => m.isSdk);
@@ -240,8 +229,6 @@
     var runjs = '''
     import { dart, _isolate_helper } from 'dart_sdk.js';
     import { main } from 'main.js';
-    // Run with weak null safety.
-    dart.strictSubtypeChecks(false);
     _isolate_helper.startRootIsolate(() => {}, []);
     main.main();
     ''';
diff --git a/pkg/test_runner/lib/src/configuration.dart b/pkg/test_runner/lib/src/configuration.dart
index dfc966e..239ffcd 100644
--- a/pkg/test_runner/lib/src/configuration.dart
+++ b/pkg/test_runner/lib/src/configuration.dart
@@ -468,6 +468,15 @@
     var normal = '$result$arch';
     var cross = '${result}X$arch';
 
+    // TODO(38701): When enabling the NNBD experiment, we need to use the
+    // forked version of the SDK core libraries that have NNBD support. Remove
+    // this once the forked SDK at `<repo>/sdk_nnbd` has been merged back with
+    // `<repo>/sdk`.
+    if (experiments.contains("non-nullable")) {
+      normal += "NNBD";
+      cross += "NNBD";
+    }
+
     var outDir = system.outputDirectory;
     var normalDir = Directory(Path('$outDir$normal').toNativePath());
     var crossDir = Directory(Path('$outDir$cross').toNativePath());
diff --git a/pkg/vm/testcases/bytecode/bootstrapping.dart.expect b/pkg/vm/testcases/bytecode/bootstrapping.dart.expect
index 8fbd06a..6f5d2ad 100644
--- a/pkg/vm/testcases/bytecode/bootstrapping.dart.expect
+++ b/pkg/vm/testcases/bytecode/bootstrapping.dart.expect
@@ -259,46 +259,6 @@
   [1] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class '_NamespaceImpl', script = '#lib'
     extends dart:core::Object
     implements [#lib::_Namespace]
@@ -452,46 +412,6 @@
   [3] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class '_Namespace', script = '#lib'
     extends dart:core::Object
 
@@ -565,46 +485,6 @@
   [1] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'VMLibraryHooks', script = '#lib'
     extends dart:core::Object
 
@@ -705,46 +585,6 @@
   [3] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'Stdin', script = '#lib'
     extends dart:core::Object
 
@@ -767,46 +607,6 @@
   [1] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class '_StdIOUtils', script = '#lib'
     extends dart:core::Object
 
@@ -844,46 +644,6 @@
 }
 
 
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
-
 }
 ]library #lib from "#lib" as #lib {
 
@@ -893,16 +653,6 @@
     synthetic constructor •() → #lib::_ScheduleImmediate*
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class _NamespaceImpl extends dart.core::Object implements #lib::_Namespace {
     static field #lib::_NamespaceImpl* _cachedNamespace = null;
@@ -919,23 +669,13 @@
       #lib::_NamespaceImpl::_cachedNamespace = #lib::_NamespaceImpl::_create(new #lib::_NamespaceImpl::_(), namespace);
     }
     static get _namespace() → #lib::_NamespaceImpl* {
-      if(#lib::_NamespaceImpl::_cachedNamespace.{#lib::_NamespaceImpl::==}(null)) {
+      if(#lib::_NamespaceImpl::_cachedNamespace.{dart.core::Object::==}(null)) {
         #lib::_NamespaceImpl::_cachedNamespace = #lib::_NamespaceImpl::_create(new #lib::_NamespaceImpl::_(), #lib::_NamespaceImpl::_getDefault());
       }
       return #lib::_NamespaceImpl::_cachedNamespace;
     }
     static get _namespacePointer() → dart.core::int*
       return #lib::_NamespaceImpl::_getPointer(#lib::_NamespaceImpl::_namespace);
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class _Namespace extends dart.core::Object {
     synthetic constructor •() → #lib::_Namespace*
@@ -948,16 +688,6 @@
       return #lib::_NamespaceImpl::_namespace;
     static get _namespacePointer() → dart.core::int*
       return #lib::_NamespaceImpl::_namespacePointer;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class VMLibraryHooks extends dart.core::Object {
     static field dynamic timerFactory = null;
@@ -984,31 +714,11 @@
       }
       return #lib::VMLibraryHooks::_cachedScript;
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class Stdin extends dart.core::Object {
     synthetic constructor •() → #lib::Stdin*
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class _StdIOUtils extends dart.core::Object {
     synthetic constructor •() → #lib::_StdIOUtils*
@@ -1016,16 +726,6 @@
       ;
     static method _getStdioInputStream(dart.core::int* fd) → #lib::Stdin*
       return null;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   static field dart.core::int* _stdinFD = 0;
   static field dart.core::int* _stdoutFD = 1;
@@ -1059,7 +759,7 @@
     #lib::VMLibraryHooks::platformScript = #C10;
   }
   static get stdin() → #lib::Stdin* {
-    #lib::_stdin.{#lib::Stdin::==}(null) ?{#lib::Stdin*} #lib::_stdin = #lib::_StdIOUtils::_getStdioInputStream(#lib::_stdinFD) : null;
+    #lib::_stdin.{dart.core::Object::==}(null) ?{#lib::Stdin*} #lib::_stdin = #lib::_StdIOUtils::_getStdioInputStream(#lib::_stdinFD) : null;
     return #lib::_stdin;
   }
   static method main() → dynamic {}
diff --git a/pkg/vm/testcases/bytecode/closures.dart.expect b/pkg/vm/testcases/bytecode/closures.dart.expect
index 2b004ef..675d337d 100644
--- a/pkg/vm/testcases/bytecode/closures.dart.expect
+++ b/pkg/vm/testcases/bytecode/closures.dart.expect
@@ -383,46 +383,6 @@
   [1] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'C2', script = '#lib'
     extends dart:core::Object
 
@@ -445,46 +405,6 @@
   [1] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'C3', script = '#lib'
     extends dart:core::Object
 
@@ -507,46 +427,6 @@
   [1] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'C4', script = '#lib'
     extends dart:core::Object
 
@@ -569,46 +449,6 @@
   [1] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'C5', script = '#lib'
     extends dart:core::Object
 
@@ -631,46 +471,6 @@
   [1] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'C6', script = '#lib'
     extends dart:core::Object
 
@@ -693,46 +493,6 @@
   [1] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'C7', script = '#lib'
     extends dart:core::Object
 
@@ -755,46 +515,6 @@
   [1] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'C8', script = '#lib'
     extends dart:core::Object
 
@@ -817,46 +537,6 @@
   [1] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'A', script = '#lib'
     type-params <dart:core::Object T1, dart:core::Object T2> (args: 2)
     extends dart:core::Object
@@ -1166,46 +846,6 @@
   ReturnTOS
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'B', script = '#lib'
     extends dart:core::Object
 
@@ -1461,46 +1101,6 @@
   ReturnTOS
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'C', script = '#lib'
     extends dart:core::Object
 
@@ -1780,46 +1380,6 @@
   ReturnTOS
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'D', script = '#lib'
     type-params <dart:core::Object T> (args: 1)
     extends dart:core::Object
@@ -2005,46 +1565,6 @@
   ReturnTOS
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'E', script = '#lib', abstract
     extends dart:core::Object
 
@@ -2195,46 +1715,6 @@
 }
 
 
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
-
 }
 ]library #lib from "#lib" as #lib {
 
@@ -2243,121 +1723,41 @@
     synthetic constructor •() → #lib::C1*
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class C2 extends dart.core::Object {
     synthetic constructor •() → #lib::C2*
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class C3 extends dart.core::Object {
     synthetic constructor •() → #lib::C3*
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class C4 extends dart.core::Object {
     synthetic constructor •() → #lib::C4*
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class C5 extends dart.core::Object {
     synthetic constructor •() → #lib::C5*
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class C6 extends dart.core::Object {
     synthetic constructor •() → #lib::C6*
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class C7 extends dart.core::Object {
     synthetic constructor •() → #lib::C7*
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class C8 extends dart.core::Object {
     synthetic constructor •() → #lib::C8*
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class A<T1 extends dart.core::Object* = dynamic, T2 extends dart.core::Object* = dynamic> extends dart.core::Object {
     synthetic constructor •() → #lib::A<#lib::A::T1*, #lib::A::T2*>*
@@ -2378,16 +1778,6 @@
       [@vm.call-site-attributes.metadata=receiverType:FunctionType(void Function<T5, T6>()*)] nested1.call<#lib::C5*, #lib::C6*>();
       [@vm.call-site-attributes.metadata=receiverType:FunctionType(void Function<T5, T6>()*)] nested1.call<dart.core::List<#lib::C5*>*, dart.core::List<#lib::C6*>*>();
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class B extends dart.core::Object {
     field dart.core::int* foo = null;
@@ -2427,16 +1817,6 @@
         [@vm.call-site-attributes.metadata=receiverType:FunctionType(Null? Function()*)] closure3.call();
       }
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class C extends dart.core::Object {
     synthetic constructor •() → #lib::C*
@@ -2468,16 +1848,6 @@
         }
       }
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class D<T extends dart.core::Object* = dynamic> extends dart.core::Object {
     synthetic constructor •() → #lib::D<#lib::D::T*>*
@@ -2492,16 +1862,6 @@
         [@vm.call-site-attributes.metadata=receiverType:FunctionType(Null? Function()*)] inner.call();
       };
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   abstract class E extends dart.core::Object {
     field (dart.core::int*, dart.core::int*) →* dart.core::int* foo1 = null;
@@ -2518,16 +1878,6 @@
       return let final dart.core::int* #t3 = this.{#lib::E::evalArg1}() in let final dart.core::int* #t4 = this.{#lib::E::evalArg2}() in [@vm.call-site-attributes.metadata=receiverType:FunctionType(int* Function<T>(T*, T*)*)] this.{#lib::E::foo2}.call<dart.core::int*>(#t3, #t4);
     method testCallThroughGetter3() → dart.core::int*
       return let final #lib::E* #t5 = this.{#lib::E::getE}() in let final dart.core::int* #t6 = this.{#lib::E::evalArg1}() in let final dart.core::int* #t7 = this.{#lib::E::evalArg2}() in [@vm.call-site-attributes.metadata=receiverType:FunctionType(int* Function<T>(T*, T*)*)] #t5.{#lib::E::foo2}.call<dart.core::int*>(#t6, #t7);
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   static method simpleClosure() → dart.core::int* {
     dart.core::int* x = 5;
diff --git a/pkg/vm/testcases/bytecode/field_initializers.dart.expect b/pkg/vm/testcases/bytecode/field_initializers.dart.expect
index 7e0795c..ce083da 100644
--- a/pkg/vm/testcases/bytecode/field_initializers.dart.expect
+++ b/pkg/vm/testcases/bytecode/field_initializers.dart.expect
@@ -159,46 +159,6 @@
   [1] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'B', script = '#lib'
     extends #lib::A
 
@@ -286,16 +246,6 @@
     constructor redirecting2(dart.core::int* a, dart.core::int* b, dart.core::int* c) → #lib::A*
       : this #lib::A::constr2(a, b.{dart.core::num::*}(c))
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class B extends #lib::A {
     field dart.core::int* foo6 = 46;
diff --git a/pkg/vm/testcases/bytecode/instance_creation.dart.expect b/pkg/vm/testcases/bytecode/instance_creation.dart.expect
index 26b018c..b3d07d01 100644
--- a/pkg/vm/testcases/bytecode/instance_creation.dart.expect
+++ b/pkg/vm/testcases/bytecode/instance_creation.dart.expect
@@ -280,46 +280,6 @@
   [10] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'A', script = '#lib'
     extends #lib::Base < dart:core::int, dart:core::String >
 
@@ -432,46 +392,6 @@
   [6] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'E', script = '#lib'
     type-params <dart:core::Object K, dart:core::Object V> (args: 2)
     extends dart:core::Object
@@ -514,46 +434,6 @@
   [2] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'F', script = '#lib'
     type-params <dart:core::Object K, dart:core::Object V> (args: 4)
     extends #lib::E < dart:core::String, dart:core::List < #lib::F::TypeParam/1 > >
@@ -646,46 +526,6 @@
   [3] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'H', script = '#lib'
     type-params <dart:core::Object P1, dart:core::Object P2, dart:core::Object P3> (args: 5)
     extends #lib::G < #lib::H::TypeParam/1, #lib::H::TypeParam/2 >
@@ -758,46 +598,6 @@
   [4] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'J', script = '#lib'
     extends dart:core::Object
 
@@ -817,46 +617,6 @@
   [0] = NativeEntry agent_J
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'K', script = '#lib', abstract
     type-params <dart:core::Object A, dart:core::Object B> (args: 2)
     extends dart:core::Object
@@ -885,46 +645,6 @@
   [2] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'TestTypeArgReuse', script = '#lib'
     type-params <dart:core::Object P, dart:core::Object Q> (args: 2)
     extends #lib::Base < #lib::TestTypeArgReuse::TypeParam/0, #lib::TestTypeArgReuse::TypeParam/1 >
@@ -960,16 +680,6 @@
       : super dart.core::Object::•() {
       dart.core::print("Base: ${#lib::Base::T1*}, ${#lib::Base::T2*}");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class A extends #lib::Base<dart.core::int*, dart.core::String*> {
     constructor •(dart.core::String* s) → #lib::A*
@@ -987,16 +697,6 @@
       : super dart.core::Object::•() {
       dart.core::print("C: ${s}");
     }
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class E<K extends dart.core::Object* = dynamic, V extends dart.core::Object* = dynamic> extends dart.core::Object {
     synthetic constructor •() → #lib::E<#lib::E::K*, #lib::E::V*>*
@@ -1004,16 +704,6 @@
       ;
     method test_reuse1() → dynamic
       return dart.core::Map::•<#lib::E::K*, #lib::E::V*>();
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class F<K extends dart.core::Object* = dynamic, V extends dart.core::Object* = dynamic> extends #lib::E<dart.core::String*, dart.core::List<#lib::F::V*>*> {
     synthetic constructor •() → #lib::F<#lib::F::K*, #lib::F::V*>*
@@ -1028,16 +718,6 @@
       ;
     static factory test_factory<K extends dart.core::Object* = dynamic, V extends dart.core::Object* = dynamic>() → #lib::G<#lib::G::test_factory::K*, #lib::G::test_factory::V*>*
       return new #lib::H::•<dart.core::String*, #lib::G::test_factory::K*, #lib::G::test_factory::V*>();
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class H<P1 extends dart.core::Object* = dynamic, P2 extends dart.core::Object* = dynamic, P3 extends dart.core::Object* = dynamic> extends #lib::G<#lib::H::P2*, #lib::H::P3*> {
     synthetic constructor •() → #lib::H<#lib::H::P1*, #lib::H::P2*, #lib::H::P3*>*
@@ -1050,44 +730,14 @@
       ;
     static factory test_factory2({dynamic param = #C1}) → #lib::I*
       return new #lib::I::•(param);
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class J extends dart.core::Object {
     @#C3
     external static factory •() → #lib::J*;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   abstract class K<A extends dart.core::Object* = dynamic, B extends dart.core::Object* = dynamic> extends dart.core::Object {
     static factory •<A extends dart.core::Object* = dynamic, B extends dart.core::Object* = dynamic>() → #lib::K<#lib::K::•::A*, #lib::K::•::B*>*
       return new #lib::TestTypeArgReuse::•<#lib::K::•::A*, #lib::K::•::B*>();
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class TestTypeArgReuse<P extends dart.core::Object* = dynamic, Q extends dart.core::Object* = dynamic> extends #lib::Base<#lib::TestTypeArgReuse::P*, #lib::TestTypeArgReuse::Q*> implements #lib::K<#lib::TestTypeArgReuse::P*, #lib::TestTypeArgReuse::Q*> {
     synthetic constructor •() → #lib::TestTypeArgReuse<#lib::TestTypeArgReuse::P*, #lib::TestTypeArgReuse::Q*>*
diff --git a/pkg/vm/testcases/bytecode/literals.dart.expect b/pkg/vm/testcases/bytecode/literals.dart.expect
index be92e6d..316e2e4 100644
--- a/pkg/vm/testcases/bytecode/literals.dart.expect
+++ b/pkg/vm/testcases/bytecode/literals.dart.expect
@@ -530,42 +530,6 @@
   [1] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'B', script = '#lib'
     extends dart:core::Object
 
@@ -595,46 +559,6 @@
   [3] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'C', script = '#lib'
     extends #lib::B
 
@@ -709,46 +633,6 @@
   [6] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'E', script = '#lib'
     type-params <dart:core::Object T> (args: 1)
     extends dart:core::Object
@@ -772,46 +656,6 @@
   [1] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'F', script = '#lib'
     type-params <dart:core::Object P, dart:core::Object Q> (args: 3)
     extends #lib::E < dart:core::Map < #lib::F::TypeParam/0, #lib::F::TypeParam/1 > >
@@ -853,31 +697,12 @@
       ;
     method toString() → dart.core::String*
       return this.{=#lib::A::_name};
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class B extends dart.core::Object /*hasConstConstructor*/  {
     final field dart.core::int* i;
     const constructor •(dart.core::int* i) → #lib::B*
       : #lib::B::i = i, super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class C extends #lib::B /*hasConstConstructor*/  {
     final field dart.core::int* j;
@@ -891,31 +716,11 @@
     const constructor •(dynamic x, [dynamic y = #C14]) → #lib::D*
       : #lib::D::x = x, #lib::D::y = y, super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class E<T extends dart.core::Object* = dynamic> extends dart.core::Object /*hasConstConstructor*/  {
     const constructor •() → #lib::E<#lib::E::T*>*
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class F<P extends dart.core::Object* = dynamic, Q extends dart.core::Object* = dynamic> extends #lib::E<dart.core::Map<#lib::F::P*, #lib::F::Q*>*> /*hasConstConstructor*/  {
     const constructor •() → #lib::F<#lib::F::P*, #lib::F::Q*>*
diff --git a/pkg/vm/testcases/bytecode/loops.dart.expect b/pkg/vm/testcases/bytecode/loops.dart.expect
index 4b4932f..524ae14 100644
--- a/pkg/vm/testcases/bytecode/loops.dart.expect
+++ b/pkg/vm/testcases/bytecode/loops.dart.expect
@@ -26,13 +26,12 @@
   Push                 r1
   Push                 FP[-5]
   InterfaceCall        CP#0, 1
-  InterfaceCall        CP#2, 2
-  AssertBoolean        0
+  CompareIntLt
   JumpIfFalse          L1
   Push                 r0
   Push                 FP[-5]
   Push                 r1
-  InterfaceCall        CP#4, 2
+  InterfaceCall        CP#2, 2
   AddInt
   PopLocal             r0
   Push                 r1
@@ -48,10 +47,8 @@
 ConstantPool {
   [0] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
   [1] = Reserved
-  [2] = InterfaceCall 'dart:core::num::<', ArgDesc num-args 2, num-type-args 0, names []
+  [2] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
   [3] = Reserved
-  [4] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
-  [5] = Reserved
 }
 
 
@@ -75,15 +72,14 @@
   Push                 r1
   Push                 FP[-5]
   InterfaceCall        CP#0, 1
-  InterfaceCall        CP#2, 2
-  AssertBoolean        0
+  CompareIntGe
   JumpIfFalse          L2
   Jump                 L1
 L2:
   Push                 r0
   Push                 FP[-5]
   Push                 r1
-  InterfaceCall        CP#4, 2
+  InterfaceCall        CP#2, 2
   AddInt
   PopLocal             r0
   Push                 r1
@@ -99,10 +95,8 @@
 ConstantPool {
   [0] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
   [1] = Reserved
-  [2] = InterfaceCall 'dart:core::num::>=', ArgDesc num-args 2, num-type-args 0, names []
+  [2] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
   [3] = Reserved
-  [4] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
-  [5] = Reserved
 }
 
 
@@ -123,8 +117,7 @@
   Push                 r1
   Push                 FP[-5]
   InterfaceCall        CP#0, 1
-  InterfaceCall        CP#2, 2
-  AssertBoolean        0
+  CompareIntLt
   JumpIfFalse          L1
   Push                 r1
   PushInt              0
@@ -135,7 +128,7 @@
   Push                 r0
   Push                 FP[-5]
   Push                 r1
-  InterfaceCall        CP#4, 2
+  InterfaceCall        CP#2, 2
   AddInt
   PopLocal             r0
 L3:
@@ -152,10 +145,8 @@
 ConstantPool {
   [0] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
   [1] = Reserved
-  [2] = InterfaceCall 'dart:core::num::<', ArgDesc num-args 2, num-type-args 0, names []
+  [2] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
   [3] = Reserved
-  [4] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
-  [5] = Reserved
 }
 
 
@@ -175,8 +166,7 @@
   Push                 r1
   Push                 FP[-5]
   InterfaceCall        CP#0, 1
-  InterfaceCall        CP#2, 2
-  AssertBoolean        0
+  CompareIntLt
   JumpIfFalse          L1
   Push                 r0
   Push                 FP[-5]
@@ -188,7 +178,7 @@
   StoreLocal           r1
   PopLocal             r3
   Push                 r2
-  InterfaceCall        CP#4, 2
+  InterfaceCall        CP#2, 2
   AddInt
   PopLocal             r0
   Jump                 L2
@@ -199,10 +189,8 @@
 ConstantPool {
   [0] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
   [1] = Reserved
-  [2] = InterfaceCall 'dart:core::num::<', ArgDesc num-args 2, num-type-args 0, names []
+  [2] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
   [3] = Reserved
-  [4] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
-  [5] = Reserved
 }
 
 
@@ -232,8 +220,7 @@
   Push                 r1
   Push                 FP[-5]
   InterfaceCall        CP#2, 1
-  InterfaceCall        CP#4, 2
-  AssertBoolean        0
+  CompareIntLt
   JumpIfTrue           L1
   Push                 r0
   ReturnTOS
@@ -243,8 +230,6 @@
   [1] = Reserved
   [2] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
   [3] = Reserved
-  [4] = InterfaceCall 'dart:core::num::<', ArgDesc num-args 2, num-type-args 0, names []
-  [5] = Reserved
 }
 
 
diff --git a/pkg/vm/testcases/bytecode/super_calls.dart.expect b/pkg/vm/testcases/bytecode/super_calls.dart.expect
index 181a7cb..d872423 100644
--- a/pkg/vm/testcases/bytecode/super_calls.dart.expect
+++ b/pkg/vm/testcases/bytecode/super_calls.dart.expect
@@ -89,46 +89,6 @@
 ConstantPool {
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'A', script = '#lib'
     extends #lib::Base1
 
@@ -286,46 +246,6 @@
 Function 'set:bazz', setter, abstract, reflectable, debuggable
     parameters [dart:core::int 'x'] (required: 1)
     return-type void
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'B', script = '#lib', abstract
     extends #lib::Base2
 
@@ -562,16 +482,6 @@
     get bar() → dynamic
       return 42;
     set bazz(dart.core::int* x) → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class A extends #lib::Base1 {
     synthetic constructor •() → #lib::A*
@@ -596,16 +506,6 @@
     abstract method foo<T extends dart.core::Object* = dynamic>(dart.core::String* a1, #lib::Base2::foo::T* a2, dart.core::int* a3) → void;
     abstract get bar() → dynamic;
     abstract set bazz(dart.core::int* x) → void;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   abstract class B extends #lib::Base2 {
     synthetic constructor •() → #lib::B*
diff --git a/pkg/vm/testcases/bytecode/type_ops.dart.expect b/pkg/vm/testcases/bytecode/type_ops.dart.expect
index 0e65d25..8c81f4d 100644
--- a/pkg/vm/testcases/bytecode/type_ops.dart.expect
+++ b/pkg/vm/testcases/bytecode/type_ops.dart.expect
@@ -123,46 +123,6 @@
   [1] = Reserved
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'B', script = '#lib'
     extends #lib::A < dart:core::String >
 
@@ -472,46 +432,6 @@
   [4] = ObjectRef 'T'
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'F', script = '#lib', abstract
     type-params <dart:core::Object T> (args: 1)
     extends dart:core::Object
@@ -545,46 +465,6 @@
     type-params <#lib::F::TypeParam/0 Q>
     parameters [#lib::F::foo8::TypeParam/0 'a', dart:core::num 'b', #lib::F::TypeParam/0 'c'] (required: 3)
     return-type void
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'G', script = '#lib'
     type-params <dart:core::Object T> (args: 1)
     extends dart:core::Object
@@ -655,46 +535,6 @@
   [6] = ObjectRef < #lib::G::TypeParam/0 >
 }
 
-
-Function 'get:_identityHashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function '_instanceOf', abstract, debuggable
-    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOf', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfTrue', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '_simpleInstanceOfFalse', abstract, debuggable
-    parameters [dynamic 'type'] (required: 1)
-    return-type dart:core::bool
-
-Function '==', abstract, debuggable
-    parameters [dynamic 'other'] (required: 1)
-    return-type dart:core::bool
-
-Function 'get:hashCode', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::int
-
-Function 'toString', abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::String
-
-Function 'noSuchMethod', abstract, debuggable
-    parameters [dart:core::Invocation 'invocation'] (required: 1)
-    return-type dynamic
-
-Function 'get:runtimeType', getter, abstract, debuggable
-    parameters [] (required: 0)
-    return-type dart:core::Type
 Class 'H', script = '#lib'
     type-params <dart:core::Object T> (args: 1)
     extends #lib::G < #lib::H::TypeParam/0 >
@@ -843,16 +683,6 @@
     synthetic constructor •() → #lib::A<#lib::A::T*>*
       : super dart.core::Object::•()
       ;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class B extends #lib::A<dart.core::String*> {
     synthetic constructor •() → #lib::B*
@@ -896,16 +726,6 @@
     static factory •<P extends dart.core::String* = dynamic>() → #lib::E<#lib::E::•::P*>*
       return null;
     method foo6<generic-covariant-impl T extends #lib::E::P* = #lib::E::P*, U extends dart.core::List<#lib::E::foo6::T*>* = dart.core::List<#lib::E::P*>*>(dart.core::Map<#lib::E::foo6::T*, #lib::E::foo6::U*>* map) → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   abstract class F<T extends dart.core::Object* = dynamic> extends dart.core::Object {
     synthetic constructor •() → #lib::F<#lib::F::T*>*
@@ -913,32 +733,12 @@
       ;
     abstract method foo7<generic-covariant-impl Q extends #lib::F::T* = #lib::F::T*>(#lib::F::foo7::Q* a, covariant dart.core::num* b, generic-covariant-impl #lib::F::T* c) → void;
     abstract method foo8<generic-covariant-impl Q extends #lib::F::T* = #lib::F::T*>(#lib::F::foo8::Q* a, covariant dart.core::num* b, generic-covariant-impl #lib::F::T* c) → void;
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class G<T extends dart.core::Object* = dynamic> extends dart.core::Object {
     synthetic constructor •() → #lib::G<#lib::G::T*>*
       : super dart.core::Object::•()
       ;
     method foo7<generic-covariant-impl Q extends #lib::G::T* = #lib::G::T*>(#lib::G::foo7::Q* a, dart.core::int* b, generic-covariant-impl #lib::G::T* c) → void {}
-    abstract member-signature get _identityHashCode() → dart.core::int*;
-    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*;
-    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*;
-    abstract member-signature operator ==(dynamic other) → dart.core::bool*;
-    abstract member-signature get hashCode() → dart.core::int*;
-    abstract member-signature method toString() → dart.core::String*;
-    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic;
-    abstract member-signature get runtimeType() → dart.core::Type*;
   }
   class H<T extends dart.core::Object* = dynamic> extends #lib::G<#lib::H::T*> implements #lib::F<#lib::H::T*> {
     synthetic constructor •() → #lib::H<#lib::H::T*>*
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
index 0e80af6..b840c08 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
@@ -129,7 +129,7 @@
 RESULT: _T {}?
 ------------ if9 ------------
 %x = _Parameter #0 [_T (#lib::TestEnum)+?]
-t1* = _Call [TestEnum::==] (%x, _T (#lib::TestEnum, #lib::TestEnum {index: 0, #lib::_name: TestEnum.v1, }))
+t1* = _Call [Object::==] (%x, _T (#lib::TestEnum, #lib::TestEnum {index: 0, #lib::_name: TestEnum.v1, }))
 t2 = _Call direct [foo] (_T (#lib::TestEnum, #lib::TestEnum {index: 0, #lib::_name: TestEnum.v1, }))
 RESULT: _T {}?
 ------------ conditional1 ------------
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect
index 839a730..2dcdcb8 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/bench_is_prime.dart.expect
@@ -6,7 +6,7 @@
 [@vm.unboxing-info.metadata=(i)->b]static method isPrime([@vm.inferred-type.metadata=int] dynamic n) → core::bool* {
   if(_in::unsafeCast<core::bool*>([@vm.direct-call.metadata=_IntegerImplementation::<] [@vm.inferred-type.metadata=dart.core::bool] n.<(2)))
     return false;
-  for (core::int* i = 2; [@vm.direct-call.metadata=_IntegerImplementation::<=] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=_IntegerImplementation::*] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::*}(i).{core::num::<=}(_in::unsafeCast<core::num>(n)); i = [@vm.direct-call.metadata=_IntegerImplementation::+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1)) {
+  for (core::int* i = 2; [@vm.direct-call.metadata=_IntegerImplementation::<=] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=_IntegerImplementation::*] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::*}(i).{core::num::<=}(_in::unsafeCast<core::num*>(n)); i = [@vm.direct-call.metadata=_IntegerImplementation::+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1)) {
     if([@vm.direct-call.metadata=_IntegerImplementation::==] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=_IntegerImplementation::%] [@vm.inferred-type.metadata=int] n.%(i).{core::Object::==}(0))
       return false;
   }
@@ -30,7 +30,7 @@
   }
 }
 static method main(core::List<core::String*>* args) → dynamic {
-  core::Stopwatch* timer = let final core::Stopwatch #t1 = new core::Stopwatch::•() in let final void #t2 = [@vm.direct-call.metadata=Stopwatch::start] [@vm.inferred-type.metadata=!? (skip check)] #t1.{core::Stopwatch::start}() in #t1;
+  core::Stopwatch* timer = let final core::Stopwatch* #t1 = new core::Stopwatch::•() in let final void #t2 = [@vm.direct-call.metadata=Stopwatch::start] [@vm.inferred-type.metadata=!? (skip check)] #t1.{core::Stopwatch::start}() in #t1;
   for (core::int* i = 0; [@vm.direct-call.metadata=_IntegerImplementation::<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}(100); i = [@vm.direct-call.metadata=_IntegerImplementation::+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1)) {
     self::run();
   }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_cycle.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_cycle.dart.expect
index 4b9e704..31fb99c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_cycle.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_cycle.dart.expect
@@ -22,7 +22,6 @@
     : super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  abstract method foobar((dynamic) →* void onData, {core::Function* onError = #C1}) → self::StreamSubscription*;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3]  abstract member-signature operator ==(dynamic other) → core::bool*;
 }
 abstract class _StreamImpl extends self::Stream {
   synthetic constructor •() → self::_StreamImpl*
@@ -31,7 +30,7 @@
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method foobar([@vm.inferred-type.metadata=dart.core::Null? (value: null)] (dynamic) →* void onData, {[@vm.inferred-type.metadata=dart.core::Null? (value: null)] core::Function* onError = #C1}) → self::StreamSubscription* {
     return [@vm.inferred-type.metadata=! (skip check)] this.{self::_StreamImpl::_createSubscription}();
   }
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5]  method _createSubscription() → self::StreamSubscription* {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method _createSubscription() → self::StreamSubscription* {
     return new self::_BufferingStreamSubscription::•();
   }
 }
@@ -39,7 +38,7 @@
   synthetic constructor •() → self::_ControllerStream*
     : super self::_StreamImpl::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5]  method _createSubscription() → self::StreamSubscription* {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method _createSubscription() → self::StreamSubscription* {
     return new self::_BroadcastSubscription::•();
   }
 }
@@ -49,7 +48,7 @@
     ;
 }
 abstract class StreamView extends self::Stream {
-[@vm.inferred-type.metadata=!] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6,getterSelectorId:7]  final field self::Stream* _stream;
+[@vm.inferred-type.metadata=!] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  final field self::Stream* _stream;
   constructor •([@vm.inferred-type.metadata=!] self::Stream* stream) → self::StreamView*
     : self::StreamView::_stream = stream, super self::Stream::•()
     ;
@@ -61,16 +60,16 @@
   constructor •([@vm.inferred-type.metadata=!] self::Stream* stream) → self::ByteStream*
     : super self::StreamView::•(stream)
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:8,getterSelectorId:9]  method super_foobar1([@vm.inferred-type.metadata=dart.core::Null? (value: null)] (dynamic) →* void onData) → dynamic {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]  method super_foobar1([@vm.inferred-type.metadata=dart.core::Null? (value: null)] (dynamic) →* void onData) → dynamic {
     super.{self::StreamView::foobar}(onData);
   }
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:10,getterSelectorId:11]  method super_foobar2([@vm.inferred-type.metadata=dart.core::Null? (value: null)] (dynamic) →* void onData) → dynamic {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10]  method super_foobar2([@vm.inferred-type.metadata=dart.core::Null? (value: null)] (dynamic) →* void onData) → dynamic {
     super.{self::StreamView::foobar}(onData);
   }
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:12,getterSelectorId:13]  method super_foobar3({[@vm.inferred-type.metadata=dart.core::Null? (value: null)] (dynamic) →* void onData = #C1, [@vm.inferred-type.metadata=dart.core::Null? (value: null)] core::Function* onError = #C1}) → dynamic {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12]  method super_foobar3({[@vm.inferred-type.metadata=dart.core::Null? (value: null)] (dynamic) →* void onData = #C1, [@vm.inferred-type.metadata=dart.core::Null? (value: null)] core::Function* onError = #C1}) → dynamic {
     super.{self::StreamView::foobar}(onData, onError: onError);
   }
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:14]  get super_stream() → self::Stream*
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:13]  get super_stream() → self::Stream*
     return [@vm.inferred-type.metadata=!] super.{self::StreamView::_stream};
 }
 class _HandleErrorStream extends self::Stream {
@@ -101,7 +100,7 @@
   self::ByteStream* x = new self::ByteStream::•(new self::_ControllerStream::•());
   self::Stream* y = [@vm.direct-call.metadata=ByteStream::super_stream] [@vm.inferred-type.metadata=!] x.{self::ByteStream::super_stream};
   self::Stream* z = [@vm.direct-call.metadata=StreamView::_stream] [@vm.inferred-type.metadata=!] x.{self::StreamView::_stream};
-  if([@vm.direct-call.metadata=Object::==] [@vm.inferred-type.metadata=dart.core::bool (skip check)] y.{self::Stream::==}(z)) {
+  if([@vm.direct-call.metadata=Object::==] [@vm.inferred-type.metadata=dart.core::bool (skip check) (receiver not int)] y.{core::Object::==}(z)) {
     [@vm.direct-call.metadata=ByteStream::super_foobar2] [@vm.inferred-type.metadata=!? (skip check)] x.{self::ByteStream::super_foobar2}(onData);
   }
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect
index b39b249..00c3bcf 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect
@@ -19,7 +19,7 @@
   synthetic constructor •() → self::A1*
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method call([dynamic a1 = #C1, dynamic a2 = #C1, dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=#lib::T1?] dynamic a5 = #C1]) → void {
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method call([dynamic a1 = #C1, dynamic a2 = #C1, [@vm.inferred-type.metadata=int?] dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=#lib::T1?] dynamic a5 = #C1]) → void {
     [@vm.direct-call.metadata=A1::foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::A1::foo} = _in::unsafeCast<self::T1*>(a5);
   }
 }
@@ -42,7 +42,7 @@
   synthetic constructor •() → self::A2*
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method call([dynamic a1 = #C1, dynamic a2 = #C1, dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = #C1, [@vm.inferred-type.metadata=#lib::T2?] dynamic a6 = #C1]) → void {
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method call([dynamic a1 = #C1, dynamic a2 = #C1, [@vm.inferred-type.metadata=int?] dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = #C1, [@vm.inferred-type.metadata=#lib::T2?] dynamic a6 = #C1]) → void {
     [@vm.direct-call.metadata=A2::foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::A2::foo} = a6;
   }
 }
@@ -75,7 +75,7 @@
   synthetic constructor •() → self::A3*
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method call([dynamic a1 = #C1, dynamic a2 = #C1, dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a6 = #C1, [@vm.inferred-type.metadata=#lib::T3?] dynamic a7 = #C1]) → void {
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method call([dynamic a1 = #C1, dynamic a2 = #C1, [@vm.inferred-type.metadata=int?] dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a6 = #C1, [@vm.inferred-type.metadata=#lib::T3?] dynamic a7 = #C1]) → void {
     [@vm.direct-call.metadata=A3::foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::A3::foo} = a7;
   }
 }
@@ -98,7 +98,7 @@
   synthetic constructor •() → self::A4*
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method call([dynamic a1 = #C1, dynamic a2 = #C1, dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a6 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a7 = #C1, [@vm.inferred-type.metadata=#lib::T4?] dynamic a8 = #C1]) → void {
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method call([dynamic a1 = #C1, dynamic a2 = #C1, [@vm.inferred-type.metadata=int?] dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a6 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a7 = #C1, [@vm.inferred-type.metadata=#lib::T4?] dynamic a8 = #C1]) → void {
     [@vm.direct-call.metadata=A4::foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::A4::foo} = a8;
   }
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
index 1eaa0f9..e232d6b 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
@@ -12,7 +12,7 @@
     : super self::A::•()
     ;
 [@vm.procedure-attributes.metadata=hasThisUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method foo() → core::int*
-    return [@vm.direct-call.metadata=_IntegerImplementation::+] [@vm.inferred-type.metadata=! (skip check)] 1.{core::num::+}([@vm.direct-call.metadata=B::foo] [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult().foo() as{TypeError,ForDynamic} core::num) as{TypeError} core::int*;
+    return [@vm.direct-call.metadata=_IntegerImplementation::+] [@vm.inferred-type.metadata=! (skip check)] 1.{core::num::+}([@vm.direct-call.metadata=B::foo] [@vm.inferred-type.metadata=!? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult().foo() as{TypeError,ForDynamic} core::num*) as{TypeError} core::int*;
 }
 class TearOffDynamicMethod extends core::Object {
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  field dynamic bazz;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect
index 66ded4c..868f6f8 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect
@@ -14,7 +14,7 @@
     : super self::A::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method foo() → core::int*
-    return _in::unsafeCast<core::int*>([@vm.direct-call.metadata=_IntegerImplementation::+] [@vm.inferred-type.metadata=int (skip check)] 1.{core::num::+}(_in::unsafeCast<core::num>([@vm.direct-call.metadata=B::bar] [@vm.inferred-type.metadata=dart.core::_Smi (value: 3) (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult().bar())));
+    return _in::unsafeCast<core::int*>([@vm.direct-call.metadata=_IntegerImplementation::+] [@vm.inferred-type.metadata=int (skip check)] 1.{core::num::+}(_in::unsafeCast<core::num*>([@vm.direct-call.metadata=B::bar] [@vm.inferred-type.metadata=dart.core::_Smi (value: 3) (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult().bar())));
 [@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method bar() → core::int*
     return 3;
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
index 475df5a..894ccaa 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
@@ -14,14 +14,14 @@
     : super self::A::•()
     ;
 [@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method foo() → core::int*
-    return _in::unsafeCast<core::int*>([@vm.direct-call.metadata=_IntegerImplementation::+] [@vm.inferred-type.metadata=int (skip check)] 1.{core::num::+}(_in::unsafeCast<core::num>([@vm.direct-call.metadata=B::foo] [@vm.inferred-type.metadata=int? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult().foo())));
+    return _in::unsafeCast<core::int*>([@vm.direct-call.metadata=_IntegerImplementation::+] [@vm.inferred-type.metadata=int (skip check)] 1.{core::num::+}(_in::unsafeCast<core::num*>([@vm.direct-call.metadata=B::foo] [@vm.inferred-type.metadata=int? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult().foo())));
 }
 abstract class Base extends core::Object {
   synthetic constructor •() → self::Base*
     : super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method foo() → core::int*
-    return _in::unsafeCast<core::int*>([@vm.direct-call.metadata=_IntegerImplementation::+] [@vm.inferred-type.metadata=int (skip check)] 3.{core::num::+}(_in::unsafeCast<core::num>([@vm.direct-call.metadata=B::foo] [@vm.inferred-type.metadata=int? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult().foo())));
+    return _in::unsafeCast<core::int*>([@vm.direct-call.metadata=_IntegerImplementation::+] [@vm.inferred-type.metadata=int (skip check)] 3.{core::num::+}(_in::unsafeCast<core::num*>([@vm.direct-call.metadata=B::foo] [@vm.inferred-type.metadata=int? (receiver not int)] [@vm.inferred-type.metadata=#lib::B] self::knownResult().foo())));
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method doCall(dynamic x) → core::int*
     return [@vm.call-site-attributes.metadata=receiverType:DynamicType(dynamic)] x.call() as{TypeError,ForDynamic} core::int*;
 }
diff --git a/pkg/vm/testcases/transformations/unreachable_code_elimination/uce_testcases.dart.expect b/pkg/vm/testcases/transformations/unreachable_code_elimination/uce_testcases.dart.expect
index d839d62..04ae51a 100644
--- a/pkg/vm/testcases/transformations/unreachable_code_elimination/uce_testcases.dart.expect
+++ b/pkg/vm/testcases/transformations/unreachable_code_elimination/uce_testcases.dart.expect
@@ -5,16 +5,6 @@
 class TestAssertInitializer extends core::Object {
   constructor •() → self::TestAssertInitializer*
     : super core::Object::•() {}
-  abstract member-signature get _identityHashCode() → core::int*;
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*;
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*;
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*;
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*;
-  abstract member-signature operator ==(dynamic other) → core::bool*;
-  abstract member-signature get hashCode() → core::int*;
-  abstract member-signature method toString() → core::String*;
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic;
-  abstract member-signature get runtimeType() → core::Type*;
 }
 static const field core::bool* constTrue = #C1;
 static const field core::bool* constFalse = #C2;
diff --git a/runtime/BUILD.gn b/runtime/BUILD.gn
index b47b604..c7d66dc 100644
--- a/runtime/BUILD.gn
+++ b/runtime/BUILD.gn
@@ -140,6 +140,10 @@
     }
   }
 
+  if (use_nnbd) {
+    defines += [ "DART_BUILT_WITH_NNBD_FLAG" ]
+  }
+
   if (!is_win) {
     cflags = [
       "-Werror",
diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index 55668ad..abf3f53 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -529,7 +529,7 @@
     isolate_snapshot_instructions,
   ]
   args = []
-  if (!dont_use_nnbd) {
+  if (use_nnbd) {
     args += [
       "--enable-experiment=non-nullable",
       "--null-safety",
diff --git a/runtime/vm/BUILD.gn b/runtime/vm/BUILD.gn
index 3ff028c..d7fe4a2 100644
--- a/runtime/vm/BUILD.gn
+++ b/runtime/vm/BUILD.gn
@@ -154,7 +154,7 @@
     }
     single_root_scheme = "org-dartlang-sdk"
     single_root_base = rebase_path("../../")
-    if (!dont_use_nnbd) {
+    if (use_nnbd) {
       libraries_specification_uri =
           "org-dartlang-sdk:///sdk_nnbd/lib/libraries.json"
     } else {
@@ -172,7 +172,7 @@
       "-Ddart.developer.causal_async_stacks=$allow_causal_async_stacks",
       "-Ddart.isVM=true",
     ]
-    if (!dont_use_nnbd) {
+    if (use_nnbd) {
       args += [ "--enable-experiment=non-nullable" ]
       args += [ "--nnbd-agnostic" ]
     }
@@ -216,7 +216,9 @@
     "..:dart_maybe_product_config",
     ":libdart_vm_config",
   ]
-  sources = [ "compiler/offsets_extractor.cc" ]
+  sources = [
+    "compiler/offsets_extractor.cc",
+  ]
   include_dirs = [ ".." ]
 }
 
@@ -228,6 +230,8 @@
     "..:dart_maybe_product_config",
     ":libdart_vm_config",
   ]
-  sources = [ "compiler/offsets_extractor.cc" ]
+  sources = [
+    "compiler/offsets_extractor.cc",
+  ]
   include_dirs = [ ".." ]
 }
diff --git a/sdk_args.gni b/sdk_args.gni
index eb4017e..7ebca48 100644
--- a/sdk_args.gni
+++ b/sdk_args.gni
@@ -5,11 +5,9 @@
 _dart_root = get_path_info(".", "abspath")
 
 declare_args() {
-  # Whether to build a Legacy SDK using Legacy core libraries.
-  # TODO(38701): Remove dont_use_nnbd once the NNBD SDK is stable/performant
-  # and there is no need to build a legacy version of the SDK for comparison
-  # purposes.
-  dont_use_nnbd = false
+  # Whether to use the NNBD fork of the SDK core libraries.
+  # TODO(#38701): Remove this when the fork has been merged back in.
+  use_nnbd = false
 
   # Absolute path to the .git folder.
   #
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index fe531d5..c549bb6 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -17,9 +17,9 @@
       "third_party/pkg_tested/",
       "tools/",
       "out/ReleaseX64/dart-sdk/",
-      "out/ReleaseX64/dart-sdk/",
+      "out/ReleaseX64NNBD/dart-sdk/",
       "xcodebuild/ReleaseX64/dart-sdk/",
-      "xcodebuild/ReleaseX64/dart-sdk/"
+      "xcodebuild/ReleaseX64NNBD/dart-sdk/"
     ],
     "dart2js": [
       ".packages",
@@ -31,7 +31,7 @@
       "runtime/tests/",
       "samples-dev/",
       "samples/",
-      "sdk_nnbd/",
+      "sdk/",
       "tests/.dart_tool/package_config.json",
       "tests/angular/",
       "tests/co19_2/co19_2-analyzer.status",
@@ -64,9 +64,9 @@
     "dart2js_nnbd": [
       ".packages",
       ".dart_tool/package_config.json",
-      "out/ReleaseIA32/dart-sdk/",
-      "out/ReleaseX64/dart-sdk/",
-      "out/ReleaseX64/gen/utils/dartdevc/",
+      "out/ReleaseIA32NNBD/dart-sdk/",
+      "out/ReleaseX64NNBD/dart-sdk/",
+      "out/ReleaseX64NNBD/gen/utils/dartdevc/",
       "pkg/",
       "runtime/tests/",
       "samples-dev/",
@@ -74,24 +74,35 @@
       "sdk_nnbd/",
       "tests/.dart_tool/package_config.json",
       "tests/angular/",
+      "tests/co19_2/co19_2-analyzer.status",
+      "tests/co19_2/co19_2-co19.status",
+      "tests/co19_2/co19_2-dart2js.status",
+      "tests/co19_2/co19_2-dartdevc.status",
+      "tests/co19_2/co19_2-kernel.status",
+      "tests/co19_2/co19_2-runtime.status",
       "tests/compiler/",
+      "tests/corelib_2/",
       "tests/corelib/",
       "tests/dart/",
       "tests/kernel/",
+      "tests/language_2/",
       "tests/language/",
+      "tests/lib_2/",
       "tests/lib/",
       "tests/light_unittest.dart",
       "tests/search/",
+      "tests/standalone_2/",
       "tests/ffi/",
+      "tests/ffi_2/",
       "third_party/babel/babel.min.js",
       "third_party/d8/",
       "third_party/pkg/",
       "third_party/pkg_tested/",
       "third_party/requirejs/",
       "tools/",
-      "xcodebuild/ReleaseIA32/dart-sdk/",
-      "xcodebuild/ReleaseX64/dart-sdk/",
-      "xcodebuild/ReleaseX64/gen/utils/dartdevc/"
+      "xcodebuild/ReleaseIA32NNBD/dart-sdk/",
+      "xcodebuild/ReleaseX64NNBD/dart-sdk/",
+      "xcodebuild/ReleaseX64NNBD/gen/utils/dartdevc/"
     ],
     "dart2js_hostasserts": [
       ".packages",
@@ -141,9 +152,9 @@
     "dart2js_hostasserts_nnbd": [
       ".packages",
       ".dart_tool/package_config.json",
-      "out/ReleaseX64/dart",
-      "out/ReleaseX64/dart2js_platform.dill",
-      "out/ReleaseX64/dart2js_platform_strong.dill",
+      "out/ReleaseX64NNBD/dart",
+      "out/ReleaseX64NNBD/dart2js_platform.dill",
+      "out/ReleaseX64NNBD/dart2js_platform_strong.dill",
       "pkg/",
       "runtime/tests/",
       "samples-dev/",
@@ -152,27 +163,37 @@
       "sdk_nnbd/",
       "tests/.dart_tool/package_config.json",
       "tests/angular/",
+      "tests/co19_2/co19_2-analyzer.status",
+      "tests/co19_2/co19_2-co19.status",
+      "tests/co19_2/co19_2-dart2js.status",
+      "tests/co19_2/co19_2-dartdevc.status",
+      "tests/co19_2/co19_2-kernel.status",
+      "tests/co19_2/co19_2-runtime.status",
       "tests/compiler/",
+      "tests/corelib_2/",
       "tests/dart/",
       "tests/kernel/",
+      "tests/language_2/",
+      "tests/lib_2/",
       "tests/light_unittest.dart",
       "tests/search/",
+      "tests/standalone_2/",
       "tests/ffi/",
       "third_party/d8/",
       "third_party/pkg/",
       "third_party/pkg_tested/",
       "third_party/requirejs/",
       "tools/",
-      "xcodebuild/ReleaseX64/dart",
-      "xcodebuild/ReleaseX64/dart2js_platform.dill",
-      "xcodebuild/ReleaseX64/dart2js_platform_strong.dill"
+      "xcodebuild/ReleaseX64NNBD/dart",
+      "xcodebuild/ReleaseX64NNBD/dart2js_platform.dill",
+      "xcodebuild/ReleaseX64NNBD/dart2js_platform_strong.dill"
     ],
     "front-end": [
       ".packages",
       ".dart_tool/package_config.json",
       "out/ReleaseIA32/",
       "out/ReleaseX64/",
-      "out/ReleaseX64/",
+      "out/ReleaseX64NNBD/",
       "pkg/",
       "runtime/tests/",
       "samples-dev/",
@@ -320,46 +341,45 @@
       "pkg/vm/",
       "runtime/",
       "sdk/",
-      "sdk_nnbd/",
       ".dart_tool/package_config.json",
       ".packages",
       ".vpython"
     ],
     "vm-kernel-nnbd": [
       "benchmarks/",
-      "out/DebugIA32/",
-      "out/DebugX64/",
-      "out/DebugSIMARM/",
-      "out/DebugSIMARM64/",
-      "out/DebugSIMARM_X64/",
-      "out/DebugAndroidARM/",
-      "out/DebugAndroidARM_X64/",
-      "out/DebugAndroidARM64/",
-      "out/ReleaseIA32/",
-      "out/ReleaseX64/",
-      "out/ReleaseSIMARM/",
-      "out/ReleaseSIMARM64/",
-      "out/ReleaseSIMARM_X64/",
-      "out/ReleaseAndroidARM/",
-      "out/ReleaseAndroidARM_X64/",
-      "out/ReleaseAndroidARM64/",
-      "out/ReleaseXARM64/",
-      "out/ProductIA32/",
-      "out/ProductX64/",
-      "out/ProductSIMARM/",
-      "out/ProductSIMARM64/",
-      "out/ProductSIMARM_X64/",
-      "out/ProductAndroidARM/",
-      "out/ProductAndroidARM64/",
-      "xcodebuild/DebugIA32/",
-      "xcodebuild/DebugSIMARM/",
-      "xcodebuild/DebugSIMARM64/",
-      "xcodebuild/DebugX64/",
-      "xcodebuild/ProductX64/",
-      "xcodebuild/ReleaseIA32/",
-      "xcodebuild/ReleaseSIMARM/",
-      "xcodebuild/ReleaseSIMARM64/",
-      "xcodebuild/ReleaseX64/",
+      "out/DebugIA32NNBD/",
+      "out/DebugX64NNBD/",
+      "out/DebugSIMARMNNBD/",
+      "out/DebugSIMARM64NNBD/",
+      "out/DebugSIMARM_X64NNBD/",
+      "out/DebugAndroidARMNNBD/",
+      "out/DebugAndroidARM_X64NNBD/",
+      "out/DebugAndroidARM64NNBD/",
+      "out/ReleaseIA32NNBD/",
+      "out/ReleaseX64NNBD/",
+      "out/ReleaseSIMARMNNBD/",
+      "out/ReleaseSIMARM64NNBD/",
+      "out/ReleaseSIMARM_X64NNBD/",
+      "out/ReleaseAndroidARMNNBD/",
+      "out/ReleaseAndroidARM_X64NNBD/",
+      "out/ReleaseAndroidARM64NNBD/",
+      "out/ReleaseXARM64NNBD/",
+      "out/ProductIA32NNBD/",
+      "out/ProductX64NNBD/",
+      "out/ProductSIMARMNNBD/",
+      "out/ProductSIMARM64NNBD/",
+      "out/ProductSIMARM_X64NNBD/",
+      "out/ProductAndroidARMNNBD/",
+      "out/ProductAndroidARM64NNBD/",
+      "xcodebuild/DebugIA32NNBD/",
+      "xcodebuild/DebugSIMARMNNBD/",
+      "xcodebuild/DebugSIMARM64NNBD/",
+      "xcodebuild/DebugX64NNBD/",
+      "xcodebuild/ProductX64NNBD/",
+      "xcodebuild/ReleaseIA32NNBD/",
+      "xcodebuild/ReleaseSIMARMNNBD/",
+      "xcodebuild/ReleaseSIMARM64NNBD/",
+      "xcodebuild/ReleaseX64NNBD/",
       "samples/",
       "samples-dev/",
       "tools/",
@@ -370,12 +390,23 @@
       "third_party/pkg_tested/",
       "tests/.dart_tool/package_config.json",
       "tests/angular/",
+      "tests/co19_2/co19_2-analyzer.status",
+      "tests/co19_2/co19_2-co19.status",
+      "tests/co19_2/co19_2-dart2js.status",
+      "tests/co19_2/co19_2-dartdevc.status",
+      "tests/co19_2/co19_2-kernel.status",
+      "tests/co19_2/co19_2-runtime.status",
       "tests/compiler/",
+      "tests/corelib_2/",
       "tests/dart/",
       "tests/kernel/",
+      "tests/language_2/",
+      "tests/lib_2/",
       "tests/light_unittest.dart",
       "tests/search/",
+      "tests/standalone_2/",
       "tests/ffi/",
+      "tests/ffi_2/",
       "pkg/_fe_analyzer_shared/",
       "pkg/async_helper/",
       "pkg/build_integration/",
@@ -599,7 +630,7 @@
         "dart2js-options": [
           "--no-null-safety",
           "--libraries-spec=sdk_nnbd/lib/libraries.json",
-          "--platform-binaries=out/ReleaseX64/"
+          "--platform-binaries=out/ReleaseX64NNBD/"
         ],
         "timeout": 240,
         "host-checked": true
@@ -614,7 +645,7 @@
         "dart2js-options": [
           "--no-null-safety",
           "--libraries-spec=sdk_nnbd/lib/libraries.json",
-          "--platform-binaries=xcodebuild/ReleaseX64/"
+          "--platform-binaries=xcodebuild/ReleaseX64NNBD/"
         ],
         "timeout": 240,
         "host-checked": true
@@ -1080,6 +1111,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
+            "--nnbd",
             "create_sdk",
             "dartdevc_test",
             "kernel_platform_files",
@@ -1087,6 +1119,23 @@
           ]
         },
         {
+          "name": "legacy sdk tests",
+          "arguments": [
+            "-ncfe-weak-${system}"
+          ],
+          "fileset": "front-end",
+          "shards": 5
+        },
+        {
+          "name": "legacy co19_2 tests",
+          "arguments": [
+            "-ncfe-weak-${system}",
+            "co19_2"
+          ],
+          "fileset": "front-end",
+          "shards": 6
+        },
+        {
           "name": "weak sdk tests",
           "arguments": [
             "-ncfe-weak-${system}",
@@ -1329,11 +1378,29 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
+            "--nnbd",
             "runtime_kernel",
             "dart_precompiled_runtime"
           ]
         },
         {
+          "name": "vm legacy tests in weak mode with asserts",
+          "arguments": [
+            "-ndartkp-weak-asserts-${system}-${mode}-${arch}"
+          ],
+          "fileset": "vm-kernel-nnbd",
+          "shards": 6
+        },
+        {
+          "name": "vm legacy tests(co19_2) in weak mode with asserts",
+          "arguments": [
+            "-ndartkp-weak-asserts-${system}-${mode}-${arch}",
+            "co19_2"
+          ],
+          "fileset": "vm-kernel-nnbd",
+          "shards": 10
+        },
+        {
           "name": "vm nnbd tests in weak mode with asserts",
           "arguments": [
             "-ndartkp-weak-asserts-${system}-${mode}-${arch}",
@@ -1674,11 +1741,29 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
+            "--nnbd",
             "create_sdk",
             "runtime_kernel"
           ]
         },
         {
+          "name": "vm legacy tests in weak mode with asserts",
+          "arguments": [
+            "-ndartk-weak-asserts-${system}-${mode}-${arch}"
+          ],
+          "fileset": "vm-kernel-nnbd",
+          "shards": 6
+        },
+        {
+          "name": "vm legacy tests(co19_2) in weak mode with asserts",
+          "arguments": [
+            "-ndartk-weak-asserts-${system}-${mode}-${arch}",
+            "co19_2"
+          ],
+          "fileset": "vm-kernel-nnbd",
+          "shards": 6
+        },
+        {
           "name": "vm nnbd test in weak mode with asserts",
           "arguments": [
             "-ndartk-weak-asserts-${system}-${mode}-${arch}",
@@ -1953,12 +2038,13 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
+            "--nnbd",
             "dartdevc_test"
           ]
         },
         {
           "name": "check dart nnbd sdk for static errors",
-          "script": "out/ReleaseX64/dart-sdk/bin/dart",
+          "script": "out/ReleaseX64NNBD/dart-sdk/bin/dart",
           "arguments": [
             "--enable-experiment=non-nullable",
             "pkg/dev_compiler/tool/check_nnbd_sdk.dart"
@@ -1966,7 +2052,7 @@
         },
         {
           "name": "ddc weak modular tests",
-          "script": "out/ReleaseX64/dart-sdk/bin/dart",
+          "script": "out/ReleaseX64NNBD/dart-sdk/bin/dart",
           "testRunner": true,
           "arguments": [
             "pkg/dev_compiler/test/modular_suite_nnbd.dart",
@@ -1988,6 +2074,26 @@
           "fileset": "dart2js_nnbd"
         },
         {
+          "name": "ddc legacy weak tests",
+          "arguments": [
+            "-ndartdevk-weak-linux-release-chrome",
+            "language_2",
+            "corelib_2",
+            "lib_2"
+          ],
+          "shards": 6,
+          "fileset": "dart2js_nnbd"
+        },
+        {
+          "name": "ddc legacy weak co19 tests",
+          "arguments": [
+            "-ndartdevk-weak-linux-release-chrome",
+            "co19_2"
+          ],
+          "shards": 6,
+          "fileset": "dart2js_nnbd"
+        },
+        {
           "name": "ddc nnbd strong tests",
           "arguments": [
             "-ndartdevk-strong-linux-release-chrome",
@@ -2512,13 +2618,14 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
+            "--nnbd",
             "create_sdk",
             "dart2js_bot"
           ]
         },
         {
           "name": "check dart nnbd sdk for static errors",
-          "script": "out/ReleaseX64/dart-sdk/bin/dart",
+          "script": "out/ReleaseX64NNBD/dart-sdk/bin/dart",
           "arguments": [
             "--enable-experiment=non-nullable",
             "pkg/dev_compiler/tool/check_nnbd_sdk.dart",
@@ -2531,6 +2638,8 @@
           "arguments": [
             "-ndart2js-hostasserts-weak-linux-x64-d8",
             "--dart2js-batch",
+            "language_2",
+            "corelib_2",
             "dart2js_extra",
             "dart2js_native",
             "kernel"
@@ -2897,6 +3006,7 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
+            "--nnbd",
             "create_sdk"
           ]
         },
@@ -2923,6 +3033,19 @@
           ]
         },
         {
+          "name": "analyze nnbd legacy weak tests enable-asserts",
+          "arguments": [
+            "-nanalyzer-asserts-weak-${system}"
+          ]
+        },
+        {
+          "name": "analyze nnbd legacy weak tests enable-asserts co19_2",
+          "arguments": [
+            "-nanalyzer-asserts-weak-${system}",
+            "co19_2"
+          ]
+        },
+        {
           "name": "analyze nnbd strong co19 tests",
           "arguments": [
             "-nanalyzer-asserts-strong-${system}",
diff --git a/tools/build.py b/tools/build.py
index 0d05cd9..20ac683 100755
--- a/tools/build.py
+++ b/tools/build.py
@@ -67,12 +67,11 @@
         help='Build variants (comma-separated).',
         metavar='[all,none,asan,lsan,msan,tsan,ubsan]',
         default='none')
-    # TODO(38701): Remove this option once the NNBD SDK is stable/performant
-    # and there is no need to build a legacy version of the SDK for comparison
-    # purposes.
+    # TODO(38701): Remove this and everything that references it once the
+    # forked NNBD SDK is merged back in.
     result.add_option(
-        "--no-nnbd",
-        help='Build the Legacy (pre NNBD) version of the SDK.',
+        "--nnbd",
+        help='Use the NNBD fork of the SDK.',
         default=False,
         action='store_true')
     result.add_option(
@@ -219,7 +218,7 @@
     return True
 
 
-def RunGNIfNeeded(out_dir, target_os, mode, arch, dont_use_nnbd, sanitizer):
+def RunGNIfNeeded(out_dir, target_os, mode, arch, use_nnbd, sanitizer):
     if os.path.isfile(os.path.join(out_dir, 'args.gn')):
         return
     gn_os = 'host' if target_os == HOST_OS else target_os
@@ -236,8 +235,8 @@
         gn_os,
         '-v',
     ]
-    if dont_use_nnbd:
-        gn_command.append('--no-nnbd')
+    if use_nnbd:
+        gn_command.append('--nnbd')
 
     process = subprocess.Popen(gn_command)
     process.wait()
@@ -292,13 +291,13 @@
 # Returns a tuple (build_config, command to run, whether goma is used)
 def BuildOneConfig(options, targets, target_os, mode, arch, sanitizer):
     build_config = utils.GetBuildConf(mode, arch, target_os, sanitizer,
-                                      options.no_nnbd)
+                                      options.nnbd)
     out_dir = utils.GetBuildRoot(HOST_OS, mode, arch, target_os, sanitizer,
-                                 options.no_nnbd)
+                                 options.nnbd)
     using_goma = False
     # TODO(zra): Remove auto-run of gn, replace with prompt for user to run
     # gn.py manually.
-    RunGNIfNeeded(out_dir, target_os, mode, arch, options.no_nnbd, sanitizer)
+    RunGNIfNeeded(out_dir, target_os, mode, arch, options.nnbd, sanitizer)
     command = ['ninja', '-C', out_dir]
     if options.verbose:
         command += ['-v']
diff --git a/tools/gn.py b/tools/gn.py
index 06f2615..99a59cb 100755
--- a/tools/gn.py
+++ b/tools/gn.py
@@ -51,11 +51,10 @@
     return args.split()
 
 
-# TODO(38701): Remove dont_use_nnbd once the NNBD SDK is stable/performant and
-# there is no need to build a legacy version of the SDK for comparison purposes.
-def GetOutDir(mode, arch, target_os, sanitizer, dont_use_nnbd):
+# TODO(38701): Remove use_nnbd once the forked NNBD SDK is merged back in.
+def GetOutDir(mode, arch, target_os, sanitizer, use_nnbd):
     return utils.GetBuildRoot(HOST_OS, mode, arch, target_os, sanitizer,
-                              dont_use_nnbd)
+                              use_nnbd)
 
 
 def ToCommandLine(gn_args):
@@ -139,9 +138,8 @@
     return True
 
 
-# TODO(38701): Remove dont_use_nnbd once the NNBD SDK is stable/performant and
-# there is no need to build a legacy version of the SDK for comparison purposes.
-def ToGnArgs(args, mode, arch, target_os, sanitizer, dont_use_nnbd):
+# TODO(38701): Remove use_nnbd once the forked NNBD SDK is merged back in.
+def ToGnArgs(args, mode, arch, target_os, sanitizer, use_nnbd):
     gn_args = {}
 
     host_os = HostOsForGn(HOST_OS)
@@ -262,7 +260,7 @@
         gn_args['dart_debug_optimization_level'] = args.debug_opt_level
         gn_args['debug_optimization_level'] = args.debug_opt_level
 
-    gn_args['dont_use_nnbd'] = dont_use_nnbd
+    gn_args['use_nnbd'] = use_nnbd
 
     return gn_args
 
@@ -372,11 +370,9 @@
         help='Build variants (comma-separated).',
         metavar='[all,none,asan,lsan,msan,tsan,ubsan]',
         default='none')
-    # TODO(38701): Remove dont_use_nnbd once the NNBD SDK is stable/performant
-    # and there is no need to build a legacy version of the SDK for
-    # comparison purposes.
+    # TODO(38701): Remove this once the forked NNBD SDK is merged back in.
     common_group.add_argument(
-        "--no-nnbd",
+        "--nnbd",
         help='Use the NNBD fork of the SDK.',
         default=False,
         action='store_true')
@@ -513,14 +509,14 @@
             for arch in args.arch:
                 for sanitizer in args.sanitizer:
                     out_dir = GetOutDir(mode, arch, target_os, sanitizer,
-                                        args.no_nnbd)
+                                        args.nnbd)
                     # TODO(infra): Re-enable --check. Many targets fail to use
                     # public_deps to re-expose header files to their dependents.
                     # See dartbug.com/32364
                     command = [gn, 'gen', out_dir]
                     gn_args = ToCommandLine(
                         ToGnArgs(args, mode, arch, target_os, sanitizer,
-                                 args.no_nnbd))
+                                 args.nnbd))
                     gn_args += GetGNArgs(args)
                     if args.verbose:
                         print("gn gen --check in %s" % out_dir)
diff --git a/tools/utils.py b/tools/utils.py
index 5bb768f..b1084cc 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -316,11 +316,9 @@
     return ((GetArchFamily(host_arch) != GetArchFamily(arch)) or
             (target_os != GuessOS()))
 
-
-# TODO(38701): Remove dont_use_nnbd once the NNBD SDK is stable/performant and
-# there is no need to build a legacy version of the SDK for comparison purposes.
-def GetBuildConf(mode, arch, conf_os=None, sanitizer=None, dont_use_nnbd=False):
-    nnbd = "Legacy" if dont_use_nnbd else ""
+# TODO(38701): Remove use_nnbd once the forked NNBD SDK is merged back in.
+def GetBuildConf(mode, arch, conf_os=None, sanitizer=None, use_nnbd=False):
+    nnbd = "NNBD" if use_nnbd else ""
     if conf_os == 'android':
         return '%s%s%s%s' % (GetBuildMode(mode), conf_os.title(), arch.upper(),
                              nnbd)
@@ -338,30 +336,28 @@
     return BUILD_ROOT[host_os]
 
 
-# TODO(38701): Remove dont_use_nnbd once the NNBD SDK is stable/performant and
-# there is no need to build a legacy version of the SDK for comparison purposes.
+# TODO(38701): Remove use_nnbd once the forked NNBD SDK is merged back in.
 def GetBuildRoot(host_os,
                  mode=None,
                  arch=None,
                  target_os=None,
                  sanitizer=None,
-                 dont_use_nnbd=False):
+                 use_nnbd=False):
     build_root = GetBuildDir(host_os)
     if mode:
         build_root = os.path.join(
-            build_root,
-            GetBuildConf(mode, arch, target_os, sanitizer, dont_use_nnbd))
+            build_root, GetBuildConf(mode, arch, target_os, sanitizer,
+                                     use_nnbd))
     return build_root
 
 
-# TODO(38701): Remove dont_use_nnbd once the NNBD SDK is stable/performant and
-# there is no need to build a legacy version of the SDK for comparison purposes.
+# TODO(38701): Remove use_nnbd once the forked NNBD SDK is merged back in.
 def GetBuildSdkBin(host_os,
                    mode=None,
                    arch=None,
                    target_os=None,
-                   dont_use_nnbd=False):
-    build_root = GetBuildRoot(host_os, mode, arch, target_os, dont_use_nnbd)
+                   use_nnbd=False):
+    build_root = GetBuildRoot(host_os, mode, arch, target_os, use_nnbd)
     return os.path.join(build_root, 'dart-sdk', 'bin')
 
 
diff --git a/utils/compiler/BUILD.gn b/utils/compiler/BUILD.gn
index 0ccee9d..dda6c4e 100644
--- a/utils/compiler/BUILD.gn
+++ b/utils/compiler/BUILD.gn
@@ -46,10 +46,10 @@
   args = [ "--output_dir=$output_dir" ]
 }
 
-if (dont_use_nnbd) {
-  libraries_specification_path = "sdk/lib/libraries.json"
-} else {
+if (use_nnbd) {
   libraries_specification_path = "sdk_nnbd/lib/libraries.json"
+} else {
+  libraries_specification_path = "sdk/lib/libraries.json"
 }
 
 application_snapshot("dart2js") {
@@ -91,7 +91,7 @@
     "dart:core",
   ]
 
-  if (!dont_use_nnbd) {
+  if (use_nnbd) {
     args += [ "--enable-experiment=non-nullable" ]
   }
 }
@@ -112,7 +112,7 @@
     "dart:core",
   ]
 
-  if (!dont_use_nnbd) {
+  if (use_nnbd) {
     args += [ "--enable-experiment=non-nullable" ]
   }
 }
diff --git a/utils/dartanalyzer/BUILD.gn b/utils/dartanalyzer/BUILD.gn
index ad34236..6065802 100644
--- a/utils/dartanalyzer/BUILD.gn
+++ b/utils/dartanalyzer/BUILD.gn
@@ -44,7 +44,7 @@
   inputs = sdk_lib_files + analyzer_files
   output = "$root_gen_dir/strong.sum"
   outputs = [ output ]
-  if (!dont_use_nnbd) {
+  if (use_nnbd) {
     args = [
       "build-non-nullable",
       rebase_path(output),
diff --git a/utils/dartdevc/BUILD.gn b/utils/dartdevc/BUILD.gn
index 3f4f974..a0fa6b0 100644
--- a/utils/dartdevc/BUILD.gn
+++ b/utils/dartdevc/BUILD.gn
@@ -16,10 +16,10 @@
 sdk_outline_dill = "$root_out_dir/ddc_sdk.dill"
 sdk_full_dill = "$root_out_dir/ddc_platform.dill"
 
-if (dont_use_nnbd) {
-  libraries_specification_path = "sdk/lib/libraries.json"
-} else {
+if (use_nnbd) {
   libraries_specification_path = "sdk_nnbd/lib/libraries.json"
+} else {
+  libraries_specification_path = "sdk/lib/libraries.json"
 }
 
 application_snapshot("dartdevc") {
@@ -35,9 +35,7 @@
     "dartdevc.js",
   ]
 
-  if (dont_use_nnbd) {
-    training_args += [ rebase_path("../../pkg/dev_compiler/bin/dartdevc.dart") ]
-  } else {
+  if (use_nnbd) {
     training_args += [
       "--enable-experiment=non-nullable",
 
@@ -47,6 +45,8 @@
       # should be easier to compile while we bootstrap NNBD.
       rebase_path("../../tests/language_2/abstract/equal_test.dart"),
     ]
+  } else {
+    training_args += [ rebase_path("../../pkg/dev_compiler/bin/dartdevc.dart") ]
   }
 
   deps = [
@@ -58,12 +58,12 @@
 }
 
 # TODO(#38701) Cleanup after merging the forked SDK into mainline.
-if (dont_use_nnbd) {
-  sdk_root = "../../sdk"
-  libraries_specification_path = "sdk/lib/libraries.json"
-} else {
+if (use_nnbd) {
   sdk_root = "../../sdk_nnbd"
   libraries_specification_path = "sdk_nnbd/lib/libraries.json"
+} else {
+  sdk_root = "../../sdk"
+  libraries_specification_path = "sdk/lib/libraries.json"
 }
 
 sdk_lib_files = exec_script("../../tools/list_dart_files.py",
@@ -154,8 +154,8 @@
   ]
 
   # TODO(#38701) Cleanup after merging the forked SDK into mainline.
-  if (dont_use_nnbd) {
-    args += [ "--no-nnbd" ]
+  if (use_nnbd) {
+    args += [ "--nnbd" ]
   }
 }
 
@@ -276,7 +276,7 @@
     }
 
     # TODO(38701): Cleanup after merging the forked SDK into mainline.
-    if (!dont_use_nnbd) {
+    if (use_nnbd) {
       args += [ "--enable-experiment=non-nullable" ]
     }
   }
@@ -335,7 +335,7 @@
   ]
 
   # TODO(38701): Cleanup after merging the forked SDK into mainline.
-  if (!dont_use_nnbd) {
+  if (use_nnbd) {
     args += [ "--enable-experiment=non-nullable" ]
   }
 }
@@ -392,7 +392,7 @@
   ]
 
   # TODO(38701): Cleanup after merging the forked SDK into mainline.
-  if (!dont_use_nnbd) {
+  if (use_nnbd) {
     args += [ "--enable-experiment=non-nullable" ]
   }
 }
