diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index c6bb522..c6fe258 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -1121,43 +1121,6 @@
   ]
 }
 
-prebuilt_dart_action("gen_kernel_bytecode_dill") {
-  if (target_os == "fuchsia") {
-    testonly = true
-  }
-
-  deps = [
-    "../vm:vm_platform",
-  ]
-  platform_dill = "$root_out_dir/vm_platform_strong.dill"
-
-  output = "$root_out_dir/gen_kernel_bytecode.dill"
-  outputs = [
-    output,
-  ]
-
-  script = "../../pkg/vm/bin/gen_kernel.dart"
-
-  depfile = "$target_gen_dir/gen_kernel_bytecode.dill.d"
-  abs_depfile = rebase_path(depfile)
-  rebased_output = rebase_path(output, root_out_dir)
-  vm_args = [
-    "--depfile=$abs_depfile",
-    "--depfile_output_filename=$rebased_output",
-  ]
-
-  args = [
-    "--gen-bytecode",
-    "--no-embed-sources",
-    "--drop-ast",
-    "--platform",
-    rebase_path(platform_dill),
-    "--output",
-    rebase_path(output),
-    rebase_path(script),
-  ]
-}
-
 executable("run_vm_tests") {
   if (target_os == "fuchsia") {
     testonly = true
@@ -1176,7 +1139,6 @@
   deps = [
     ":dart_kernel_platform_cc",
     ":dart_snapshot_cc",
-    ":gen_kernel_bytecode_dill",
     ":generate_snapshot_test_dat_file",
     ":libdart_builtin",
     ":standalone_dart_io",
diff --git a/runtime/vm/benchmark_test.cc b/runtime/vm/benchmark_test.cc
index 5e4dc79..3d5bf6f 100644
--- a/runtime/vm/benchmark_test.cc
+++ b/runtime/vm/benchmark_test.cc
@@ -8,7 +8,6 @@
 #include "bin/file.h"
 #include "bin/isolate_data.h"
 #include "bin/process.h"
-#include "bin/reference_counting.h"
 
 #include "platform/assert.h"
 #include "platform/globals.h"
@@ -178,60 +177,6 @@
   free(script);
 }
 
-// This file is created by the target //runtime/bin:gen_kernel_bytecode_dill
-// which is depended on by run_vm_tests.
-static char* ComputeGenKernelKernelPath(const char* arg) {
-  char buffer[2048];
-  char* gen_kernel_path = strdup(File::GetCanonicalPath(NULL, arg));
-  EXPECT(gen_kernel_path != NULL);
-  const char* compiler_path = "%s%sgen_kernel_bytecode.dill";
-  const char* path_separator = File::PathSeparator();
-  ASSERT(path_separator != NULL && strlen(path_separator) == 1);
-  char* ptr = strrchr(gen_kernel_path, *path_separator);
-  while (ptr != NULL) {
-    *ptr = '\0';
-    Utils::SNPrint(buffer, ARRAY_SIZE(buffer), compiler_path, gen_kernel_path,
-                   path_separator);
-    if (File::Exists(NULL, buffer)) {
-      break;
-    }
-    ptr = strrchr(gen_kernel_path, *path_separator);
-  }
-  free(gen_kernel_path);
-  if (ptr == NULL) {
-    return NULL;
-  }
-  return strdup(buffer);
-}
-
-BENCHMARK(GenKernelKernelLoadKernel) {
-  char* dill_path = ComputeGenKernelKernelPath(Benchmark::Executable());
-  fprintf(stderr, "dill_path = '%s'\n", dill_path);
-  File* file = File::Open(NULL, dill_path, File::kRead);
-  EXPECT(file != NULL);
-  bin::RefCntReleaseScope<File> rs(file);
-  intptr_t kernel_buffer_size = file->Length();
-  uint8_t* kernel_buffer =
-      reinterpret_cast<uint8_t*>(malloc(kernel_buffer_size));
-  EXPECT(kernel_buffer != NULL);
-  bool read_fully = file->ReadFully(kernel_buffer, kernel_buffer_size);
-  EXPECT(read_fully);
-
-  Timer timer(true, "GenKernelKernelLoadKernel benchmark");
-  timer.Start();
-
-  Dart_Handle result =
-      Dart_LoadLibraryFromKernel(kernel_buffer, kernel_buffer_size);
-  EXPECT_VALID(result);
-
-  result = Dart_FinalizeLoading(false);
-  EXPECT_VALID(result);
-
-  timer.Stop();
-  int64_t elapsed_time = timer.TotalElapsedTime();
-  benchmark->set_score(elapsed_time);
-}
-
 #endif  // !PRODUCT
 
 //
