Cleaning up unused dawn HAL backend and legacy shape/shaped buffer print/parsing

diff --git a/.bazelignore b/.bazelignore
index 0cdaee2..743cde4 100644
--- a/.bazelignore
+++ b/.bazelignore
@@ -22,10 +22,6 @@
 third_party
 build_tools/bazel/third_party_import/llvm-project/overlay
 
-# TODO(scotttodd): enable when Dawn HAL implementation is functional
-iree/hal/dawn
-iree/tools/web
-
 # TODO: enable this when Java bindings are wired up.
 bindings/java
 bindings/javatests
diff --git a/build_tools/bazel_to_cmake/bazel_to_cmake_converter.py b/build_tools/bazel_to_cmake/bazel_to_cmake_converter.py
index 112bacc..34e09a8 100644
--- a/build_tools/bazel_to_cmake/bazel_to_cmake_converter.py
+++ b/build_tools/bazel_to_cmake/bazel_to_cmake_converter.py
@@ -43,8 +43,6 @@
     self.FLATBUFFER_SUPPORTS_REFLECTIONS = False
     self.PLATFORM_VULKAN_LOADER_COPTS = []
     self.IREE_DRIVER_MODULES = [
-        # TODO(b/142004903): enable when Dawn HAL implementation is functional
-        # "//iree/hal/dawn:dawn_driver_module",
         "//iree/hal/vmla:vmla_driver_module",
         "//iree/hal/vulkan:vulkan_driver_module",
         "//iree/hal/llvmjit:llvmjit_driver_module",
diff --git a/iree/base/BUILD b/iree/base/BUILD
index 375fab2..b8c81ed 100644
--- a/iree/base/BUILD
+++ b/iree/base/BUILD
@@ -112,35 +112,6 @@
 )
 
 cc_library(
-    name = "buffer_string_util",
-    srcs = ["buffer_string_util.cc"],
-    hdrs = ["buffer_string_util.h"],
-    deps = [
-        ":memory",
-        ":shape",
-        ":source_location",
-        ":status",
-        "@com_google_absl//absl/container:flat_hash_map",
-        "@com_google_absl//absl/strings",
-        "@com_google_absl//absl/types:optional",
-        "@com_google_absl//absl/types:span",
-    ],
-)
-
-cc_test(
-    name = "buffer_string_util_test",
-    srcs = ["buffer_string_util_test.cc"],
-    deps = [
-        ":buffer_string_util",
-        ":memory",
-        ":status",
-        ":status_matchers",
-        "//iree/testing:gtest_main",
-        "@com_google_absl//absl/strings",
-    ],
-)
-
-cc_library(
     name = "dynamic_library",
     srcs = [
         "dynamic_library_posix.cc",
@@ -398,76 +369,6 @@
 )
 
 cc_library(
-    name = "shape",
-    srcs = ["shape.cc"],
-    hdrs = ["shape.h"],
-    deps = [
-        ":logging",
-        ":source_location",
-        ":status",
-        "@com_google_absl//absl/meta:type_traits",
-        "@com_google_absl//absl/strings",
-        "@com_google_absl//absl/types:span",
-    ],
-)
-
-cc_test(
-    name = "shape_test",
-    srcs = ["shape_test.cc"],
-    deps = [
-        ":shape",
-        ":status",
-        ":status_matchers",
-        "//iree/testing:gtest_main",
-    ],
-)
-
-cc_library(
-    name = "shaped_buffer",
-    hdrs = ["shaped_buffer.h"],
-    deps = [
-        ":logging",
-        ":memory",
-        ":shape",
-        "@com_google_absl//absl/container:fixed_array",
-        "@com_google_absl//absl/types:span",
-    ],
-)
-
-cc_library(
-    name = "shaped_buffer_string_util",
-    srcs = ["shaped_buffer_string_util.cc"],
-    hdrs = ["shaped_buffer_string_util.h"],
-    deps = [
-        ":buffer_string_util",
-        ":memory",
-        ":shape",
-        ":shaped_buffer",
-        ":source_location",
-        ":status",
-        "@com_google_absl//absl/container:fixed_array",
-        "@com_google_absl//absl/strings",
-        "@com_google_absl//absl/types:optional",
-        "@com_google_absl//absl/types:span",
-    ],
-)
-
-cc_test(
-    name = "shaped_buffer_string_util_test",
-    srcs = ["shaped_buffer_string_util_test.cc"],
-    deps = [
-        ":buffer_string_util",
-        ":memory",
-        ":shaped_buffer",
-        ":shaped_buffer_string_util",
-        ":status",
-        ":status_matchers",
-        "//iree/testing:gtest_main",
-        "@com_google_absl//absl/strings",
-    ],
-)
-
-cc_library(
     name = "signature_mangle",
     srcs = ["signature_mangle.cc"],
     hdrs = ["signature_mangle.h"],
diff --git a/iree/base/CMakeLists.txt b/iree/base/CMakeLists.txt
index 64e0b5e..3a6ca54 100644
--- a/iree/base/CMakeLists.txt
+++ b/iree/base/CMakeLists.txt
@@ -120,39 +120,6 @@
     iree::testing::gtest_main
 )
 
-iree_cc_library(
-  NAME
-    buffer_string_util
-  HDRS
-    "buffer_string_util.h"
-  SRCS
-    "buffer_string_util.cc"
-  DEPS
-    ::memory
-    ::shape
-    ::source_location
-    ::status
-    absl::flat_hash_map
-    absl::optional
-    absl::span
-    absl::strings
-  PUBLIC
-)
-
-iree_cc_test(
-  NAME
-    buffer_string_util_test
-  SRCS
-    "buffer_string_util_test.cc"
-  DEPS
-    ::buffer_string_util
-    ::memory
-    ::status
-    ::status_matchers
-    absl::strings
-    iree::testing::gtest_main
-)
-
 iree_select_compiler_opts(_DYNAMIC_LIBRARY_LINKOPTS
   CLANG_OR_GCC
     "-ldl"
@@ -470,86 +437,6 @@
 
 iree_cc_library(
   NAME
-    shape
-  HDRS
-    "shape.h"
-  SRCS
-    "shape.cc"
-  DEPS
-    ::logging
-    ::source_location
-    ::status
-    absl::span
-    absl::strings
-    absl::type_traits
-  PUBLIC
-)
-
-iree_cc_test(
-  NAME
-    shape_test
-  SRCS
-    "shape_test.cc"
-  DEPS
-    ::shape
-    ::status
-    ::status_matchers
-    iree::testing::gtest_main
-)
-
-iree_cc_library(
-  NAME
-    shaped_buffer
-  HDRS
-    "shaped_buffer.h"
-  DEPS
-    ::logging
-    ::memory
-    ::shape
-    absl::fixed_array
-    absl::span
-  PUBLIC
-)
-
-iree_cc_library(
-  NAME
-    shaped_buffer_string_util
-  HDRS
-    "shaped_buffer_string_util.h"
-  SRCS
-    "shaped_buffer_string_util.cc"
-  DEPS
-    ::buffer_string_util
-    ::memory
-    ::shape
-    ::shaped_buffer
-    ::source_location
-    ::status
-    absl::fixed_array
-    absl::optional
-    absl::span
-    absl::strings
-  PUBLIC
-)
-
-iree_cc_test(
-  NAME
-    shaped_buffer_string_util_test
-  SRCS
-    "shaped_buffer_string_util_test.cc"
-  DEPS
-    ::buffer_string_util
-    ::memory
-    ::shaped_buffer
-    ::shaped_buffer_string_util
-    ::status
-    ::status_matchers
-    absl::strings
-    iree::testing::gtest_main
-)
-
-iree_cc_library(
-  NAME
     signature_mangle
   HDRS
     "signature_mangle.h"
diff --git a/iree/base/buffer_string_util.cc b/iree/base/buffer_string_util.cc
deleted file mode 100644
index 5317349..0000000
--- a/iree/base/buffer_string_util.cc
+++ /dev/null
@@ -1,563 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "iree/base/buffer_string_util.h"
-
-#include <functional>
-#include <sstream>
-#include <string>
-#include <type_traits>
-
-#include "absl/container/flat_hash_map.h"
-#include "absl/strings/ascii.h"
-#include "absl/strings/numbers.h"
-#include "absl/strings/str_join.h"
-#include "absl/strings/str_split.h"
-#include "absl/strings/string_view.h"
-#include "absl/strings/strip.h"
-#include "absl/types/optional.h"
-#include "iree/base/memory.h"
-#include "iree/base/source_location.h"
-#include "iree/base/status.h"
-
-namespace iree {
-
-namespace {
-
-/* clang-format off */
-constexpr char kHexValue[256] = {
-    0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0,  1,  2,  3,  4,  5,  6, 7, 8, 9, 0, 0, 0, 0, 0, 0,  // '0'..'9'
-    0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 'A'..'F'
-    0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 'a'..'f'
-    0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0,  0,  0,  0,  0,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-/* clang-format on */
-
-template <typename T>
-void HexStringToBytes(const char* from, T to, ptrdiff_t num) {
-  for (int i = 0; i < num; i++) {
-    to[i] = (kHexValue[from[i * 2] & 0xFF] << 4) +
-            (kHexValue[from[i * 2 + 1] & 0xFF]);
-  }
-}
-
-constexpr char kHexTable[513] =
-    "000102030405060708090a0b0c0d0e0f"
-    "101112131415161718191a1b1c1d1e1f"
-    "202122232425262728292a2b2c2d2e2f"
-    "303132333435363738393a3b3c3d3e3f"
-    "404142434445464748494a4b4c4d4e4f"
-    "505152535455565758595a5b5c5d5e5f"
-    "606162636465666768696a6b6c6d6e6f"
-    "707172737475767778797a7b7c7d7e7f"
-    "808182838485868788898a8b8c8d8e8f"
-    "909192939495969798999a9b9c9d9e9f"
-    "a0a1a2a3a4a5a6a7a8a9aaabacadaeaf"
-    "b0b1b2b3b4b5b6b7b8b9babbbcbdbebf"
-    "c0c1c2c3c4c5c6c7c8c9cacbcccdcecf"
-    "d0d1d2d3d4d5d6d7d8d9dadbdcdddedf"
-    "e0e1e2e3e4e5e6e7e8e9eaebecedeeef"
-    "f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff";
-
-// Like the absl method, but works in-place.
-template <typename T>
-void BytesToHexString(const unsigned char* src, T dest, ptrdiff_t num) {
-  auto dest_ptr = &dest[0];
-  for (auto src_ptr = src; src_ptr != (src + num); ++src_ptr, dest_ptr += 2) {
-    const char* hex_p = &kHexTable[*src_ptr * 2];
-    std::copy(hex_p, hex_p + 2, dest_ptr);
-  }
-}
-
-// Returns true if the given type is represented as binary hex data.
-bool IsBinaryType(absl::string_view type_str) {
-  return !type_str.empty() && absl::ascii_isdigit(type_str[0]);
-}
-
-// Parses binary hex data.
-Status ParseBinaryData(absl::string_view data_str, absl::Span<uint8_t> output) {
-  data_str = absl::StripAsciiWhitespace(data_str);
-  size_t dst_i = 0;
-  size_t src_i = 0;
-  while (src_i < data_str.size() && dst_i < output.size()) {
-    char c = data_str[src_i];
-    if (absl::ascii_isspace(c) || c == ',') {
-      ++src_i;
-      continue;
-    }
-    if (src_i + 1 >= data_str.size()) {
-      return InvalidArgumentErrorBuilder(IREE_LOC)
-             << "Invalid input hex data (offset=" << src_i << ")";
-    }
-    HexStringToBytes(data_str.data() + src_i, output.data() + dst_i, 1);
-    src_i += 2;
-    ++dst_i;
-  }
-  if (dst_i < output.size()) {
-    return InvalidArgumentErrorBuilder(IREE_LOC)
-           << "Too few elements to fill type; expected " << output.size()
-           << " but only read " << dst_i;
-  } else if (data_str.size() - src_i > 0) {
-    return InvalidArgumentErrorBuilder(IREE_LOC)
-           << "Input data string contains more elements than the underlying "
-              "buffer ("
-           << output.size() << "): " << data_str;
-  }
-  return OkStatus();
-}
-
-template <typename ElementType, typename Enabled = void>
-struct SimpleStrToValue {
-  absl::optional<ElementType> operator()(absl::string_view text) const = delete;
-};
-
-template <typename IntegerType>
-struct SimpleStrToValue<
-    IntegerType,
-    typename std::enable_if<(sizeof(IntegerType) < 4), void>::type> {
-  absl::optional<IntegerType> operator()(absl::string_view text) const {
-    int32_t value;
-    return absl::SimpleAtoi(text, &value) ? absl::optional<IntegerType>{value}
-                                          : absl::nullopt;
-  }
-};
-
-template <typename IntegerType>
-struct SimpleStrToValue<
-    IntegerType,
-    typename std::enable_if<(sizeof(IntegerType) >= 4), void>::type> {
-  absl::optional<IntegerType> operator()(absl::string_view text) const {
-    IntegerType value;
-    return absl::SimpleAtoi(text, &value) ? absl::optional<IntegerType>{value}
-                                          : absl::nullopt;
-  }
-};
-
-template <>
-struct SimpleStrToValue<float, void> {
-  absl::optional<float> operator()(absl::string_view text) const {
-    float value;
-    return absl::SimpleAtof(text, &value) ? absl::optional<float>{value}
-                                          : absl::nullopt;
-  }
-};
-
-template <>
-struct SimpleStrToValue<double, void> {
-  absl::optional<double> operator()(absl::string_view text) const {
-    double value;
-    return absl::SimpleAtod(text, &value) ? absl::optional<double>{value}
-                                          : absl::nullopt;
-  }
-};
-
-template <typename T>
-Status ParseNumericalDataElement(absl::string_view data_str, size_t token_start,
-                                 size_t token_end, absl::Span<T> output,
-                                 int dst_i) {
-  if (dst_i >= output.size()) {
-    return InvalidArgumentErrorBuilder(IREE_LOC)
-           << "Input data string contains more elements than the underlying "
-              "buffer ("
-           << output.size() << "): " << data_str;
-  }
-  auto element_str = data_str.substr(token_start, token_end - token_start + 1);
-  auto element = SimpleStrToValue<T>()(element_str);
-  if (!element.has_value()) {
-    return InvalidArgumentErrorBuilder(IREE_LOC)
-           << "Unable to parse element " << dst_i << " = '" << element_str
-           << "'";
-  }
-  output[dst_i] = element.value();
-  return OkStatus();
-}
-
-template <typename T>
-Status ParseNumericalDataAsType(absl::string_view data_str,
-                                absl::Span<uint8_t> output) {
-  auto cast_output = ReinterpretSpan<T>(output);
-  size_t src_i = 0;
-  size_t dst_i = 0;
-  size_t token_start = std::string::npos;
-  while (src_i < data_str.size()) {
-    char c = data_str[src_i++];
-    bool is_separator =
-        absl::ascii_isspace(c) || c == ',' || c == '[' || c == ']';
-    if (token_start == std::string::npos) {
-      if (!is_separator) {
-        token_start = src_i - 1;
-      }
-      continue;
-    } else if (token_start != std::string::npos && !is_separator) {
-      continue;
-    }
-    RETURN_IF_ERROR(ParseNumericalDataElement<T>(
-        data_str, token_start, src_i - 2, cast_output, dst_i++));
-    token_start = std::string::npos;
-  }
-  if (token_start != std::string::npos) {
-    RETURN_IF_ERROR(ParseNumericalDataElement<T>(
-        data_str, token_start, data_str.size() - 1, cast_output, dst_i++));
-  }
-  if (dst_i == 1 && cast_output.size() > 1) {
-    // Splat the single value we got to the entire tensor.
-    for (int i = 1; i < cast_output.size(); ++i) {
-      cast_output[i] = cast_output[0];
-    }
-  } else if (dst_i < cast_output.size()) {
-    return InvalidArgumentErrorBuilder(IREE_LOC)
-           << "Input data string contains fewer elements than the underlying "
-              "buffer (expected "
-           << cast_output.size() << ") " << data_str;
-  }
-  return OkStatus();
-}
-
-// Parses numerical data (ints, floats, etc) in some typed form.
-Status ParseNumericalData(absl::string_view type_str,
-                          absl::string_view data_str,
-                          absl::Span<uint8_t> output) {
-  if (type_str == "i8") {
-    return ParseNumericalDataAsType<int8_t>(data_str, output);
-  } else if (type_str == "u8") {
-    return ParseNumericalDataAsType<uint8_t>(data_str, output);
-  } else if (type_str == "i16") {
-    return ParseNumericalDataAsType<int16_t>(data_str, output);
-  } else if (type_str == "u16") {
-    return ParseNumericalDataAsType<uint16_t>(data_str, output);
-  } else if (type_str == "i32") {
-    return ParseNumericalDataAsType<int32_t>(data_str, output);
-  } else if (type_str == "u32") {
-    return ParseNumericalDataAsType<uint32_t>(data_str, output);
-  } else if (type_str == "i64") {
-    return ParseNumericalDataAsType<int64_t>(data_str, output);
-  } else if (type_str == "u64") {
-    return ParseNumericalDataAsType<uint64_t>(data_str, output);
-  } else if (type_str == "f32") {
-    return ParseNumericalDataAsType<float>(data_str, output);
-  } else if (type_str == "f64") {
-    return ParseNumericalDataAsType<double>(data_str, output);
-  } else {
-    return InvalidArgumentErrorBuilder(IREE_LOC)
-           << "Unsupported type: " << type_str;
-  }
-}
-
-template <typename T>
-void PrintElementList(const Shape& shape, absl::Span<const T> data,
-                      size_t* max_entries, std::ostream* stream) {
-  if (shape.empty()) {
-    // Scalar value.
-    PrintElementList({1}, data, max_entries, stream);
-    return;
-  } else if (shape.size() == 1) {
-    // Leaf dimension; output data.
-    size_t max_count = std::min(*max_entries, static_cast<size_t>(shape[0]));
-    *stream << absl::StrJoin(data.subspan(0, max_count), " ");
-    if (max_count < shape[0]) {
-      *stream << "...";
-    }
-    *max_entries -= max_count;
-  } else {
-    // Nested; recurse into next dimension.
-    Shape nested_shape = Shape(shape.subspan(1));
-    size_t length = nested_shape.element_count();
-    size_t offset = 0;
-    for (int i = 0; i < shape[0]; ++i) {
-      *stream << "[";
-      PrintElementList<T>(nested_shape, data.subspan(offset, length),
-                          max_entries, stream);
-      offset += length;
-      *stream << "]";
-    }
-  }
-}
-
-template <typename T>
-Status PrintNumericalDataToStreamAsType(const Shape& shape,
-                                        absl::Span<const uint8_t> contents,
-                                        size_t max_entries,
-                                        std::ostream* stream) {
-  auto cast_contents = ReinterpretSpan<T>(contents);
-  PrintElementList(shape, cast_contents, &max_entries, stream);
-  return OkStatus();
-}
-
-}  // namespace
-
-StatusOr<BufferDataPrintMode> ParseBufferDataPrintMode(absl::string_view str) {
-  if (str.empty()) {
-    return InvalidArgumentErrorBuilder(IREE_LOC)
-           << "Cannot get print mode of empty string";
-  }
-  switch (str[0]) {
-    case 'b':
-      return BufferDataPrintMode::kBinary;
-    case 'i':
-      return BufferDataPrintMode::kSignedInteger;
-    case 'u':
-      return BufferDataPrintMode::kUnsignedInteger;
-    case 'f':
-      return BufferDataPrintMode::kFloatingPoint;
-    default:
-      return InvalidArgumentErrorBuilder(IREE_LOC)
-             << "Unsupported output type '" << str << "'";
-  }
-}
-
-StatusOr<int> ParseBufferTypeElementSize(absl::string_view type_str) {
-  static const auto* const type_sizes =
-      new absl::flat_hash_map<absl::string_view, int>{
-          {"1", 1},   {"2", 2},   {"4", 4},   {"8", 8},   {"i8", 1},
-          {"u8", 1},  {"i16", 2}, {"u16", 2}, {"i32", 4}, {"u32", 4},
-          {"i64", 8}, {"u64", 8}, {"f32", 4}, {"f64", 8},
-      };
-  auto type_size = type_sizes->find(type_str);
-  if (type_size != type_sizes->end()) {
-    return type_size->second;
-  } else {
-    return InvalidArgumentErrorBuilder(IREE_LOC)
-           << "Unsupported type '" << type_str << "'";
-  }
-}
-
-StatusOr<std::string> MakeBufferTypeString(int element_size,
-                                           BufferDataPrintMode print_mode) {
-  if (element_size <= 0) {
-    return InvalidArgumentErrorBuilder(IREE_LOC)
-           << "Invalid element size '" << element_size << "'";
-  }
-  switch (print_mode) {
-    case BufferDataPrintMode::kBinary:
-      return absl::StrCat(element_size);
-    case BufferDataPrintMode::kSignedInteger:
-      return absl::StrCat("i", element_size * 8);
-    case BufferDataPrintMode::kUnsignedInteger:
-      return absl::StrCat("u", element_size * 8);
-    case BufferDataPrintMode::kFloatingPoint:
-      return absl::StrCat("f", element_size * 8);
-    default:
-      return InvalidArgumentErrorBuilder(IREE_LOC)
-             << "Unsupported print mode (" << static_cast<int>(print_mode)
-             << ")";
-  }
-}
-
-StatusOr<Shape> ParseShape(absl::string_view shape_str) {
-  if (shape_str.empty()) {
-    return Shape{};
-  }
-  std::vector<int> dims;
-  for (auto dim_str : absl::StrSplit(shape_str, 'x')) {
-    int dim_value = 0;
-    if (!absl::SimpleAtoi(dim_str, &dim_value)) {
-      return InvalidArgumentErrorBuilder(IREE_LOC)
-             << "Invalid shape dimension '" << dim_str
-             << "' while parsing shape '" << shape_str << "'";
-    }
-    if (dim_value < 0) {
-      return InvalidArgumentErrorBuilder(IREE_LOC)
-             << "Unsupported shape dimension '" << dim_str << "'";
-    }
-    dims.push_back(dim_value);
-  }
-  if (dims.size() > kMaxRank) {
-    return InvalidArgumentErrorBuilder(IREE_LOC)
-           << "Shape rank '" << dims.size() << "' exceeds maximum rank '"
-           << kMaxRank << "'";
-  }
-  return Shape{dims};
-}
-
-std::string PrintShapedTypeToString(const Shape& shape,
-                                    absl::string_view type_str) {
-  std::string result;
-  PrintShapedTypeToString(shape, type_str, &result);
-  return result;
-}
-
-void PrintShapedTypeToString(const Shape& shape, absl::string_view type_str,
-                             std::string* out_result) {
-  std::ostringstream stream;
-  PrintShapedTypeToStream(shape, type_str, &stream);
-  *out_result = stream.str();
-}
-
-void PrintShapedTypeToStream(const Shape& shape, absl::string_view type_str,
-                             std::ostream* stream) {
-  *stream << absl::StrJoin(shape.begin(), shape.end(), "x");
-  if (!shape.empty()) *stream << "x";
-  *stream << type_str;
-}
-
-// Prints binary hex data.
-StatusOr<std::string> PrintBinaryDataToString(
-    int element_size, absl::Span<const uint8_t> contents, size_t max_entries) {
-  std::string result;
-  RETURN_IF_ERROR(
-      PrintBinaryDataToString(element_size, contents, max_entries, &result));
-  return result;
-}
-
-Status PrintBinaryDataToString(int element_size,
-                               absl::Span<const uint8_t> contents,
-                               size_t max_entries, std::string* out_result) {
-  std::ostringstream stream;
-  RETURN_IF_ERROR(
-      PrintBinaryDataToStream(element_size, contents, max_entries, &stream));
-  *out_result = stream.str();
-  return OkStatus();
-}
-
-Status PrintBinaryDataToStream(int element_size,
-                               absl::Span<const uint8_t> contents,
-                               size_t max_entries, std::ostream* stream) {
-  // TODO(gcmn) Can we avoid this fiddly byte counting?
-  max_entries *= element_size;  // Counting bytes, but treat them as elements.
-  constexpr size_t hex_chars_per_byte = 2;
-  constexpr size_t max_bytes = sizeof(int64_t);
-  if (element_size != 1 && element_size != 2 && element_size != 4 &&
-      element_size != 8) {
-    return InvalidArgumentErrorBuilder(IREE_LOC)
-           << "Invalid element size '" << element_size
-           << "'; only '1', '2', '4' and '8' are supported";
-  }
-  if (contents.size() % element_size != 0) {
-    return InvalidArgumentErrorBuilder(IREE_LOC)
-           << "Element size '" << element_size
-           << "' doesn't divide contents size " << contents.size();
-  }
-  // Plus one char for the null terminator.
-  char hex_buffer[hex_chars_per_byte * max_bytes + 1] = {0};
-  for (size_t i = 0; i < std::min(max_entries, contents.size());
-       i += element_size) {
-    if (i > 0) *stream << " ";
-    BytesToHexString(contents.data() + i, hex_buffer, element_size);
-    *stream << hex_buffer;
-  }
-  if (contents.size() > max_entries) *stream << "...";
-  return OkStatus();
-}
-
-StatusOr<std::string> PrintNumericalDataToString(
-    const Shape& shape, absl::string_view type_str,
-    absl::Span<const uint8_t> contents, size_t max_entries) {
-  std::string result;
-  RETURN_IF_ERROR(PrintNumericalDataToString(shape, type_str, contents,
-                                             max_entries, &result));
-  return result;
-}
-
-Status PrintNumericalDataToString(const Shape& shape,
-                                  absl::string_view type_str,
-                                  absl::Span<const uint8_t> contents,
-                                  size_t max_entries, std::string* out_result) {
-  std::ostringstream stream;
-  RETURN_IF_ERROR(PrintNumericalDataToStream(shape, type_str, contents,
-                                             max_entries, &stream));
-  *out_result = stream.str();
-  return OkStatus();
-}
-
-// Prints numerical data (ints, floats, etc) from some typed form.
-Status PrintNumericalDataToStream(const Shape& shape,
-                                  absl::string_view type_str,
-                                  absl::Span<const uint8_t> contents,
-                                  size_t max_entries, std::ostream* stream) {
-  if (type_str == "i8") {
-    return PrintNumericalDataToStreamAsType<int8_t>(shape, contents,
-                                                    max_entries, stream);
-  } else if (type_str == "u8") {
-    return PrintNumericalDataToStreamAsType<uint8_t>(shape, contents,
-                                                     max_entries, stream);
-  } else if (type_str == "i16") {
-    return PrintNumericalDataToStreamAsType<int16_t>(shape, contents,
-                                                     max_entries, stream);
-  } else if (type_str == "u16") {
-    return PrintNumericalDataToStreamAsType<uint16_t>(shape, contents,
-                                                      max_entries, stream);
-  } else if (type_str == "i32") {
-    return PrintNumericalDataToStreamAsType<int32_t>(shape, contents,
-                                                     max_entries, stream);
-  } else if (type_str == "u32") {
-    return PrintNumericalDataToStreamAsType<uint32_t>(shape, contents,
-                                                      max_entries, stream);
-  } else if (type_str == "i64") {
-    return PrintNumericalDataToStreamAsType<int64_t>(shape, contents,
-                                                     max_entries, stream);
-  } else if (type_str == "u64") {
-    return PrintNumericalDataToStreamAsType<uint64_t>(shape, contents,
-                                                      max_entries, stream);
-  } else if (type_str == "f32") {
-    return PrintNumericalDataToStreamAsType<float>(shape, contents, max_entries,
-                                                   stream);
-  } else if (type_str == "f64") {
-    return PrintNumericalDataToStreamAsType<double>(shape, contents,
-                                                    max_entries, stream);
-  } else {
-    return InvalidArgumentErrorBuilder(IREE_LOC)
-           << "Unsupported type: " << type_str;
-  }
-}
-
-Status ParseBufferDataAsType(absl::string_view data_str,
-                             absl::string_view type_str,
-                             absl::Span<uint8_t> output) {
-  // Parse the data from the string right into the buffer.
-  if (IsBinaryType(type_str)) {
-    // Parse as binary hex.
-    return ParseBinaryData(data_str, output);
-  }
-  // Parse as some nicely formatted type.
-  return ParseNumericalData(type_str, data_str, output);
-}
-
-// static
-BufferStringParts BufferStringParts::ExtractFrom(
-    absl::string_view shaped_buf_str) {
-  BufferStringParts parts;
-  absl::string_view shape_and_type_str;
-  auto equal_index = shaped_buf_str.find('=');
-  if (equal_index == std::string::npos) {
-    // Treat a lack of = as defaulting the data to zeros.
-    shape_and_type_str = shaped_buf_str;
-  } else {
-    shape_and_type_str = shaped_buf_str.substr(0, equal_index);
-    parts.data_str = shaped_buf_str.substr(equal_index + 1);
-  }
-  auto last_x_index = shape_and_type_str.rfind('x');
-  if (last_x_index == std::string::npos) {
-    // Scalar.
-    parts.type_str = shape_and_type_str;
-  } else {
-    // Has a shape.
-    parts.shape_str = shape_and_type_str.substr(0, last_x_index);
-    parts.type_str = shape_and_type_str.substr(last_x_index + 1);
-  }
-  return parts;
-}
-
-}  // namespace iree
diff --git a/iree/base/buffer_string_util.h b/iree/base/buffer_string_util.h
deleted file mode 100644
index 62add6e..0000000
--- a/iree/base/buffer_string_util.h
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Utilities for working with strings defining buffers and associated shapes,
-// mostly useful for testing.
-//
-// The canonical shaped buffer string format is:
-//   [shape]x[type]=value,value,...
-// For example:
-//   2x2xi32=0,1,2,3
-// Characters like [] are optional and will be ignored during parsing:
-//   2x2xi32=[[0 1][2 3]]
-//
-// The type may be one of the following:
-// * 1/2/4/8 = 1/2/4/8 byte elements in binary hex format.
-// * i8/u8 = signed/unsigned 8-bit integers.
-// * i16/u16 = signed/unsigned 16-bit integers.
-// * i32/u32 = signed/unsigned 32-bit integers.
-// * i64/u64 = signed/unsigned 64-bit integers.
-// * f32 = 32-bit floating-point number.
-// * f64 = 64-bit floating-point number.
-
-#ifndef IREE_BASE_BUFFER_STRING_UTIL_H_
-#define IREE_BASE_BUFFER_STRING_UTIL_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <ostream>
-#include <string>
-
-#include "absl/strings/string_view.h"
-#include "absl/types/span.h"
-#include "iree/base/shape.h"
-#include "iree/base/status.h"
-
-namespace iree {
-
-// Defines how the elements within a buffer representation are interpreted
-// during printing.
-enum class BufferDataPrintMode {
-  // Interpret the data as if it were serialized bytes.
-  // In this mode no conversion is performed and the bytes in memory are printed
-  // as hex in groupings based on the element size. Shortened to 'b'.
-  kBinary,
-  // Interpret elements as signed integers; shortened to 'i'.
-  kSignedInteger,
-  // Interpret elements as unsigned integers; shortened to 'u'.
-  kUnsignedInteger,
-  // Interpret elements as floating-point values; shortened to 'f'.
-  kFloatingPoint,
-};
-
-// Returns the BufferDataPrintMode based on the shortened char in |str|.
-StatusOr<BufferDataPrintMode> ParseBufferDataPrintMode(absl::string_view str);
-
-// Returns the size, in bytes, of the given type.
-StatusOr<int> ParseBufferTypeElementSize(absl::string_view type_str);
-
-// Returns the canonical representation of a type based on its size in bytes and
-// the specified printing mode. For example, with a size of 4 and a printing
-// mode of kFloatingPoint it returns "f32".
-StatusOr<std::string> MakeBufferTypeString(int element_size,
-                                           BufferDataPrintMode print_mode);
-
-// Returns a Shape parsed from the given NxMx... string.
-StatusOr<Shape> ParseShape(absl::string_view shape_str);
-
-// Prints a shape and element type, e.g. 2x3xf32
-std::string PrintShapedTypeToString(const Shape& shape,
-                                    absl::string_view type_str);
-void PrintShapedTypeToString(const Shape& shape, absl::string_view type_str,
-                             std::string* out_result);
-void PrintShapedTypeToStream(const Shape& shape, absl::string_view type_str,
-                             std::ostream* stream);
-
-// Prints the given bytes as binary hex data.
-// Bytes are grouped as elements according to the |element_size| in bytes. If
-// the size of |contents| exceeds |max_entries|, the output will be truncated to
-// that many entries followed by an ellipses.
-StatusOr<std::string> PrintBinaryDataToString(
-    int element_size, absl::Span<const uint8_t> contents, size_t max_entries);
-Status PrintBinaryDataToString(int element_size,
-                               absl::Span<const uint8_t> contents,
-                               size_t max_entries, std::string* out_result);
-Status PrintBinaryDataToStream(int element_size,
-                               absl::Span<const uint8_t> contents,
-                               size_t max_entries, std::ostream* stream);
-
-// Prints a list of elements in a format indicated by the given shape.
-// For example: [1 2 3][4 5 6] for a shape of 2x3.
-// The bytes in contents will be interpreted as the type specified by
-// |type_str|. If the size of |contents| exceeds |max_entries|, the output will
-// be truncated to that many entries followed by an ellipses.
-StatusOr<std::string> PrintNumericalDataToString(
-    const Shape& shape, absl::string_view type_str,
-    absl::Span<const uint8_t> contents, size_t max_entries);
-Status PrintNumericalDataToString(const Shape& shape,
-                                  absl::string_view type_str,
-                                  absl::Span<const uint8_t> contents,
-                                  size_t max_entries, std::string* out_result);
-Status PrintNumericalDataToStream(const Shape& shape,
-                                  absl::string_view type_str,
-                                  absl::Span<const uint8_t> contents,
-                                  size_t max_entries, std::ostream* stream);
-
-// Parses |data_str| as elements of the type specified by |type_str| and writes
-// them into |output|.
-Status ParseBufferDataAsType(absl::string_view data_str,
-                             absl::string_view type_str,
-                             absl::Span<uint8_t> output);
-
-// A non-owning struct for referencing parts of a string that describes a shaped
-// buffer type, e.g. 1x2x3xf32=1 2 3 4 5 6
-struct BufferStringParts {
-  // The part of the string corresponding to the shape, e.g. 1x2x3.
-  absl::string_view shape_str;
-  // The part of the string corresponding to the type, e.g. f32
-  absl::string_view type_str;
-  // The part of the string corresponding to the buffer data, e.g. 1 2 3 4 5 6
-  absl::string_view data_str;
-
-  // Extract the corresponding string parts from a string describing the entire
-  // buffer.
-  static BufferStringParts ExtractFrom(absl::string_view shaped_buf_str);
-};
-
-}  // namespace iree
-
-#endif  // IREE_BASE_BUFFER_STRING_UTIL_H_
diff --git a/iree/base/buffer_string_util_test.cc b/iree/base/buffer_string_util_test.cc
deleted file mode 100644
index 77d1fac..0000000
--- a/iree/base/buffer_string_util_test.cc
+++ /dev/null
@@ -1,221 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "iree/base/buffer_string_util.h"
-
-#include "absl/strings/string_view.h"
-#include "iree/base/memory.h"
-#include "iree/base/status.h"
-#include "iree/base/status_matchers.h"
-#include "iree/testing/gtest.h"
-
-namespace iree {
-namespace {
-
-using ::iree::testing::status::IsOkAndHolds;
-using ::iree::testing::status::StatusIs;
-using ::testing::ElementsAre;
-using ::testing::Eq;
-
-TEST(BufferStringUtilTest, ParseBufferDataPrintMode) {
-  EXPECT_THAT(ParseBufferDataPrintMode("b"),
-              IsOkAndHolds(Eq(BufferDataPrintMode::kBinary)));
-  EXPECT_THAT(ParseBufferDataPrintMode("i"),
-              IsOkAndHolds(Eq(BufferDataPrintMode::kSignedInteger)));
-  EXPECT_THAT(ParseBufferDataPrintMode("u"),
-              IsOkAndHolds(Eq(BufferDataPrintMode::kUnsignedInteger)));
-  EXPECT_THAT(ParseBufferDataPrintMode("f"),
-              IsOkAndHolds(Eq(BufferDataPrintMode::kFloatingPoint)));
-
-  EXPECT_THAT(ParseBufferDataPrintMode("bb"),
-              IsOkAndHolds(Eq(BufferDataPrintMode::kBinary)));
-  EXPECT_THAT(ParseBufferDataPrintMode("ii"),
-              IsOkAndHolds(Eq(BufferDataPrintMode::kSignedInteger)));
-  EXPECT_THAT(ParseBufferDataPrintMode("uu"),
-              IsOkAndHolds(Eq(BufferDataPrintMode::kUnsignedInteger)));
-  EXPECT_THAT(ParseBufferDataPrintMode("ff"),
-              IsOkAndHolds(Eq(BufferDataPrintMode::kFloatingPoint)));
-
-  EXPECT_THAT(ParseBufferDataPrintMode(""),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseBufferDataPrintMode("s"),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseBufferDataPrintMode("asdfasdf"),
-              StatusIs(StatusCode::kInvalidArgument));
-}
-
-TEST(BufferStringUtilTest, ParseBufferTypeElementSize) {
-  EXPECT_THAT(ParseBufferTypeElementSize("1"), IsOkAndHolds(Eq(1)));
-  EXPECT_THAT(ParseBufferTypeElementSize("2"), IsOkAndHolds(Eq(2)));
-  EXPECT_THAT(ParseBufferTypeElementSize("4"), IsOkAndHolds(Eq(4)));
-  EXPECT_THAT(ParseBufferTypeElementSize("8"), IsOkAndHolds(Eq(8)));
-  EXPECT_THAT(ParseBufferTypeElementSize("i8"), IsOkAndHolds(Eq(1)));
-  EXPECT_THAT(ParseBufferTypeElementSize("u8"), IsOkAndHolds(Eq(1)));
-  EXPECT_THAT(ParseBufferTypeElementSize("i16"), IsOkAndHolds(Eq(2)));
-  EXPECT_THAT(ParseBufferTypeElementSize("u16"), IsOkAndHolds(Eq(2)));
-  EXPECT_THAT(ParseBufferTypeElementSize("i32"), IsOkAndHolds(Eq(4)));
-  EXPECT_THAT(ParseBufferTypeElementSize("u32"), IsOkAndHolds(Eq(4)));
-  EXPECT_THAT(ParseBufferTypeElementSize("i64"), IsOkAndHolds(Eq(8)));
-  EXPECT_THAT(ParseBufferTypeElementSize("u64"), IsOkAndHolds(Eq(8)));
-  EXPECT_THAT(ParseBufferTypeElementSize("f32"), IsOkAndHolds(Eq(4)));
-  EXPECT_THAT(ParseBufferTypeElementSize("f64"), IsOkAndHolds(Eq(8)));
-
-  EXPECT_THAT(ParseBufferTypeElementSize(""),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseBufferTypeElementSize(" "),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseBufferTypeElementSize("a"),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseBufferTypeElementSize("ib"),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseBufferTypeElementSize("i"),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseBufferTypeElementSize("i543ff"),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseBufferTypeElementSize("i33"),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseBufferTypeElementSize("x32"),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseBufferTypeElementSize("f16"),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseBufferTypeElementSize("i1"),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseBufferTypeElementSize("i24"),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseBufferTypeElementSize("i128"),
-              StatusIs(StatusCode::kInvalidArgument));
-}
-
-TEST(BufferStringUtilTest, MakeBufferTypeString) {
-  EXPECT_THAT(MakeBufferTypeString(1, BufferDataPrintMode::kBinary),
-              IsOkAndHolds(Eq("1")));
-  EXPECT_THAT(MakeBufferTypeString(1, BufferDataPrintMode::kSignedInteger),
-              IsOkAndHolds(Eq("i8")));
-  EXPECT_THAT(MakeBufferTypeString(2, BufferDataPrintMode::kUnsignedInteger),
-              IsOkAndHolds(Eq("u16")));
-  EXPECT_THAT(MakeBufferTypeString(4, BufferDataPrintMode::kFloatingPoint),
-              IsOkAndHolds(Eq("f32")));
-
-  EXPECT_THAT(MakeBufferTypeString(0, BufferDataPrintMode::kBinary),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(MakeBufferTypeString(-1, BufferDataPrintMode::kBinary),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(MakeBufferTypeString(-1, BufferDataPrintMode::kSignedInteger),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(MakeBufferTypeString(-2, BufferDataPrintMode::kUnsignedInteger),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(MakeBufferTypeString(-4, BufferDataPrintMode::kFloatingPoint),
-              StatusIs(StatusCode::kInvalidArgument));
-}
-
-TEST(BufferStringUtilTest, ParseShape) {
-  EXPECT_THAT(ParseShape(""), IsOkAndHolds(Eq(Shape{})));
-  EXPECT_THAT(ParseShape("0"), IsOkAndHolds(Eq(Shape{0})));
-  EXPECT_THAT(ParseShape("1"), IsOkAndHolds(Eq(Shape{1})));
-  EXPECT_THAT(ParseShape("1x2"), IsOkAndHolds(Eq(Shape{1, 2})));
-  EXPECT_THAT(ParseShape(" 1 x 2 "), IsOkAndHolds(Eq(Shape{1, 2})));
-  EXPECT_THAT(ParseShape("1x2x3x4x5"), IsOkAndHolds(Eq(Shape{1, 2, 3, 4, 5})));
-
-  EXPECT_THAT(ParseShape("abc"), StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseShape("1xf"), StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseShape("1xff23"), StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseShape("1xf32"), StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseShape("x"), StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseShape("x1"), StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseShape("1x"), StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseShape("x1x2"), StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseShape("1xx2"), StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseShape("1x2x"), StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseShape("0x-1"), StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseShape("1x2x3x4x5x6"),
-              StatusIs(StatusCode::kInvalidArgument));
-}
-
-TEST(BufferStringUtilTest, PrintShapedTypeToString) {
-  EXPECT_EQ("f32", PrintShapedTypeToString(Shape{}, "f32"));
-  EXPECT_EQ("0xi32", PrintShapedTypeToString(Shape{0}, "i32"));
-  EXPECT_EQ("1xi32", PrintShapedTypeToString(Shape{1}, "i32"));
-  EXPECT_EQ("1x2xi8", PrintShapedTypeToString(Shape{1, 2}, "i8"));
-}
-
-TEST(BufferStringUtilTest, PrintBinaryDataToString) {
-  EXPECT_THAT(PrintBinaryDataToString(1, {0, 1, 2, 3}, 10),
-              IsOkAndHolds(Eq("00 01 02 03")));
-  EXPECT_THAT(PrintBinaryDataToString(
-                  2, {0x01, 0x02, 0x03, 0x04, 0xcc, 0xdd, 0xee, 0xff}, 10),
-              IsOkAndHolds(Eq("0102 0304 ccdd eeff")));
-  EXPECT_THAT(PrintBinaryDataToString(4, {0xfa, 0xbc, 0xfa, 0xbc}, 10),
-              IsOkAndHolds(Eq("fabcfabc")));
-  EXPECT_THAT(PrintBinaryDataToString(
-                  8, {0xfa, 0xbc, 0xfa, 0xbc, 0xfa, 0xbc, 0xfa, 0xbc}, 10),
-              IsOkAndHolds(Eq("fabcfabcfabcfabc")));
-
-  EXPECT_THAT(PrintBinaryDataToString(1, {0, 1, 2, 3}, 0),
-              IsOkAndHolds(Eq("...")));
-  EXPECT_THAT(PrintBinaryDataToString(1, {0, 1, 2, 3}, 1),
-              IsOkAndHolds(Eq("00...")));
-  EXPECT_THAT(PrintBinaryDataToString(1, {0, 1, 2, 3}, 2),
-              IsOkAndHolds(Eq("00 01...")));
-
-  EXPECT_THAT(PrintBinaryDataToString(-1, {0, 1, 2, 3}, 10),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(
-      PrintBinaryDataToString(
-          16, {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, 10),
-      StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(PrintBinaryDataToString(3, {0, 1, 2, 3}, 10),
-              StatusIs(StatusCode::kInvalidArgument));
-}
-
-TEST(BufferStringUtilTest, PrintNumericalDataToString) {
-  EXPECT_EQ("0 1 2 3",
-            PrintNumericalDataToString({4}, "u8", {0, 1, 2, 3}, 10).value());
-  EXPECT_EQ("[0 1][2 3]",
-            PrintNumericalDataToString({2, 2}, "u8", {0, 1, 2, 3}, 10).value());
-  std::vector<int32_t> data = {0, -1, 2, 3};
-  auto bytes = ReinterpretSpan<uint8_t>(absl::MakeSpan(data));
-  EXPECT_EQ("0 -1 2 3",
-            PrintNumericalDataToString({4}, "i32", bytes, 10).value());
-}
-
-TEST(BufferStringUtilTest, ParseBufferDatai8) {
-  std::vector<uint8_t> data(4);
-  auto data_span = absl::MakeSpan(data);
-  ASSERT_OK(ParseBufferDataAsType("0 1 2 3", "i8", data_span));
-  EXPECT_THAT(ReinterpretSpan<int8_t>(data_span), ElementsAre(0, 1, 2, 3));
-}
-
-TEST(BufferStringUtilTest, ParseBufferDatai32) {
-  std::vector<uint8_t> data(4 * sizeof(int32_t));
-  auto data_span = absl::MakeSpan(data);
-  ASSERT_OK(ParseBufferDataAsType("0 1 2 3", "i32", data_span));
-  EXPECT_THAT(ReinterpretSpan<int32_t>(data_span), ElementsAre(0, 1, 2, 3));
-}
-
-TEST(BufferStringUtilTest, ParseBufferDataf32) {
-  std::vector<uint8_t> data(4 * sizeof(float));
-  auto data_span = absl::MakeSpan(data);
-  ASSERT_OK(ParseBufferDataAsType("0 1.1 2 3", "f32", data_span));
-  EXPECT_THAT(ReinterpretSpan<float>(data_span), ElementsAre(0, 1.1, 2, 3));
-}
-
-TEST(BufferStringUtilTest, ParseBufferDataBinary) {
-  std::vector<uint8_t> data(4);
-  auto data_span = absl::MakeSpan(data);
-  ASSERT_OK(ParseBufferDataAsType("00 01 02 03", "8", data_span));
-  EXPECT_THAT(data_span, ElementsAre(0, 1, 2, 3));
-}
-
-}  // namespace
-}  // namespace iree
diff --git a/iree/base/shape.cc b/iree/base/shape.cc
deleted file mode 100644
index 875d119..0000000
--- a/iree/base/shape.cc
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "iree/base/shape.h"
-
-#include <cstddef>
-
-#include "absl/strings/str_cat.h"
-#include "absl/strings/str_join.h"
-#include "iree/base/source_location.h"
-#include "iree/base/status.h"
-
-namespace iree {
-
-Shape::Shape(const int* values, int size) : rank_(size) {
-  QCHECK_LE(size, kMaxRank)
-      << "Max rank of " << kMaxRank << ", shape has " << size;
-  std::memcpy(value_, values, size * sizeof(int));
-}
-
-std::string Shape::DebugString() const {
-  return absl::StrCat("[", absl::StrJoin(subspan(), ","), "]");
-}
-
-absl::Span<const int> Shape::subspan(size_type pos, size_type len) const {
-  if (len == npos) {
-    len = rank_ - pos;
-  }
-  return absl::MakeConstSpan(&value_[pos], len);
-}
-
-void Shape::push_back(int dim) {
-  DCHECK_LE(rank_ + 1, kMaxRank);
-  value_[rank_++] = dim;
-}
-
-void Shape::insert(iterator pos, int dim) {
-  int axis = static_cast<int>(pos - value_);
-  DCHECK_GE(axis, 0);
-  DCHECK_LE(axis, rank_);
-  DCHECK_LE(rank_ + 1, kMaxRank);
-  ++rank_;
-  for (int i = rank_ - 1; i > axis; --i) {
-    value_[i] = value_[i - 1];
-  }
-  value_[axis] = dim;
-}
-
-void Shape::erase(iterator pos) {
-  int axis = static_cast<int>(pos - value_);
-  DCHECK_GE(axis, 0);
-  DCHECK_LE(axis, rank_);
-  for (int i = axis; i < rank_ - 1; ++i) {
-    value_[i] = value_[i + 1];
-  }
-  --rank_;
-}
-
-int Shape::element_count() const {
-  size_t element_count = 1;
-  for (int i = 0; i < rank_; ++i) {
-    int dim = value_[i];
-    if (dim == -1) {
-      return 0;
-    }
-    element_count *= dim;
-  }
-  return element_count;
-}
-
-StatusOr<int> Shape::ResolveAxis(int axis) const {
-  if (rank_ == 0 && (axis == -1 || axis == 0)) {
-    // Scalar axes resolves to 0.
-    return 0;
-  }
-
-  int new_axis = axis;
-  if (new_axis < 0) {
-    new_axis += rank_;
-  }
-  if (new_axis < 0 || new_axis >= rank_) {
-    return InvalidArgumentErrorBuilder(IREE_LOC)
-           << "Axis " << new_axis << " (orig " << axis
-           << ") out of bounds of rank " << rank_;
-  }
-  return new_axis;
-}
-
-}  // namespace iree
diff --git a/iree/base/shape.h b/iree/base/shape.h
deleted file mode 100644
index 758d66f..0000000
--- a/iree/base/shape.h
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef IREE_BASE_SHAPE_H_
-#define IREE_BASE_SHAPE_H_
-
-#include <array>
-#include <cstring>
-#include <initializer_list>
-#include <iterator>
-#include <string>
-#include <type_traits>
-#include <vector>
-
-#include "absl/meta/type_traits.h"
-#include "absl/types/span.h"
-#include "iree/base/logging.h"
-#include "iree/base/status.h"
-
-namespace iree {
-
-// For simplicity we limit our shapes to a max of rank-N (shape.size() == N) as
-// this prevents dynamic allocations and rarely are there greater ranks.
-constexpr int kMaxRank = 5;
-
-// Represent indices and lengths of tensors.
-using Index = std::array<int, kMaxRank>;
-using Length = std::array<int, kMaxRank>;
-
-// Represents the number of elements in multiple dimensions.
-// Can be rank-0 (scalar) to rank-kMaxRank. Tries to match the API of
-// std::vector and can be converted to a Span via subspan().
-//
-// https://www.tensorflow.org/guide/tensors#shape
-class Shape {
- public:
-  using size_type = int;
-  static constexpr size_type npos = ~(size_type(0));  // NOLINT
-  using iterator = int*;
-  using const_iterator = const int*;
-
-  Shape() = default;
-  Shape(const int* values, int size);
-  Shape(std::initializer_list<int> values)
-      : Shape(values.begin(), values.size()) {}
-  explicit Shape(absl::Span<const int> values)
-      : Shape(values.data(), values.size()) {}
-
-  template <typename Iterator>
-  using EnableIfForwardIterator = absl::enable_if_t<std::is_convertible<
-      typename std::iterator_traits<Iterator>::iterator_category,
-      std::forward_iterator_tag>::value>;
-  template <typename Iterator, EnableIfForwardIterator<Iterator>* = nullptr>
-  Shape(Iterator first, Iterator last) {
-    rank_ = std::distance(first, last);
-    QCHECK_LE(rank_, kMaxRank);
-    for (int i = 0; first != last; ++i, static_cast<void>(++first)) {
-      value_[i] = *first;
-    }
-  }
-
-  // Returns a string representation of the given shape.
-  std::string DebugString() const;
-
-  // Size (aka 'rank') of the shape, counting the number of dimensions.
-  constexpr size_type size() const noexcept { return rank_; }
-
-  // Whether the shape is rank-0 (scalar).
-  constexpr bool empty() const noexcept { return rank_ == 0; }
-
-  // Returns the total elements in the tensor shape.
-  // Returns 0 if the tensor shape is not complete and 1 if the shape is a
-  // scalar value.
-  int element_count() const;
-
-  // Resolves an axis in [-R,R) to the real axis value and verifies the range.
-  StatusOr<int> ResolveAxis(int axis) const;
-
-  // Compares two shapes for equality.
-  inline static bool Equal(const Shape& a, const Shape& b) {
-    return a.rank_ == b.rank_ &&
-           std::memcmp(a.value_, b.value_, a.rank_ * sizeof(value_[0])) == 0;
-  }
-
-  int& operator[](size_type i) noexcept {
-    DCHECK_GE(i, 0);
-    DCHECK_LT(i, rank_);
-    return value_[i];
-  }
-
-  const int& operator[](size_type i) const noexcept {
-    DCHECK_GE(i, 0);
-    DCHECK_LT(i, rank_);
-    return value_[i];
-  }
-
-  int front() const noexcept {
-    DCHECK_GE(rank_, 1);
-    return value_[0];
-  }
-
-  int back() const noexcept {
-    DCHECK_GE(rank_, 1);
-    return value_[rank_ - 1];
-  }
-
-  constexpr iterator begin() const noexcept {
-    return const_cast<iterator>(&value_[0]);
-  }
-  constexpr iterator end() const noexcept {
-    return const_cast<iterator>(&value_[rank_]);
-  }
-  constexpr const_iterator cbegin() const noexcept { return &value_[0]; }
-  constexpr const_iterator cend() const noexcept { return &value_[rank_]; }
-
-  absl::Span<const int> subspan(size_type pos = 0, size_type len = npos) const;
-  absl::Span<const int> data() const { return subspan(); }
-
-  void push_back(int dim);
-
-  void insert(iterator pos, int dim);
-
-  void erase(iterator pos);
-
-  void clear() { rank_ = 0; }
-
- private:
-  size_type rank_ = 0;
-  int value_[kMaxRank];
-};
-
-inline bool operator==(const Shape& a, const Shape& b) {
-  return Shape::Equal(a, b);
-}
-
-inline bool operator!=(const Shape& a, const Shape& b) { return !(a == b); }
-
-inline std::ostream& operator<<(std::ostream& stream, const Shape& shape) {
-  stream << shape.DebugString();
-  return stream;
-}
-
-}  // namespace iree
-
-#endif  // IREE_BASE_SHAPE_H_
diff --git a/iree/base/shape_test.cc b/iree/base/shape_test.cc
deleted file mode 100644
index 0bd88d3..0000000
--- a/iree/base/shape_test.cc
+++ /dev/null
@@ -1,221 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "iree/base/shape.h"
-
-#include "iree/base/status.h"
-#include "iree/base/status_matchers.h"
-#include "iree/testing/gtest.h"
-
-namespace iree {
-namespace {
-
-using ::testing::ElementsAre;
-
-// Tests shapes that represent 0-D scalar values.
-TEST(ShapeTest, Scalar) {
-  Shape shape;
-  EXPECT_EQ(0, shape.size());
-  EXPECT_TRUE(shape.empty());
-  EXPECT_EQ(1, shape.element_count());
-  EXPECT_EQ(shape, shape);
-  EXPECT_EQ(0, shape.subspan().size());
-  for (const int dim : shape) {
-    FAIL() << "Should have no dimensions, have: " << dim;
-  }
-  EXPECT_EQ(shape.begin(), shape.end());
-  EXPECT_EQ(shape.cbegin(), shape.cend());
-  shape.clear();
-  EXPECT_EQ(0, shape.size());
-}
-
-// Tests the various ways of constructing a 1+D shape.
-TEST(ShapeTest, NonScalarConstruction) {
-  EXPECT_EQ(0, Shape().size());
-  EXPECT_EQ(0, Shape({}).size());
-  EXPECT_EQ(1, Shape({10}).size());
-  EXPECT_EQ(4, Shape({10, 20, 30, 40}).size());
-
-  std::vector<int> empty_data = {};
-  EXPECT_EQ(0, Shape(empty_data.data(), empty_data.size()).size());
-  EXPECT_EQ(0, Shape(empty_data.begin(), empty_data.end()).size());
-  EXPECT_EQ(0, Shape(absl::MakeConstSpan(empty_data)).size());
-
-  EXPECT_THAT(Shape({}).subspan(), ElementsAre());
-  EXPECT_THAT(Shape({10}).subspan(), ElementsAre(10));
-  EXPECT_THAT(Shape({10, 20, 30, 40}).subspan(), ElementsAre(10, 20, 30, 40));
-
-  std::vector<int> valid_data = {10, 20, 30, 40};
-  EXPECT_THAT(Shape(valid_data.begin(), valid_data.end()).subspan(),
-              ElementsAre(10, 20, 30, 40));
-  EXPECT_THAT(Shape(absl::MakeConstSpan(valid_data)).subspan(),
-              ElementsAre(10, 20, 30, 40));
-}
-
-// Tests shapes that represent 1+D multidimensional values.
-TEST(ShapeTest, NonScalarAccess) {
-  Shape shape = {1, 2, 3, 4};
-  EXPECT_EQ(4, shape.size());
-  EXPECT_FALSE(shape.empty());
-  EXPECT_EQ(1 * 2 * 3 * 4, shape.element_count());
-  EXPECT_EQ(shape, shape);
-  EXPECT_NE(shape, Shape({4, 3, 2, 1}));
-  EXPECT_THAT(shape.subspan(), ElementsAre(1, 2, 3, 4));
-  std::vector<int> readout;
-  for (const int dim : shape) {
-    readout.push_back(dim);
-  }
-  EXPECT_THAT(readout, ElementsAre(1, 2, 3, 4));
-  EXPECT_EQ(1, shape[0]);
-  EXPECT_EQ(2, shape[1]);
-  EXPECT_EQ(3, shape[2]);
-  EXPECT_EQ(4, shape[3]);
-  EXPECT_EQ(1, shape.front());
-  EXPECT_EQ(4, shape.back());
-}
-
-TEST(ShapeTest, PushBack) {
-  Shape shape;
-  EXPECT_EQ(0, shape.size());
-
-  shape.push_back(10);
-  EXPECT_EQ(1, shape.size());
-  EXPECT_EQ(10, shape.front());
-  EXPECT_EQ(10, shape.back());
-  EXPECT_EQ(10, shape[0]);
-  EXPECT_THAT(shape.subspan(), ElementsAre(10));
-
-  shape.push_back(20);
-  EXPECT_EQ(2, shape.size());
-  EXPECT_EQ(10, shape.front());
-  EXPECT_EQ(20, shape.back());
-  EXPECT_EQ(10, shape[0]);
-  EXPECT_EQ(20, shape[1]);
-  EXPECT_THAT(shape.subspan(), ElementsAre(10, 20));
-}
-
-TEST(ShapeTest, Insert) {
-  Shape shape;
-  EXPECT_EQ(0, shape.size());
-
-  shape.insert(shape.begin(), 20);
-  EXPECT_THAT(shape.subspan(), ElementsAre(20));
-  shape.insert(shape.begin(), 10);
-  EXPECT_THAT(shape.subspan(), ElementsAre(10, 20));
-  shape.insert(shape.end(), 40);
-  EXPECT_THAT(shape.subspan(), ElementsAre(10, 20, 40));
-  shape.insert(shape.begin() + 2, 30);
-  EXPECT_THAT(shape.subspan(), ElementsAre(10, 20, 30, 40));
-
-  Shape ex_shape{72, 4};
-  ex_shape.insert(ex_shape.begin(), 144);
-  EXPECT_THAT(ex_shape.subspan(), ElementsAre(144, 72, 4));
-}
-
-TEST(ShapeTest, Erase) {
-  Shape shape = {1, 2, 3, 4};
-  EXPECT_THAT(shape.subspan(), ElementsAre(1, 2, 3, 4));
-  shape.erase(shape.begin());
-  EXPECT_THAT(shape.subspan(), ElementsAre(2, 3, 4));
-  shape.erase(shape.end());
-  EXPECT_THAT(shape.subspan(), ElementsAre(2, 3));
-  shape.erase(shape.begin() + 1);
-  EXPECT_THAT(shape.subspan(), ElementsAre(2));
-  shape.erase(shape.end());
-  EXPECT_THAT(shape.subspan(), ElementsAre());
-}
-
-TEST(ShapeTest, Clear) {
-  Shape shape;
-  EXPECT_EQ(0, shape.size());
-  shape.clear();
-  EXPECT_EQ(0, shape.size());
-
-  shape = Shape({1});
-  shape.clear();
-  EXPECT_EQ(0, shape.size());
-
-  shape = Shape({1, 2, 3, 4});
-  shape.clear();
-  EXPECT_EQ(0, shape.size());
-}
-
-TEST(ShapeTest, DebugString) {
-  EXPECT_EQ("[]", Shape({}).DebugString());
-  EXPECT_EQ("[1]", Shape({1}).DebugString());
-  EXPECT_EQ("[1,2]", Shape({1, 2}).DebugString());
-}
-
-TEST(ShapeTest, ElementCount) {
-  EXPECT_EQ(1, Shape({}).element_count());
-  EXPECT_EQ(0, Shape({0}).element_count());
-  EXPECT_EQ(1, Shape({1}).element_count());
-  EXPECT_EQ(2, Shape({2, 1}).element_count());
-  EXPECT_EQ(10, Shape({2, 5}).element_count());
-  EXPECT_EQ(9216, Shape({72, 1, 128}).element_count());
-  EXPECT_EQ(9216, Shape({1, 72, 128}).element_count());
-
-  // Partial shaping should yield no elements.
-  EXPECT_EQ(0, Shape({1, -1, 2, 3}).element_count());
-}
-
-TEST(ShapeTest, ResolveAxis) {
-  int axis;
-  ASSERT_OK_AND_ASSIGN(axis, Shape({0}).ResolveAxis(0));
-  EXPECT_EQ(0, axis);
-  ASSERT_OK_AND_ASSIGN(axis, Shape({0, 1, 2}).ResolveAxis(1));
-  EXPECT_EQ(1, axis);
-  ASSERT_OK_AND_ASSIGN(axis, Shape({0, 1, 2}).ResolveAxis(2));
-  EXPECT_EQ(2, axis);
-
-  EXPECT_TRUE(IsInvalidArgument(Shape({0, 1, 2}).ResolveAxis(3).status()));
-}
-
-TEST(ShapeTest, ResolveAxisNegative) {
-  int axis;
-  ASSERT_OK_AND_ASSIGN(axis, Shape({0, 1, 2}).ResolveAxis(-3));
-  EXPECT_EQ(0, axis);
-  ASSERT_OK_AND_ASSIGN(axis, Shape({0, 1, 2}).ResolveAxis(-2));
-  EXPECT_EQ(1, axis);
-  ASSERT_OK_AND_ASSIGN(axis, Shape({0, 1, 2}).ResolveAxis(-1));
-  EXPECT_EQ(2, axis);
-
-  EXPECT_TRUE(IsInvalidArgument(Shape({0, 1, 2}).ResolveAxis(-4).status()));
-}
-
-TEST(ShapeTest, ResolveAxisScalar) {
-  int axis;
-  ASSERT_OK_AND_ASSIGN(axis, Shape({}).ResolveAxis(0));
-  EXPECT_EQ(0, axis);
-  ASSERT_OK_AND_ASSIGN(axis, Shape({}).ResolveAxis(-1));
-  EXPECT_EQ(0, axis);
-
-  EXPECT_TRUE(IsInvalidArgument(Shape({}).ResolveAxis(1).status()));
-}
-
-TEST(ShapeTest, Equality) {
-  EXPECT_EQ(Shape({}), Shape({}));
-  EXPECT_EQ(Shape({0}), Shape({0}));
-  EXPECT_EQ(Shape({1}), Shape({1}));
-  EXPECT_EQ(Shape({1, 2}), Shape({1, 2}));
-
-  EXPECT_NE(Shape({}), Shape({1}));
-  EXPECT_NE(Shape({-1}), Shape({1}));
-  EXPECT_NE(Shape({1}), Shape({}));
-  EXPECT_NE(Shape({1}), Shape({2}));
-  EXPECT_NE(Shape({1, 2}), Shape({3, 4}));
-}
-
-}  // namespace
-}  // namespace iree
diff --git a/iree/base/shaped_buffer.h b/iree/base/shaped_buffer.h
deleted file mode 100644
index 14f2df8..0000000
--- a/iree/base/shaped_buffer.h
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef IREE_IREE_BASE_SHAPED_BUFFER_H_
-#define IREE_IREE_BASE_SHAPED_BUFFER_H_
-
-#include <stdint.h>
-
-#include <vector>
-
-#include "absl/types/span.h"
-#include "iree/base/logging.h"
-#include "iree/base/memory.h"
-#include "iree/base/shape.h"
-
-namespace iree {
-
-// A struct representing a buffer of bytes that should be interpreted as being
-// of the specified shape with elements of the specified size.
-class ShapedBuffer {
- public:
-  ShapedBuffer() = default;
-  // move only
-  ShapedBuffer(ShapedBuffer&& other) = default;
-  ShapedBuffer& operator=(ShapedBuffer&& other) = default;
-  ShapedBuffer(int8_t element_size, Shape shape, std::vector<uint8_t> contents)
-      : element_size_(element_size),
-        shape_(shape),
-        contents_(std::move(contents)) {}
-
-  template <typename T>
-  static ShapedBuffer Create(Shape shape, absl::Span<const T> contents) {
-    CHECK_EQ(contents.size(), shape.element_count());
-    auto byte_span = ReinterpretSpan<uint8_t>(contents);
-    return ShapedBuffer(
-        sizeof(T), shape,
-        std::vector<uint8_t>(byte_span.begin(), byte_span.end()));
-  }
-
-  static inline bool Equal(const ShapedBuffer& a, const ShapedBuffer& b) {
-    return a.element_size_ == b.element_size_ && a.shape_ == b.shape_ &&
-           a.contents_ == b.contents_;
-  }
-
-  int8_t element_size() const { return element_size_; }
-  Shape shape() const { return shape_; }
-  absl::Span<const uint8_t> contents() const { return contents_; }
-
- private:
-  // Size of the buffer elements, in bytes.
-  int8_t element_size_;
-  Shape shape_;
-  std::vector<uint8_t> contents_;
-};
-
-inline bool operator==(const ShapedBuffer& a, const ShapedBuffer& b) {
-  return ShapedBuffer::Equal(a, b);
-}
-
-inline bool operator!=(const ShapedBuffer& a, const ShapedBuffer& b) {
-  return !(a == b);
-}
-
-}  // namespace iree
-
-#endif  // IREE_IREE_BASE_SHAPED_BUFFER_H_
diff --git a/iree/base/shaped_buffer_string_util.cc b/iree/base/shaped_buffer_string_util.cc
deleted file mode 100644
index 3464e56..0000000
--- a/iree/base/shaped_buffer_string_util.cc
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "iree/base/shaped_buffer_string_util.h"
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <sstream>
-#include <string>
-#include <vector>
-
-#include "absl/container/fixed_array.h"
-#include "absl/strings/ascii.h"
-#include "absl/strings/string_view.h"
-#include "absl/strings/strip.h"
-#include "absl/types/optional.h"
-#include "absl/types/span.h"
-#include "iree/base/buffer_string_util.h"
-#include "iree/base/memory.h"
-#include "iree/base/shape.h"
-#include "iree/base/shaped_buffer.h"
-#include "iree/base/source_location.h"
-#include "iree/base/status.h"
-
-namespace iree {
-
-StatusOr<ShapedBuffer> ParseShapedBufferFromString(
-    absl::string_view shaped_buf_str) {
-  // Strip whitespace that may come along (linefeeds/etc).
-  shaped_buf_str = absl::StripAsciiWhitespace(shaped_buf_str);
-  shaped_buf_str = absl::StripPrefix(shaped_buf_str, "\"");
-  shaped_buf_str = absl::StripSuffix(shaped_buf_str, "\"");
-  if (shaped_buf_str.empty()) {
-    // Empty lines denote empty shaped_buffers.
-    return ShapedBuffer{};
-  }
-
-  // Split into the components we can work with: shape, type, and data.
-  auto str_parts = BufferStringParts::ExtractFrom(shaped_buf_str);
-
-  ASSIGN_OR_RETURN(int element_size,
-                   ParseBufferTypeElementSize(str_parts.type_str));
-  ASSIGN_OR_RETURN(Shape shape, ParseShape(str_parts.shape_str));
-
-  int buffer_size = element_size * shape.element_count();
-  std::vector<uint8_t> contents(buffer_size);
-
-  if (!str_parts.data_str.empty()) {
-    RETURN_IF_ERROR(ParseBufferDataAsType(
-        str_parts.data_str, str_parts.type_str, absl::MakeSpan(contents)));
-  }
-  return ShapedBuffer(element_size, shape, std::move(contents));
-}
-
-StatusOr<std::string> PrintShapedBufferToString(const ShapedBuffer& shaped_buf,
-                                                BufferDataPrintMode print_mode,
-                                                size_t max_entries) {
-  std::string result;
-  RETURN_IF_ERROR(
-      PrintShapedBufferToString(shaped_buf, print_mode, max_entries, &result));
-  return result;
-}
-
-Status PrintShapedBufferToString(const ShapedBuffer& shaped_buf,
-                                 BufferDataPrintMode print_mode,
-                                 size_t max_entries, std::string* out_result) {
-  std::ostringstream stream;
-  RETURN_IF_ERROR(
-      PrintShapedBufferToStream(shaped_buf, print_mode, max_entries, &stream));
-  *out_result = stream.str();
-  return OkStatus();
-}
-
-Status PrintShapedBufferToStream(const ShapedBuffer& shaped_buffer,
-                                 BufferDataPrintMode print_mode,
-                                 size_t max_entries, std::ostream* stream) {
-  if (shaped_buffer.contents().empty()) {
-    // No data means the shaped_buffer is empty. We use the empty string to
-    // denote this (as we have no useful information).
-    return OkStatus();
-  }
-
-  ASSIGN_OR_RETURN(
-      std::string type_str,
-      MakeBufferTypeString(shaped_buffer.element_size(), print_mode));
-
-  PrintShapedTypeToStream(shaped_buffer.shape(), type_str, stream);
-  *stream << "=";
-
-  if (print_mode == BufferDataPrintMode::kBinary) {
-    return PrintBinaryDataToStream(shaped_buffer.element_size(),
-                                   shaped_buffer.contents(), max_entries,
-                                   stream);
-  }
-  return PrintNumericalDataToStream(shaped_buffer.shape(), type_str,
-                                    shaped_buffer.contents(), max_entries,
-                                    stream);
-}
-
-}  // namespace iree
diff --git a/iree/base/shaped_buffer_string_util.h b/iree/base/shaped_buffer_string_util.h
deleted file mode 100644
index a351750..0000000
--- a/iree/base/shaped_buffer_string_util.h
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Utilities for parsing and printing ShapedBuffer, mostly useful for
-// testing. The format is as described in
-// https://github.com/google/iree/tree/main/iree/base/buffer_string_util.h
-
-#ifndef IREE_BASE_SHAPED_BUFFER_STRING_UTIL_H_
-#define IREE_BASE_SHAPED_BUFFER_STRING_UTIL_H_
-
-#include <stddef.h>
-
-#include <ostream>
-#include <string>
-
-#include "absl/strings/string_view.h"
-#include "iree/base/buffer_string_util.h"
-#include "iree/base/shape.h"
-#include "iree/base/shaped_buffer.h"
-#include "iree/base/status.h"
-
-namespace iree {
-
-// Parses a ShapedBuffer encoded in a string.
-// The format accepted matches that produced by PrintShapedBufferToString.
-StatusOr<ShapedBuffer> ParseShapedBufferFromString(
-    absl::string_view shaped_buf_str);
-
-// Prints a ShapedBuffer to a string encoded in the canonical format.
-StatusOr<std::string> PrintShapedBufferToString(const ShapedBuffer& shaped_buf,
-                                                BufferDataPrintMode print_mode,
-                                                size_t max_entries);
-Status PrintShapedBufferToString(const ShapedBuffer& shaped_buf,
-                                 BufferDataPrintMode print_mode,
-                                 size_t max_entries, std::string* out_result);
-
-// Prints a ShapedBuffer to a stream encoded in the canonical format.
-Status PrintShapedBufferToStream(const ShapedBuffer& shaped_buf,
-                                 BufferDataPrintMode print_mode,
-                                 size_t max_entries, std::ostream* stream);
-
-}  // namespace iree
-
-#endif  // IREE_BASE_SHAPED_BUFFER_STRING_UTIL_H_
diff --git a/iree/base/shaped_buffer_string_util_test.cc b/iree/base/shaped_buffer_string_util_test.cc
deleted file mode 100644
index 42077f7..0000000
--- a/iree/base/shaped_buffer_string_util_test.cc
+++ /dev/null
@@ -1,191 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "iree/base/shaped_buffer_string_util.h"
-
-#include "absl/strings/string_view.h"
-#include "iree/base/buffer_string_util.h"
-#include "iree/base/memory.h"
-#include "iree/base/shaped_buffer.h"
-#include "iree/base/status.h"
-#include "iree/base/status_matchers.h"
-#include "iree/testing/gtest.h"
-
-namespace iree {
-namespace {
-
-using ::iree::testing::status::StatusIs;
-using ::testing::ElementsAre;
-
-template <typename T>
-absl::Span<const T> ReadAs(absl::Span<const uint8_t> data) {
-  return ReinterpretSpan<T>(data);
-}
-
-void RoundTripTest(absl::string_view buffer_string,
-                   BufferDataPrintMode print_mode) {
-  ASSERT_OK_AND_ASSIGN(auto shaped_buf,
-                       ParseShapedBufferFromString(buffer_string));
-  ASSERT_OK_AND_ASSIGN(auto new_string, PrintShapedBufferToString(
-                                            shaped_buf, print_mode, SIZE_MAX));
-  EXPECT_EQ(buffer_string, new_string);
-}
-
-void RoundTripTest(ShapedBuffer shaped_buf, BufferDataPrintMode print_mode) {
-  ASSERT_OK_AND_ASSIGN(auto new_string, PrintShapedBufferToString(
-                                            shaped_buf, print_mode, SIZE_MAX));
-  ASSERT_OK_AND_ASSIGN(auto new_shaped_buf,
-                       ParseShapedBufferFromString(new_string));
-  EXPECT_EQ(shaped_buf, new_shaped_buf);
-}
-
-TEST(ShapedBufferStringUtilTest, ParseShapedBufferFromStringEmpty) {
-  // Empty string = empty buffer_view.
-  ASSERT_OK_AND_ASSIGN(auto m0, ParseShapedBufferFromString(""));
-  EXPECT_TRUE(m0.contents().empty());
-  EXPECT_EQ(Shape{}, m0.shape());
-  EXPECT_EQ(0, m0.element_size());
-
-  // No = means no data.
-  ASSERT_OK_AND_ASSIGN(auto m1, ParseShapedBufferFromString("4x2xf32"));
-  EXPECT_EQ(4 * 2 * 4, m1.contents().size());
-  EXPECT_EQ(Shape({4, 2}), m1.shape());
-  EXPECT_EQ(4, m1.element_size());
-  EXPECT_THAT(ReadAs<float>(m1.contents()),
-              ElementsAre(0, 0, 0, 0, 0, 0, 0, 0));
-
-  // No data after = means no data.
-  ASSERT_OK_AND_ASSIGN(auto m2, ParseShapedBufferFromString("4x2xf32="));
-  EXPECT_EQ(4 * 2 * 4, m2.contents().size());
-  EXPECT_EQ(Shape({4, 2}), m2.shape());
-  EXPECT_EQ(4, m2.element_size());
-  EXPECT_THAT(ReadAs<float>(m2.contents()),
-              ElementsAre(0, 0, 0, 0, 0, 0, 0, 0));
-}
-
-TEST(ShapedBufferStringUtilTest, ParseShapedBufferFromStringBinary) {
-  ASSERT_OK_AND_ASSIGN(auto m0, ParseShapedBufferFromString("4x1=00 01 02 03"));
-  EXPECT_EQ(Shape({4}), m0.shape());
-  EXPECT_EQ(1, m0.element_size());
-  EXPECT_THAT(ReadAs<uint8_t>(m0.contents()), ElementsAre(0, 1, 2, 3));
-
-  // Whitespace shouldn't matter.
-  ASSERT_OK_AND_ASSIGN(auto m1, ParseShapedBufferFromString("4x1=00,010203"));
-  EXPECT_EQ(Shape({4}), m1.shape());
-  EXPECT_EQ(1, m1.element_size());
-  EXPECT_THAT(ReadAs<uint8_t>(m1.contents()), ElementsAre(0, 1, 2, 3));
-
-  // Should fail on malformed hex bytes.
-  EXPECT_THAT(ParseShapedBufferFromString("4x1=1"),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseShapedBufferFromString("4x1=00003"),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseShapedBufferFromString("4x1=%0123%\1"),
-              StatusIs(StatusCode::kInvalidArgument));
-  EXPECT_THAT(ParseShapedBufferFromString("4x1=00010203040506"),
-              StatusIs(StatusCode::kInvalidArgument));
-}
-
-TEST(ShapedBufferStringUtilTest, ParseShapedBufferFromStringAllowBrackets) {
-  ASSERT_OK_AND_ASSIGN(auto m0,
-                       ParseShapedBufferFromString("4xi16=[[0][ 1 ][2]][3]"));
-  EXPECT_EQ(Shape({4}), m0.shape());
-  EXPECT_EQ(2, m0.element_size());
-  EXPECT_THAT(ReadAs<int16_t>(m0.contents()), ElementsAre(0, 1, 2, 3));
-}
-
-TEST(ShapedBufferStringUtilTest, ParseShapedBufferFromStringInteger) {
-  // Signed int16.
-  ASSERT_OK_AND_ASSIGN(auto m0,
-                       ParseShapedBufferFromString("4xi16=0 12345 65535 -2"));
-  EXPECT_EQ(Shape({4}), m0.shape());
-  EXPECT_EQ(2, m0.element_size());
-  EXPECT_THAT(ReadAs<int16_t>(m0.contents()), ElementsAre(0, 12345, -1, -2));
-
-  // Unsigned int16.
-  ASSERT_OK_AND_ASSIGN(auto m1,
-                       ParseShapedBufferFromString("4xu16=0 12345 65535 -2"));
-  EXPECT_EQ(Shape({4}), m1.shape());
-  EXPECT_EQ(2, m1.element_size());
-  EXPECT_THAT(ReadAs<uint16_t>(m1.contents()),
-              ElementsAre(0, 12345, 65535, 65534));
-
-  // Mixing separator types is ok.
-  ASSERT_OK_AND_ASSIGN(
-      auto m2, ParseShapedBufferFromString("4xu16=0, 12345, 65535, -2"));
-  EXPECT_EQ(Shape({4}), m2.shape());
-  EXPECT_EQ(2, m2.element_size());
-  EXPECT_THAT(ReadAs<uint16_t>(m2.contents()),
-              ElementsAre(0, 12345, 65535, 65534));
-
-  // Should fail on malformed integers bytes and out of bounds values.
-  EXPECT_FALSE(ParseShapedBufferFromString("4xi32=asodfj").ok());
-  EXPECT_FALSE(ParseShapedBufferFromString("4xi32=0 1 2 3 4").ok());
-}
-
-TEST(ShapedBufferStringUtilTest, ParseShapedBufferFromStringFloat) {
-  // Float.
-  ASSERT_OK_AND_ASSIGN(auto m0,
-                       ParseShapedBufferFromString("4xf32=0 1.0 1234 -2.0e-5"));
-  EXPECT_EQ(Shape({4}), m0.shape());
-  EXPECT_EQ(4, m0.element_size());
-  EXPECT_THAT(ReadAs<float>(m0.contents()),
-              ElementsAre(0.0f, 1.0f, 1234.0f, -2.0e-5f));
-
-  // Double.
-  ASSERT_OK_AND_ASSIGN(auto m1, ParseShapedBufferFromString(
-                                    "4xf64=0 1.0 123456789012345 -2.0e-5"));
-  EXPECT_EQ(Shape({4}), m1.shape());
-  EXPECT_EQ(8, m1.element_size());
-  EXPECT_THAT(ReadAs<double>(m1.contents()),
-              ElementsAre(0.0, 1.0, 123456789012345.0, -2.0e-5));
-
-  // Splat (repeating single element value).
-  ASSERT_OK_AND_ASSIGN(auto m2, ParseShapedBufferFromString("4xf32=2.2"));
-  EXPECT_EQ(Shape({4}), m2.shape());
-  EXPECT_EQ(4, m2.element_size());
-  EXPECT_THAT(ReadAs<float>(m2.contents()),
-              ElementsAre(2.2f, 2.2f, 2.2f, 2.2f));
-
-  // Should fail on malformed floats and out of bounds values.
-  EXPECT_FALSE(ParseShapedBufferFromString("4xf32=asodfj").ok());
-  EXPECT_FALSE(ParseShapedBufferFromString("4xf32=0 1 2 3 4").ok());
-}
-
-TEST(ShapedBufferStringUtilTest, RoundTripParsePrint) {
-  RoundTripTest("4xi8=0 -1 2 3", BufferDataPrintMode::kSignedInteger);
-  RoundTripTest("4xi16=0 -1 2 3", BufferDataPrintMode::kSignedInteger);
-  RoundTripTest("4xu16=0 1 2 3", BufferDataPrintMode::kUnsignedInteger);
-  RoundTripTest("4xf32=0 1.1 2 3", BufferDataPrintMode::kFloatingPoint);
-  RoundTripTest("1x2x3xi8=[[0 1 2][3 4 5]]",
-                BufferDataPrintMode::kSignedInteger);
-}
-
-TEST(ShapedBufferStringUtilTest, RoundTripPrintParse) {
-  RoundTripTest(ShapedBuffer::Create<int8_t>({4}, {0, 1, 2, 3}),
-                BufferDataPrintMode::kSignedInteger);
-  RoundTripTest(ShapedBuffer::Create<int16_t>({4}, {0, 1, 2, 3}),
-                BufferDataPrintMode::kSignedInteger);
-  RoundTripTest(ShapedBuffer::Create<uint16_t>({4}, {0, 1, 2, 3}),
-                BufferDataPrintMode::kSignedInteger);
-  RoundTripTest(ShapedBuffer::Create<float>({4}, {0, 1.1, 2, 3}),
-                BufferDataPrintMode::kSignedInteger);
-  RoundTripTest(ShapedBuffer::Create<int8_t>({1, 2, 3}, {0, 1, 2, 3, 4, 5}),
-                BufferDataPrintMode::kSignedInteger);
-  RoundTripTest(ShapedBuffer(1, {4}, {0, 1, 2, 3}),
-                BufferDataPrintMode::kBinary);
-}
-
-}  // namespace
-}  // namespace iree
diff --git a/iree/build_defs.oss.bzl b/iree/build_defs.oss.bzl
index 6b1184d..a8586b2 100644
--- a/iree/build_defs.oss.bzl
+++ b/iree/build_defs.oss.bzl
@@ -54,8 +54,6 @@
 
 # Driver modules that register themselves at link time.
 IREE_DRIVER_MODULES = [
-    # TODO(b/142004903): enable when Dawn HAL implementation is functional
-    # "//iree/hal/dawn:dawn_driver_module",
     "//iree/hal/dylib:dylib_driver_module",
     "//iree/hal/vmla:vmla_driver_module",
     "//iree/hal/vulkan:vulkan_driver_module",
diff --git a/iree/hal/api.cc b/iree/hal/api.cc
index 25681e0..088f055 100644
--- a/iree/hal/api.cc
+++ b/iree/hal/api.cc
@@ -391,11 +391,11 @@
       LOG(ERROR) << "Unimplemented parser for element format FLOAT_16";
       return IREE_STATUS_UNIMPLEMENTED;
     case IREE_HAL_ELEMENT_TYPE_FLOAT_32:
-      n = std::snprintf(buffer, buffer ? buffer_capacity : 0, "%F",
+      n = std::snprintf(buffer, buffer ? buffer_capacity : 0, "%G",
                         *reinterpret_cast<const float*>(data.data));
       break;
     case IREE_HAL_ELEMENT_TYPE_FLOAT_64:
-      n = std::snprintf(buffer, buffer ? buffer_capacity : 0, "%E",
+      n = std::snprintf(buffer, buffer ? buffer_capacity : 0, "%G",
                         *reinterpret_cast<const double*>(data.data));
       break;
     default: {
diff --git a/iree/hal/api_string_util_test.cc b/iree/hal/api_string_util_test.cc
index 21aa960..8e9efc1 100644
--- a/iree/hal/api_string_util_test.cc
+++ b/iree/hal/api_string_util_test.cc
@@ -762,11 +762,10 @@
               IsOkAndHolds(Eq("9223372036854775807")));
   EXPECT_THAT(FormatElement<uint64_t>(UINT64_MAX),
               IsOkAndHolds(Eq("18446744073709551615")));
-  EXPECT_THAT(FormatElement<float>(1.5f), IsOkAndHolds(Eq("1.500000")));
+  EXPECT_THAT(FormatElement<float>(1.5f), IsOkAndHolds(Eq("1.5")));
   EXPECT_THAT(FormatElement<double>(1123.56789456789),
-              IsOkAndHolds(Eq("1.123568E+03")));
-  EXPECT_THAT(FormatElement<double>(-1.5e-10),
-              IsOkAndHolds(Eq("-1.500000E-10")));
+              IsOkAndHolds(Eq("1123.57")));
+  EXPECT_THAT(FormatElement<double>(-1.5e-10), IsOkAndHolds(Eq("-1.5E-10")));
 }
 
 TEST(ElementStringUtilTest, FormatOpaqueElement) {
@@ -1029,9 +1028,8 @@
   expect_round_trip("4xi16=0 -1 2 3");
   expect_round_trip("4xu16=0 1 2 3");
   expect_round_trip("2x2xi32=[0 1][2 3]");
-  expect_round_trip("4xf32=0.000000 1.100000 2.000000 3.000000");
-  expect_round_trip(
-      "4xf64=0.000000E+00 1.100000E+00 2.000000E+00 3.000000E+00");
+  expect_round_trip("4xf32=0 1.1 2 3");
+  expect_round_trip("4xf64=0 1.1 2 3");
   expect_round_trip("1x2x3xi8=[[0 1 2][3 4 5]]");
   expect_round_trip("2x*16=AABB CCDD");
   expect_round_trip(
diff --git a/iree/hal/cts/BUILD b/iree/hal/cts/BUILD
index 9c14754..4fa423d 100644
--- a/iree/hal/cts/BUILD
+++ b/iree/hal/cts/BUILD
@@ -40,7 +40,6 @@
         "//iree/hal/llvmjit:llvmjit_driver_module",  # build-cleaner: keep
         "//iree/hal/vmla:vmla_driver_module",  # build-cleaner: keep
         "//iree/hal/vulkan:vulkan_driver_module",  # build-cleaner: keep
-        # "//iree/hal/dawn:dawn_driver_module",  # build-cleaner: keep
     ] + PLATFORM_VULKAN_TEST_DEPS,
 )
 
diff --git a/iree/hal/dawn/BUILD b/iree/hal/dawn/BUILD
deleted file mode 100644
index 0b50c82..0000000
--- a/iree/hal/dawn/BUILD
+++ /dev/null
@@ -1,89 +0,0 @@
-# Copyright 2019 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# HAL implementation using Dawn and SPIR-V executables.
-#   https://dawn.googlesource.com/dawn
-
-package(
-    default_visibility = ["//visibility:public"],
-    features = ["layering_check"],
-    licenses = ["notice"],  # Apache 2.0
-)
-
-cc_library(
-    name = "dawn_device",
-    srcs = ["dawn_device.cc"],
-    hdrs = ["dawn_device.h"],
-    deps = [
-        "//iree/base:memory",
-        "//iree/base:status",
-        "//iree/base:tracing",
-        "//iree/hal:command_queue",
-        "//iree/hal:device",
-        "//iree/hal:executable_cache",
-        "//iree/hal:semaphore",
-        "//iree/hal/host:host_local_allocator",
-        "//third_party/dawn:dawn_native",
-        "//third_party/dawn:dawncpp_headers",
-        "//third_party/dawn:libdawn_proc",  # build-cleaner: keep
-        "@com_google_absl//absl/container:inlined_vector",
-        "@com_google_absl//absl/memory",
-        "@com_google_absl//absl/strings",
-        "@com_google_absl//absl/types:span",
-    ],
-)
-
-cc_library(
-    name = "dawn_driver",
-    srcs = ["dawn_driver.cc"],
-    hdrs = ["dawn_driver.h"],
-    deps = [
-        ":dawn_device",
-        "//iree/base:status",
-        "//iree/base:tracing",
-        "//iree/hal:device_info",
-        "//iree/hal:driver",
-        "//third_party/dawn:dawn_headers",
-        "//third_party/dawn:dawn_native",
-        "//third_party/dawn:dawncpp",
-        "//third_party/dawn:dawncpp_headers",
-        "//third_party/dawn:libdawn_proc",  # build-cleaner: keep
-        "@com_google_absl//absl/memory",
-        "@com_google_absl//absl/strings",
-    ],
-)
-
-# TODO(scotttodd): Use SwiftShader to test Vulkan backend
-cc_test(
-    name = "dawn_driver_test",
-    srcs = ["dawn_driver_test.cc"],
-    deps = [
-        ":dawn_driver",
-        "//iree/base:status_matchers",
-        "//iree/testing:gtest_main",
-    ],
-)
-
-cc_library(
-    name = "dawn_driver_module",
-    srcs = ["dawn_driver_module.cc"],
-    deps = [
-        ":dawn_driver",
-        "//iree/base:init",
-        "//iree/base:status",
-        "//iree/base:tracing",
-        "//iree/hal:driver_registry",
-    ],
-    alwayslink = 1,
-)
diff --git a/iree/hal/dawn/dawn_device.cc b/iree/hal/dawn/dawn_device.cc
deleted file mode 100644
index 4aa3b53..0000000
--- a/iree/hal/dawn/dawn_device.cc
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "iree/hal/dawn/dawn_device.h"
-
-#include "absl/memory/memory.h"
-#include "absl/strings/str_cat.h"
-#include "iree/base/status.h"
-#include "iree/base/tracing.h"
-#include "iree/hal/command_queue.h"
-#include "iree/hal/executable_cache.h"
-#include "iree/hal/semaphore.h"
-
-namespace iree {
-namespace hal {
-namespace dawn {
-
-namespace {
-
-// ExecutableCache implementation that compiles but does nothing.
-// This will be replaced with something functional soon.
-class NoopExecutableCache final : public ExecutableCache {
- public:
-  explicit NoopExecutableCache() {}
-  ~NoopExecutableCache() override = default;
-
-  bool CanPrepareFormat(ExecutableFormat format) const override {
-    return false;
-  }
-
-  StatusOr<ref_ptr<Executable>> PrepareExecutable(
-      ExecutableLayout* executable_layout, ExecutableCachingModeBitfield mode,
-      const ExecutableSpec& spec) override {
-    return UnimplementedErrorBuilder(IREE_LOC) << "PrepareExecutable NYI";
-  }
-};
-
-}  // namespace
-
-DawnDevice::DawnDevice(const DeviceInfo& device_info,
-                       ::wgpu::Device backend_device)
-    : Device(device_info), backend_device_(backend_device) {
-  IREE_TRACE_SCOPE0("DawnDevice::ctor");
-
-  // TODO(scotttodd): construct command queues, perform other initialization
-
-  // Log some basic device info.
-  std::string backend_type_str;
-  auto* adapter =
-      reinterpret_cast<dawn_native::Adapter*>(device_info.device_id());
-  switch (adapter->GetBackendType()) {
-    case dawn_native::BackendType::D3D12:
-      backend_type_str = "D3D12";
-      break;
-    case dawn_native::BackendType::Metal:
-      backend_type_str = "Metal";
-      break;
-    case dawn_native::BackendType::Null:
-      backend_type_str = "Null";
-      break;
-    case dawn_native::BackendType::OpenGL:
-      backend_type_str = "OpenGL";
-      break;
-    case dawn_native::BackendType::Vulkan:
-      backend_type_str = "Vulkan";
-      break;
-  }
-  LOG(INFO) << "Created DawnDevice '" << device_info.name() << "' ("
-            << backend_type_str << ")";
-}
-
-DawnDevice::~DawnDevice() = default;
-
-std::string DawnDevice::DebugString() const {
-  return absl::StrCat(Device::DebugString(),  //
-                      "\n[DawnDevice]",       //
-                      "\n  Command Queues: ", command_queues_.size());
-}
-
-StatusOr<ref_ptr<DescriptorSetLayout>> DawnDevice::CreateDescriptorSetLayout(
-    DescriptorSetLayout::UsageType usage_type,
-    absl::Span<const DescriptorSetLayout::Binding> bindings) {
-  IREE_TRACE_SCOPE0("DawnDevice::CreateDescriptorSetLayout");
-  return UnimplementedErrorBuilder(IREE_LOC) << "CreateDescriptorSetLayout NYI";
-}
-
-StatusOr<ref_ptr<DescriptorSet>> DawnDevice::CreateDescriptorSet(
-    DescriptorSetLayout* set_layout,
-    absl::Span<const DescriptorSet::Binding> bindings) {
-  IREE_TRACE_SCOPE0("DawnDevice::CreateDescriptorSet");
-  return UnimplementedErrorBuilder(IREE_LOC) << "CreateDescriptorSet NYI";
-}
-
-ref_ptr<ExecutableCache> DawnDevice::CreateExecutableCache() {
-  IREE_TRACE_SCOPE0("DawnDevice::CreateExecutableCache");
-  return make_ref<NoopExecutableCache>();
-}
-
-StatusOr<ref_ptr<ExecutableLayout>> DawnDevice::CreateExecutableLayout(
-    absl::Span<DescriptorSetLayout* const> set_layouts, size_t push_constants) {
-  IREE_TRACE_SCOPE0("DawnDevice::CreateExecutableLayout");
-  return UnimplementedErrorBuilder(IREE_LOC) << "CreateExecutableLayout NYI";
-}
-
-StatusOr<ref_ptr<CommandBuffer>> DawnDevice::CreateCommandBuffer(
-    CommandBufferModeBitfield mode,
-    CommandCategoryBitfield command_categories) {
-  return UnimplementedErrorBuilder(IREE_LOC) << "CreateCommandBuffer NYI";
-}
-
-StatusOr<ref_ptr<Event>> DawnDevice::CreateEvent() {
-  return UnimplementedErrorBuilder(IREE_LOC) << "CreateEvent NYI";
-}
-
-StatusOr<ref_ptr<Semaphore>> DawnDevice::CreateSemaphore(
-    uint64_t initial_value) {
-  IREE_TRACE_SCOPE0("DawnDevice::CreateSemaphore");
-
-  return UnimplementedErrorBuilder(IREE_LOC) << "CreateSemaphore NYI";
-}
-
-Status DawnDevice::WaitAllSemaphores(
-    absl::Span<const SemaphoreValue> semaphores, absl::Time deadline) {
-  IREE_TRACE_SCOPE0("DawnDevice::WaitAllSemaphores");
-
-  return UnimplementedErrorBuilder(IREE_LOC) << "WaitAllSemaphores NYI";
-}
-
-StatusOr<int> DawnDevice::WaitAnySemaphore(
-    absl::Span<const SemaphoreValue> semaphores, absl::Time deadline) {
-  IREE_TRACE_SCOPE0("DawnDevice::WaitAnySemaphore");
-
-  return UnimplementedErrorBuilder(IREE_LOC) << "WaitAnySemaphore NYI";
-}
-
-Status DawnDevice::WaitIdle(absl::Time deadline) {
-  return UnimplementedErrorBuilder(IREE_LOC) << "WaitIdle";
-}
-
-}  // namespace dawn
-}  // namespace hal
-}  // namespace iree
diff --git a/iree/hal/dawn/dawn_device.h b/iree/hal/dawn/dawn_device.h
deleted file mode 100644
index a20da84..0000000
--- a/iree/hal/dawn/dawn_device.h
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef IREE_HAL_DAWN_DAWN_DEVICE_H_
-#define IREE_HAL_DAWN_DAWN_DEVICE_H_
-
-#include "absl/container/inlined_vector.h"
-#include "absl/types/span.h"
-#include "iree/base/memory.h"
-#include "iree/hal/device.h"
-#include "iree/hal/host/host_local_allocator.h"
-#include "third_party/dawn/src/include/dawn/webgpu_cpp.h"
-#include "third_party/dawn/src/include/dawn_native/DawnNative.h"
-
-namespace iree {
-namespace hal {
-namespace dawn {
-
-class DawnDevice final : public Device {
- public:
-  explicit DawnDevice(const DeviceInfo& device_info,
-                      ::wgpu::Device backend_device);
-  ~DawnDevice() override;
-
-  std::string DebugString() const override;
-
-  Allocator* allocator() const override { return &allocator_; }
-
-  absl::Span<CommandQueue*> dispatch_queues() const override {
-    return RawPtrSpan(absl::MakeSpan(command_queues_));
-  }
-
-  absl::Span<CommandQueue*> transfer_queues() const override {
-    return RawPtrSpan(absl::MakeSpan(command_queues_));
-  }
-
-  ref_ptr<ExecutableCache> CreateExecutableCache() override;
-
-  StatusOr<ref_ptr<DescriptorSetLayout>> CreateDescriptorSetLayout(
-      DescriptorSetLayout::UsageType usage_type,
-      absl::Span<const DescriptorSetLayout::Binding> bindings) override;
-
-  StatusOr<ref_ptr<ExecutableLayout>> CreateExecutableLayout(
-      absl::Span<DescriptorSetLayout* const> set_layouts,
-      size_t push_constants) override;
-
-  StatusOr<ref_ptr<DescriptorSet>> CreateDescriptorSet(
-      DescriptorSetLayout* set_layout,
-      absl::Span<const DescriptorSet::Binding> bindings) override;
-
-  StatusOr<ref_ptr<CommandBuffer>> CreateCommandBuffer(
-      CommandBufferModeBitfield mode,
-      CommandCategoryBitfield command_categories) override;
-
-  StatusOr<ref_ptr<Event>> CreateEvent() override;
-
-  StatusOr<ref_ptr<Semaphore>> CreateSemaphore(uint64_t initial_value) override;
-
-  Status WaitAllSemaphores(absl::Span<const SemaphoreValue> semaphores,
-                           absl::Time deadline) override;
-  StatusOr<int> WaitAnySemaphore(absl::Span<const SemaphoreValue> semaphores,
-                                 absl::Time deadline) override;
-
-  Status WaitIdle(absl::Time deadline) override;
-
- private:
-  mutable host::HostLocalAllocator allocator_;
-  mutable absl::InlinedVector<std::unique_ptr<CommandQueue>, 1> command_queues_;
-
-  ::wgpu::Device backend_device_;
-};
-
-}  // namespace dawn
-}  // namespace hal
-}  // namespace iree
-
-#endif  // IREE_HAL_DAWN_DAWN_DEVICE_H_
diff --git a/iree/hal/dawn/dawn_driver.cc b/iree/hal/dawn/dawn_driver.cc
deleted file mode 100644
index 34dd792..0000000
--- a/iree/hal/dawn/dawn_driver.cc
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "iree/hal/dawn/dawn_driver.h"
-
-#include "absl/memory/memory.h"
-#include "absl/strings/str_cat.h"
-#include "iree/base/status.h"
-#include "iree/base/tracing.h"
-#include "iree/hal/dawn/dawn_device.h"
-#include "iree/hal/device_info.h"
-#include "third_party/dawn/src/include/dawn/dawn_proc.h"
-
-namespace iree {
-namespace hal {
-namespace dawn {
-
-namespace {
-
-// Populates device information from the given dawn_native::Adapter.
-StatusOr<DeviceInfo> PopulateDeviceInfo(dawn_native::Adapter* adapter) {
-  // TODO(scotttodd): Query these for each backend or implement?
-  DeviceFeatureBitfield supported_features = DeviceFeature::kNone;
-  // supported_features |= DeviceFeature::kDebugging;
-  // supported_features |= DeviceFeature::kCoverage;
-  // supported_features |= DeviceFeature::kProfiling;
-
-  // TODO(scotttodd): more clever/sanitized device naming.
-  std::string device_id = "dawn";
-  std::string device_name = absl::StrCat("dawn-", adapter->GetPCIInfo().name);
-
-  return DeviceInfo(device_id, device_name, supported_features,
-                    reinterpret_cast<DriverDeviceID>(adapter));
-}
-
-}  // namespace
-
-DawnDriver::DawnDriver() : Driver("dawn") {
-  dawn_instance_ = absl::make_unique<dawn_native::Instance>();
-}
-
-DawnDriver::~DawnDriver() = default;
-
-StatusOr<std::vector<DeviceInfo>> DawnDriver::EnumerateAvailableDevices() {
-  IREE_TRACE_SCOPE0("DawnDriver::EnumerateAvailableDevices");
-
-  if (dawn_backend_adapters_.empty()) {
-    // Discover adapters (i.e. devices and their associated backend APIs).
-    // Retain the list of adapters so pointers are valid for the lifetime of
-    // this object.
-    dawn_instance_->DiscoverDefaultAdapters();
-    dawn_backend_adapters_ = dawn_instance_->GetAdapters();
-  } else {
-    // Assume that the list of adapters does not change. This is not guaranteed
-    // to be true, but we also don't want to invalidate pointers by requesting
-    // a new list each time. If the list of available devices would change,
-    // tearing down and creating a new DawnDriver may be your best option.
-  }
-
-  // Convert to our HAL structure.
-  std::vector<DeviceInfo> device_infos;
-  device_infos.reserve(dawn_backend_adapters_.size());
-  for (auto& adapter : dawn_backend_adapters_) {
-    // TODO(scotttodd): if we fail should we just ignore the device in the list?
-    ASSIGN_OR_RETURN(auto device_info, PopulateDeviceInfo(&adapter));
-    device_infos.push_back(std::move(device_info));
-  }
-  return device_infos;
-}
-
-StatusOr<ref_ptr<Device>> DawnDriver::CreateDefaultDevice() {
-  IREE_TRACE_SCOPE0("DawnDriver::CreateDefaultDevice");
-
-  // Query available devices.
-  ASSIGN_OR_RETURN(auto available_devices, EnumerateAvailableDevices());
-  if (available_devices.empty()) {
-    return NotFoundErrorBuilder(IREE_LOC) << "No devices are available";
-  }
-
-  // Create the first non-null device, if any.
-  for (const auto& device : available_devices) {
-    auto* adapter = reinterpret_cast<dawn_native::Adapter*>(device.device_id());
-    if (adapter->GetBackendType() != dawn_native::BackendType::Null) {
-      return CreateDevice(device.device_id());
-    }
-  }
-
-  // Otherwise create the first null device.
-  return CreateDevice(available_devices.front().device_id());
-}
-
-StatusOr<ref_ptr<Device>> DawnDriver::CreateDevice(DriverDeviceID device_id) {
-  IREE_TRACE_SCOPE0("DawnDriver::CreateDevice");
-
-  auto* adapter = reinterpret_cast<dawn_native::Adapter*>(device_id);
-  ASSIGN_OR_RETURN(auto device_info, PopulateDeviceInfo(adapter));
-
-  ::WGPUDevice c_backend_device = adapter->CreateDevice();
-  if (!c_backend_device) {
-    return InternalErrorBuilder(IREE_LOC) << "Failed to create a Dawn device";
-  }
-  DawnProcTable backend_procs = dawn_native::GetProcs();
-  dawnProcSetProcs(&backend_procs);
-  ::wgpu::Device backend_device = ::wgpu::Device::Acquire(c_backend_device);
-
-  return make_ref<DawnDevice>(device_info, backend_device);
-}
-
-}  // namespace dawn
-}  // namespace hal
-}  // namespace iree
diff --git a/iree/hal/dawn/dawn_driver.h b/iree/hal/dawn/dawn_driver.h
deleted file mode 100644
index 0d5ea07..0000000
--- a/iree/hal/dawn/dawn_driver.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef IREE_HAL_DAWN_DAWN_DRIVER_H_
-#define IREE_HAL_DAWN_DAWN_DRIVER_H_
-
-#include <memory>
-#include <vector>
-
-#include "iree/hal/driver.h"
-#include "third_party/dawn/src/include/dawn/webgpu_cpp.h"
-#include "third_party/dawn/src/include/dawn_native/DawnNative.h"
-
-namespace iree {
-namespace hal {
-namespace dawn {
-
-class DawnDriver final : public Driver {
- public:
-  DawnDriver();
-  ~DawnDriver() override;
-
-  StatusOr<std::vector<DeviceInfo>> EnumerateAvailableDevices() override;
-
-  StatusOr<ref_ptr<Device>> CreateDefaultDevice() override;
-
-  StatusOr<ref_ptr<Device>> CreateDevice(DriverDeviceID device_id) override;
-
- private:
-  std::unique_ptr<dawn_native::Instance> dawn_instance_;
-  std::vector<dawn_native::Adapter> dawn_backend_adapters_;
-};
-
-}  // namespace dawn
-}  // namespace hal
-}  // namespace iree
-
-#endif  // IREE_HAL_DAWN_DAWN_DRIVER_H_
diff --git a/iree/hal/dawn/dawn_driver_module.cc b/iree/hal/dawn/dawn_driver_module.cc
deleted file mode 100644
index 6f62bbf..0000000
--- a/iree/hal/dawn/dawn_driver_module.cc
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include <memory>
-
-#include "iree/base/init.h"
-#include "iree/base/status.h"
-#include "iree/base/tracing.h"
-#include "iree/hal/dawn/dawn_driver.h"
-#include "iree/hal/driver_registry.h"
-
-namespace iree {
-namespace hal {
-namespace dawn {
-namespace {
-
-StatusOr<ref_ptr<Driver>> CreateDawnDriver() { return make_ref<DawnDriver>(); }
-
-}  // namespace
-}  // namespace dawn
-}  // namespace hal
-}  // namespace iree
-
-IREE_REGISTER_MODULE_INITIALIZER(iree_hal_dawn_driver, {
-  QCHECK_OK(::iree::hal::DriverRegistry::shared_registry()->Register(
-      "dawn", ::iree::hal::dawn::CreateDawnDriver));
-});
-IREE_REGISTER_MODULE_INITIALIZER_SEQUENCE(iree_hal, iree_hal_dawn_driver);
diff --git a/iree/hal/dawn/dawn_driver_test.cc b/iree/hal/dawn/dawn_driver_test.cc
deleted file mode 100644
index ccecbe4..0000000
--- a/iree/hal/dawn/dawn_driver_test.cc
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "iree/hal/dawn/dawn_driver.h"
-
-#include "iree/base/status_matchers.h"
-#include "iree/testing/gtest.h"
-
-namespace iree {
-namespace hal {
-namespace dawn {
-namespace {
-
-TEST(DawnDriverTest, CreateDefaultDevice) {
-  DawnDriver dawn_driver;
-  ASSERT_OK_AND_ASSIGN(auto default_device, dawn_driver.CreateDefaultDevice());
-}
-
-TEST(DawnDriverTest, EnumerateDevicesAndCreate) {
-  DawnDriver dawn_driver;
-
-  ASSERT_OK_AND_ASSIGN(auto available_devices,
-                       dawn_driver.EnumerateAvailableDevices());
-  ASSERT_GT(available_devices.size(), 0);
-
-  ASSERT_OK_AND_ASSIGN(
-      auto first_device,
-      dawn_driver.CreateDevice(available_devices[0].device_id()));
-}
-
-}  // namespace
-}  // namespace dawn
-}  // namespace hal
-}  // namespace iree
diff --git a/iree/modules/check/BUILD b/iree/modules/check/BUILD
index 87f83a0..863b189 100644
--- a/iree/modules/check/BUILD
+++ b/iree/modules/check/BUILD
@@ -80,7 +80,6 @@
     deps = [
         "//iree/base:api",
         "//iree/base:api_util",
-        "//iree/base:buffer_string_util",
         "//iree/base:status",
         "//iree/hal:api",
         "//iree/modules/hal",
diff --git a/iree/modules/check/CMakeLists.txt b/iree/modules/check/CMakeLists.txt
index fb6d66e..804b844 100644
--- a/iree/modules/check/CMakeLists.txt
+++ b/iree/modules/check/CMakeLists.txt
@@ -80,7 +80,6 @@
     absl::strings
     iree::base::api
     iree::base::api_util
-    iree::base::buffer_string_util
     iree::base::status
     iree::hal::api
     iree::modules::hal
diff --git a/iree/modules/check/native_module.cc b/iree/modules/check/native_module.cc
index d90d521..4647643 100644
--- a/iree/modules/check/native_module.cc
+++ b/iree/modules/check/native_module.cc
@@ -24,7 +24,6 @@
 #include "absl/strings/str_cat.h"
 #include "iree/base/api.h"
 #include "iree/base/api_util.h"
-#include "iree/base/buffer_string_util.h"
 #include "iree/base/status.h"
 #include "iree/hal/api.h"
 #include "iree/modules/hal/hal_module.h"
@@ -47,6 +46,22 @@
                        bytes.data_length / sizeof(T));
 }
 
+StatusOr<std::string> BufferViewToString(iree_hal_buffer_view_t* buffer_view) {
+  std::string result_str(4096, '\0');
+  iree_status_t status;
+  do {
+    iree_host_size_t actual_length = 0;
+    status = iree_hal_buffer_view_format(
+        buffer_view, /*max_element_count=*/1024, result_str.size() + 1,
+        &result_str[0], &actual_length);
+    result_str.resize(actual_length);
+  } while (iree_status_is_out_of_range(status));
+  if (!iree_status_is_ok(status)) {
+    return FromApiStatus(status, IREE_LOC);
+  }
+  return std::move(result_str);
+}
+
 template <typename T>
 Status ExpectAllTrue(iree_byte_span_t bytes) {
   EXPECT_THAT(AbslSpan<T>(bytes), Each(Not(0)));
@@ -225,6 +240,9 @@
     bool shape_eq = lhs_shape == rhs_shape;
     bool contents_eq =
         EqByteSpan(lhs_mapped_memory.contents, rhs_mapped_memory.contents);
+    iree_hal_buffer_unmap(lhs_buf, &lhs_mapped_memory);
+    iree_hal_buffer_unmap(rhs_buf, &rhs_mapped_memory);
+
     if (!element_types_eq || !shape_eq || !contents_eq) {
       std::ostringstream os;
       os << "Expected equality of these values.";
@@ -241,43 +259,18 @@
       os << "\n"
             "  lhs:\n"
             "    ";
-      char lhs_element_type_str[16];
-      RETURN_IF_ERROR(FromApiStatus(
-          iree_hal_format_element_type(iree_hal_buffer_view_element_type(lhs),
-                                       sizeof(lhs_element_type_str),
-                                       lhs_element_type_str, nullptr),
-          IREE_LOC));
-      // TODO(b/146898896): Remove dependence on Shape.
-      PrintShapedTypeToStream(Shape{lhs_shape}, lhs_element_type_str, &os);
-      os << "=";
-      RETURN_IF_ERROR(
-          PrintNumericalDataToStream(Shape{lhs_shape}, lhs_element_type_str,
-                                     {lhs_mapped_memory.contents.data,
-                                      lhs_mapped_memory.contents.data_length},
-                                     /*max_entries=*/1024, &os));
+      ASSIGN_OR_RETURN(auto lhs_str, BufferViewToString(lhs));
+      os << lhs_str;
 
       os << "\n"
             "  rhs:\n"
             "    ";
-      char rhs_element_type_str[16];
-      RETURN_IF_ERROR(FromApiStatus(
-          iree_hal_format_element_type(iree_hal_buffer_view_element_type(rhs),
-                                       sizeof(rhs_element_type_str),
-                                       rhs_element_type_str, nullptr),
-          IREE_LOC));
-      PrintShapedTypeToStream(Shape{rhs_shape}, rhs_element_type_str, &os);
-      os << "=";
-      RETURN_IF_ERROR(
-          PrintNumericalDataToStream(Shape{rhs_shape}, rhs_element_type_str,
-                                     {rhs_mapped_memory.contents.data,
-                                      rhs_mapped_memory.contents.data_length},
-                                     /*max_entries=*/1024, &os));
+      ASSIGN_OR_RETURN(auto rhs_str, BufferViewToString(rhs));
+      os << rhs_str;
 
       // TODO(b/146898896): Use ADD_FAILURE_AT to propagate source location.
       ADD_FAILURE() << os.str();
     }
-    iree_hal_buffer_unmap(lhs_buf, &lhs_mapped_memory);
-    iree_hal_buffer_unmap(rhs_buf, &rhs_mapped_memory);
 
     return OkStatus();
   }
@@ -328,6 +321,9 @@
           AlmostEqByteSpan(lhs_mapped_memory.contents,
                            rhs_mapped_memory.contents, lhs_element_type));
     }
+    iree_hal_buffer_unmap(lhs_buf, &lhs_mapped_memory);
+    iree_hal_buffer_unmap(rhs_buf, &rhs_mapped_memory);
+
     if (!element_types_eq || !shape_eq || !contents_could_be_almost_eq) {
       std::ostringstream os;
       os << "Expected near equality of these values.";
@@ -344,43 +340,18 @@
       os << "\n"
             "  lhs:\n"
             "    ";
-      char lhs_element_type_str[16];
-      RETURN_IF_ERROR(FromApiStatus(
-          iree_hal_format_element_type(iree_hal_buffer_view_element_type(lhs),
-                                       sizeof(lhs_element_type_str),
-                                       lhs_element_type_str, nullptr),
-          IREE_LOC));
-      // TODO(b/146898896): Remove dependence on Shape.
-      PrintShapedTypeToStream(Shape{lhs_shape}, lhs_element_type_str, &os);
-      os << "=";
-      RETURN_IF_ERROR(
-          PrintNumericalDataToStream(Shape{lhs_shape}, lhs_element_type_str,
-                                     {lhs_mapped_memory.contents.data,
-                                      lhs_mapped_memory.contents.data_length},
-                                     /*max_entries=*/1024, &os));
+      ASSIGN_OR_RETURN(auto lhs_str, BufferViewToString(lhs));
+      os << lhs_str;
 
       os << "\n"
             "  rhs:\n"
             "    ";
-      char rhs_element_type_str[16];
-      RETURN_IF_ERROR(FromApiStatus(
-          iree_hal_format_element_type(iree_hal_buffer_view_element_type(rhs),
-                                       sizeof(rhs_element_type_str),
-                                       rhs_element_type_str, nullptr),
-          IREE_LOC));
-      PrintShapedTypeToStream(Shape{rhs_shape}, rhs_element_type_str, &os);
-      os << "=";
-      RETURN_IF_ERROR(
-          PrintNumericalDataToStream(Shape{rhs_shape}, rhs_element_type_str,
-                                     {rhs_mapped_memory.contents.data,
-                                      rhs_mapped_memory.contents.data_length},
-                                     /*max_entries=*/1024, &os));
+      ASSIGN_OR_RETURN(auto rhs_str, BufferViewToString(rhs));
+      os << rhs_str;
 
       // TODO(b/146898896): Use ADD_FAILURE_AT to propagate source location.
       ADD_FAILURE() << os.str();
     }
-    iree_hal_buffer_unmap(lhs_buf, &lhs_mapped_memory);
-    iree_hal_buffer_unmap(rhs_buf, &rhs_mapped_memory);
 
     return OkStatus();
   }
diff --git a/iree/samples/custom_modules/BUILD b/iree/samples/custom_modules/BUILD
index 411e69c..7a65e51 100644
--- a/iree/samples/custom_modules/BUILD
+++ b/iree/samples/custom_modules/BUILD
@@ -55,9 +55,6 @@
     deps = [
         "//iree/base:api",
         "//iree/base:api_util",
-        "//iree/base:buffer_string_util",
-        "//iree/base:shape",
-        "//iree/base:shaped_buffer_string_util",
         "//iree/hal:api",
         "//iree/modules/hal",
         "//iree/vm",
diff --git a/iree/samples/custom_modules/CMakeLists.txt b/iree/samples/custom_modules/CMakeLists.txt
index 0998857..44224a4 100644
--- a/iree/samples/custom_modules/CMakeLists.txt
+++ b/iree/samples/custom_modules/CMakeLists.txt
@@ -59,9 +59,6 @@
   DEPS
     iree::base::api
     iree::base::api_util
-    iree::base::buffer_string_util
-    iree::base::shape
-    iree::base::shaped_buffer_string_util
     iree::hal::api
     iree::modules::hal
     iree::vm
diff --git a/iree/samples/custom_modules/native_module.cc b/iree/samples/custom_modules/native_module.cc
index 93ffcf9..ade2f9c 100644
--- a/iree/samples/custom_modules/native_module.cc
+++ b/iree/samples/custom_modules/native_module.cc
@@ -19,9 +19,6 @@
 
 #include "iree/base/api.h"
 #include "iree/base/api_util.h"
-#include "iree/base/buffer_string_util.h"
-#include "iree/base/shape.h"
-#include "iree/base/shaped_buffer_string_util.h"
 #include "iree/hal/api.h"
 #include "iree/modules/hal/hal_module.h"
 #include "iree/vm/module_abi_cc.h"
@@ -133,56 +130,36 @@
   Status Initialize(int32_t unique_id) {
     // Allocate a unique ID to demonstrate per-context state.
     auto str_buffer = "ctx_" + std::to_string(unique_id);
-    return FromApiStatus(
+    RETURN_IF_ERROR(FromApiStatus(
         iree_custom_message_create(iree_make_cstring_view(str_buffer.c_str()),
                                    allocator_, &unique_message_),
-        IREE_LOC);
+        IREE_LOC));
+
+    // Setup a host-local allocator we can use because this sample doesn't have
+    // a real device allocator.
+    RETURN_IF_ERROR(FromApiStatus(iree_hal_allocator_create_host_local(
+                                      allocator_, &host_local_allocator_),
+                                  IREE_LOC));
+
+    return OkStatus();
   }
 
   // custom.buffer_to_message(%buffer_view) -> %result
   StatusOr<vm::ref<iree_custom_message_t>> BufferToMessage(
       vm::ref<iree_hal_buffer_view_t> buffer_view) {
-    iree_hal_buffer_t* buffer = iree_hal_buffer_view_buffer(buffer_view.get());
-
-    // Map the buffer memory so we can read it back.
-    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));
-
-    // NOTE: these string methods take the old Shape type and as such have a
-    // rank limit. That limit is just an artifact of those APIs, not the
-    // buffer view shape type.
-    absl::InlinedVector<int32_t, kMaxRank> shape(kMaxRank);
-    size_t rank = 0;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_view_shape(buffer_view.get(), shape.capacity(),
-                                   shape.data(), &rank),
-        IREE_LOC));
-    shape.resize(rank);
-    char element_type_str[16];
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_hal_format_element_type(
-                          iree_hal_buffer_view_element_type(buffer_view.get()),
-                          sizeof(element_type_str), element_type_str, nullptr),
-                      IREE_LOC));
-
-    // Print the buffer contents using our helpers.
-    std::string string_value;
-    RETURN_IF_ERROR(PrintNumericalDataToString(
-        Shape{shape}, element_type_str,
-        {mapped_memory.contents.data, mapped_memory.contents.data_length},
-        /*max_entries=*/1024, &string_value));
-
-    // Prefix shape/type.
-    string_value =
-        absl::StrCat(PrintShapedTypeToString(Shape{shape}, element_type_str),
-                     "=", string_value);
-
-    // Unmap the buffer when we are done with it.
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_hal_buffer_unmap(buffer, &mapped_memory), IREE_LOC));
+    // Convert the buffer view to a [shape]x[type]=[contents] string.
+    std::string string_value(4096, '\0');
+    iree_status_t status;
+    do {
+      iree_host_size_t actual_length = 0;
+      status = iree_hal_buffer_view_format(
+          buffer_view.get(), /*max_element_count=*/1024,
+          string_value.size() + 1, &string_value[0], &actual_length);
+      string_value.resize(actual_length);
+    } while (iree_status_is_out_of_range(status));
+    if (!iree_status_is_ok(status)) {
+      return FromApiStatus(status, IREE_LOC);
+    }
 
     // Pack the string contents into a message.
     vm::ref<iree_custom_message_t> message;
@@ -197,57 +174,17 @@
   // custom.message_to_buffer(%message) -> %buffer_view
   StatusOr<vm::ref<iree_hal_buffer_view_t>> MessageToBuffer(
       vm::ref<iree_custom_message_t> message) {
-    // NOTE: these old-style parsing routines need to be updated for the new
-    // type system. They use different types, different shapes, etc.
-    auto str_parts = BufferStringParts::ExtractFrom(
-        absl::string_view(message->value.data, message->value.size));
-    iree_hal_element_type_t element_type = IREE_HAL_ELEMENT_TYPE_NONE;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_parse_element_type(
-            {str_parts.type_str.data(), str_parts.type_str.size()},
-            &element_type),
-        IREE_LOC));
-    ASSIGN_OR_RETURN(auto shape, ParseShape(str_parts.shape_str));
-
-    // TODO(benvanik): plumb through an allocator we can use.
-    size_t allocation_size =
-        shape.element_count() * iree_hal_element_byte_count(element_type);
-    vm::ref<iree_hal_buffer_t> buffer;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_heap_buffer_allocate(
-            IREE_HAL_MEMORY_TYPE_HOST_LOCAL,
-            static_cast<iree_hal_buffer_usage_t>(
-                IREE_HAL_BUFFER_USAGE_ALL | IREE_HAL_BUFFER_USAGE_CONSTANT),
-            allocation_size, IREE_ALLOCATOR_SYSTEM, IREE_ALLOCATOR_SYSTEM,
-            &buffer),
-        IREE_LOC));
-    if (!str_parts.data_str.empty()) {
-      // Map the buffer memory so we can write it with the data contents.
-      iree_hal_mapped_memory_t mapped_memory;
-      RETURN_IF_ERROR(FromApiStatus(
-          iree_hal_buffer_map(buffer.get(),
-                              IREE_HAL_MEMORY_ACCESS_DISCARD_WRITE, 0,
-                              IREE_WHOLE_BUFFER, &mapped_memory),
-          IREE_LOC));
-
-      // Parse the data from the string right into the buffer.
-      RETURN_IF_ERROR(ParseBufferDataAsType(
-          str_parts.data_str, str_parts.type_str,
-          absl::MakeSpan(mapped_memory.contents.data,
-                         mapped_memory.contents.data_length)));
-
-      // Unmap the buffer when we are done with it.
-      RETURN_IF_ERROR(FromApiStatus(
-          iree_hal_buffer_unmap(buffer.get(), &mapped_memory), IREE_LOC));
-    }
-
-    // Wrap in a buffer view to pass back into the VM.
+    // Convert the [shape]x[type]=[contents] string to a buffer view.
+    auto input_string =
+        absl::string_view(message->value.data, message->value.size);
     vm::ref<iree_hal_buffer_view_t> buffer_view;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_view_create(buffer.get(), shape.data().data(),
-                                    shape.size(), element_type,
-                                    IREE_ALLOCATOR_SYSTEM, &buffer_view),
-        IREE_LOC));
+    iree_status_t status = iree_hal_buffer_view_parse(
+        iree_string_view_t{input_string.data(), input_string.size()},
+        host_local_allocator_.get(), allocator_, &buffer_view);
+    if (!iree_status_is_ok(status)) {
+      return FromApiStatus(status, IREE_LOC)
+             << "Parsing value '" << input_string << "'";
+    }
     return std::move(buffer_view);
   }
 
@@ -289,6 +226,11 @@
   // perform during operation.
   iree_allocator_t allocator_ = IREE_ALLOCATOR_SYSTEM;
 
+  // HAL buffer allocator that uses host-local memory. This is just for this
+  // test as we don't actually use a HAL device and don't have a real device
+  // allocator to use.
+  vm::ref<iree_hal_allocator_t> host_local_allocator_;
+
   // A unique message owned by the state and returned to the VM.
   // This demonstrates any arbitrary per-context state one may want to store.
   vm::ref<iree_custom_message_t> unique_message_;
diff --git a/iree/schemas/BUILD b/iree/schemas/BUILD
index b72d7a9..4d9d6d1 100644
--- a/iree/schemas/BUILD
+++ b/iree/schemas/BUILD
@@ -33,12 +33,6 @@
     "--gen-object-api",
 ]
 
-iree_flatbuffer_cc_library(
-    name = "buffer_data_def_cc_fbs",
-    srcs = ["buffer_data_def.fbs"],
-    flatc_args = FLATC_ARGS,
-)
-
 # TODO(benvanik): also expose as C using flatcc.
 iree_flatbuffer_cc_library(
     name = "bytecode_module_def_cc_fbs",
@@ -53,12 +47,6 @@
 )
 
 iree_flatbuffer_cc_library(
-    name = "interpreter_module_def_cc_fbs",
-    srcs = ["interpreter_module_def.fbs"],
-    flatc_args = FLATC_ARGS,
-)
-
-iree_flatbuffer_cc_library(
     name = "llvmir_executable_def_cc_fbs",
     srcs = ["llvmir_executable_def.fbs"],
     flatc_args = FLATC_ARGS,
@@ -79,10 +67,8 @@
 iree_build_test(
     name = "schema_build_test",
     targets = [
-        ":buffer_data_def_cc_fbs",
         ":bytecode_module_def_cc_fbs",
         ":dylib_executable_def_cc_fbs",
-        ":interpreter_module_def_cc_fbs",
         ":llvmir_executable_def_cc_fbs",
         ":spirv_executable_def_cc_fbs",
         ":vmla_executable_def_cc_fbs",
@@ -90,10 +76,8 @@
 )
 
 REFLECTION_SRCS = [] if not FLATBUFFER_SUPPORTS_REFLECTIONS else [
-    "buffer_data_def.bfbs",
     "bytecode_module_def.bfbs",
     "dylib_executable_def.bfbs",
-    "interpreter_module_def.bfbs",
     "llvmir_executable_def.bfbs",
     "spirv_executable_def.bfbs",
     "vmla_executable_def.bfbs",
diff --git a/iree/schemas/CMakeLists.txt b/iree/schemas/CMakeLists.txt
index ebabfc0..751ed40 100644
--- a/iree/schemas/CMakeLists.txt
+++ b/iree/schemas/CMakeLists.txt
@@ -16,19 +16,6 @@
 
 flatbuffer_cc_library(
   NAME
-    buffer_data_def_cc_fbs
-  SRCS
-    "buffer_data_def.fbs"
-  FLATC_ARGS
-    "--keep-prefix"
-    "--scoped-enums"
-    "--reflect-names"
-    "--gen-object-api"
-  PUBLIC
-)
-
-flatbuffer_cc_library(
-  NAME
     bytecode_module_def_cc_fbs
   SRCS
     "bytecode_module_def.fbs"
@@ -55,19 +42,6 @@
 
 flatbuffer_cc_library(
   NAME
-    interpreter_module_def_cc_fbs
-  SRCS
-    "interpreter_module_def.fbs"
-  FLATC_ARGS
-    "--keep-prefix"
-    "--scoped-enums"
-    "--reflect-names"
-    "--gen-object-api"
-  PUBLIC
-)
-
-flatbuffer_cc_library(
-  NAME
     llvmir_executable_def_cc_fbs
   SRCS
     "llvmir_executable_def.fbs"
diff --git a/iree/schemas/buffer_data_def.fbs b/iree/schemas/buffer_data_def.fbs
deleted file mode 100644
index 546e2bf..0000000
--- a/iree/schemas/buffer_data_def.fbs
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-namespace iree;
-
-enum BufferConstantEncoding : uint8 {
-  DENSE = 0,
-  SPLAT,
-}
-
-table BufferDataDef {
-  encoding:BufferConstantEncoding;
-  element_width:int;
-  shape:[int];
-  contents:[byte];
-}
diff --git a/iree/schemas/interpreter_module_def.fbs b/iree/schemas/interpreter_module_def.fbs
deleted file mode 100644
index 189e424..0000000
--- a/iree/schemas/interpreter_module_def.fbs
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright 2019 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-namespace iree;
-
-// 'Executable MODule'.
-file_identifier "EMOD";
-file_extension "emod";
-
-table FloatTypeDef {
-  width:int;
-}
-
-table IntegerTypeDef {
-  width:int;
-}
-
-table UnknownTypeDef {
-  dialect:string;
-  type_data:string;
-}
-
-union ElementTypeDefUnion {
-  FloatTypeDef,
-  IntegerTypeDef,
-  UnknownTypeDef,
-}
-
-table ElementTypeDef {
-  type_union:ElementTypeDefUnion;
-}
-
-table MemRefTypeDef {
-  element_type:ElementTypeDef;
-  shape:[int];
-  memory_space:int;
-}
-
-table DeviceTypeDef {}
-table CommandBufferTypeDef {}
-table EventTypeDef {}
-table SemaphoreTypeDef {}
-table FenceTypeDef {}
-
-union TypeDefUnion {
-  MemRefTypeDef,
-  DeviceTypeDef,
-  CommandBufferTypeDef,
-  EventTypeDef,
-  SemaphoreTypeDef,
-  FenceTypeDef,
-}
-
-table TypeDef {
-  type_union:TypeDefUnion;
-}
-
-table FunctionTypeDef {
-  inputs:[TypeDef];
-  results:[TypeDef];
-}
-
-table BytecodeDef {
-  local_count:int;
-  contents:[byte];
-}
-
-table FunctionAttributeDef {
-  key:string;
-  value:string;
-}
-
-table FunctionDef {
-  name:string;
-  type:FunctionTypeDef;
-
-  attrs:[FunctionAttributeDef];
-
-  bytecode:BytecodeDef;
-}
-
-table FunctionTableDef {
-  functions:[FunctionDef];
-  imports:[int];
-  exports:[int];
-}
-
-table ModuleDef {
-  name:string;
-  function_table:FunctionTableDef;
-}
-
-root_type ModuleDef;
diff --git a/iree/tools/BUILD b/iree/tools/BUILD
index 3ee8120..6f3cd56 100644
--- a/iree/tools/BUILD
+++ b/iree/tools/BUILD
@@ -344,10 +344,6 @@
     hdrs = ["vm_util.h"],
     deps = [
         "//iree/base:api_util",
-        "//iree/base:buffer_string_util",
-        "//iree/base:shape",
-        "//iree/base:shaped_buffer",
-        "//iree/base:shaped_buffer_string_util",
         "//iree/base:signature_mangle",
         "//iree/base:status",
         "//iree/hal:api",
diff --git a/iree/tools/CMakeLists.txt b/iree/tools/CMakeLists.txt
index 4f1e8b4..9d57aff 100644
--- a/iree/tools/CMakeLists.txt
+++ b/iree/tools/CMakeLists.txt
@@ -362,10 +362,6 @@
     absl::span
     absl::strings
     iree::base::api_util
-    iree::base::buffer_string_util
-    iree::base::shape
-    iree::base::shaped_buffer
-    iree::base::shaped_buffer_string_util
     iree::base::signature_mangle
     iree::base::status
     iree::hal::api
diff --git a/iree/tools/vm_util.cc b/iree/tools/vm_util.cc
index 30877f9..f911a34 100644
--- a/iree/tools/vm_util.cc
+++ b/iree/tools/vm_util.cc
@@ -21,10 +21,6 @@
 #include "absl/strings/strip.h"
 #include "absl/types/span.h"
 #include "iree/base/api_util.h"
-#include "iree/base/buffer_string_util.h"
-#include "iree/base/shape.h"
-#include "iree/base/shaped_buffer.h"
-#include "iree/base/shaped_buffer_string_util.h"
 #include "iree/base/signature_mangle.h"
 #include "iree/base/status.h"
 #include "iree/hal/api.h"
@@ -130,51 +126,14 @@
         break;
       }
       case RawSignatureParser::Type::kBuffer: {
-        ASSIGN_OR_RETURN(auto shaped_buffer,
-                         ParseShapedBufferFromString(input_string),
-                         _ << "Parsing value '" << input_string << "'");
-        // Allocate the buffer.
-        iree_hal_buffer_t* buf = 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, &buf),
-            IREE_LOC))
-            << "Allocating buffer";
-        RETURN_IF_ERROR(FromApiStatus(
-            iree_hal_buffer_write_data(buf, 0, shaped_buffer.contents().data(),
-                                       shaped_buffer.contents().size()),
-            IREE_LOC))
-            << "Populating buffer contents ";
-
-        absl::InlinedVector<iree_hal_dim_t, 5> dims(
-            shaped_buffer.shape().size());
-        // TODO(laurenzo): The following should work but Shape iterators
-        // cause access violations.
-        // std::copy(shaped_buffer.shape().begin(), shaped_buffer.shape().end(),
-        //           dims.begin());
-        for (size_t i = 0; i < dims.size(); ++i) {
-          dims[i] = shaped_buffer.shape()[i];
-        }
-
-        // Wrap in buffer view.
         iree_hal_buffer_view_t* buffer_view = nullptr;
-        RETURN_IF_ERROR(FromApiStatus(
-            iree_hal_buffer_view_create(buf, dims.data(), dims.size(),
-                                        hal_element_type, IREE_ALLOCATOR_SYSTEM,
-                                        &buffer_view),
-            IREE_LOC))
-            << "Creating buffer view";
-        iree_hal_buffer_release(buf);
+        iree_status_t status = iree_hal_buffer_view_parse(
+            iree_string_view_t{input_string.data(), input_string.size()},
+            allocator, IREE_ALLOCATOR_SYSTEM, &buffer_view);
+        if (!iree_status_is_ok(status)) {
+          return FromApiStatus(status, IREE_LOC)
+                 << "Parsing value '" << input_string << "'";
+        }
         auto buffer_view_ref = iree_hal_buffer_view_move_ref(buffer_view);
         RETURN_IF_ERROR(FromApiStatus(iree_vm_variant_list_append_ref_move(
                                           variant_list, &buffer_view_ref),
@@ -231,63 +190,20 @@
           return InvalidArgumentErrorBuilder(IREE_LOC)
                  << "failed dereferencing variant " << i;
         }
-        auto* buffer = iree_hal_buffer_view_buffer(buffer_view);
-        if (!buffer) {
-          return InvalidArgumentErrorBuilder(IREE_LOC)
-                 << "failed to get buffer for variant " << i;
+
+        std::string result_str(4096, '\0');
+        iree_status_t status;
+        do {
+          iree_host_size_t actual_length = 0;
+          status = iree_hal_buffer_view_format(
+              buffer_view, /*max_element_count=*/1024, result_str.size() + 1,
+              &result_str[0], &actual_length);
+          result_str.resize(actual_length);
+        } while (iree_status_is_out_of_range(status));
+        if (!iree_status_is_ok(status)) {
+          return FromApiStatus(status, IREE_LOC);
         }
 
-        auto print_mode = BufferDataPrintMode::kFloatingPoint;
-        int8_t element_size = 4;
-
-        // Copy the dims out of the buffer view.
-        absl::InlinedVector<iree_hal_dim_t, 5> dims32(
-            iree_hal_buffer_view_shape_rank(buffer_view));
-        iree_hal_buffer_view_shape(buffer_view, dims32.size(), dims32.data(),
-                                   nullptr);
-        absl::InlinedVector<int, 5> dims(dims32.size());
-        std::copy(dims32.begin(), dims32.end(), dims.begin());
-        Shape shape{dims};
-
-        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)];
-
-        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))
-            << "mapping hal buffer";
-        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);
         *os << result_str << "\n";
         break;
       }
diff --git a/iree/tools/vm_util.h b/iree/tools/vm_util.h
index c039a1d..1a793c3 100644
--- a/iree/tools/vm_util.h
+++ b/iree/tools/vm_util.h
@@ -46,7 +46,7 @@
 // Buffers should be in the IREE standard shaped buffer format:
 //   [shape]xtype=[value]
 // described in
-// https://github.com/google/iree/tree/main/iree/base/buffer_string_util.h
+// https://github.com/google/iree/tree/main/iree/hal/api.h
 // Uses |allocator| to allocate the buffers.
 // Uses descriptors in |descs| for type information and validation.
 // The returned variant list must be freed by the caller.
@@ -61,7 +61,7 @@
 // Prints buffers in the IREE standard shaped buffer format:
 //   [shape]xtype=[value]
 // described in
-// https://github.com/google/iree/tree/main/iree/base/buffer_string_util.h
+// https://github.com/google/iree/tree/main/iree/hal/api.h
 // Uses descriptors in |descs| for type information and validation.
 Status PrintVariantList(absl::Span<const RawSignatureParser::Description> descs,
                         iree_vm_variant_list_t* variant_list,