diff --git a/tests/compiler/dart2js/codegen/class_codegen2_test.dart b/tests/compiler/dart2js/codegen/class_codegen2_test.dart
index 8577b77..a669d27 100644
--- a/tests/compiler/dart2js/codegen/class_codegen2_test.dart
+++ b/tests/compiler/dart2js/codegen/class_codegen2_test.dart
@@ -89,17 +89,17 @@
   // { a: true, }. Make sure this doesn't happen again.
   RegExp danglingComma = new RegExp(r',[ \n]*}');
 
-  Future runTests(CompileMode compileMode) async {
+  Future runTests({bool useKernel}) async {
     for (String test in [TEST_ONE, TEST_TWO, TEST_THREE, TEST_FOUR]) {
-      String generated = await compileAll(test, compileMode: compileMode);
+      String generated = await compileAll(test, useKernel: useKernel);
       Expect.isFalse(danglingComma.hasMatch(generated));
     }
   }
 
   asyncTest(() async {
     print('--test from ast---------------------------------------------------');
-    await runTests(CompileMode.memory);
+    await runTests(useKernel: false);
     print('--test from kernel------------------------------------------------');
-    await runTests(CompileMode.kernel);
+    await runTests(useKernel: true);
   });
 }
diff --git a/tests/compiler/dart2js/codegen/class_codegen_test.dart b/tests/compiler/dart2js/codegen/class_codegen_test.dart
index 693e934..2b1e798 100644
--- a/tests/compiler/dart2js/codegen/class_codegen_test.dart
+++ b/tests/compiler/dart2js/codegen/class_codegen_test.dart
@@ -63,45 +63,45 @@
 }
 """;
 
-twoClasses(CompileMode compileMode) async {
-  String generated = await compileAll(TEST_ONE, compileMode: compileMode);
+twoClasses({bool useKernel}) async {
+  String generated = await compileAll(TEST_ONE, useKernel: useKernel);
   Expect.isTrue(generated.contains(new RegExp('A: {[ \n]*"\\^": "Object;"')));
   Expect.isTrue(generated.contains(new RegExp('B: {[ \n]*"\\^": "Object;"')));
 }
 
-subClass(CompileMode compileMode) async {
+subClass({bool useKernel}) async {
   checkOutput(String generated) {
     Expect.isTrue(generated.contains(new RegExp('A: {[ \n]*"\\^": "Object;"')));
     Expect.isTrue(generated.contains(new RegExp('B: {[ \n]*"\\^": "A;"')));
   }
 
-  checkOutput(await compileAll(TEST_TWO, compileMode: compileMode));
-  checkOutput(await compileAll(TEST_THREE, compileMode: compileMode));
+  checkOutput(await compileAll(TEST_TWO, useKernel: useKernel));
+  checkOutput(await compileAll(TEST_THREE, useKernel: useKernel));
 }
 
-fieldTest(CompileMode compileMode) async {
-  String generated = await compileAll(TEST_FOUR, compileMode: compileMode);
+fieldTest({bool useKernel}) async {
+  String generated = await compileAll(TEST_FOUR, useKernel: useKernel);
   Expect.isTrue(generated
       .contains(new RegExp('B: {[ \n]*"\\^": "A;y,z,x",[ \n]*static:')));
 }
 
-constructor1(CompileMode compileMode) async {
-  String generated = await compileAll(TEST_FIVE, compileMode: compileMode);
+constructor1({bool useKernel}) async {
+  String generated = await compileAll(TEST_FIVE, useKernel: useKernel);
   Expect.isTrue(generated.contains(new RegExp(r"new [$A-Z]+\.A\(a\);")));
 }
 
 main() {
-  runTests(CompileMode compileMode) async {
-    await twoClasses(compileMode);
-    await subClass(compileMode);
-    await fieldTest(compileMode);
-    await constructor1(compileMode);
+  runTests({bool useKernel}) async {
+    await twoClasses(useKernel: useKernel);
+    await subClass(useKernel: useKernel);
+    await fieldTest(useKernel: useKernel);
+    await constructor1(useKernel: useKernel);
   }
 
   asyncTest(() async {
     print('--test from ast---------------------------------------------------');
-    await runTests(CompileMode.memory);
+    await runTests(useKernel: false);
     print('--test from kernel------------------------------------------------');
-    await runTests(CompileMode.kernel);
+    await runTests(useKernel: true);
   });
 }
diff --git a/tests/compiler/dart2js/codegen/class_order_test.dart b/tests/compiler/dart2js/codegen/class_order_test.dart
index 1946305..2bc8a55 100644
--- a/tests/compiler/dart2js/codegen/class_order_test.dart
+++ b/tests/compiler/dart2js/codegen/class_order_test.dart
@@ -36,18 +36,18 @@
   // we just verify that their members are in the correct order.
   RegExp regexp = new RegExp(r"foo\$0?:(.|\n)*bar\$0:(.|\n)*gee\$0:");
 
-  runTests(CompileMode compileMode) async {
-    String generated1 = await compileAll(TEST_ONE, compileMode: compileMode);
+  runTests({bool useKernel}) async {
+    String generated1 = await compileAll(TEST_ONE, useKernel: useKernel);
     Expect.isTrue(regexp.hasMatch(generated1));
 
-    String generated2 = await compileAll(TEST_TWO, compileMode: compileMode);
+    String generated2 = await compileAll(TEST_TWO, useKernel: useKernel);
     Expect.isTrue(regexp.hasMatch(generated2));
   }
 
   asyncTest(() async {
     print('--test from ast---------------------------------------------------');
-    await runTests(CompileMode.memory);
+    await runTests(useKernel: false);
     print('--test from kernel------------------------------------------------');
-    await runTests(CompileMode.kernel);
+    await runTests(useKernel: true);
   });
 }
diff --git a/tests/compiler/dart2js/codegen/closure_codegen_test.dart b/tests/compiler/dart2js/codegen/closure_codegen_test.dart
index 07650a2..c9a1a5f 100644
--- a/tests/compiler/dart2js/codegen/closure_codegen_test.dart
+++ b/tests/compiler/dart2js/codegen/closure_codegen_test.dart
@@ -58,10 +58,9 @@
 
 // Make sure that the bailout version does not introduce a second version of
 // the closure.
-Future closureBailout(CompileMode compileMode,
-    {bool minify, String prefix}) async {
+Future closureBailout({bool useKernel, bool minify, String prefix}) async {
   String generated =
-      await compileAll(TEST_BAILOUT, compileMode: compileMode, minify: minify);
+      await compileAll(TEST_BAILOUT, useKernel: useKernel, minify: minify);
   RegExp regexp = new RegExp("$prefix\\\$0:${minify ? "" : " "}function");
   Iterator<Match> matches = regexp.allMatches(generated).iterator;
   checkNumberOfMatches(matches, 1);
@@ -72,10 +71,8 @@
     await closureInvocation(
         useKernel: useKernel, minify: false, prefix: "call");
     await closureInvocation(useKernel: useKernel, minify: true, prefix: "");
-    CompileMode compileMode =
-        useKernel ? CompileMode.kernel : CompileMode.memory;
-    await closureBailout(compileMode, minify: false, prefix: "call");
-    await closureBailout(compileMode, minify: true, prefix: "");
+    await closureBailout(useKernel: useKernel, minify: false, prefix: "call");
+    await closureBailout(useKernel: useKernel, minify: true, prefix: "");
   }
 
   asyncTest(() async {
diff --git a/tests/compiler/dart2js/codegen/dead_code_test.dart b/tests/compiler/dart2js/codegen/dead_code_test.dart
index 56f42d1..0b49bbd 100644
--- a/tests/compiler/dart2js/codegen/dead_code_test.dart
+++ b/tests/compiler/dart2js/codegen/dead_code_test.dart
@@ -18,8 +18,7 @@
 
 main() {
   runTest({bool useKernel}) async {
-    String generated = await compileAll(TEST,
-        compileMode: useKernel ? CompileMode.kernel : CompileMode.memory);
+    String generated = await compileAll(TEST, useKernel: useKernel);
     Expect.isFalse(generated.contains('return 42'), 'dead code not eliminated');
   }
 
diff --git a/tests/compiler/dart2js/codegen/elide_callthrough_stub_test.dart b/tests/compiler/dart2js/codegen/elide_callthrough_stub_test.dart
index f7a3db9..2d8af4b 100644
--- a/tests/compiler/dart2js/codegen/elide_callthrough_stub_test.dart
+++ b/tests/compiler/dart2js/codegen/elide_callthrough_stub_test.dart
@@ -39,9 +39,7 @@
 
 main() {
   runTests({bool useKernel}) async {
-    CompileMode compileMode =
-        useKernel ? CompileMode.kernel : CompileMode.memory;
-    String generated1 = await compileAll(TEST1, compileMode: compileMode);
+    String generated1 = await compileAll(TEST1, useKernel: useKernel);
     // Direct call through field.
     Expect.isTrue(generated1.contains(r'this._fun.call$1(zzz)'));
     // No stub.
@@ -49,7 +47,7 @@
     // No call to stub.
     Expect.isFalse(generated1.contains(r'_fun$1('));
 
-    String generated2 = await compileAll(TEST2, compileMode: compileMode);
+    String generated2 = await compileAll(TEST2, useKernel: useKernel);
     // No call through field.
     Expect.isFalse(generated2.contains(r'this._fun.call$1(zzz)'));
     // Call through stub.
diff --git a/tests/compiler/dart2js/codegen/emit_const_fields_test.dart b/tests/compiler/dart2js/codegen/emit_const_fields_test.dart
index 8a7eea4..ac4e857 100644
--- a/tests/compiler/dart2js/codegen/emit_const_fields_test.dart
+++ b/tests/compiler/dart2js/codegen/emit_const_fields_test.dart
@@ -20,8 +20,7 @@
 
 main() {
   runTest({bool useKernel}) async {
-    String generated = await compileAll(TEST_GUIDE,
-        compileMode: useKernel ? CompileMode.kernel : CompileMode.memory);
+    String generated = await compileAll(TEST_GUIDE, useKernel: useKernel);
     Expect.isTrue(generated.contains("42"));
     Expect.isFalse(generated.contains("TITLE"));
   }
diff --git a/tests/compiler/dart2js/codegen/field_codegen_test.dart b/tests/compiler/dart2js/codegen/field_codegen_test.dart
index e77a1c2..9c90111 100644
--- a/tests/compiler/dart2js/codegen/field_codegen_test.dart
+++ b/tests/compiler/dart2js/codegen/field_codegen_test.dart
@@ -21,13 +21,10 @@
 
 main() {
   runTests({bool useKernel}) async {
-    CompileMode compileMode =
-        useKernel ? CompileMode.kernel : CompileMode.memory;
-
-    String generated1 = await compileAll(TEST_NULL0, compileMode: compileMode);
+    String generated1 = await compileAll(TEST_NULL0, useKernel: useKernel);
     Expect.isTrue(generated1.contains("null"));
 
-    String generated2 = await compileAll(TEST_NULL1, compileMode: compileMode);
+    String generated2 = await compileAll(TEST_NULL1, useKernel: useKernel);
     Expect.isTrue(generated2.contains("null"));
   }
 
diff --git a/tests/compiler/dart2js/codegen/field_update_test.dart b/tests/compiler/dart2js/codegen/field_update_test.dart
index 8f809b5..f4ce87b 100644
--- a/tests/compiler/dart2js/codegen/field_update_test.dart
+++ b/tests/compiler/dart2js/codegen/field_update_test.dart
@@ -91,9 +91,8 @@
 
 runTests({bool useKernel}) async {
   test(String code, Function f) async {
-    String generated = await compileAll(code,
-        disableInlining: true,
-        compileMode: useKernel ? CompileMode.kernel : CompileMode.memory);
+    String generated =
+        await compileAll(code, disableInlining: true, useKernel: useKernel);
     Expect.isTrue(f(generated));
   }
 
diff --git a/tests/compiler/dart2js/codegen/forloop_box_test.dart b/tests/compiler/dart2js/codegen/forloop_box_test.dart
index 0a5c3dd..cd8d0e9 100644
--- a/tests/compiler/dart2js/codegen/forloop_box_test.dart
+++ b/tests/compiler/dart2js/codegen/forloop_box_test.dart
@@ -41,21 +41,18 @@
 
 main() {
   runTests({bool useKernel}) async {
-    CompileMode compileMode =
-        useKernel ? CompileMode.kernel : CompileMode.memory;
-
     String generated1 =
-        await compileAll(SHOULD_NOT_BE_BOXED_TEST, compileMode: compileMode);
+        await compileAll(SHOULD_NOT_BE_BOXED_TEST, useKernel: useKernel);
     Expect.isTrue(generated1.contains('main_closure(i)'),
         'for-loop variable should not have been boxed');
 
     String generated2 =
-        await compileAll(SHOULD_BE_BOXED_TEST, compileMode: compileMode);
+        await compileAll(SHOULD_BE_BOXED_TEST, useKernel: useKernel);
     Expect.isFalse(generated2.contains('main_closure(i)'),
         'for-loop variable should have been boxed');
 
     String generated3 =
-        await compileAll(ONLY_UPDATE_LOOP_VAR_TEST, compileMode: compileMode);
+        await compileAll(ONLY_UPDATE_LOOP_VAR_TEST, useKernel: useKernel);
     Expect.isFalse(generated3.contains('main_closure(i)'),
         'for-loop variable should have been boxed');
     Expect.isFalse(generated3.contains(', _box_0.b = 3,'),
diff --git a/tests/compiler/dart2js/codegen/gvn_test.dart b/tests/compiler/dart2js/codegen/gvn_test.dart
index b9962bc..f79a465 100644
--- a/tests/compiler/dart2js/codegen/gvn_test.dart
+++ b/tests/compiler/dart2js/codegen/gvn_test.dart
@@ -127,20 +127,17 @@
       checkNumberOfMatches(new RegExp("shr").allMatches(generated).iterator, 1);
     });
 
-    CompileMode compileMode =
-        useKernel ? CompileMode.kernel : CompileMode.memory;
-
-    await compileAll(TEST_FIVE, compileMode: compileMode).then((generated) {
+    await compileAll(TEST_FIVE, useKernel: useKernel).then((generated) {
       checkNumberOfMatches(
           new RegExp("get\\\$foo").allMatches(generated).iterator, 1);
     });
-    await compileAll(TEST_SIX, compileMode: compileMode).then((generated) {
+    await compileAll(TEST_SIX, useKernel: useKernel).then((generated) {
       Expect.isTrue(generated.contains('for (t1 = a.field === 54; t1;)'));
     });
-    await compileAll(TEST_SEVEN, compileMode: compileMode).then((generated) {
+    await compileAll(TEST_SEVEN, useKernel: useKernel).then((generated) {
       Expect.isTrue(generated.contains('for (t1 = a.field === 54; t1;)'));
     });
-    await compileAll(TEST_EIGHT, compileMode: compileMode).then((generated) {
+    await compileAll(TEST_EIGHT, useKernel: useKernel).then((generated) {
       Expect.isTrue(generated.contains('for (; i < t1; ++i)'));
     });
   }
diff --git a/tests/compiler/dart2js/codegen/inferrer_factory_test.dart b/tests/compiler/dart2js/codegen/inferrer_factory_test.dart
index 59f39ab..b6c6499 100644
--- a/tests/compiler/dart2js/codegen/inferrer_factory_test.dart
+++ b/tests/compiler/dart2js/codegen/inferrer_factory_test.dart
@@ -24,8 +24,7 @@
 
 main() {
   runTest({bool useKernel}) async {
-    String generated = await compileAll(TEST1,
-        compileMode: useKernel ? CompileMode.kernel : CompileMode.memory);
+    String generated = await compileAll(TEST1, useKernel: useKernel);
     // Check that we're using the index operator on the object returned
     // by the A factory.
     Expect.isTrue(generated.contains('[0] = 42'));
diff --git a/tests/compiler/dart2js/codegen/list_tracer_length_test.dart b/tests/compiler/dart2js/codegen/list_tracer_length_test.dart
index 7dc40b5..d143e13 100644
--- a/tests/compiler/dart2js/codegen/list_tracer_length_test.dart
+++ b/tests/compiler/dart2js/codegen/list_tracer_length_test.dart
@@ -90,7 +90,7 @@
 """;
 
 checkRangeError(String test, {bool hasRangeError}) async {
-  String generated = await compileAll(test, compileMode: CompileMode.memory);
+  String generated = await compileAll(test, useKernel: false);
   Expect.equals(
       hasRangeError,
       generated.contains('ioore'),
diff --git a/tests/compiler/dart2js/codegen/list_tracer_node_type_test.dart b/tests/compiler/dart2js/codegen/list_tracer_node_type_test.dart
index 1d3464c..15d8085 100644
--- a/tests/compiler/dart2js/codegen/list_tracer_node_type_test.dart
+++ b/tests/compiler/dart2js/codegen/list_tracer_node_type_test.dart
@@ -69,29 +69,24 @@
 }
 
 main() {
-  asyncTest(() async {
-    String generated1 =
-        await compileAll(TEST1, compileMode: CompileMode.memory);
+  runTests({bool useKernel}) async {
+    bool useKernel = false;
+    String generated1 = await compileAll(TEST1, useKernel: useKernel);
     Expect.isTrue(generated1.contains('if (typeof t1'));
 
-    String generated2 =
-        await compileAll(TEST2, compileMode: CompileMode.memory);
+    String generated2 = await compileAll(TEST2, useKernel: useKernel);
     Expect.isTrue(generated2.contains('if (typeof t1'));
 
-    String generated3 =
-        await compileAll(TEST3, compileMode: CompileMode.memory);
+    String generated3 = await compileAll(TEST3, useKernel: useKernel);
     Expect.isTrue(generated3.contains('if (typeof t1'));
 
-    String generated4 =
-        await compileAll(TEST4, compileMode: CompileMode.memory);
+    String generated4 = await compileAll(TEST4, useKernel: useKernel);
     Expect.isTrue(generated4.contains('if (typeof t1'));
 
-    String generated5 =
-        await compileAll(TEST5, compileMode: CompileMode.memory);
+    String generated5 = await compileAll(TEST5, useKernel: useKernel);
     Expect.isFalse(generated5.contains('iae'));
 
-    String generated6 =
-        await compileAll(TEST6, compileMode: CompileMode.memory);
+    String generated6 = await compileAll(TEST6, useKernel: useKernel);
     Expect.isFalse(generated6.contains('iae'));
 
     var memberInvocations = const <String>[
@@ -105,9 +100,7 @@
     ];
     for (String member in memberInvocations) {
       String generated = await compileAll(generateTest('$member'),
-          expectedErrors: 0,
-          expectedWarnings: 0,
-          compileMode: CompileMode.memory);
+          expectedErrors: 0, expectedWarnings: 0, useKernel: useKernel);
       Expect.isTrue(
           generated.contains('+ 42'),
           "Missing '+ 42' code for invocation '$member':\n"
@@ -123,5 +116,12 @@
           "Unexpected 'if (t1 == null)' code for invocation '$member':\n"
           "$generated");*/
     }
+  }
+
+  asyncTest(() async {
+    print('--test from ast---------------------------------------------------');
+    await runTests(useKernel: false);
+    print('--test from kernel------------------------------------------------');
+    await runTests(useKernel: true);
   });
 }
diff --git a/tests/compiler/dart2js/codegen/load_elimination_test.dart b/tests/compiler/dart2js/codegen/load_elimination_test.dart
index 2a8935e..1f31fbf 100644
--- a/tests/compiler/dart2js/codegen/load_elimination_test.dart
+++ b/tests/compiler/dart2js/codegen/load_elimination_test.dart
@@ -236,9 +236,8 @@
 main() {
   runTests({bool useKernel}) async {
     test(String code, String expected) async {
-      String generated = await compileAll(code,
-          disableInlining: false,
-          compileMode: useKernel ? CompileMode.kernel : CompileMode.memory);
+      String generated =
+          await compileAll(code, disableInlining: false, useKernel: useKernel);
       Expect.isTrue(
           generated.contains(expected),
           "Generated code didn't contain '$expected'.\n"
diff --git a/tests/compiler/dart2js/codegen/no_constructor_body_test.dart b/tests/compiler/dart2js/codegen/no_constructor_body_test.dart
index 3d3e8ec..4b4f35f 100644
--- a/tests/compiler/dart2js/codegen/no_constructor_body_test.dart
+++ b/tests/compiler/dart2js/codegen/no_constructor_body_test.dart
@@ -19,8 +19,7 @@
 
 main() {
   runTest({bool useKernel}) async {
-    String generated = await compileAll(TEST,
-        compileMode: useKernel ? CompileMode.kernel : CompileMode.memory);
+    String generated = await compileAll(TEST, useKernel: useKernel);
 
     Expect.isTrue(generated
         .contains(new RegExp('A: {[ \n]*"\\^": "Object;",[ \n]*static:')));
diff --git a/tests/compiler/dart2js/codegen/no_duplicate_constructor_body2_test.dart b/tests/compiler/dart2js/codegen/no_duplicate_constructor_body2_test.dart
index b90eba5..78b98a7 100644
--- a/tests/compiler/dart2js/codegen/no_duplicate_constructor_body2_test.dart
+++ b/tests/compiler/dart2js/codegen/no_duplicate_constructor_body2_test.dart
@@ -23,8 +23,7 @@
 
 main() {
   runTest({bool useKernel}) async {
-    String generated = await compileAll(CODE,
-        compileMode: useKernel ? CompileMode.kernel : CompileMode.memory);
+    String generated = await compileAll(CODE, useKernel: useKernel);
     RegExp regexp = new RegExp(r'A\$0: function');
     Iterator<Match> matches = regexp.allMatches(generated).iterator;
     checkNumberOfMatches(matches, 1);
diff --git a/tests/compiler/dart2js/codegen/no_duplicate_constructor_body_test.dart b/tests/compiler/dart2js/codegen/no_duplicate_constructor_body_test.dart
index 6bba7dd..420f724 100644
--- a/tests/compiler/dart2js/codegen/no_duplicate_constructor_body_test.dart
+++ b/tests/compiler/dart2js/codegen/no_duplicate_constructor_body_test.dart
@@ -17,8 +17,7 @@
 
 main() {
   runTest({bool useKernel}) async {
-    String generated = await compileAll(CODE,
-        compileMode: useKernel ? CompileMode.kernel : CompileMode.memory);
+    String generated = await compileAll(CODE, useKernel: useKernel);
     RegExp regexp = new RegExp(r'\A: {[ \n]*"\^": "[A-Za-z]+;"');
     Iterator<Match> matches = regexp.allMatches(generated).iterator;
     checkNumberOfMatches(matches, 1);
diff --git a/tests/compiler/dart2js/codegen/no_duplicate_stub_test.dart b/tests/compiler/dart2js/codegen/no_duplicate_stub_test.dart
index 2c9e0bb6..6060260 100644
--- a/tests/compiler/dart2js/codegen/no_duplicate_stub_test.dart
+++ b/tests/compiler/dart2js/codegen/no_duplicate_stub_test.dart
@@ -30,8 +30,7 @@
 
 main() {
   runTest({bool useKernel}) async {
-    String generated = await compileAll(TEST,
-        compileMode: useKernel ? CompileMode.kernel : CompileMode.memory);
+    String generated = await compileAll(TEST, useKernel: useKernel);
     RegExp regexp = new RegExp('foo\\\$1\\\$a: function');
     Iterator<Match> matches = regexp.allMatches(generated).iterator;
     checkNumberOfMatches(matches, 1);
diff --git a/tests/compiler/dart2js/codegen/null_check_test.dart b/tests/compiler/dart2js/codegen/null_check_test.dart
index 34bf897..bf40e67 100644
--- a/tests/compiler/dart2js/codegen/null_check_test.dart
+++ b/tests/compiler/dart2js/codegen/null_check_test.dart
@@ -18,8 +18,7 @@
 
 main() {
   runTest({bool useKernel}) async {
-    String generated = await compileAll(TEST1,
-        compileMode: useKernel ? CompileMode.kernel : CompileMode.memory);
+    String generated = await compileAll(TEST1, useKernel: useKernel);
     Expect.isFalse(generated.contains('foo.length'));
   }
 
diff --git a/tests/compiler/dart2js/codegen/side_effect_tdiv_regression_test.dart b/tests/compiler/dart2js/codegen/side_effect_tdiv_regression_test.dart
index 617e482..b06b110 100644
--- a/tests/compiler/dart2js/codegen/side_effect_tdiv_regression_test.dart
+++ b/tests/compiler/dart2js/codegen/side_effect_tdiv_regression_test.dart
@@ -24,8 +24,7 @@
 
 void main() {
   runTest({bool useKernel}) async {
-    String generated = await compileAll(TEST,
-        compileMode: useKernel ? CompileMode.kernel : CompileMode.memory);
+    String generated = await compileAll(TEST, useKernel: useKernel);
     Expect.isTrue(generated.contains('return c + c;'),
         "Expected generated code to contain 'return c + c;':\n$generated");
   }
diff --git a/tests/compiler/dart2js/codegen/simple_inferrer_relations_test.dart b/tests/compiler/dart2js/codegen/simple_inferrer_relations_test.dart
index b89d27a..9c2fbce 100644
--- a/tests/compiler/dart2js/codegen/simple_inferrer_relations_test.dart
+++ b/tests/compiler/dart2js/codegen/simple_inferrer_relations_test.dart
@@ -51,8 +51,7 @@
 
 void main() {
   runTest({bool useKernel}) async {
-    String generated = await compileAll(TEST,
-        compileMode: useKernel ? CompileMode.kernel : CompileMode.memory);
+    String generated = await compileAll(TEST, useKernel: useKernel);
     if (generated.contains(r'=== true')) {
       print(generated);
       Expect.fail("missing elision of '=== true'");
diff --git a/tests/compiler/dart2js/codegen/static_closure_test.dart b/tests/compiler/dart2js/codegen/static_closure_test.dart
index 99a57e7..1b7e5d0 100644
--- a/tests/compiler/dart2js/codegen/static_closure_test.dart
+++ b/tests/compiler/dart2js/codegen/static_closure_test.dart
@@ -10,8 +10,8 @@
 
 main() {
   runTest({bool useKernel}) async {
-    String code = await compileAll(r'''main() { print(main); }''',
-        compileMode: useKernel ? CompileMode.kernel : CompileMode.memory);
+    String code =
+        await compileAll(r'''main() { print(main); }''', useKernel: useKernel);
     // At some point, we will have to closurize global functions
     // differently, at which point this test will break. Then it is time
     // to implement a way to call a Dart closure from JS foreign
diff --git a/tests/compiler/dart2js/codegen/string_add_test.dart b/tests/compiler/dart2js/codegen/string_add_test.dart
index 1be733a..dbba8bc 100644
--- a/tests/compiler/dart2js/codegen/string_add_test.dart
+++ b/tests/compiler/dart2js/codegen/string_add_test.dart
@@ -9,7 +9,7 @@
 main() {
   runTest({bool useKernel}) async {
     String code = await compileAll(r'''main() { return "foo" + "bar"; }''',
-        compileMode: useKernel ? CompileMode.kernel : CompileMode.memory);
+        useKernel: useKernel);
     Expect.isTrue(!code.contains(r'$add'));
   }
 
diff --git a/tests/compiler/dart2js/codegen/string_interpolation_test.dart b/tests/compiler/dart2js/codegen/string_interpolation_test.dart
index 13cbbfa..e8cf079 100644
--- a/tests/compiler/dart2js/codegen/string_interpolation_test.dart
+++ b/tests/compiler/dart2js/codegen/string_interpolation_test.dart
@@ -8,17 +8,14 @@
 
 main() {
   runTests({bool useKernel}) async {
-    CompileMode compileMode =
-        useKernel ? CompileMode.kernel : CompileMode.memory;
-
     String code1 = await compileAll(
         r'''main() { return "${2}${true}${'a'}${3.14}"; }''',
-        compileMode: compileMode);
+        useKernel: useKernel);
     Expect.isTrue(code1.contains(r'2truea3.14'));
 
     String code2 = await compileAll(
         r'''main() { return "foo ${new Object()}"; }''',
-        compileMode: compileMode);
+        useKernel: useKernel);
     Expect.isFalse(code2.contains(r'$add'));
   }
 
diff --git a/tests/compiler/dart2js/codegen/top_level_closure_tree_shake_test.dart b/tests/compiler/dart2js/codegen/top_level_closure_tree_shake_test.dart
index 277c631..045dce4 100644
--- a/tests/compiler/dart2js/codegen/top_level_closure_tree_shake_test.dart
+++ b/tests/compiler/dart2js/codegen/top_level_closure_tree_shake_test.dart
@@ -27,8 +27,7 @@
 
 main() {
   runTest({bool useKernel}) async {
-    String generated = await compileAll(TEST_ONE,
-        compileMode: useKernel ? CompileMode.kernel : CompileMode.memory);
+    String generated = await compileAll(TEST_ONE, useKernel: useKernel);
     Expect.isFalse(generated.contains('Tarantula!'), "failed to remove 'foo'");
     Expect.isTrue(generated.contains('Coelacanth!'));
   }
diff --git a/tests/compiler/dart2js/codegen/tree_shaking_test.dart b/tests/compiler/dart2js/codegen/tree_shaking_test.dart
index 4d47a5f..41e3c50 100644
--- a/tests/compiler/dart2js/codegen/tree_shaking_test.dart
+++ b/tests/compiler/dart2js/codegen/tree_shaking_test.dart
@@ -27,8 +27,7 @@
 
 void main() {
   runTest({bool useKernel}) async {
-    String generated = await compileAll(TEST,
-        compileMode: useKernel ? CompileMode.kernel : CompileMode.memory);
+    String generated = await compileAll(TEST, useKernel: useKernel);
     Expect.isTrue(generated.contains('return 42'));
     Expect.isTrue(generated.contains('return 54'));
     Expect.isFalse(generated.contains('return 68'));
diff --git a/tests/compiler/dart2js/codegen/types_of_captured_variables_test.dart b/tests/compiler/dart2js/codegen/types_of_captured_variables_test.dart
index 02d60de..6259f13 100644
--- a/tests/compiler/dart2js/codegen/types_of_captured_variables_test.dart
+++ b/tests/compiler/dart2js/codegen/types_of_captured_variables_test.dart
@@ -36,20 +36,17 @@
 
 main() {
   runTests({bool useKernel}) async {
-    CompileMode compileMode =
-        useKernel ? CompileMode.kernel : CompileMode.memory;
-
     // Test that we know the type of captured, non-mutated variables.
-    String generated1 = await compileAll(TEST1, compileMode: compileMode);
+    String generated1 = await compileAll(TEST1, useKernel: useKernel);
     Expect.isTrue(generated1.contains('+ 87'));
 
     // Test that we know the type of captured, mutated variables.
-    String generated2 = await compileAll(TEST2, compileMode: compileMode);
+    String generated2 = await compileAll(TEST2, useKernel: useKernel);
     Expect.isTrue(generated2.contains('+ 87'));
 
     // Test that we know when types of a captured, mutated variable
     // conflict.
-    String generated3 = await compileAll(TEST3, compileMode: compileMode);
+    String generated3 = await compileAll(TEST3, useKernel: useKernel);
     Expect.isFalse(generated3.contains('+ 87'));
   }
 
diff --git a/tests/compiler/dart2js/compiler_helper.dart b/tests/compiler/dart2js/compiler_helper.dart
index c578e2c..64d49e8 100644
--- a/tests/compiler/dart2js/compiler_helper.dart
+++ b/tests/compiler/dart2js/compiler_helper.dart
@@ -39,8 +39,6 @@
 import 'output_collector.dart';
 export 'output_collector.dart';
 
-enum CompileMode { memory, kernel }
-
 /// Compile [code] and returns either the code for [methodName] or, if
 /// [returnAll] is true, the code for the entire program.
 ///
@@ -112,11 +110,12 @@
     bool minify: false,
     int expectedErrors,
     int expectedWarnings,
-    CompileMode compileMode: CompileMode.memory}) async {
+    bool useKernel: false}) async {
   OutputCollector outputCollector = new OutputCollector();
   DiagnosticCollector diagnosticCollector = new DiagnosticCollector();
   if (coreSource != null) {
-    throw new UnsupportedError('coreSource is not supported for $compileMode');
+    throw new UnsupportedError(
+        'coreSource is not supported for useKernel=$useKernel');
   }
   List<String> options = <String>[];
   if (disableInlining) {
@@ -128,8 +127,8 @@
   if (minify) {
     options.add(Flags.minify);
   }
-  if (compileMode == CompileMode.kernel) {
-    options.add(Flags.useKernel);
+  if (!useKernel) {
+    options.add(Flags.useOldFrontend);
   }
   CompilationResult result = await runCompiler(
       memorySourceFiles: {'main.dart': code},
