https://github.com/rikhuijzer updated https://github.com/llvm/llvm-project/pull/71726
>From 3f34a440abef46c5c6280fdcdf0c29e05dda4565 Mon Sep 17 00:00:00 2001 From: Rik Huijzer <git...@huijzer.xyz> Date: Wed, 8 Nov 2023 20:10:41 +0100 Subject: [PATCH 1/4] [mlir][tensor] Document `dest` operand --- .../mlir/Dialect/Tensor/IR/TensorBase.td | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td b/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td index 1231c0a67bc305f..768edec27a755a6 100644 --- a/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td +++ b/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td @@ -18,31 +18,33 @@ def Tensor_Dialect : Dialect { let description = [{ The `tensor` dialect is intended to hold core tensor creation and manipulation ops, which are not strongly associated with any particular - other dialect or domain abstraction. The primary smoke test of this is ops - that make sense for any tensor element type. - - We leave it to other dialects to hold the vast swath of possible - computations one might want to do on a tensor. - - The `tensor` type is (for better or for worse) used to represent all kinds - of things, and supports an open-ended set of element types. Examples: + other dialect or domain abstraction. The primary inclusion criteria for ops + in this dialect is that they make sense for any tensor element type. When + this is not the case, the op is left to live in other dialects. Examples of + element types that could be supported by the `tensor` dialect include: - representing large, dense aggregations of primitive types, suitable for high-performance numerical computing. - - representing shapes in the `shape` dialect, which consist of small - 1D tensors of `index` data type. + - representing shapes in the `shape` dialect, which consist of small 1D + tensors of `index` data type. - representing aggregations of strings or “variant” types. - - representing large, sparse aggregations of primitive types, suitable - for high-performance numerical computing. + - representing large, sparse aggregations of primitive types, suitable for + high-performance numerical computing. - Thus, for the `tensor` dialect, we prefer for now to constrain the - scope as much as possible. The expectation is that at some point + Because of this broad element type support, we prefer for now to keep the + `tensor` dialect as small as possible. The expectation is that at some point in the future, the `tensor` dialect’s scope may be broadened through a careful discussion of the tradeoffs. - The `tensor` type is actually a builtin type (it lives in the builtin - dialect), and does not live in this dialect. + One exception to the above is the `tensor` type itself, which is actually a + builtin type (it lives in the builtin dialect), and does not live in this + dialect. + Finally, many ops in the the dialect use the `dest` operand. This is an + operand that is used to encode information for bufferization via the + `DestinationStyleOpInterface`, see the [Destination Passing Style]( + https://mlir.llvm.org/docs/Bufferization/#destination-passing-style) + documentation for more information. }]; let hasCanonicalizer = 1; >From a72c2b5b5a2d0bad4203e4085255c95829dee7dd Mon Sep 17 00:00:00 2001 From: Rik Huijzer <git...@huijzer.xyz> Date: Thu, 9 Nov 2023 17:08:59 +0100 Subject: [PATCH 2/4] Try to implement suggestion --- mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td b/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td index 768edec27a755a6..9d5c7cdaea0465a 100644 --- a/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td +++ b/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td @@ -36,15 +36,14 @@ def Tensor_Dialect : Dialect { in the future, the `tensor` dialect’s scope may be broadened through a careful discussion of the tradeoffs. - One exception to the above is the `tensor` type itself, which is actually a - builtin type (it lives in the builtin dialect), and does not live in this - dialect. - - Finally, many ops in the the dialect use the `dest` operand. This is an - operand that is used to encode information for bufferization via the - `DestinationStyleOpInterface`, see the [Destination Passing Style]( + On the `tensor` type itself, note that it is actually a builtin type (it + lives in the builtin dialect), and does not live in this dialect. Furthermore, + a `tensor` is an immutable object. For example, this means that the `dest` + operand used by some ops in this dialect does not mean that the `tensor` is + mutated in place, but rather that the operand can be used as bufferization + hint. For more information, see the [Destination Passing Style]( https://mlir.llvm.org/docs/Bufferization/#destination-passing-style) - documentation for more information. + documentation. }]; let hasCanonicalizer = 1; >From ad615d1362a13d70ad4216c4e10d2056c04cf292 Mon Sep 17 00:00:00 2001 From: Rik Huijzer <git...@huijzer.xyz> Date: Fri, 10 Nov 2023 20:07:09 +0100 Subject: [PATCH 3/4] Emphasize elem supp less and remove bufferization Co-authored-by: Matthias Springer <m...@m-sp.org> Co-authored-by: Mehdi Amini <joker....@gmail.com> Co-authored-by: Felix Schneider <fx.s...@gmail.com> --- .../mlir/Dialect/Tensor/IR/TensorBase.td | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td b/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td index 9d5c7cdaea0465a..44c003fc901dd1b 100644 --- a/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td +++ b/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td @@ -18,10 +18,10 @@ def Tensor_Dialect : Dialect { let description = [{ The `tensor` dialect is intended to hold core tensor creation and manipulation ops, which are not strongly associated with any particular - other dialect or domain abstraction. The primary inclusion criteria for ops - in this dialect is that they make sense for any tensor element type. When - this is not the case, the op is left to live in other dialects. Examples of - element types that could be supported by the `tensor` dialect include: + other dialect or domain abstraction. The aim for ops in this dialect is + that they make sense for any tensor element type. When this is not the + case, the op is left to live in other dialects. Examples of element types + that could be supported by the `tensor` dialect include: - representing large, dense aggregations of primitive types, suitable for high-performance numerical computing. @@ -31,19 +31,21 @@ def Tensor_Dialect : Dialect { - representing large, sparse aggregations of primitive types, suitable for high-performance numerical computing. - Because of this broad element type support, we prefer for now to keep the - `tensor` dialect as small as possible. The expectation is that at some point - in the future, the `tensor` dialect’s scope may be broadened through a - careful discussion of the tradeoffs. + Because of this broad element type support and because of the existence of + more dedicated dialects, such as the `sparse_tensor` and `linalg` dialects, + we prefer for now to keep the `tensor` dialect as small as possible. The + expectation is that at some point in the future, the `tensor` dialect’s + scope may be broadened through a careful discussion of the tradeoffs. On the `tensor` type itself, note that it is actually a builtin type (it - lives in the builtin dialect), and does not live in this dialect. Furthermore, - a `tensor` is an immutable object. For example, this means that the `dest` - operand used by some ops in this dialect does not mean that the `tensor` is - mutated in place, but rather that the operand can be used as bufferization - hint. For more information, see the [Destination Passing Style]( + lives in the builtin dialect), and does not live in this dialect. + Furthermore, a `tensor` is an immutable object. For example, this means + that a copy will always be made of the `tensor` object when it is passed to + the `dest` operand of used by some ops in this dialect. Note that the + underlying storage to which the `tensor` object refers may be mutated, see + see the [Destination-Passing Style]( https://mlir.llvm.org/docs/Bufferization/#destination-passing-style) - documentation. + documentation for more information. }]; let hasCanonicalizer = 1; >From 424a9f33bd8cecd76d9929f0199e7b728898984b Mon Sep 17 00:00:00 2001 From: Rik Huijzer <git...@huijzer.xyz> Date: Fri, 10 Nov 2023 20:18:59 +0100 Subject: [PATCH 4/4] Small rewrite --- mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td b/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td index 44c003fc901dd1b..edc4502f966797d 100644 --- a/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td +++ b/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td @@ -41,9 +41,9 @@ def Tensor_Dialect : Dialect { lives in the builtin dialect), and does not live in this dialect. Furthermore, a `tensor` is an immutable object. For example, this means that a copy will always be made of the `tensor` object when it is passed to - the `dest` operand of used by some ops in this dialect. Note that the - underlying storage to which the `tensor` object refers may be mutated, see - see the [Destination-Passing Style]( + the `dest` operand used by some ops in this dialect. The storage to which + the `tensor` object refers may be mutated, see the [Destination-Passing + Style]( https://mlir.llvm.org/docs/Bufferization/#destination-passing-style) documentation for more information. }]; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits