diff --git a/build_tools/cmake/iree_bytecode_module.cmake b/build_tools/cmake/iree_bytecode_module.cmake
index 77476e9..88fa28c 100644
--- a/build_tools/cmake/iree_bytecode_module.cmake
+++ b/build_tools/cmake/iree_bytecode_module.cmake
@@ -62,10 +62,10 @@
     set(_ARGS "${_TRANSLATION}")
     list(APPEND _ARGS "${CMAKE_CURRENT_SOURCE_DIR}/${_RULE_SRC}")
     list(APPEND _ARGS "-o")
-    list(APPEND _ARGS "${_RULE_NAME}.emod")
+    list(APPEND _ARGS "${_RULE_NAME}.module")
 
     add_custom_command(
-      OUTPUT "${_RULE_NAME}.emod"
+      OUTPUT "${_RULE_NAME}.module"
       COMMAND ${_TRANSLATION_TOOL_EXECUTABLE} ${_ARGS}
       DEPENDS ${_TRANSLATION_TOOL}
     )
@@ -81,7 +81,7 @@
         IDENTIFIER
           "${_RULE_NAME}"
         GENERATED_SRCS
-          "${_RULE_NAME}.emod"
+          "${_RULE_NAME}.module"
         CC_FILE_OUTPUT
           "${_RULE_NAME}.cc"
         H_FILE_OUTPUT
diff --git a/docs/getting_started.md b/docs/getting_started.md
index e530b24..7e709de 100644
--- a/docs/getting_started.md
+++ b/docs/getting_started.md
@@ -88,18 +88,18 @@
   -o /tmp/module.fb
 ```
 
-### run_module
+### iree-run-module
 
-The `run_module` program takes an already translated IREE module as input and
-executes an exported main function using the provided inputs.
+The `iree-run-module` program takes an already translated IREE module as input
+and executes an exported main function using the provided inputs.
 
 This program can be used in sequence with `iree-translate` to translate a .mlir
 file to an IREE module and then execute it. Here is an example command that runs
 the `simple_mul` function in `simple_compute_test.mlir`.
 
 ```shell
-$ bazel build -c opt //iree/tools:iree-translate //iree/tools:run_module
-$ ./bazel-bin/iree/tools/run_module \
+$ bazel build -c opt //iree/tools:iree-translate //iree/tools:iree-run-module
+$ ./bazel-bin/iree/tools/iree-run-module \
   --main_module=/tmp/module.fb \
   --main_function=simple_mul \
   --input_values="4xf32=1 2 3 4
diff --git a/iree/schemas/BUILD b/iree/schemas/BUILD
index 3d6255e..45c33af 100644
--- a/iree/schemas/BUILD
+++ b/iree/schemas/BUILD
@@ -65,15 +65,6 @@
     ],
 )
 
-# TODO(benvanik): also expose as C using flatcc.
-iree_flatbuffer_cc_library(
-    name = "bytecode_module_def_cc_fbs",
-    srcs = ["bytecode_module_def.fbs"],
-    flatc_args = FLATC_ARGS,
-    includes = [
-    ],
-)
-
 iree_flatbuffer_cc_library(
     name = "debug_service_cc_fbs",
     srcs = ["debug_service.fbs"],
@@ -282,3 +273,12 @@
     cpp_namespace = "iree::schemas",
     h_file_output = "reflection_data.h",
 )
+
+# TODO(benvanik): also expose as C using flatcc.
+iree_flatbuffer_cc_library(
+    name = "bytecode_module_def_cc_fbs",
+    srcs = ["bytecode_module_def.fbs"],
+    flatc_args = FLATC_ARGS,
+    includes = [
+    ],
+)
diff --git a/iree/schemas/bytecode_module_def.fbs b/iree/schemas/bytecode_module_def.fbs
index bb8eceb..cfccbf7 100644
--- a/iree/schemas/bytecode_module_def.fbs
+++ b/iree/schemas/bytecode_module_def.fbs
@@ -16,7 +16,7 @@
 
 // 'Bytecode MODule'.
 file_identifier "BMOD";
-file_extension "bmod";
+file_extension "module";
 
 // Arbitrary key/value reflection attribute.
 table ReflectionAttrDef {
diff --git a/iree/tools/BUILD b/iree/tools/BUILD
index 04cfff7..b01e7b7 100644
--- a/iree/tools/BUILD
+++ b/iree/tools/BUILD
@@ -32,6 +32,19 @@
     "//iree/compiler/Dialect/HAL/Target/VulkanSPIRV",
 ]
 
+cc_binary(
+    name = "iree-dump-module",
+    srcs = ["dump_module_main.cc"],
+    deps = [
+        "//iree/base:file_io",  # build-cleaner: keep
+        "//iree/base:flatbuffer_util",
+        "//iree/base:init",
+        "//iree/schemas",
+        "//iree/schemas:bytecode_module_def_cc_fbs",
+        "@com_github_google_flatbuffers//:flatbuffers",
+    ],
+)
+
 cc_library(
     name = "iree_opt_library",
     deps = [
@@ -77,37 +90,6 @@
     deps = [
         "@com_google_absl//absl/flags:flag",
         "@com_google_absl//absl/strings",
-        "//iree/base:source_location",
-        "//iree/rt",
-        "//iree/vm:sequencer_module",
-        "@llvm-project//llvm:support",
-        "@llvm-project//mlir:IR",
-        "@llvm-project//mlir:Parser",
-        "@llvm-project//mlir:Support",
-        "//iree/base:init",
-        "//iree/base:status",
-        "//iree/compiler/Translation/Sequencer",
-        "//iree/compiler/Translation/Interpreter",
-        "//iree/compiler/Translation/SPIRV",
-        "//iree/compiler/Translation:IREEVM",
-        "//iree/hal:buffer_view_string_util",
-        "//iree/hal:driver_registry",
-        "//iree/schemas",
-        "//iree/rt/debug:debug_server_flags",
-    ] + TARGET_COMPILER_BACKENDS + PLATFORM_VULKAN_DEPS + [
-        "//iree/hal/interpreter:interpreter_driver_module",
-        # TODO(b/142004903): enable when Dawn HAL implementation is functional
-        # "//iree/hal/dawn:dawn_driver_module",
-        "//iree/hal/vulkan:vulkan_driver_module",
-    ],
-)
-
-cc_binary(
-    name = "iree-run-mlir2",
-    srcs = ["run_mlir_main2.cc"],
-    deps = [
-        "@com_google_absl//absl/flags:flag",
-        "@com_google_absl//absl/strings",
         "//iree/base:api",
         "//iree/base:api_util",
         "//iree/base:shaped_buffer",
@@ -153,7 +135,7 @@
 
 cc_library(
     name = "iree_translate_library",
-    srcs = ["iree_translate_main.cc"],
+    srcs = ["translate_main.cc"],
     deps = [
         "//iree/compiler/Dialect/VM/Target/Bytecode",
         "//iree/compiler/Translation:IREEVM",
@@ -181,7 +163,7 @@
 )
 
 cc_binary(
-    name = "run_module",
+    name = "iree-run-module",
     srcs = ["run_module_main.cc"],
     deps = [
         "//iree/base:file_io",
@@ -201,19 +183,6 @@
     ],
 )
 
-cc_binary(
-    name = "iree_dump_module",
-    srcs = ["dump_module.cc"],
-    deps = [
-        "//iree/base:file_io",  # build-cleaner: keep
-        "//iree/base:flatbuffer_util",
-        "//iree/base:init",
-        "//iree/schemas",
-        "//iree/schemas:reflection_data",
-        "@com_github_google_flatbuffers//:flatbuffers",
-    ],
-)
-
 sh_binary(
     name = "IreeFileCheck",
     testonly = True,
diff --git a/iree/tools/CMakeLists.txt b/iree/tools/CMakeLists.txt
index 43c89a3..1194b09 100644
--- a/iree/tools/CMakeLists.txt
+++ b/iree/tools/CMakeLists.txt
@@ -105,7 +105,7 @@
     OUT
       iree-translate
     SRCS
-      "iree_translate_main.cc"
+      "translate_main.cc"
     DEPS
       ${_ALWAYSLINK_LIBS}
       iree::compiler::Translation::Interpreter
diff --git a/iree/tools/compilation.bzl b/iree/tools/compilation.bzl
index 6fdcc23..19c6dde 100644
--- a/iree/tools/compilation.bzl
+++ b/iree/tools/compilation.bzl
@@ -28,13 +28,13 @@
         name = name,
         srcs = [src],
         outs = [
-            "%s.emod" % (name),
+            "%s.module" % (name),
         ],
         cmd = " && ".join([
             " ".join([
                 "$(location %s)" % (translate_tool),
                 translation,
-                "-o $(location %s.emod)" % (name),
+                "-o $(location %s.module)" % (name),
                 "$(location %s)" % (src),
             ]),
         ]),
@@ -49,7 +49,7 @@
         cc_embed_data(
             name = "%s_cc" % (name),
             identifier = name,
-            srcs = ["%s.emod" % (name)],
+            srcs = ["%s.module" % (name)],
             cc_file_output = "%s.cc" % (name),
             h_file_output = "%s.h" % (name),
             cpp_namespace = cc_namespace,
diff --git a/iree/tools/dump_module.cc b/iree/tools/dump_module_main.cc
similarity index 91%
rename from iree/tools/dump_module.cc
rename to iree/tools/dump_module_main.cc
index 9beedf6..a55cc1a 100644
--- a/iree/tools/dump_module.cc
+++ b/iree/tools/dump_module_main.cc
@@ -14,6 +14,7 @@
 
 #include <iostream>
 #include <string>
+#include <utility>
 
 #include "flatbuffers/flatbuffers.h"
 #include "flatbuffers/minireflect.h"
@@ -21,13 +22,12 @@
 #include "flatbuffers/util.h"
 #include "iree/base/flatbuffer_util.h"
 #include "iree/base/init.h"
-#include "iree/schemas/module_def_generated.h"
+#include "iree/schemas/bytecode_module_def_generated.h"
 
 namespace {
 
 using ::flatbuffers::ElementaryType;
 using ::flatbuffers::NumToString;
-using ::flatbuffers::Offset;
 using ::flatbuffers::String;
 using ::flatbuffers::TypeTable;
 
@@ -38,7 +38,8 @@
   bool is_truncating_vector = false;
   int vector_depth = 0;
 
-  explicit TruncatingToStringVisitor(std::string delimiter) : d(delimiter) {}
+  explicit TruncatingToStringVisitor(std::string delimiter)
+      : d(std::move(delimiter)) {}
 
   void StartSequence() override {
     if (is_truncating_vector) return;
@@ -157,16 +158,16 @@
 
 }  // namespace
 
-int main(int argc, char** argv) {
+extern "C" int main(int argc, char** argv) {
   iree::InitializeEnvironment(&argc, &argv);
 
   if (argc < 2) {
-    std::cerr << "Syntax: iree_dump_module filename\n";
+    std::cerr << "Syntax: iree-dump-module filename\n";
     return 1;
   }
   std::string module_path = argv[1];
-  auto module_fb = iree::FlatBufferFile<iree::ModuleDef>::LoadFile(
-                       iree::ModuleDefIdentifier(), module_path)
+  auto module_fb = iree::FlatBufferFile<iree::vm::BytecodeModuleDef>::LoadFile(
+                       iree::vm::BytecodeModuleDefIdentifier(), module_path)
                        .ValueOrDie();
   TruncatingToStringVisitor tos_visitor("\n");
   auto object = reinterpret_cast<const uint8_t*>(module_fb->root());
diff --git a/iree/tools/run_mlir_main.cc b/iree/tools/run_mlir_main.cc
index 147f702..b7f341f 100644
--- a/iree/tools/run_mlir_main.cc
+++ b/iree/tools/run_mlir_main.cc
@@ -16,85 +16,121 @@
 // This is meant to be called from LIT for FileCheck tests, and tries to match
 // the interface of mlir-opt (featuring -split-input-file, etc) so it's easier
 // to work with there. If you want a more generalized runner for standalone
-// precompiled IREE modules use //third_party/iree/tools:run_module.
+// precompiled IREE modules use //third_party/iree/tools:iree-run-module.
 //
 // By default all exported functions in the module will be run in order.
 // All input values, provided via -input-values, will be passed to the
 // functions (this means all input signatures must match). Results from the
 // executed functions will be printed to stdout for checking.
-// Use -output_types to set the function output data types, which like args will
-// be used for all functions executed.
 //
 // Example input:
-// // RUN: iree-run %s | FileCheck %s
+// // RUN: iree-run-mlir %s | IreeFileCheck %s
 // // CHECK-LABEL: @foo
 // // CHECK: 1xf32: 2
-// func @foo() -> memref<f32> attributes {iree.module.export} {
-//   %0 = "iree.constant"() {value: dense<tensor<f32>, 2.0>} : () -> memref<f32>
-//   return %0 : memref<f32>
+// func @foo() -> tensor<f32> attributes {iree.module.export} {
+//   %0 = constant dense<2.0> : tensor<f32>
+//   return %0 : tensor<f32>
 // }
+//
+// Command line arguments are handled by LLVM's parser by default but -- can be
+// used to separate the compiler flags from the runtime flags, such as:
+//   iree-run-mlir -iree-hal-target-backends=vulkan-spirv -- --logtostderr
 
 #include <iostream>
+#include <utility>
 
 #include "absl/flags/flag.h"
 #include "absl/strings/numbers.h"
 #include "absl/strings/str_replace.h"
 #include "absl/strings/str_split.h"
 #include "absl/strings/string_view.h"
+#include "iree/base/api.h"
+#include "iree/base/api_util.h"
 #include "iree/base/init.h"
+#include "iree/base/shaped_buffer.h"
+#include "iree/base/shaped_buffer_string_util.h"
+#include "iree/base/signature_mangle.h"
 #include "iree/base/source_location.h"
 #include "iree/base/status.h"
-#include "iree/compiler/Translation/Sequencer/SequencerModuleTranslation.h"
-#include "iree/hal/buffer_view_string_util.h"
-#include "iree/hal/driver_registry.h"
-#include "iree/rt/context.h"
-#include "iree/rt/debug/debug_server_flags.h"
-#include "iree/rt/instance.h"
-#include "iree/rt/invocation.h"
-#include "iree/rt/module.h"
-#include "iree/rt/module_printer.h"
-#include "iree/schemas/module_def_generated.h"
-#include "iree/vm/sequencer_module.h"
+#include "iree/compiler/Dialect/Flow/Transforms/Passes.h"
+#include "iree/compiler/Dialect/HAL/Transforms/Passes.h"
+#include "iree/compiler/Dialect/VM/Target/Bytecode/BytecodeModuleTarget.h"
+#include "iree/compiler/Dialect/VM/Target/Bytecode/TranslationFlags.h"
+#include "iree/compiler/Dialect/VM/Transforms/Passes.h"
+#include "iree/compiler/Translation/IREEVM.h"
+#include "iree/hal/api.h"
+#include "iree/modules/hal/hal_module.h"
+#include "iree/vm2/api.h"
+#include "iree/vm2/bytecode_module.h"
 #include "llvm/ADT/StringRef.h"
+#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/InitLLVM.h"
 #include "llvm/Support/SourceMgr.h"
 #include "mlir/IR/Attributes.h"
 #include "mlir/IR/Function.h"
 #include "mlir/IR/MLIRContext.h"
 #include "mlir/IR/Module.h"
 #include "mlir/Parser.h"
+#include "mlir/Pass/PassManager.h"
 #include "mlir/Support/FileUtilities.h"
 
-ABSL_FLAG(bool, split_input_file, true,
-          "Split the input file into multiple modules.");
+static llvm::cl::opt<std::string> input_file_flag{
+    llvm::cl::Positional,
+    llvm::cl::desc("<input .mlir file>"),
+    llvm::cl::init("-"),
+};
 
-ABSL_FLAG(std::string, target_backends, "",
-          "Comma-separated list of target backends to translate executables "
-          "into. Omit to translate using all linked-in backend translators.");
-ABSL_FLAG(
-    bool, export_all, true,
-    "Automatically add the iree.module.export attribute to all functions.");
+static llvm::cl::opt<bool> split_input_file_flag{
+    "split-input-file",
+    llvm::cl::desc("Split the input file into multiple modules"),
+    llvm::cl::init(true),
+};
 
-ABSL_FLAG(std::string, input_values, "", "Input shapes and optional values.");
-ABSL_FLAG(std::string, output_types, "",
-          "Output data types (comma delimited list of b/i/u/f for "
-          "binary/signed int/unsigned int/float).");
+static llvm::cl::opt<bool> export_all_flag{
+    "export-all",
+    llvm::cl::desc("Adds iree.module.export to all functions"),
+    llvm::cl::init(true),
+};
 
-// TODO(benvanik): is there a more canonical flag we can use?
-ABSL_FLAG(bool, print_mlir, true, "Prints MLIR IR during translation.");
+static llvm::cl::opt<bool> print_mlir_flag{
+    "print-mlir",
+    llvm::cl::desc("Prints MLIR IR after translation"),
+    llvm::cl::init(false),
+};
 
-ABSL_FLAG(bool, print_bytecode, false,
-          "Prints IREE bytecode after translation.");
+static llvm::cl::opt<bool> print_annotated_mlir_flag{
+    "print-annotated-mlir",
+    llvm::cl::desc("Prints MLIR IR with final serialization annotations"),
+    llvm::cl::init(false),
+};
 
-ABSL_FLAG(bool, run, true,
-          "Option to run the file. Setting it to false just compiles it.");
+static llvm::cl::opt<bool> print_flatbuffer_flag{
+    "print-flatbuffer",
+    llvm::cl::desc("Prints Flatbuffer text after serialization"),
+    llvm::cl::init(false),
+};
+
+static llvm::cl::list<std::string> input_values_flag{
+    "input-value",
+    llvm::cl::desc("Input shapes and optional values"),
+    llvm::cl::ZeroOrMore,
+};
+
+static llvm::cl::opt<bool> run_flag{
+    "run",
+    llvm::cl::desc("Runs the module (vs. just compiling and verifing)"),
+    llvm::cl::init(true),
+};
+
+static llvm::cl::list<std::string> run_args_flag{
+    "run-arg",
+    llvm::cl::desc("Argument passed to the execution flag parser"),
+    llvm::cl::ZeroOrMore,
+};
 
 namespace iree {
 namespace {
 
-using ::iree::hal::BufferView;
-using ::iree::rt::Function;
-using ::iree::rt::Module;
-
 // Returns a driver name capable of handling input from the given backend.
 std::string BackendToDriverName(std::string backend) {
   size_t dash = backend.find('-');
@@ -105,8 +141,30 @@
   }
 }
 
+// Returns a list of target compiler backends to use for file evaluation.
+StatusOr<std::vector<std::string>> GetTargetBackends() {
+  auto target_backends =
+      mlir::iree_compiler::IREE::HAL::getExecutableTargetOptionsFromFlags()
+          .targets;
+  if (target_backends.empty()) {
+    iree_string_view_t* driver_names = nullptr;
+    iree_host_size_t driver_count = 0;
+    RETURN_IF_ERROR(
+        FromApiStatus(iree_hal_driver_registry_query_available_drivers(
+                          IREE_ALLOCATOR_SYSTEM, &driver_names, &driver_count),
+                      IREE_LOC));
+    for (int i = 0; i < driver_count; ++i) {
+      target_backends.push_back(
+          std::string(driver_names[i].data, driver_names[i].size));
+    }
+    iree_allocator_free(IREE_ALLOCATOR_SYSTEM, driver_names);
+  }
+  return target_backends;
+}
+
 // Prepares a module for evaluation by running MLIR import and IREE translation.
-StatusOr<ref_ptr<Module>> PrepareModule(
+// Returns the serialized flatbuffer data.
+StatusOr<std::string> PrepareModule(
     std::string target_backend,
     std::unique_ptr<llvm::MemoryBuffer> file_buffer) {
   mlir::MLIRContext context;
@@ -117,33 +175,72 @@
   mlir::OwningModuleRef mlir_module =
       mlir::parseSourceFile(source_mgr, &context);
 
-  if (absl::GetFlag(FLAGS_export_all)) {
+  if (export_all_flag) {
     for (auto function : mlir_module->getOps<mlir::FuncOp>()) {
       function.setAttr("iree.module.export", mlir::UnitAttr::get(&context));
     }
   }
 
   // Translate from MLIR to IREE bytecode.
-  mlir::iree_compiler::ModuleTranslationOptions options;
-  options.print_mlir = absl::GetFlag(FLAGS_print_mlir);
-  options.target_backends = {target_backend};
-  auto iree_module_bytes =
-      mlir::iree_compiler::translateMlirToIreeSequencerModule(mlir_module.get(),
-                                                              options);
-  if (iree_module_bytes.empty()) {
-    return iree::InternalErrorBuilder(IREE_LOC)
-           << "Error translating MLIR to an IREE sequencer module";
+  LOG(INFO) << "Compiling for target backend '" << target_backend << "'...";
+  auto executable_options =
+      mlir::iree_compiler::IREE::HAL::getExecutableTargetOptionsFromFlags();
+  executable_options.targets = {std::move(target_backend)};
+  mlir::PassManager pass_manager(mlir_module->getContext());
+  mlir::iree_compiler::IREE::Flow::buildFlowTransformPassPipeline(pass_manager);
+  mlir::iree_compiler::IREE::HAL::buildHALTransformPassPipeline(
+      pass_manager, executable_options);
+  mlir::iree_compiler::IREE::VM::buildVMTransformPassPipeline(pass_manager);
+  if (failed(pass_manager.run(mlir_module.get()))) {
+    return InternalErrorBuilder(IREE_LOC)
+           << "Conversion from source -> vm failed";
   }
 
-  if (absl::GetFlag(FLAGS_print_mlir)) {
+  if (print_mlir_flag) {
     mlir_module->dump();
   }
 
-  // Wrap module in a file handle.
-  ASSIGN_OR_RETURN(auto iree_module_file,
-                   vm::ModuleFile::FromBuffer(ModuleDefIdentifier(),
-                                              std::move(iree_module_bytes)));
-  return vm::SequencerModule::FromFile(std::move(iree_module_file));
+  auto bytecode_options =
+      mlir::iree_compiler::IREE::VM::getBytecodeTargetOptionsFromFlags();
+  std::string binary_contents;
+  llvm::raw_string_ostream binary_output(binary_contents);
+  if (failed(mlir::iree_compiler::IREE::VM::translateModuleToBytecode(
+          mlir_module.get(), bytecode_options, binary_output))) {
+    return InternalErrorBuilder(IREE_LOC)
+           << "Serialization to flatbuffer bytecode (binary) failed";
+  }
+  binary_output.flush();
+
+  // Print the annotated MLIR and flatbuffer; easiest way right now is to just
+  // do it all again.
+  if (print_annotated_mlir_flag) {
+    bytecode_options.outputFormat =
+        mlir::iree_compiler::IREE::VM::BytecodeOutputFormat::kAnnotatedMlirText;
+    std::string text_contents;
+    llvm::raw_string_ostream text_output(text_contents);
+    if (failed(mlir::iree_compiler::IREE::VM::translateModuleToBytecode(
+            mlir_module.get(), bytecode_options, text_output))) {
+      return InternalErrorBuilder(IREE_LOC)
+             << "Serialization to annotated MLIR (text) failed";
+    }
+    text_output.flush();
+    std::cerr << text_contents << std::endl;
+  }
+  if (print_flatbuffer_flag) {
+    bytecode_options.outputFormat =
+        mlir::iree_compiler::IREE::VM::BytecodeOutputFormat::kFlatBufferText;
+    std::string text_contents;
+    llvm::raw_string_ostream text_output(text_contents);
+    if (failed(mlir::iree_compiler::IREE::VM::translateModuleToBytecode(
+            mlir_module.get(), bytecode_options, text_output))) {
+      return InternalErrorBuilder(IREE_LOC)
+             << "Serialization to flatbuffer bytecode (text) failed";
+    }
+    text_output.flush();
+    std::cerr << text_contents << std::endl;
+  }
+
+  return binary_contents;
 }
 
 // Parses a list of input shapes and values from a string of newline-separated
@@ -152,42 +249,127 @@
 //   [shape]xtype=[value]
 // Example:
 //   4x4xi8=0,1,2,3
-StatusOr<std::vector<BufferView>> ParseInputsFromFlags(
-    hal::Allocator *allocator) {
-  std::string file_contents =
-      absl::StrReplaceAll(absl::GetFlag(FLAGS_input_values), {{"\\n", "\n"}});
-  std::vector<BufferView> inputs;
-  std::vector<std::string> lines = absl::StrSplit(
-      file_contents, absl::ByAnyChar("\n;"), absl::SkipWhitespace());
-  for (const auto &line : lines) {
-    ASSIGN_OR_RETURN(auto input,
-                     hal::ParseBufferViewFromString(line, allocator));
-    inputs.push_back(input);
+StatusOr<iree_vm_variant_list_t*> ParseInputsFromFlags(
+    iree_vm_function_t function, iree_hal_allocator_t* allocator) {
+  iree_vm_variant_list_t* inputs = nullptr;
+  RETURN_IF_ERROR(
+      FromApiStatus(iree_vm_variant_list_alloc(input_values_flag.size(),
+                                               IREE_ALLOCATOR_SYSTEM, &inputs),
+                    IREE_LOC));
+  for (const auto& input_value : input_values_flag) {
+    ASSIGN_OR_RETURN(auto shaped_buffer,
+                     ParseShapedBufferFromString(input_value),
+                     _ << "Parsing input value '" << input_value << "'");
+    iree_hal_buffer_t* input_buffer = nullptr;
+    // TODO(benvanik): combined function for linear to optimal upload.
+    iree_device_size_t allocation_size =
+        shaped_buffer.shape().element_count() * shaped_buffer.element_size();
+    RETURN_IF_ERROR(FromApiStatus(
+        iree_hal_allocator_allocate_buffer(
+            allocator,
+            static_cast<iree_hal_memory_type_t>(
+                IREE_HAL_MEMORY_TYPE_HOST_LOCAL |
+                IREE_HAL_MEMORY_TYPE_DEVICE_VISIBLE),
+            static_cast<iree_hal_buffer_usage_t>(
+                IREE_HAL_BUFFER_USAGE_ALL | IREE_HAL_BUFFER_USAGE_CONSTANT),
+            allocation_size, &input_buffer),
+        IREE_LOC))
+        << "Allocating input buffer";
+    RETURN_IF_ERROR(FromApiStatus(
+        iree_hal_buffer_write_data(input_buffer, 0,
+                                   shaped_buffer.contents().data(),
+                                   shaped_buffer.contents().size()),
+        IREE_LOC))
+        << "Populating input buffer contents";
+    auto input_buffer_ref = iree_hal_buffer_move_ref(input_buffer);
+    RETURN_IF_ERROR(FromApiStatus(
+        iree_vm_variant_list_append_ref_move(inputs, &input_buffer_ref),
+        IREE_LOC));
   }
   return inputs;
 }
 
 // Outputs all results from the function to stdout in IREE BufferView format.
-Status OutputFunctionResults(const Function &function,
-                             absl::Span<BufferView> results) {
-  std::vector<std::string> output_types =
-      absl::StrSplit(absl::GetFlag(FLAGS_output_types), absl::ByAnyChar(", "),
-                     absl::SkipWhitespace());
-  if (!output_types.empty() && output_types.size() != results.size()) {
-    return InvalidArgumentErrorBuilder(IREE_LOC)
-           << "--output_types= specified but has " << output_types.size()
-           << " types when the function returns " << results.size();
+Status OutputFunctionResults(iree_vm_function_t function,
+                             iree_vm_variant_list_t* outputs) {
+  iree_string_view_t sig_fv =
+      iree_vm_function_reflection_attr(&function, iree_make_cstring_view("fv"));
+  if (iree_string_view_compare(sig_fv, iree_make_cstring_view("1")) != 0) {
+    return UnimplementedErrorBuilder(IREE_LOC) << "Unsupported function ABI";
   }
 
-  for (int i = 0; i < results.size(); ++i) {
-    const auto &result = results[i];
+  iree_string_view_t sig_f =
+      iree_vm_function_reflection_attr(&function, iree_make_cstring_view("f"));
+  RawSignatureParser sig_parser;
+  absl::InlinedVector<RawSignatureParser::Description, 4> output_descs;
+  sig_parser.VisitResults(absl::string_view{sig_f.data, sig_f.size},
+                          [&](const RawSignatureParser::Description& desc) {
+                            output_descs.push_back(desc);
+                          });
+  if (output_descs.size() != iree_vm_variant_list_size(outputs)) {
+    return FailedPreconditionErrorBuilder(IREE_LOC)
+           << "Result signature mismatch; expected " << output_descs.size()
+           << " results but VM returned " << iree_vm_variant_list_size(outputs);
+  }
+
+  for (int i = 0; i < iree_vm_variant_list_size(outputs); ++i) {
+    iree_vm_variant_t* variant = iree_vm_variant_list_get(outputs, i);
+    auto* buffer = iree_hal_buffer_deref(&variant->ref);
+
+    const auto& desc = output_descs[i];
+    std::string desc_str;
+    desc.ToString(desc_str);
     auto print_mode = BufferDataPrintMode::kFloatingPoint;
-    if (!output_types.empty()) {
-      ASSIGN_OR_RETURN(print_mode, ParseBufferDataPrintMode(output_types[i]));
+    int8_t element_size = 4;
+    Shape shape;
+    switch (desc.type) {
+      case RawSignatureParser::Type::kBuffer:
+        switch (desc.buffer.scalar_type) {
+          case AbiConstants::ScalarType::kIeeeFloat16:
+          case AbiConstants::ScalarType::kIeeeFloat32:
+          case AbiConstants::ScalarType::kIeeeFloat64:
+            print_mode = BufferDataPrintMode::kFloatingPoint;
+            break;
+          case AbiConstants::ScalarType::kSint8:
+          case AbiConstants::ScalarType::kSint16:
+          case AbiConstants::ScalarType::kSint32:
+          case AbiConstants::ScalarType::kSint64:
+            print_mode = BufferDataPrintMode::kSignedInteger;
+            break;
+          case AbiConstants::ScalarType::kUint8:
+          case AbiConstants::ScalarType::kUint16:
+          case AbiConstants::ScalarType::kUint32:
+          case AbiConstants::ScalarType::kUint64:
+            print_mode = BufferDataPrintMode::kUnsignedInteger;
+            break;
+          default:
+            print_mode = BufferDataPrintMode::kBinary;
+            break;
+        }
+        element_size = AbiConstants::kScalarTypeSize[static_cast<unsigned>(
+            desc.buffer.scalar_type)];
+        shape = Shape{desc.dims};
+        break;
+      default:
+        return UnimplementedErrorBuilder(IREE_LOC)
+               << "Unsupported signature type: " << desc_str;
     }
-    ASSIGN_OR_RETURN(auto result_str,
-                     hal::PrintBufferViewToString(result, print_mode, 1024));
-    LOG(INFO) << "result[" << i << "]: " << result.buffer->DebugString();
+
+    // TODO(benvanik): debug string C API: buffer->DebugString();
+    LOG(INFO) << "result[" << i << "]: " << desc_str;
+    iree_hal_mapped_memory_t mapped_memory;
+    RETURN_IF_ERROR(
+        FromApiStatus(iree_hal_buffer_map(buffer, IREE_HAL_MEMORY_ACCESS_READ,
+                                          0, IREE_WHOLE_BUFFER, &mapped_memory),
+                      IREE_LOC));
+    auto contents = absl::MakeConstSpan(mapped_memory.contents.data,
+                                        mapped_memory.contents.data_length);
+    ShapedBuffer shaped_buffer(
+        element_size, shape,
+        std::vector<uint8_t>(contents.begin(), contents.end()));
+    ASSIGN_OR_RETURN(auto result_str, PrintShapedBufferToString(
+                                          shaped_buffer, print_mode, 1024));
+    iree_hal_buffer_unmap(buffer, &mapped_memory);
     std::cout << result_str << "\n";
   }
 
@@ -195,105 +377,167 @@
 }
 
 // Evaluates a single function in its own fiber, printing the results to stdout.
-Status EvaluateFunction(const ref_ptr<rt::Context> &context,
-                        hal::Allocator *allocator, const Function &function) {
-  std::cout << "EXEC @" << function.name() << std::endl;
+Status EvaluateFunction(iree_vm_context_t* context,
+                        iree_hal_allocator_t* allocator,
+                        iree_vm_function_t function) {
+  auto function_name = iree_vm_function_name(&function);
+  std::cout << "EXEC @"
+            << absl::string_view(function_name.data, function_name.size)
+            << std::endl;
 
-  // Create invocation that will perform the execution.
-  ASSIGN_OR_RETURN(auto arguments, ParseInputsFromFlags(allocator));
-  ASSIGN_OR_RETURN(
-      auto invocation,
-      rt::Invocation::Create(add_ref(context), function, make_ref<rt::Policy>(),
-                             {}, absl::MakeConstSpan(arguments)));
+  // Parse inputs and create the required input buffers.
+  ASSIGN_OR_RETURN(auto* input_list, ParseInputsFromFlags(function, allocator));
 
-  // Wait until invocation completes.
-  RETURN_IF_ERROR(invocation->Await(absl::InfiniteFuture()));
+  // Prepare outputs list to accept the results from the invocation.
+  iree_vm_variant_list_t* output_list = nullptr;
+  RETURN_IF_ERROR(FromApiStatus(
+      iree_vm_variant_list_alloc(16, IREE_ALLOCATOR_SYSTEM, &output_list),
+      IREE_LOC));
+
+  // Synchronously invoke the function.
+  RETURN_IF_ERROR(FromApiStatus(
+      iree_vm_invoke(context, function, /*policy=*/nullptr, input_list,
+                     output_list, IREE_ALLOCATOR_SYSTEM),
+      IREE_LOC));
+
+  iree_vm_variant_list_free(input_list);
 
   // Print outputs.
-  ASSIGN_OR_RETURN(auto results, invocation->ConsumeResults());
-  RETURN_IF_ERROR(OutputFunctionResults(function, absl::MakeSpan(results)));
+  RETURN_IF_ERROR(OutputFunctionResults(function, output_list));
+  iree_vm_variant_list_free(output_list);
 
   return OkStatus();
 }
 
 // Evaluates all exported functions within given module.
-Status EvaluateFunctions(absl::string_view target_backend,
-                         ref_ptr<Module> module) {
-  // Create the context we'll use for this (ensuring that we can't interfere
-  // with other running evaluations, such as when in a multithreaded test
-  // runner).
-  ASSIGN_OR_RETURN(auto debug_server, rt::debug::CreateDebugServerFromFlags());
-  auto instance = make_ref<rt::Instance>(std::move(debug_server));
-  ASSIGN_OR_RETURN(auto driver, hal::DriverRegistry::shared_registry()->Create(
-                                    target_backend));
-  ASSIGN_OR_RETURN(auto device, driver->CreateDefaultDevice());
-  RETURN_IF_ERROR(instance->device_manager()->RegisterDevice(add_ref(device)));
+Status EvaluateFunctions(iree_vm_instance_t* instance,
+                         absl::string_view target_backend,
+                         const std::string& flatbuffer_data) {
+  LOG(INFO) << "Evaluating all functions in module for backend '"
+            << target_backend << "'...";
 
-  if (absl::GetFlag(FLAGS_print_bytecode)) {
-    RETURN_IF_ERROR(rt::PrintModuleToStream(
-        *module, rt::PrintModuleFlag::kDisassemble, &std::cout));
+  // Load the bytecode module from the flatbuffer data.
+  // We do this first so that if we fail validation we know prior to dealing
+  // with devices.
+  iree_vm_module_t* bytecode_module = nullptr;
+  RETURN_IF_ERROR(FromApiStatus(
+      iree_vm_bytecode_module_create(
+          iree_const_byte_span_t{
+              reinterpret_cast<const uint8_t*>(flatbuffer_data.c_str()),
+              flatbuffer_data.size()},
+          IREE_ALLOCATOR_NULL, IREE_ALLOCATOR_SYSTEM, &bytecode_module),
+      IREE_LOC))
+      << "Deserializing flatbuffer module";
+
+  if (!run_flag) {
+    // Just wanted verification; return without running.
+    iree_vm_module_release(bytecode_module);
+    return OkStatus();
   }
 
+  // Create the driver/device as defined by the test and setup the HAL module.
+  LOG(INFO) << "Creating target backend driver '" << target_backend << "'...";
+  iree_hal_driver_t* driver = nullptr;
+  RETURN_IF_ERROR(FromApiStatus(
+      iree_hal_driver_registry_create_driver(
+          iree_string_view_t{target_backend.data(), target_backend.size()},
+          IREE_ALLOCATOR_SYSTEM, &driver),
+      IREE_LOC))
+      << "Creating driver for " << target_backend;
+  iree_hal_device_t* device = nullptr;
+  RETURN_IF_ERROR(FromApiStatus(iree_hal_driver_create_default_device(
+                                    driver, IREE_ALLOCATOR_SYSTEM, &device),
+                                IREE_LOC))
+      << "Creating default device for " << target_backend;
+  iree_vm_module_t* hal_module = nullptr;
+  RETURN_IF_ERROR(FromApiStatus(
+      iree_hal_module_create(device, IREE_ALLOCATOR_SYSTEM, &hal_module),
+      IREE_LOC))
+      << "Creating HAL module";
+  iree_hal_driver_release(driver);
+
   // Evaluate all exported functions.
-  auto policy = make_ref<rt::Policy>();
   auto run_function = [&](int ordinal) -> Status {
-    // Setup a new context for this invocation.
-    auto context = make_ref<rt::Context>(add_ref(instance), add_ref(policy));
-    RETURN_IF_ERROR(context->RegisterModule(add_ref(module)));
+    iree_vm_function_t function;
+    RETURN_IF_ERROR(
+        FromApiStatus(iree_vm_module_lookup_function_by_ordinal(
+                          bytecode_module, IREE_VM_FUNCTION_LINKAGE_EXPORT,
+                          ordinal, &function),
+                      IREE_LOC))
+        << "Looking up function export " << ordinal;
+    if (iree_string_view_starts_with(iree_vm_function_name(&function),
+                                     iree_make_cstring_view("__"))) {
+      // Skip internal functions.
+      return OkStatus();
+    }
+
+    // Create the context we'll use for this (ensuring that we can't interfere
+    // with other running evaluations, such as when in a multithreaded test
+    // runner).
+    iree_vm_context_t* context = nullptr;
+    std::vector<iree_vm_module_t*> modules = {hal_module, bytecode_module};
+    RETURN_IF_ERROR(FromApiStatus(iree_vm_context_create_with_modules(
+                                      instance, modules.data(), modules.size(),
+                                      IREE_ALLOCATOR_SYSTEM, &context),
+                                  IREE_LOC))
+        << "Creating context";
 
     // Invoke the function and print results.
-    ASSIGN_OR_RETURN(auto function,
-                     module->LookupFunctionByOrdinal(
-                         rt::Function::Linkage::kExport, ordinal));
-    RETURN_IF_ERROR(EvaluateFunction(context, device->allocator(), function));
+    RETURN_IF_ERROR(
+        EvaluateFunction(context, iree_hal_device_allocator(device), function))
+        << "Evaluating export function " << ordinal;
+
+    iree_vm_context_release(context);
     return OkStatus();
   };
 
   Status evaluate_status = OkStatus();
-  for (int i = 0; i < module->signature().export_function_count(); ++i) {
+  auto module_signature = iree_vm_module_signature(bytecode_module);
+  for (int i = 0; i < module_signature.export_function_count; ++i) {
     evaluate_status = run_function(i);
     if (!evaluate_status.ok()) {
       break;
     }
   }
 
-  RETURN_IF_ERROR(instance->device_manager()->UnregisterDevice(device.get()));
-  device.reset();
-  driver.reset();
+  iree_vm_module_release(hal_module);
+  iree_vm_module_release(bytecode_module);
+  iree_hal_device_release(device);
 
   return evaluate_status;
 }
 
 // Translates and runs a single LLVM file buffer.
 Status EvaluateFile(std::unique_ptr<llvm::MemoryBuffer> file_buffer) {
-  std::vector<std::string> target_backends;
-  if (absl::GetFlag(FLAGS_target_backends).empty()) {
-    target_backends =
-        hal::DriverRegistry::shared_registry()->EnumerateAvailableDrivers();
-  } else {
-    // We need to map specific backends names to drivers (like 'vulkan-spirv' to
-    // the driver 'vulkan').
-    target_backends = absl::StrSplit(absl::GetFlag(FLAGS_target_backends), ',');
-  }
+  // TODO(benvanik): move to instance-based registration.
+  RETURN_IF_ERROR(FromApiStatus(iree_hal_module_register_types(), IREE_LOC))
+      << "Registering HAL types";
 
-  for (auto target_backend : target_backends) {
+  iree_vm_instance_t* instance = nullptr;
+  RETURN_IF_ERROR(FromApiStatus(
+      iree_vm_instance_create(IREE_ALLOCATOR_SYSTEM, &instance), IREE_LOC))
+      << "Create instance";
+
+  ASSIGN_OR_RETURN(auto target_backends, GetTargetBackends());
+  for (const auto& target_backend : target_backends) {
     // Prepare the module for execution and evaluate it.
     auto cloned_file_buffer = llvm::MemoryBuffer::getMemBufferCopy(
         file_buffer->getBuffer(), file_buffer->getBufferIdentifier());
-    ASSIGN_OR_RETURN(auto module, PrepareModule(target_backend + '*',
-                                                std::move(cloned_file_buffer)));
-    if (!absl::GetFlag(FLAGS_run)) {
-      continue;
-    }
-    RETURN_IF_ERROR(EvaluateFunctions(BackendToDriverName(target_backend),
-                                      std::move(module)));
+    ASSIGN_OR_RETURN(
+        auto flatbuffer_data,
+        PrepareModule(target_backend + '*', std::move(cloned_file_buffer)),
+        _ << "Translating module");
+    RETURN_IF_ERROR(EvaluateFunctions(
+        instance, BackendToDriverName(target_backend), flatbuffer_data))
+        << "Evaluating functions";
   }
 
+  iree_vm_instance_release(instance);
   return OkStatus();
 }
 
 // Runs the given .mlir file based on the current flags.
-Status RunFile(std::string mlir_filename) {
+Status RunFile(const std::string& mlir_filename) {
   // Load input file/from stdin.
   std::string error_message;
   auto file = mlir::openInputFile(mlir_filename, &error_message);
@@ -303,7 +547,7 @@
            << error_message;
   }
 
-  if (!absl::GetFlag(FLAGS_split_input_file)) {
+  if (!split_input_file_flag) {
     // Use entire buffer as a single module.
     return EvaluateFile(std::move(file));
   }
@@ -311,19 +555,19 @@
   // Split the buffer into separate modules and evaluate independently.
   // This matches the -split-input-file arg to mlir-opt.
   const char kSplitMarker[] = "// -----\n";
-  auto *full_buffer = file.get();
+  auto* full_buffer = file.get();
   llvm::SmallVector<llvm::StringRef, 8> source_buffers;
   full_buffer->getBuffer().split(source_buffers, kSplitMarker);
 
   // Add the original buffer to the source manager.
-  llvm::SourceMgr fileSourceMgr;
-  fileSourceMgr.AddNewSourceBuffer(std::move(file), llvm::SMLoc());
+  llvm::SourceMgr file_source_mgr;
+  file_source_mgr.AddNewSourceBuffer(std::move(file), llvm::SMLoc());
 
   // Process each chunk in turn. Only return the first error (but log all).
   Status any_failure;
-  for (auto &sub_source_buffer : source_buffers) {
+  for (auto& sub_source_buffer : source_buffers) {
     auto split_loc = llvm::SMLoc::getFromPointer(sub_source_buffer.data());
-    unsigned split_line = fileSourceMgr.getLineAndColumn(split_loc).first;
+    unsigned split_line = file_source_mgr.getLineAndColumn(split_loc).first;
     auto sub_buffer = llvm::MemoryBuffer::getMemBufferCopy(
         sub_source_buffer, full_buffer->getBufferIdentifier() +
                                llvm::Twine(" split at line #") +
@@ -343,15 +587,37 @@
 
 }  // namespace
 
-extern "C" int main(int argc, char **argv) {
-  InitializeEnvironment(&argc, &argv);
-  if (argc < 2) {
-    LOG(ERROR) << "Must supply an input .mlir file.";
-    return 1;
+extern "C" int main(int argc, char** argv) {
+  int argc_llvm = argc;
+  char** argv_llvm = argv;
+  int argc_absl = 1;
+  std::vector<char*> argv_absl = {argv[0]};
+  for (int i = 0; i < argc; ++i) {
+    if (std::strcmp(argv[i], "--") == 0) {
+      argc_llvm = i;
+      argc_absl = argc - i;
+      for (int j = i + 1; j < argc; ++j) {
+        argv_absl.push_back(argv[i + 1]);
+      }
+      break;
+    }
   }
-  auto status = RunFile(argv[1]);
+
+  mlir::registerPassManagerCLOptions();
+  llvm::InitLLVM init_llvm(argc_llvm, argv_llvm);
+  llvm::cl::ParseCommandLineOptions(argc_llvm, argv_llvm);
+
+  for (auto& run_arg : run_args_flag) {
+    argv_absl.push_back(const_cast<char*>(run_arg.c_str()));
+  }
+  argc_absl += run_args_flag.size();
+  char** argv_absl_ptr = argv_absl.data();
+  InitializeEnvironment(&argc_absl, &argv_absl_ptr);
+
+  auto status = RunFile(input_file_flag);
   if (!status.ok()) {
-    std::cerr << "ERROR running file (" << argv[1] << "): " << status << "\n";
+    std::cerr << "ERROR running file (" << input_file_flag << "): " << status
+              << "\n";
     return 1;
   }
   return 0;
diff --git a/iree/tools/run_mlir_main2.cc b/iree/tools/run_mlir_main2.cc
index b7f341f..ed368be 100644
--- a/iree/tools/run_mlir_main2.cc
+++ b/iree/tools/run_mlir_main2.cc
@@ -458,19 +458,6 @@
 
   // Evaluate all exported functions.
   auto run_function = [&](int ordinal) -> Status {
-    iree_vm_function_t function;
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_vm_module_lookup_function_by_ordinal(
-                          bytecode_module, IREE_VM_FUNCTION_LINKAGE_EXPORT,
-                          ordinal, &function),
-                      IREE_LOC))
-        << "Looking up function export " << ordinal;
-    if (iree_string_view_starts_with(iree_vm_function_name(&function),
-                                     iree_make_cstring_view("__"))) {
-      // Skip internal functions.
-      return OkStatus();
-    }
-
     // Create the context we'll use for this (ensuring that we can't interfere
     // with other running evaluations, such as when in a multithreaded test
     // runner).
@@ -482,6 +469,14 @@
                                   IREE_LOC))
         << "Creating context";
 
+    iree_vm_function_t function;
+    RETURN_IF_ERROR(
+        FromApiStatus(iree_vm_module_lookup_function_by_ordinal(
+                          bytecode_module, IREE_VM_FUNCTION_LINKAGE_EXPORT,
+                          ordinal, &function),
+                      IREE_LOC))
+        << "Looking up function export " << ordinal;
+
     // Invoke the function and print results.
     RETURN_IF_ERROR(
         EvaluateFunction(context, iree_hal_device_allocator(device), function))
diff --git a/iree/tools/iree_translate_main.cc b/iree/tools/translate_main.cc
similarity index 100%
rename from iree/tools/iree_translate_main.cc
rename to iree/tools/translate_main.cc
diff --git a/test/e2e/xla/BUILD b/test/e2e/xla/BUILD
index ee17199..2a822db 100644
--- a/test/e2e/xla/BUILD
+++ b/test/e2e/xla/BUILD
@@ -23,7 +23,7 @@
 
 iree_setup_lit_package(
     data = [
-        "//iree/tools:iree-run-mlir2",
+        "//iree/tools:iree-run-mlir",
     ],
 )
 
diff --git a/test/e2e/xla/abs.mlir b/test/e2e/xla/abs.mlir
index 3055d86..884fdba 100644
--- a/test/e2e/xla/abs.mlir
+++ b/test/e2e/xla/abs.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode -input-value="2x2xf32= 1 2 3 4" -input-value="2x3xf32= 5 6 7 8 9 10" -input-value="2x2xf32= 11 12 13 14" %s | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv -input-value="2x2xf32= 1 2 3 4" -input-value="2x3xf32= 5 6 7 8 9 10" -input-value="2x2xf32= 11 12 13 14" %s | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode -input-value="2x2xf32= 1 2 3 4" -input-value="2x3xf32= 5 6 7 8 9 10" -input-value="2x2xf32= 11 12 13 14" %s | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv -input-value="2x2xf32= 1 2 3 4" -input-value="2x3xf32= 5 6 7 8 9 10" -input-value="2x2xf32= 11 12 13 14" %s | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @tensor
 func @tensor() -> tensor<4xf32> {
diff --git a/test/e2e/xla/collatz.mlir b/test/e2e/xla/collatz.mlir
index af48c7c..e214609 100644
--- a/test/e2e/xla/collatz.mlir
+++ b/test/e2e/xla/collatz.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode -input-value="f32=178" %s | IreeFileCheck %s
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode -input-value="f32=178" %s | IreeFileCheck %s
 
 // CHECK-LABEL: EXEC @collatz
 func @collatz(%arg0: tensor<f32>) -> tensor<f32> {
diff --git a/test/e2e/xla/compare.mlir b/test/e2e/xla/compare.mlir
index bb73f68..b7395a9 100644
--- a/test/e2e/xla/compare.mlir
+++ b/test/e2e/xla/compare.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
 
 // CHECK-LABEL: EXEC @compare_tensor
 func @compare_tensor() -> tensor<4xi8> {
diff --git a/test/e2e/xla/concatenate.mlir b/test/e2e/xla/concatenate.mlir
index 51f1c34..0988d8c 100644
--- a/test/e2e/xla/concatenate.mlir
+++ b/test/e2e/xla/concatenate.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode -input-value="2x2xf32= 1 2 3 4" -input-value="2x3xf32= 5 6 7 8 9 10" -input-value="2x2xf32= 11 12 13 14" %s | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv -input-value="2x2xf32= 1 2 3 4" -input-value="2x3xf32= 5 6 7 8 9 10" -input-value="2x2xf32= 11 12 13 14" %s | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode -input-value="2x2xf32= 1 2 3 4" -input-value="2x3xf32= 5 6 7 8 9 10" -input-value="2x2xf32= 11 12 13 14" %s | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv -input-value="2x2xf32= 1 2 3 4" -input-value="2x3xf32= 5 6 7 8 9 10" -input-value="2x2xf32= 11 12 13 14" %s | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @xla_concatenate
 func @xla_concatenate(%arg0: tensor<2x2xf32>, %arg1: tensor<2x3xf32>, %arg2: tensor<2x2xf32>) -> (tensor<2x5xf32>, tensor<2x5xf32>, tensor<2x7xf32>, tensor<4x2xf32>) {
diff --git a/test/e2e/xla/constants.mlir b/test/e2e/xla/constants.mlir
index f2dc5ca..a49f70f 100644
--- a/test/e2e/xla/constants.mlir
+++ b/test/e2e/xla/constants.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @xla_constant_i32
 func @xla_constant_i32 () -> (tensor<2x2x3xi32>, tensor<2x2x3xi32>) {
diff --git a/test/e2e/xla/convert_int.mlir b/test/e2e/xla/convert_int.mlir
index d7a9b3e..6530c79 100644
--- a/test/e2e/xla/convert_int.mlir
+++ b/test/e2e/xla/convert_int.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s -input-value=1xi32=42 | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s -input-value=1xi32=42 | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s -input-value=1xi32=42 | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s -input-value=1xi32=42 | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @narrow_int
 func @narrow_int(%arg : tensor<1xi32>) -> tensor<1xi8> {
diff --git a/test/e2e/xla/dot.mlir b/test/e2e/xla/dot.mlir
index 4ead947..c374e76 100644
--- a/test/e2e/xla/dot.mlir
+++ b/test/e2e/xla/dot.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode -input-value="2xf32=0.3, 0.5" %s | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv -input-value="2xf32=0.3, 0.5" %s | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode -input-value="2xf32=0.3, 0.5" %s | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv -input-value="2xf32=0.3, 0.5" %s | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @dot_passthrough
 func @dot_passthrough(%arg0: tensor<2xf32>) -> tensor<1x3xf32> {
diff --git a/test/e2e/xla/exp.mlir b/test/e2e/xla/exp.mlir
index d972062..d731aa5 100644
--- a/test/e2e/xla/exp.mlir
+++ b/test/e2e/xla/exp.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
 
 // CHECK-LABEL: EXEC @tensor
 func @tensor() -> tensor<4xf32> {
diff --git a/test/e2e/xla/floor.mlir b/test/e2e/xla/floor.mlir
index cf1d56d..cd4809c 100644
--- a/test/e2e/xla/floor.mlir
+++ b/test/e2e/xla/floor.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
 
 // CHECK-LABEL: EXEC @tensor
 func @tensor() -> tensor<4xf32> {
diff --git a/test/e2e/xla/fragment_000.mlir b/test/e2e/xla/fragment_000.mlir
index d5f1dd7..a09f25d 100644
--- a/test/e2e/xla/fragment_000.mlir
+++ b/test/e2e/xla/fragment_000.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s -input-value="f32=0" -input-value="5x1xf32=[1][-2][-3][4][-5]" -input-value="f32=1" -input-value="5x5xf32=[3.46499 -7.64389 -5.72249 5.98053 17.6892][2.9707 -6.20734 -4.25962 4.76055 13.8784][2.47641 -4.77079 -2.79675 3.54056 10.0675][1.98212 -3.33424 -1.33388 2.32058 6.25666][1.48783 -1.8977 0.12899 1.1006 2.4458]" -input-value="5xf32=0 0 0 0 0" | IreeFileCheck %s --implicit-check-not="[" --implicit-check-not="]"
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s -input-value="f32=0" -input-value="5x1xf32=[1][-2][-3][4][-5]" -input-value="f32=1" -input-value="5x5xf32=[3.46499 -7.64389 -5.72249 5.98053 17.6892][2.9707 -6.20734 -4.25962 4.76055 13.8784][2.47641 -4.77079 -2.79675 3.54056 10.0675][1.98212 -3.33424 -1.33388 2.32058 6.25666][1.48783 -1.8977 0.12899 1.1006 2.4458]" -input-value="5xf32=0 0 0 0 0" | IreeFileCheck %s --implicit-check-not="[" --implicit-check-not="]")
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s -input-value="f32=0" -input-value="5x1xf32=[1][-2][-3][4][-5]" -input-value="f32=1" -input-value="5x5xf32=[3.46499 -7.64389 -5.72249 5.98053 17.6892][2.9707 -6.20734 -4.25962 4.76055 13.8784][2.47641 -4.77079 -2.79675 3.54056 10.0675][1.98212 -3.33424 -1.33388 2.32058 6.25666][1.48783 -1.8977 0.12899 1.1006 2.4458]" -input-value="5xf32=0 0 0 0 0" | IreeFileCheck %s --implicit-check-not="[" --implicit-check-not="]"
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s -input-value="f32=0" -input-value="5x1xf32=[1][-2][-3][4][-5]" -input-value="f32=1" -input-value="5x5xf32=[3.46499 -7.64389 -5.72249 5.98053 17.6892][2.9707 -6.20734 -4.25962 4.76055 13.8784][2.47641 -4.77079 -2.79675 3.54056 10.0675][1.98212 -3.33424 -1.33388 2.32058 6.25666][1.48783 -1.8977 0.12899 1.1006 2.4458]" -input-value="5xf32=0 0 0 0 0" | IreeFileCheck %s --implicit-check-not="[" --implicit-check-not="]")
 
 // CHECK-LABEL: EXEC @main_entry_dispatch_3
 func @main_entry_dispatch_3(
diff --git a/test/e2e/xla/fullyconnected.mlir b/test/e2e/xla/fullyconnected.mlir
index 4053411..e243255 100644
--- a/test/e2e/xla/fullyconnected.mlir
+++ b/test/e2e/xla/fullyconnected.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 %s -iree-hal-target-backends=interpreter-bytecode -input-value="1x5xf32=1,-2,-3,4,-5" -input-value="1x5x3x1xf32=15,14,13,12,11,10,9,8,7,6,5,4,3,2,1" | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 %s -iree-hal-target-backends=vulkan-spirv -input-value="1x5xf32=1,-2,-3,4,-5" -input-value="1x5x3x1xf32=15,14,13,12,11,10,9,8,7,6,5,4,3,2,1" | IreeFileCheck %s)
+// RUN: iree-run-mlir %s -iree-hal-target-backends=interpreter-bytecode -input-value="1x5xf32=1,-2,-3,4,-5" -input-value="1x5x3x1xf32=15,14,13,12,11,10,9,8,7,6,5,4,3,2,1" | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir %s -iree-hal-target-backends=vulkan-spirv -input-value="1x5xf32=1,-2,-3,4,-5" -input-value="1x5x3x1xf32=15,14,13,12,11,10,9,8,7,6,5,4,3,2,1" | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @main
 func @main(%arg0: tensor<1x5xf32>, %arg1: tensor<1x5x3x1xf32>) -> tuple<tensor<5x1x5xf32>>
diff --git a/test/e2e/xla/gather.mlir b/test/e2e/xla/gather.mlir
index 26b7ac1..765f743 100644
--- a/test/e2e/xla/gather.mlir
+++ b/test/e2e/xla/gather.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s -input-value="5x1x5xi32=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25]" -input-value="i64=2" | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s -input-value="5x1x5xi32=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25]" -input-value="i64=2" | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s -input-value="5x1x5xi32=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25]" -input-value="i64=2" | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s -input-value="5x1x5xi32=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25]" -input-value="i64=2" | IreeFileCheck %s)
 
 module {
   // CHECK-LABEL: EXEC @foo
diff --git a/test/e2e/xla/gather_concat.mlir b/test/e2e/xla/gather_concat.mlir
index 32efe0d..753f8ac 100644
--- a/test/e2e/xla/gather_concat.mlir
+++ b/test/e2e/xla/gather_concat.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode --input-value="1x2xf32= 1 2" -input-value="2x1x4xf32= 5 6 7 8 9 10 11 12" -input-value="i64= 0" %s | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv -input-value="1x2xf32= 1 2" -input-value="2x1x4xf32= 5 6 7 8 9 10 11 12" -input-value="i64= 0" %s | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode --input-value="1x2xf32= 1 2" -input-value="2x1x4xf32= 5 6 7 8 9 10 11 12" -input-value="i64= 0" %s | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv -input-value="1x2xf32= 1 2" -input-value="2x1x4xf32= 5 6 7 8 9 10 11 12" -input-value="i64= 0" %s | IreeFileCheck %s)
 
 module {
   func @gather_concat(%arg0: tensor<1x2xf32>, %arg1: tensor<2x1x4xf32>, %arg2: tensor<i64>) -> tensor<1x6xf32> {
diff --git a/test/e2e/xla/gemm.mlir b/test/e2e/xla/gemm.mlir
index 92ef721..82614b5 100644
--- a/test/e2e/xla/gemm.mlir
+++ b/test/e2e/xla/gemm.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 %s -iree-hal-target-backends=interpreter-bytecode -input-value="5x3xf32=15,14,13,12,11,10,9,8,7,6,5,4,3,2,1" -input-value="3x5xf32=15,14,13,12,11,10,9,8,7,6,5,4,3,2,1" | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s -input-value="5x3xf32=15,14,13,12,11,10,9,8,7,6,5,4,3,2,1" -input-value="3x5xf32=15,14,13,12,11,10,9,8,7,6,5,4,3,2,1" | IreeFileCheck %s)
+// RUN: iree-run-mlir %s -iree-hal-target-backends=interpreter-bytecode -input-value="5x3xf32=15,14,13,12,11,10,9,8,7,6,5,4,3,2,1" -input-value="3x5xf32=15,14,13,12,11,10,9,8,7,6,5,4,3,2,1" | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s -input-value="5x3xf32=15,14,13,12,11,10,9,8,7,6,5,4,3,2,1" -input-value="3x5xf32=15,14,13,12,11,10,9,8,7,6,5,4,3,2,1" | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @main
 func @main(%arg0: tensor<5x3xf32>, %arg1: tensor<3x5xf32>) -> tensor<5x5xf32>
diff --git a/test/e2e/xla/globals.mlir b/test/e2e/xla/globals.mlir
index 726f293..9eafdc3 100644
--- a/test/e2e/xla/globals.mlir
+++ b/test/e2e/xla/globals.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s | IreeFileCheck %s)
 
 module {
   flow.variable @counter mutable dense<2.0> : tensor<f32>
diff --git a/test/e2e/xla/load_i8.mlir b/test/e2e/xla/load_i8.mlir
index d129844..22801f9 100644
--- a/test/e2e/xla/load_i8.mlir
+++ b/test/e2e/xla/load_i8.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s -input-value="17xi8= 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17" | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s -input-value="17xi8= 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17" | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s -input-value="17xi8= 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17" | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s -input-value="17xi8= 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17" | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @load_i8
 func @load_i8(%arg : tensor<17xi8>) -> tensor<17xi32> {
diff --git a/test/e2e/xla/log.mlir b/test/e2e/xla/log.mlir
index 989ec9d..c388ae3 100644
--- a/test/e2e/xla/log.mlir
+++ b/test/e2e/xla/log.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
 
 // CHECK-LABEL: EXEC @tensor
 func @tensor() -> tensor<4xf32> {
diff --git a/test/e2e/xla/max_float.mlir b/test/e2e/xla/max_float.mlir
index df36dae..7bf0081 100644
--- a/test/e2e/xla/max_float.mlir
+++ b/test/e2e/xla/max_float.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
 
 // CHECK-LABEL: EXEC @tensor
 func @tensor() -> tensor<4xf32> {
diff --git a/test/e2e/xla/max_int.mlir b/test/e2e/xla/max_int.mlir
index a9299f9..bd0caba 100644
--- a/test/e2e/xla/max_int.mlir
+++ b/test/e2e/xla/max_int.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
 
 // CHECK-LABEL: EXEC @tensor
 func @tensor() -> tensor<4xi32> {
diff --git a/test/e2e/xla/min_float.mlir b/test/e2e/xla/min_float.mlir
index df36dae..7bf0081 100644
--- a/test/e2e/xla/min_float.mlir
+++ b/test/e2e/xla/min_float.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
 
 // CHECK-LABEL: EXEC @tensor
 func @tensor() -> tensor<4xf32> {
diff --git a/test/e2e/xla/min_int.mlir b/test/e2e/xla/min_int.mlir
index 1e6f8d0..c1da3c7 100644
--- a/test/e2e/xla/min_int.mlir
+++ b/test/e2e/xla/min_int.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
 
 // CHECK-LABEL: EXEC @tensor
 func @tensor() -> tensor<4xi32> {
diff --git a/test/e2e/xla/mnist.mlir b/test/e2e/xla/mnist.mlir
index fc848fe..c4f760d 100644
--- a/test/e2e/xla/mnist.mlir
+++ b/test/e2e/xla/mnist.mlir
@@ -1,7 +1,7 @@
 // MNIST model with placeholder weights, for translation testing.
 
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s -input-value="1x28x28x1xf32" | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s -input-value="1x28x28x1xf32" | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s -input-value="1x28x28x1xf32" | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s -input-value="1x28x28x1xf32" | IreeFileCheck %s)
 
 module {
   // CHECK-LABEL: EXEC @main
diff --git a/test/e2e/xla/pad.mlir b/test/e2e/xla/pad.mlir
index 96428ff..943ccd4 100644
--- a/test/e2e/xla/pad.mlir
+++ b/test/e2e/xla/pad.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s -input-value="2x3xi32=[1 2 3 4 5 6]" | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s -input-value="2x3xi32=[1 2 3 4 5 6]" | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s -input-value="2x3xi32=[1 2 3 4 5 6]" | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s -input-value="2x3xi32=[1 2 3 4 5 6]" | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @pad
 func @pad(%0: tensor<2x3xi32>) -> tensor<4x13xi32>
diff --git a/test/e2e/xla/reduce_float.mlir b/test/e2e/xla/reduce_float.mlir
index 30b34fe..55de379 100644
--- a/test/e2e/xla/reduce_float.mlir
+++ b/test/e2e/xla/reduce_float.mlir
@@ -1,6 +1,6 @@
-// RUN: iree-run-mlir2 %s -iree-hal-target-backends=interpreter-bytecode | IreeFileCheck %s
+// RUN: iree-run-mlir %s -iree-hal-target-backends=interpreter-bytecode | IreeFileCheck %s
 // TODO(b/142903911): figure out swiftshader+asan crash:
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 %s -iree-hal-target-backends=vulkan-spirv --run=false)
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir %s -iree-hal-target-backends=vulkan-spirv --run=false)
 
 // Float sum values from [1.0, 10.0]
 // CHECK-LABEL: EXEC @reduce_sum_1x10xf32
diff --git a/test/e2e/xla/reduce_int.mlir b/test/e2e/xla/reduce_int.mlir
index d99e479..07eaeb8 100644
--- a/test/e2e/xla/reduce_int.mlir
+++ b/test/e2e/xla/reduce_int.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
 
 // Int sum values from [1, 10]
 // CHECK-LABEL: EXEC @reduce_sum_1x10xi32
diff --git a/test/e2e/xla/rem.mlir b/test/e2e/xla/rem.mlir
index 6dfa46d..167ac51 100644
--- a/test/e2e/xla/rem.mlir
+++ b/test/e2e/xla/rem.mlir
@@ -1,4 +1,4 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
 
 // CHECK-LABEL: EXEC @scalar
 func @scalar() -> tensor<f32> {
diff --git a/test/e2e/xla/reshape.mlir b/test/e2e/xla/reshape.mlir
index 46371c0..9c9b9b7 100644
--- a/test/e2e/xla/reshape.mlir
+++ b/test/e2e/xla/reshape.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s -input-value="12xf32=[1 2 3 4 5 6 7 8 9 10 11 12]" | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s -input-value="12xf32=[1 2 3 4 5 6 7 8 9 10 11 12]" | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s -input-value="12xf32=[1 2 3 4 5 6 7 8 9 10 11 12]" | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s -input-value="12xf32=[1 2 3 4 5 6 7 8 9 10 11 12]" | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @reshape_1D_2D
 func @reshape_1D_2D(%arg : tensor<12xf32>) -> tensor<3x4xf32> {
diff --git a/test/e2e/xla/reshape_adddims.mlir b/test/e2e/xla/reshape_adddims.mlir
index ff4112d..c0e8657 100644
--- a/test/e2e/xla/reshape_adddims.mlir
+++ b/test/e2e/xla/reshape_adddims.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s -input-value="2x6xf32= 1 2 3 4 5 6 7 8 9 10 11 12" | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s -input-value="2x6xf32= 1 2 3 4 5 6 7 8 9 10 11 12" | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s -input-value="2x6xf32= 1 2 3 4 5 6 7 8 9 10 11 12" | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s -input-value="2x6xf32= 1 2 3 4 5 6 7 8 9 10 11 12" | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @reshape_3D_2D
 func @reshape_3D_2D(%arg : tensor<2x6xf32>) -> tensor<2x1x6xf32> {
diff --git a/test/e2e/xla/reshape_dropdims.mlir b/test/e2e/xla/reshape_dropdims.mlir
index 5f110eb..923c4d4 100644
--- a/test/e2e/xla/reshape_dropdims.mlir
+++ b/test/e2e/xla/reshape_dropdims.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s -input-value="2x1x6xf32= 1 2 3 4 5 6 7 8 9 10 11 12" | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s -input-value="2x1x6xf32= 1 2 3 4 5 6 7 8 9 10 11 12" | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s -input-value="2x1x6xf32= 1 2 3 4 5 6 7 8 9 10 11 12" | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s -input-value="2x1x6xf32= 1 2 3 4 5 6 7 8 9 10 11 12" | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @reshape_3D_1D
 func @reshape_3D_1D(%arg : tensor<2x1x6xf32>) -> tensor<2x6xf32> {
diff --git a/test/e2e/xla/reverse.mlir b/test/e2e/xla/reverse.mlir
index 2486608..c522a33 100644
--- a/test/e2e/xla/reverse.mlir
+++ b/test/e2e/xla/reverse.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @xla_reverse
 func @xla_reverse () -> (tensor<2x3xf32>, tensor <2x3xf32>, tensor <2x3xf32>) {
diff --git a/test/e2e/xla/rsqrt.mlir b/test/e2e/xla/rsqrt.mlir
index fcba71d..f4207d6 100644
--- a/test/e2e/xla/rsqrt.mlir
+++ b/test/e2e/xla/rsqrt.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @tensor
 func @tensor() -> tensor<4xf32> {
diff --git a/test/e2e/xla/select.mlir b/test/e2e/xla/select.mlir
index e57d8d5..eea55f2 100644
--- a/test/e2e/xla/select.mlir
+++ b/test/e2e/xla/select.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s -input-value="4xi8=[1 0 200 0]" | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s -input-value="4xi8=[1 0 200 0]" | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s -input-value="4xi8=[1 0 200 0]" | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s -input-value="4xi8=[1 0 200 0]" | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @select
 func @select(%cond : tensor<4xi1>) -> tensor<4xf32> {
diff --git a/test/e2e/xla/slice.mlir b/test/e2e/xla/slice.mlir
index 5fe5692..4790f72 100644
--- a/test/e2e/xla/slice.mlir
+++ b/test/e2e/xla/slice.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s -input-value="3x4xf32= 1 2 3 4 5 6 7 8 9 10 11 12" | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s -input-value="3x4xf32= 1 2 3 4 5 6 7 8 9 10 11 12" | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s -input-value="3x4xf32= 1 2 3 4 5 6 7 8 9 10 11 12" | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s -input-value="3x4xf32= 1 2 3 4 5 6 7 8 9 10 11 12" | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @slice_whole_buffer
 func @slice_whole_buffer(%arg : tensor<3x4xf32>) -> tensor<3x4xf32> {
diff --git a/test/e2e/xla/sqrt.mlir b/test/e2e/xla/sqrt.mlir
index b2e9263..da98e7c 100644
--- a/test/e2e/xla/sqrt.mlir
+++ b/test/e2e/xla/sqrt.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @tensor
 func @tensor() -> tensor<4xf32> {
diff --git a/test/e2e/xla/store_i8.mlir b/test/e2e/xla/store_i8.mlir
index b93f621..d451bc6 100644
--- a/test/e2e/xla/store_i8.mlir
+++ b/test/e2e/xla/store_i8.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s -input-value="17xi32=-8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8" | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s -input-value="17xi32=-8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8" | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s -input-value="17xi32=-8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8" | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s -input-value="17xi32=-8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8" | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @store_i8
 func @store_i8(%arg : tensor<17xi32>) -> tensor<17xi8> {
diff --git a/test/e2e/xla/through_std.mlir b/test/e2e/xla/through_std.mlir
index 7af1b82..665effe 100644
--- a/test/e2e/xla/through_std.mlir
+++ b/test/e2e/xla/through_std.mlir
@@ -1,5 +1,5 @@
-// RUN: iree-run-mlir2 -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 -iree-hal-target-backends=vulkan-spirv %s | IreeFileCheck %s)
+// RUN: iree-run-mlir -iree-hal-target-backends=interpreter-bytecode %s | IreeFileCheck %s
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir -iree-hal-target-backends=vulkan-spirv %s | IreeFileCheck %s)
 
 // CHECK-LABEL: EXEC @xla_through_stdops
 func @xla_through_stdops () -> (tensor<f32>, tensor<f32>) {
diff --git a/test/e2e/xla/unidirectional_lstm.mlir b/test/e2e/xla/unidirectional_lstm.mlir
index 79dc3b5..59aff4e 100644
--- a/test/e2e/xla/unidirectional_lstm.mlir
+++ b/test/e2e/xla/unidirectional_lstm.mlir
@@ -1,6 +1,6 @@
 // An example LSTM exported from a python reference model with dummy weights.
 
-// RUN: iree-run-mlir2 %s -iree-hal-target-backends=interpreter-bytecode -input-value="1x5xf32=[0 1 0 3 4]" -input-value="1x5x2x2xf32=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]" -export-all=false | IreeFileCheck %s --implicit-check-not="[" --implicit-check-not="]"
+// RUN: iree-run-mlir %s -iree-hal-target-backends=interpreter-bytecode -input-value="1x5xf32=[0 1 0 3 4]" -input-value="1x5x2x2xf32=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]" -export-all=false | IreeFileCheck %s --implicit-check-not="[" --implicit-check-not="]"
 
 // Exported via the XLA HLO Importer
 // The resulting MLIR was modified by hand by changing all large constants to be
diff --git a/test/e2e/xla/while.mlir b/test/e2e/xla/while.mlir
index e786713..150cb01 100644
--- a/test/e2e/xla/while.mlir
+++ b/test/e2e/xla/while.mlir
@@ -1,7 +1,7 @@
 // A simple while loop example.
 
-// RUN: iree-run-mlir2 %s -iree-hal-target-backends=interpreter-bytecode -input-value="f32=[1]" -input-value="f32=[3]" --export-all=false | IreeFileCheck %s --implicit-check-not="[" --implicit-check-not="]"
-// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir2 %s -iree-hal-target-backends=vulkan-spirv -input-value="f32=[1]" -input-value="f32=[3]" --export-all=false | IreeFileCheck %s --implicit-check-not="[" --implicit-check-not="]")
+// RUN: iree-run-mlir %s -iree-hal-target-backends=interpreter-bytecode -input-value="f32=[1]" -input-value="f32=[3]" --export-all=false | IreeFileCheck %s --implicit-check-not="[" --implicit-check-not="]"
+// RUN: [[ $IREE_VULKAN_DISABLE == 1 ]] || (iree-run-mlir %s -iree-hal-target-backends=vulkan-spirv -input-value="f32=[1]" -input-value="f32=[3]" --export-all=false | IreeFileCheck %s --implicit-check-not="[" --implicit-check-not="]")
 
 // CHECK-LABEL: EXEC @main
 func @main(%arg0: tensor<f32>, %arg1: tensor<f32>) -> tensor<f32> attributes { iree.module.export }  {
