diff --git a/iree/compiler/Dialect/HAL/IR/HALOpFolders.cpp b/iree/compiler/Dialect/HAL/IR/HALOpFolders.cpp
index 71cce15..312ead6 100644
--- a/iree/compiler/Dialect/HAL/IR/HALOpFolders.cpp
+++ b/iree/compiler/Dialect/HAL/IR/HALOpFolders.cpp
@@ -402,42 +402,6 @@
 
 namespace {
 
-/// Expands a hal.buffer_view.subview op into range computation and creation
-/// ops. This allows for greater opportunity to CSE/bypass/etc the buffer view
-/// operations.
-struct ExpandBufferViewSubviewOp
-    : public OpRewritePattern<BufferViewSubviewOp> {
-  using OpRewritePattern<BufferViewSubviewOp>::OpRewritePattern;
-
-  LogicalResult matchAndRewrite(BufferViewSubviewOp op,
-                                PatternRewriter &rewriter) const override {
-    auto computeRangeOp = rewriter.create<BufferViewComputeRangeOp>(
-        op.getLoc(), op.buffer_view(), op.indices(), op.lengths());
-
-    auto bufferValue = rewriter.createOrFold<BufferViewBufferOp>(
-        op.getLoc(), IREE::HAL::BufferType::get(rewriter.getContext()),
-        op.buffer_view());
-    auto subspanValue = rewriter.createOrFold<BufferSubspanOp>(
-        op.getLoc(), bufferValue.getType(), bufferValue,
-        computeRangeOp.offset(), computeRangeOp.length());
-
-    auto elementTypeValue = rewriter.createOrFold<BufferViewElementTypeOp>(
-        op.getLoc(), rewriter.getI32Type(), op.buffer_view());
-    rewriter.replaceOpWithNewOp<BufferViewCreateOp>(
-        op, subspanValue, elementTypeValue, op.lengths());
-    return success();
-  }
-};
-
-}  // namespace
-
-void BufferViewSubviewOp::getCanonicalizationPatterns(
-    OwningRewritePatternList &results, MLIRContext *context) {
-  results.insert<ExpandBufferViewSubviewOp>(context);
-}
-
-namespace {
-
 /// Skips a hal.buffer_view.buffer accessor when the buffer view was created in
 /// the same scope and we know the origin buffer.
 struct SkipBufferViewBufferOp : public OpRewritePattern<BufferViewBufferOp> {
@@ -463,77 +427,6 @@
 
 namespace {
 
-/// Expands a hal.buffer_view.compute_offset op to use
-/// hal.allocator.compute_offset. This allows for all of the shape math to
-/// happen in the VM where we can better optimize it.
-struct ExpandBufferViewComputeOffsetOp
-    : public OpRewritePattern<BufferViewComputeOffsetOp> {
-  using OpRewritePattern<BufferViewComputeOffsetOp>::OpRewritePattern;
-
-  LogicalResult matchAndRewrite(BufferViewComputeOffsetOp op,
-                                PatternRewriter &rewriter) const override {
-    auto bufferValue = rewriter.createOrFold<BufferViewBufferOp>(
-        op.getLoc(), IREE::HAL::BufferType::get(rewriter.getContext()),
-        op.buffer_view());
-    auto allocatorValue = rewriter.createOrFold<BufferAllocatorOp>(
-        op.getLoc(), AllocatorType::get(rewriter.getContext()), bufferValue);
-    int rank = op.indices().size();
-    SmallVector<Type, 4> dimTypes(rank, rewriter.getIndexType());
-    auto dimsOp = rewriter.create<BufferViewDimsOp>(op.getLoc(), dimTypes,
-                                                    op.buffer_view());
-    auto elementTypeValue = rewriter.createOrFold<BufferViewElementTypeOp>(
-        op.getLoc(), rewriter.getI32Type(), op.buffer_view());
-    rewriter.replaceOpWithNewOp<AllocatorComputeOffsetOp>(
-        op, allocatorValue, dimsOp.result(), elementTypeValue, op.indices());
-    return success();
-  }
-};
-
-}  // namespace
-
-void BufferViewComputeOffsetOp::getCanonicalizationPatterns(
-    OwningRewritePatternList &results, MLIRContext *context) {
-  results.insert<ExpandBufferViewComputeOffsetOp>(context);
-}
-
-namespace {
-
-/// Expands a hal.buffer_view.compute_range op to use
-/// hal.allocator.compute_range. This allows for all of the shape math to
-/// happen in the VM where we can better optimize it.
-struct ExpandBufferViewComputeRangeOp
-    : public OpRewritePattern<BufferViewComputeRangeOp> {
-  using OpRewritePattern<BufferViewComputeRangeOp>::OpRewritePattern;
-
-  LogicalResult matchAndRewrite(BufferViewComputeRangeOp op,
-                                PatternRewriter &rewriter) const override {
-    auto bufferValue = rewriter.createOrFold<BufferViewBufferOp>(
-        op.getLoc(), IREE::HAL::BufferType::get(rewriter.getContext()),
-        op.buffer_view());
-    auto allocatorValue = rewriter.createOrFold<BufferAllocatorOp>(
-        op.getLoc(), AllocatorType::get(rewriter.getContext()), bufferValue);
-    int rank = op.indices().size();
-    SmallVector<Type, 4> dimTypes(rank, rewriter.getIndexType());
-    auto dimsOp = rewriter.create<BufferViewDimsOp>(op.getLoc(), dimTypes,
-                                                    op.buffer_view());
-    auto elementTypeValue = rewriter.createOrFold<BufferViewElementTypeOp>(
-        op.getLoc(), rewriter.getI32Type(), op.buffer_view());
-    rewriter.replaceOpWithNewOp<AllocatorComputeRangeOp>(
-        op, allocatorValue, dimsOp.result(), elementTypeValue, op.indices(),
-        op.lengths());
-    return success();
-  }
-};
-
-}  // namespace
-
-void BufferViewComputeRangeOp::getCanonicalizationPatterns(
-    OwningRewritePatternList &results, MLIRContext *context) {
-  results.insert<ExpandBufferViewComputeRangeOp>(context);
-}
-
-namespace {
-
 /// Expands a hal.buffer_view.dims op into individual ops for each dimension.
 struct ExpandBufferViewDimsOp : public OpRewritePattern<BufferViewDimsOp> {
   using OpRewritePattern<BufferViewDimsOp>::OpRewritePattern;
diff --git a/iree/compiler/Dialect/HAL/IR/HALOps.cpp b/iree/compiler/Dialect/HAL/IR/HALOps.cpp
index be4314a..7e3fb55 100644
--- a/iree/compiler/Dialect/HAL/IR/HALOps.cpp
+++ b/iree/compiler/Dialect/HAL/IR/HALOps.cpp
@@ -523,15 +523,6 @@
 }
 
 //===----------------------------------------------------------------------===//
-// hal.buffer_view.subview
-//===----------------------------------------------------------------------===//
-
-void BufferViewSubviewOp::getAsmResultNames(
-    function_ref<void(Value, StringRef)> setNameFn) {
-  setNameFn(result(), "view");
-}
-
-//===----------------------------------------------------------------------===//
 // hal.buffer_view.buffer
 //===----------------------------------------------------------------------===//
 
@@ -556,41 +547,6 @@
 }
 
 //===----------------------------------------------------------------------===//
-// hal.buffer_view.compute_offset
-//===----------------------------------------------------------------------===//
-
-void BufferViewComputeOffsetOp::build(OpBuilder &builder, OperationState &state,
-                                      Value bufferView, ValueRange indices) {
-  state.addOperands({bufferView});
-  state.addOperands(indices);
-  state.addTypes({builder.getIndexType()});
-}
-
-void BufferViewComputeOffsetOp::getAsmResultNames(
-    function_ref<void(Value, StringRef)> setNameFn) {
-  setNameFn(offset(), "off");
-}
-
-//===----------------------------------------------------------------------===//
-// hal.buffer_view.compute_range
-//===----------------------------------------------------------------------===//
-
-void BufferViewComputeRangeOp::build(OpBuilder &builder, OperationState &state,
-                                     Value bufferView, ValueRange indices,
-                                     ValueRange lengths) {
-  state.addOperands({bufferView});
-  state.addOperands(indices);
-  state.addOperands(lengths);
-  state.addTypes({builder.getIndexType(), builder.getIndexType()});
-}
-
-void BufferViewComputeRangeOp::getAsmResultNames(
-    function_ref<void(Value, StringRef)> setNameFn) {
-  setNameFn(offset(), "off");
-  setNameFn(length(), "len");
-}
-
-//===----------------------------------------------------------------------===//
 // hal.command_buffer.create
 //===----------------------------------------------------------------------===//
 
diff --git a/iree/compiler/Dialect/HAL/IR/HALOps.td b/iree/compiler/Dialect/HAL/IR/HALOps.td
index c987084..91cfbf3 100644
--- a/iree/compiler/Dialect/HAL/IR/HALOps.td
+++ b/iree/compiler/Dialect/HAL/IR/HALOps.td
@@ -154,7 +154,6 @@
   let summary = [{buffer view indices to byte offset computation operation}];
   let description = [{
     Computes an element byte offset within a buffer produced by the allocator.
-    This returns the same value as `hal.buffer_view.compute_offset`.
   }];
 
   let arguments = (ins
@@ -194,7 +193,6 @@
   let summary = [{buffer view byte range computation operation}];
   let description = [{
     Computes a byte range within a buffer for one or more elements.
-    This returns the same value as `hal.buffer_view.compute_range`.
   }];
 
   let arguments = (ins
@@ -599,35 +597,6 @@
   ];
 }
 
-def HAL_BufferViewSubviewOp : HAL_PureOp<"buffer_view.subview", [
-    DeclareOpInterfaceMethods<OpAsmOpInterface>,
-    SameVariadicOperandSize,
-  ]> {
-  let summary = [{buffer view subview initializer}];
-  let description = [{
-    Returns a view into a another buffer view. The buffer is not copied and both
-    the original and sliced references must be synchronized.
-  }];
-
-  let arguments = (ins
-    HAL_BufferView:$buffer_view,
-    HAL_Dims:$indices,
-    HAL_Dims:$lengths
-  );
-  let results = (outs
-    HAL_BufferView:$result
-  );
-
-  let assemblyFormat = [{
-    $buffer_view `,`
-    `indices` `=` `[` $indices `]` `,`
-    `lengths` `=` `[` $lengths `]`
-    attr-dict `:` type($result)
-  }];
-
-  let hasCanonicalizer = 1;
-}
-
 def HAL_BufferViewBufferOp : HAL_PureOp<"buffer_view.buffer", [
     DeclareOpInterfaceMethods<OpAsmOpInterface>,
   ]> {
@@ -656,6 +625,9 @@
   let summary = [{buffer view buffer byte length accessor}];
   let description = [{
     Returns the allocated size of a shaped buffer view in bytes.
+    This may exceed the logical size of the buffer view; for example sparse
+    tensors will have an allocation size that may be for the maximum possible
+    size of the tensor when fully dense.
   }];
 
   let arguments = (ins
@@ -675,76 +647,6 @@
   ];
 }
 
-def HAL_BufferViewComputeOffsetOp : HAL_PureOp<"buffer_view.compute_offset", [
-    DeclareOpInterfaceMethods<OpAsmOpInterface>,
-  ]> {
-  let summary = [{buffer view indices to byte offset computation operation}];
-  let description = [{
-    Computes an element byte offset within a buffer view.
-  }];
-
-  let arguments = (ins
-    HAL_BufferView:$buffer_view,
-    HAL_Dims:$indices
-  );
-
-  let results = (outs
-    HAL_DeviceSize:$offset
-  );
-
-  let assemblyFormat = [{
-    $buffer_view `,`
-    `indices` `=` `[` $indices `]`
-    attr-dict `:` type($offset)
-  }];
-
-  let skipDefaultBuilders = 1;
-  let builders = [
-    OpBuilder<(ins "Value":$bufferView, "ValueRange":$indices)>,
-  ];
-
-  let hasCanonicalizer = 1;
-}
-
-def HAL_BufferViewComputeRangeOp : HAL_PureOp<"buffer_view.compute_range", [
-    DeclareOpInterfaceMethods<OpAsmOpInterface>,
-    SameVariadicOperandSize,
-  ]> {
-  let summary = [{buffer view byte range computation operation}];
-  let description = [{
-    Computes a byte range within a buffer for one or more elements.
-  }];
-
-  let arguments = (ins
-    HAL_BufferView:$buffer_view,
-    HAL_Dims:$indices,
-    HAL_Dims:$lengths
-  );
-  let results = (outs
-    // TODO(benvanik): return a strides tuple instead, or one per dim.
-    HAL_DeviceSize:$offset,
-    HAL_DeviceSize:$length
-  );
-
-  let assemblyFormat = [{
-    $buffer_view `,`
-    `indices` `=` `[` $indices `]` `,`
-    `lengths` `=` `[` $lengths `]`
-    attr-dict `:` type($offset) `,` type($length)
-  }];
-
-  let skipDefaultBuilders = 1;
-  let builders = [
-    OpBuilder<(ins
-      "Value":$bufferView,
-      "ValueRange":$indices,
-      "ValueRange":$lengths
-    )>,
-  ];
-
-  let hasCanonicalizer = 1;
-}
-
 def HAL_BufferViewElementTypeOp : HAL_PureOp<"buffer_view.element_type"> {
   let summary = [{buffer view element type query}];
   let description = [{
diff --git a/iree/compiler/Dialect/HAL/IR/test/buffer_view_folding.mlir b/iree/compiler/Dialect/HAL/IR/test/buffer_view_folding.mlir
index 3e215ab..802b0ae 100644
--- a/iree/compiler/Dialect/HAL/IR/test/buffer_view_folding.mlir
+++ b/iree/compiler/Dialect/HAL/IR/test/buffer_view_folding.mlir
@@ -1,30 +1,5 @@
 // RUN: iree-opt -allow-unregistered-dialect -split-input-file -canonicalize -cse %s | iree-opt -allow-unregistered-dialect -split-input-file | IreeFileCheck %s
 
-// CHECK-LABEL: func @expand_buffer_view_subview
-func @expand_buffer_view_subview(
-  // CHECK-SAME: %[[VIEW:.+]]: !hal.buffer_view,
-  %view : !hal.buffer_view,
-  // CHECK-SAME: %[[INDEX0:.+]]: index, %[[INDEX1:.+]]: index, %[[LENGTH0:.+]]: index, %[[LENGTH1:.+]]: index
-  %index0 : index, %index1 : index, %length0 : index, %length1 : index
-) -> !hal.buffer_view {
-  //      CHECK: = hal.buffer_view.dim %[[VIEW]], 1 : index
-  //      CHECK: %[[ELEMENT_TYPE:.+]] = hal.buffer_view.element_type %[[VIEW]] : i32
-  // << A BUNCH OF MATH >>
-  //      CHECK: %[[BUFFER:.+]] = hal.buffer_view.buffer %[[VIEW]] : !hal.buffer
-  // CHECK-NEXT: %[[SUBSPAN:.+]] = hal.buffer.subspan<%[[BUFFER]] : !hal.buffer>[%{{.+}}, %{{.+}}] : !hal.buffer
-  //      CHECK: %[[SUBVIEW:.+]] = hal.buffer_view.create
-  // CHECK-SAME:     %[[SUBSPAN]],
-  // CHECK-SAME:     element_type = %[[ELEMENT_TYPE]],
-  // CHECK-SAME:     shape = [%[[LENGTH0]], %[[LENGTH1]]] : !hal.buffer -> !hal.buffer_view
-  %subview = hal.buffer_view.subview %view,
-                                     indices = [%index0, %index1],
-                                     lengths = [%length0, %length1] : !hal.buffer_view
-  // CHECK-NEXT: return %[[SUBVIEW]]
-  return %subview : !hal.buffer_view
-}
-
-// -----
-
 // CHECK-LABEL: func @skip_buffer_view_buffer
 // CHECK-SAME: %[[BUFFER:.+]]: !hal.buffer
 func @skip_buffer_view_buffer(%buffer : !hal.buffer) -> !hal.buffer {
@@ -39,46 +14,6 @@
 
 // -----
 
-// CHECK-LABEL: func @buffer_view_compute_offset
-// CHECK-SAME: %[[VIEW:.+]]: !hal.buffer_view
-func @buffer_view_compute_offset(%arg0 : !hal.buffer_view) -> index {
-  // CHECK: %[[INDICES:.+]]:2 = "test_hal.indices"() : () -> (index, index)
-  %0:2 = "test_hal.indices"() : () -> (index, index)
-  // CHECK: %[[D0:.+]] = hal.buffer_view.dim %[[VIEW]], 1 : index
-  // CHECK: %[[TYPE:.+]] = hal.buffer_view.element_type %[[VIEW]] : i32
-  // CHECK: %[[T0:.+]] = muli %[[INDICES]]#0, %[[D0]] : index
-  // CHECK: %[[T1:.+]] = addi %[[T0]], %[[INDICES]]#1 : index
-  // CHECK: %[[T2:.+]] = index_cast %[[TYPE]] : i32 to index
-  // CHECK: %[[T3:.+]] = and %[[T2]], %c255 : index
-  // CHECK: %[[T4:.+]] = addi %[[T3]], %c7 : index
-  // CHECK: %[[T6:.+]] = divi_unsigned %[[T4]], %c8 : index
-  // CHECK: %[[T7:.+]] = muli %[[T1]], %[[T6]] : index
-  %off = hal.buffer_view.compute_offset %arg0, indices = [%0#0, %0#1] : index
-  // CHECK: return %[[T7]]
-  return %off : index
-}
-
-// -----
-
-// CHECK-LABEL: func @buffer_view_compute_range
-// CHECK-SAME: %[[VIEW:.+]]: !hal.buffer_view
-func @buffer_view_compute_range(%arg0 : !hal.buffer_view) -> (index, index) {
-  %0:2 = "test_hal.indices"() : () -> (index, index)
-  %1:2 = "test_hal.lengths"() : () -> (index, index)
-  // Testing things like this is brittle :/
-  // Since the canonicalizers are taking these buffer view ops to allocator ops
-  // the testing there should cover with the checks here just to make sure the
-  // right values from the buffer view are passed in.
-  //      CHECK: = hal.buffer_view.dim %[[VIEW]], 1 : index
-  //      CHECK: = hal.buffer_view.element_type %[[VIEW]] : i32
-  // << A BUNCH OF MATH >>
-  %off, %len = hal.buffer_view.compute_range %arg0, indices = [%0#0, %0#1], lengths = [%1#0, %1#1] : index, index
-  // CHECK: return
-  return %off, %len : index, index
-}
-
-// -----
-
 // CHECK-LABEL: func @expand_buffer_view_dims
 // CHECK-SAME: %[[VIEW:.+]]: !hal.buffer_view
 func @expand_buffer_view_dims(%arg0 : !hal.buffer_view) -> (index, index, index) {
diff --git a/iree/compiler/Dialect/HAL/IR/test/buffer_view_ops.mlir b/iree/compiler/Dialect/HAL/IR/test/buffer_view_ops.mlir
index 65b8fc0..d254350 100644
--- a/iree/compiler/Dialect/HAL/IR/test/buffer_view_ops.mlir
+++ b/iree/compiler/Dialect/HAL/IR/test/buffer_view_ops.mlir
@@ -11,17 +11,6 @@
 
 // -----
 
-// CHECK-LABEL: @buffer_view_subview
-func @buffer_view_subview(%arg0: !hal.buffer_view) -> !hal.buffer_view {
-  %0:2 = "test_hal.indices"() : () -> (index, index)
-  %1:2 = "test_hal.lengths"() : () -> (index, index)
-  // CHECK: %view = hal.buffer_view.subview %arg0, indices = [%0#0, %0#1], lengths = [%1#0, %1#1] : !hal.buffer_view
-  %view = hal.buffer_view.subview %arg0, indices = [%0#0, %0#1], lengths = [%1#0, %1#1] : !hal.buffer_view
-  return %view : !hal.buffer_view
-}
-
-// -----
-
 // CHECK-LABEL: @buffer_view_buffer
 func @buffer_view_buffer(%arg0: !hal.buffer_view) -> !hal.buffer {
   // CHECK: %buffer = hal.buffer_view.buffer %arg0 : !hal.buffer
@@ -40,27 +29,6 @@
 
 // -----
 
-// CHECK-LABEL: @buffer_view_compute_offset
-func @buffer_view_compute_offset(%arg0: !hal.buffer_view) -> index {
-  %0:2 = "test_hal.indices"() : () -> (index, index)
-  // CHECK: %off = hal.buffer_view.compute_offset %arg0, indices = [%0#0, %0#1]
-  %off = hal.buffer_view.compute_offset %arg0, indices = [%0#0, %0#1] : index
-  return %off : index
-}
-
-// -----
-
-// CHECK-LABEL: @buffer_view_compute_range
-func @buffer_view_compute_range(%arg0: !hal.buffer_view) -> (index, index) {
-  %0:2 = "test_hal.indices"() : () -> (index, index)
-  %1:2 = "test_hal.lengths"() : () -> (index, index)
-  // CHECK: %off, %len = hal.buffer_view.compute_range %arg0, indices = [%0#0, %0#1], lengths = [%1#0, %1#1]
-  %off, %len = hal.buffer_view.compute_range %arg0, indices = [%0#0, %0#1], lengths = [%1#0, %1#1] : index, index
-  return %off, %len : index, index
-}
-
-// -----
-
 // CHECK-LABEL: @buffer_view_shape_queries
 func @buffer_view_shape_queries(%arg0: !hal.buffer_view) -> (index, index, index, index) {
   // CHECK: %{{.+}} = hal.buffer_view.rank %arg0 : index
diff --git a/iree/compiler/Dialect/HAL/Utils/TypeUtils.cpp b/iree/compiler/Dialect/HAL/Utils/TypeUtils.cpp
index 1eb2477..36e091c 100644
--- a/iree/compiler/Dialect/HAL/Utils/TypeUtils.cpp
+++ b/iree/compiler/Dialect/HAL/Utils/TypeUtils.cpp
@@ -201,30 +201,19 @@
 }
 
 Value TensorRewriteAdaptor::computeOffset(ValueRange indices) {
-  if (isBufferView()) {
-    return rewriter_.createOrFold<IREE::HAL::BufferViewComputeOffsetOp>(
-        loc_, getBufferView(), indices);
-  } else {
-    auto shapeDims = getShapeDims();
-    if (!shapeDims) return {};
-    return rewriter_.createOrFold<IREE::HAL::AllocatorComputeOffsetOp>(
-        loc_, getAllocator(), *shapeDims, getElementType(), indices);
-  }
+  auto shapeDims = getShapeDims();
+  if (!shapeDims) return {};
+  return rewriter_.createOrFold<IREE::HAL::AllocatorComputeOffsetOp>(
+      loc_, getAllocator(), *shapeDims, getElementType(), indices);
 }
 
 llvm::Optional<TensorRewriteAdaptor::Range> TensorRewriteAdaptor::computeRange(
     ValueRange indices, ValueRange lengths) {
-  if (isBufferView()) {
-    auto range = rewriter_.create<IREE::HAL::BufferViewComputeRangeOp>(
-        loc_, getBufferView(), indices, lengths);
-    return Range{range.offset(), range.length()};
-  } else {
-    auto shapeDims = getShapeDims();
-    if (!shapeDims) return llvm::None;
-    auto range = rewriter_.create<IREE::HAL::AllocatorComputeRangeOp>(
-        loc_, getAllocator(), *shapeDims, getElementType(), indices, lengths);
-    return Range{range.offset(), range.length()};
-  }
+  auto shapeDims = getShapeDims();
+  if (!shapeDims) return llvm::None;
+  auto range = rewriter_.create<IREE::HAL::AllocatorComputeRangeOp>(
+      loc_, getAllocator(), *shapeDims, getElementType(), indices, lengths);
+  return Range{range.offset(), range.length()};
 }
 
 }  // namespace HAL
diff --git a/iree/compiler/Dialect/HAL/Utils/TypeUtils.h b/iree/compiler/Dialect/HAL/Utils/TypeUtils.h
index f640f2f..f91304a 100644
--- a/iree/compiler/Dialect/HAL/Utils/TypeUtils.h
+++ b/iree/compiler/Dialect/HAL/Utils/TypeUtils.h
@@ -91,7 +91,7 @@
   // Performs the equivalent of a hal.buffer_view.byte_length.
   Value getByteLength();
 
-  // Performs the equivalent of a hal.buffer_view.compute_offset.
+  // Performs the equivalent of a hal.allocator.compute_offset.
   Value computeOffset(ValueRange indices);
 
   struct Range {
@@ -99,7 +99,7 @@
     Value length;
   };
 
-  // Performs the equivalent of a hal.buffer_view.compute_range.
+  // Performs the equivalent of a hal.allocator.compute_range.
   llvm::Optional<Range> computeRange(ValueRange indices, ValueRange lengths);
 
  private:
diff --git a/iree/hal/buffer_view.c b/iree/hal/buffer_view.c
index 78e2201..af464d2 100644
--- a/iree/hal/buffer_view.c
+++ b/iree/hal/buffer_view.c
@@ -210,31 +210,6 @@
   }
 }
 
-IREE_API_EXPORT iree_status_t iree_hal_buffer_view_subview(
-    const iree_hal_buffer_view_t* buffer_view,
-    const iree_hal_dim_t* start_indices, iree_host_size_t indices_count,
-    const iree_hal_dim_t* lengths, iree_host_size_t lengths_count,
-    iree_hal_buffer_view_t** out_buffer_view) {
-  IREE_ASSERT_ARGUMENT(out_buffer_view);
-
-  // NOTE: we rely on the compute range call to do parameter validation.
-  iree_device_size_t start_offset = 0;
-  iree_device_size_t subview_length = 0;
-  IREE_RETURN_IF_ERROR(iree_hal_buffer_view_compute_range(
-      buffer_view, start_indices, indices_count, lengths, lengths_count,
-      &start_offset, &subview_length));
-
-  iree_hal_buffer_t* subview_buffer = NULL;
-  IREE_RETURN_IF_ERROR(iree_hal_buffer_subspan(
-      buffer_view->buffer, start_offset, subview_length, &subview_buffer));
-
-  iree_status_t status =
-      iree_hal_buffer_view_create(subview_buffer, lengths, lengths_count,
-                                  buffer_view->element_type, out_buffer_view);
-  iree_hal_buffer_release(subview_buffer);
-  return status;
-}
-
 IREE_API_EXPORT iree_hal_buffer_t* iree_hal_buffer_view_buffer(
     const iree_hal_buffer_view_t* buffer_view) {
   IREE_ASSERT_ARGUMENT(buffer_view);
diff --git a/iree/hal/buffer_view.h b/iree/hal/buffer_view.h
index f232985..a4595e6 100644
--- a/iree/hal/buffer_view.h
+++ b/iree/hal/buffer_view.h
@@ -182,13 +182,6 @@
     iree_hal_buffer_usage_t allowed_usage, iree_byte_span_t data,
     iree_allocator_t data_allocator, iree_hal_buffer_view_t** out_buffer_view);
 
-// Creates a buffer view referencing a subview of the given |buffer_view|.
-IREE_API_EXPORT iree_status_t iree_hal_buffer_view_subview(
-    const iree_hal_buffer_view_t* buffer_view,
-    const iree_hal_dim_t* start_indices, iree_host_size_t indices_count,
-    const iree_hal_dim_t* lengths, iree_host_size_t lengths_count,
-    iree_hal_buffer_view_t** out_buffer_view);
-
 // Retains the given |buffer_view| for the caller.
 IREE_API_EXPORT void iree_hal_buffer_view_retain(
     iree_hal_buffer_view_t* buffer_view);
