diff options
author | Andrzej WarzyĆski <andrzej.warzynski@arm.com> | 2024-02-13 12:10:54 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-13 12:10:54 +0000 |
commit | bfc0b7c6891896ee8e9818f22800472510093864 (patch) | |
tree | c70cc5634cca8f853a67b4509fc96e36e2d7677e | |
parent | 97088b2ab2184ad4bd64f59fba0b92b70468b10d (diff) | |
download | llvm-bfc0b7c6891896ee8e9818f22800472510093864.zip llvm-bfc0b7c6891896ee8e9818f22800472510093864.tar.gz llvm-bfc0b7c6891896ee8e9818f22800472510093864.tar.bz2 |
[mlir][linalg] Document ops not supported by the vectoriser (nfc) (#81500)
Adds a test to help document Linalg Ops that are currently not supported
by the vectoriser (i.e. the logic to vectorise these is missing). The
list is not exhaustive.
-rw-r--r-- | mlir/test/Dialect/Linalg/vectorization-unsupported.mlir | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/mlir/test/Dialect/Linalg/vectorization-unsupported.mlir b/mlir/test/Dialect/Linalg/vectorization-unsupported.mlir new file mode 100644 index 0000000..a1a5239 --- /dev/null +++ b/mlir/test/Dialect/Linalg/vectorization-unsupported.mlir @@ -0,0 +1,73 @@ +// RUN: mlir-opt %s -transform-interpreter -split-input-file -verify-diagnostics + +func.func @conv1d_nwc_wcf_dyn_ch_dim(%input: memref<4x6x?xf32>, %filter: memref<1x?x8xf32>, %output: memref<4x2x8xf32>) { + // expected-error @+1 {{Attempted to vectorize, but failed}} + linalg.conv_1d_nwc_wcf + {dilations = dense<1> : tensor<1xi64>, strides = dense<3> : tensor<1xi64>} + ins(%input, %filter : memref<4x6x?xf32>, memref<1x?x8xf32>) + outs(%output : memref<4x2x8xf32>) + return +} + +module attributes {transform.with_named_sequence} { + transform.named_sequence @__transform_main(%arg1: !transform.any_op {transform.readonly}) { + %0 = transform.structured.match ops{["linalg.conv_1d_nwc_wcf"]} in %arg1 : (!transform.any_op) -> !transform.any_op + transform.structured.vectorize %0 : !transform.any_op + transform.yield + } +} + +// ----- + +func.func @depthwise_conv1d_nwc_wc_dyn_ch_dim(%input: memref<3x5x?xf32>, %filter: memref<2x?xf32>, %output: memref<3x2x?xf32>) { + // expected-error @+1 {{Attempted to vectorize, but failed}} + linalg.depthwise_conv_1d_nwc_wc + {dilations = dense<2> : tensor<1xi64>, strides = dense<1> : tensor<1xi64>} + ins(%input, %filter : memref<3x5x?xf32>, memref<2x?xf32>) + outs(%output : memref<3x2x?xf32>) + return +} + +module attributes {transform.with_named_sequence} { + transform.named_sequence @__transform_main(%arg1: !transform.any_op {transform.readonly}) { + %0 = transform.structured.match ops{["linalg.depthwise_conv_1d_nwc_wc"]} in %arg1 : (!transform.any_op) -> !transform.any_op + transform.structured.vectorize %0 : !transform.any_op + transform.yield + } +} + +// ----- + +func.func @depthwise_conv1d_nwc_wc_dyn_w_dim(%input: memref<3x?x3xf32>, %filter: memref<2x3xf32>, %output: memref<3x?x3xf32>) { + // expected-error @+1 {{Attempted to vectorize, but failed}} + linalg.depthwise_conv_1d_nwc_wc + {dilations = dense<2> : tensor<1xi64>, strides = dense<1> : tensor<1xi64>} + ins(%input, %filter : memref<3x?x3xf32>, memref<2x3xf32>) + outs(%output : memref<3x?x3xf32>) + return +} + +module attributes {transform.with_named_sequence} { + transform.named_sequence @__transform_main(%arg1: !transform.any_op {transform.readonly}) { + %0 = transform.structured.match ops{["linalg.depthwise_conv_1d_nwc_wc"]} in %arg1 : (!transform.any_op) -> !transform.any_op + transform.structured.vectorize %0 : !transform.any_op + transform.yield + } +} + +// ----- + +func.func @conv1d_dyn_w_dim(%input: tensor<?xf32>, %filter: tensor<4xf32>, %output: tensor<?xf32>) -> tensor<?xf32> { + // expected-error @+1 {{Attempted to vectorize, but failed}} + %0 = linalg.conv_1d ins(%input, %filter : tensor<?xf32>, tensor<4xf32>) + outs(%output : tensor<?xf32>) -> tensor<?xf32> + return %0 : tensor<?xf32> +} + +module attributes {transform.with_named_sequence} { + transform.named_sequence @__transform_main(%arg1: !transform.any_op {transform.readonly}) { + %0 = transform.structured.match ops{["linalg.conv_1d"]} in %arg1 : (!transform.any_op) -> !transform.any_op + transform.structured.vectorize %0 : !transform.any_op + transform.yield + } +} |