Removing HAL ops that are unused and difficult to support long-term. (#6763)
* Removing hal.buffer_view.subview.
It will not work for anything but dense tensors and it should be needed.
The aliasing also complicates things.
* Removing hal.buffer_view.compute_offset/compute_range.
Buffer views are fully type erased and these won't work when we have
non-dense tensors.
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);