Skip to content

Commit 6f1e23b

Browse files
authored
[MLIR][Bufferization] Choose default memory space in tensor copy insertion (#88500)
Tensor copy insertion currently uses memory_space = 0 when creating a tensor copy using alloc_tensor. This memory space should instead be the default memory space provided in bufferization options.
1 parent e0a6287 commit 6f1e23b

File tree

3 files changed

+8
-7
lines changed

3 files changed

+8
-7
lines changed

mlir/lib/Dialect/Bufferization/IR/BufferizableOpInterface.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -193,10 +193,11 @@ FailureOr<Value> bufferization::allocateTensorForShapedValue(
193193
FailureOr<BaseMemRefType> copyBufferType = getBufferType(tensor, options);
194194
if (failed(copyBufferType))
195195
return failure();
196-
Attribute memorySpace = copyBufferType->getMemorySpace();
196+
std::optional<Attribute> memorySpace = copyBufferType->getMemorySpace();
197197
if (!memorySpace)
198-
memorySpace = b.getI64IntegerAttr(0);
199-
allocTensorOp.setMemorySpaceAttr(memorySpace);
198+
memorySpace = options.defaultMemorySpaceFn(tensorType);
199+
if (memorySpace.has_value())
200+
allocTensorOp.setMemorySpaceAttr(memorySpace.value());
200201
return allocTensorOp.getResult();
201202
}
202203

mlir/test/Dialect/Bufferization/Transforms/tensor-copy-insertion.mlir

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func.func @do_not_copy_undefined_tensor(%f: f32, %idx: index)
3434
{
3535
// The second alloc_tensor should not have a copy operand.
3636
// CHECK: bufferization.alloc_tensor() : tensor<5xf32>
37-
// CHECK: bufferization.alloc_tensor() {memory_space = 0 : i64} : tensor<5xf32>
37+
// CHECK: bufferization.alloc_tensor() : tensor<5xf32>
3838
%0 = bufferization.alloc_tensor() : tensor<5xf32>
3939
%1 = tensor.insert %f into %0[%idx] : tensor<5xf32>
4040
return %0, %1 : tensor<5xf32>, tensor<5xf32>
@@ -46,7 +46,7 @@ func.func @do_not_copy_undefined_tensor(%f: f32, %idx: index)
4646
func.func @do_not_copy_when_overwritten(%t: tensor<5xf32>, %f: f32)
4747
-> (tensor<5xf32>, tensor<5xf32>)
4848
{
49-
// CHECK: %[[alloc:.*]] = bufferization.alloc_tensor() {memory_space = 0 : i64} : tensor<5xf32>
49+
// CHECK: %[[alloc:.*]] = bufferization.alloc_tensor() : tensor<5xf32>
5050
// CHECK: linalg.generic {{.*}} outs(%[[alloc]] : tensor<5xf32>)
5151
%r = linalg.generic {
5252
indexing_maps = [affine_map<(d0) -> (d0)>],
@@ -65,7 +65,7 @@ func.func @do_not_copy_when_result_not_read(%t: tensor<5xf32>, %f: f32)
6565
-> (tensor<3xf32>)
6666
{
6767
%0 = tensor.extract_slice %t[0][3][1] : tensor<5xf32> to tensor<3xf32>
68-
// CHECK: %[[alloc:.*]] = bufferization.alloc_tensor() {memory_space = 0 : i64} : tensor<3xf32>
68+
// CHECK: %[[alloc:.*]] = bufferization.alloc_tensor() : tensor<3xf32>
6969
// CHECK: linalg.generic {{.*}} outs(%[[alloc]] : tensor<3xf32>)
7070
%r = linalg.generic {
7171
indexing_maps = [affine_map<(d0) -> (d0)>],

mlir/test/Dialect/SparseTensor/sparse_sddmm.mlir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func.func @fold_yield_direct_zero() -> tensor<32xf64> {
6363
// CHECK-DAG: %[[VAL_5:.*]] = arith.constant 1 : index
6464
// CHECK-DAG: %[[VAL_6:.*]] = arith.constant dense<0.000000e+00> : tensor<8x8xf64>
6565
// CHECK-DAG: %[[VAL_7:.*]] = bufferization.alloc_tensor() copy(%[[VAL_6]]) : tensor<8x8xf64>
66-
// CHECK-DAG: %[[VAL_8:.*]] = bufferization.alloc_tensor() copy(%[[VAL_6]]) {memory_space = 0 : i64} : tensor<8x8xf64>
66+
// CHECK-DAG: %[[VAL_8:.*]] = bufferization.alloc_tensor() copy(%[[VAL_6]]) : tensor<8x8xf64>
6767
// CHECK-DAG: %[[VAL_9:.*]] = bufferization.to_memref %[[VAL_1]] : memref<8x8xf64>
6868
// CHECK-DAG: %[[VAL_10:.*]] = bufferization.to_memref %[[VAL_2]] : memref<8x8xf64>
6969
// CHECK-DAG: %[[VAL_11:.*]] = sparse_tensor.positions %[[VAL_0]] {level = 0 : index} : tensor<8x8xf64, #sparse{{[0-9]*}}> to memref<?xindex>

0 commit comments

Comments
 (0)