[Mlir-commits] [mlir] [mlir][tensor] Add more tensor.extract_slice canonicalization (PR #212974)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Thu Jul 30 02:49:43 PDT 2026


github-actions[bot] wrote:

<!--PREMERGE ADVISOR COMMENT: Windows-->
# :window: Windows x64 Test Results

* 3993 tests passed
* 444 tests skipped
* 5 tests failed

## Failed Tests
(click on a test name to see its output)

### MLIR
<details>
<summary>MLIR.Dialect/Linalg/tile-softmax.mlir</summary>

```
Exit Code: 1

Command Output (stdout):
--
# RUN: at line 1
c:\_work\llvm-project\llvm-project\build\bin\mlir-opt.exe C:\_work\llvm-project\llvm-project\mlir\test\Dialect\Linalg\tile-softmax.mlir -transform-interpreter -canonicalize --split-input-file | c:\_work\llvm-project\llvm-project\build\bin\filecheck.exe C:\_work\llvm-project\llvm-project\mlir\test\Dialect\Linalg\tile-softmax.mlir
# executed command: 'c:\_work\llvm-project\llvm-project\build\bin\mlir-opt.exe' 'C:\_work\llvm-project\llvm-project\mlir\test\Dialect\Linalg\tile-softmax.mlir' -transform-interpreter -canonicalize --split-input-file
# .---command stderr------------
# | C:\_work\llvm-project\llvm-project\mlir\test\Dialect\Linalg\tile-softmax.mlir:100:8: warning: tiling is not thread safe at axis #1
# |   %1 = linalg.softmax
# |        ^
# | C:\_work\llvm-project\llvm-project\mlir\test\Dialect\Linalg\tile-softmax.mlir:100:8: note: see current operation: %3 = linalg.softmax dimension(1) ins(%1 : tensor<16x64x256xf32>) outs(%2 : tensor<16x64x256xf32>) -> tensor<16x64x256xf32>
# `-----------------------------
# executed command: 'c:\_work\llvm-project\llvm-project\build\bin\filecheck.exe' 'C:\_work\llvm-project\llvm-project\mlir\test\Dialect\Linalg\tile-softmax.mlir'
# .---command stderr------------
# | C:\_work\llvm-project\llvm-project\mlir\test\Dialect\Linalg\tile-softmax.mlir:60:11: error: CHECK: expected string not found in input
# | // CHECK: %[[VAL_3:.*]] = tensor.empty() : tensor<16x64x256xf32>
# |           ^
# | <stdin>:39:45: note: scanning from here
# |  %0 = tensor.empty() : tensor<16x64x256xf32>
# |                                             ^
# | <stdin>:39:45: note: pattern attempts to capture variables: "VAL_3"
# |  %0 = tensor.empty() : tensor<16x64x256xf32>
# |                                             ^
# | <stdin>:46:2: note: possible intended match here
# |  %6 = tensor.empty() : tensor<2x4x256xf32>
# |  ^
# | 
# | Input file: <stdin>
# | Check file: C:\_work\llvm-project\llvm-project\mlir\test\Dialect\Linalg\tile-softmax.mlir
# | 
# | -dump-input=help explains the following input dump.
# | 
# | Input was:
# | <<<<<<
# |             .
# |             .
# |             .
# |            34: #map1 = affine_map<(d0) -> (d0 * 4)> 
# |            35: #map2 = affine_map<(d0, d1, d2) -> (d0, d1, d2)> 
# |            36: module { 
# |            37:  func.func @softmax_tile_n_fuse(%arg0: tensor<16x64x256xf32>) -> tensor<16x64x256xf32> { 
# |            38:  %cst = arith.constant 1.000000e+00 : f32 
# |            39:  %0 = tensor.empty() : tensor<16x64x256xf32> 
# | check:60'0                                                {   search range start (exclusive)
# | check:60'1                                                    error: no match found in search range
# | check:60'2                                                    pattern attempts to capture variables: "VAL_3"
# |            40:  %1 = scf.forall (%arg1, %arg2) in (8, 16) shared_outs(%arg3 = %0) -> (tensor<16x64x256xf32>) { 
# |            41:  %2 = affine.apply #map(%arg1) 
# |            42:  %3 = affine.apply #map1(%arg2) 
# |            43:  %4 = affine.apply #map(%arg1) 
# |            44:  %5 = affine.apply #map1(%arg2) 
# |            45:  %extracted_slice = tensor.extract_slice %arg0[%4, %5, 0] [2, 4, 256] [1, 1, 1] : tensor<16x64x256xf32> to tensor<2x4x256xf32> 
# |            46:  %6 = tensor.empty() : tensor<2x4x256xf32> 
# | check:60'3      ?                                           possible intended match
# |            47:  %7 = linalg.generic {indexing_maps = [#map2, #map2], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice : tensor<2x4x256xf32>) outs(%6 : tensor<2x4x256xf32>) { 
# |            48:  ^bb0(%in: f32, %out: f32): 
# |            49:  %9 = arith.addf %out, %cst : f32 
# |            50:  linalg.yield %9 : f32 
# |            51:  } -> tensor<2x4x256xf32> 
# |             .
# |             .
# |             .
# |            69: } 
# |            70:  
# |            71: // ----- 
# |            72: #map = affine_map<(d0) -> (-d0 + 64, 3)> 
# |            73: module { 
# |            74:  func.func @softmax_memref(%arg0: memref<16x64x256xf32>, %arg1: memref<16x64x256xf32>) { 
# | check:60'4                                }                                                               search range end (exclusive)
# |            75:  %c0 = arith.constant 0 : index 
# |            76:  %c16 = arith.constant 16 : index 
# |            77:  %c64 = arith.constant 64 : index 
# |            78:  %c2 = arith.constant 2 : index 
# |            79:  %c3 = arith.constant 3 : index 
# |             .
# |             .
# |             .
# | >>>>>>
# `-----------------------------
# error: command failed with exit status: 1

--

```
</details>
<details>
<summary>MLIR.Dialect/SCF/canonicalize.mlir</summary>

```
Exit Code: 1

Command Output (stdout):
--
# RUN: at line 1
c:\_work\llvm-project\llvm-project\build\bin\mlir-opt.exe C:\_work\llvm-project\llvm-project\mlir\test\Dialect\SCF\canonicalize.mlir -pass-pipeline='builtin.module(func.func(canonicalize{test-convergence}))' -split-input-file | c:\_work\llvm-project\llvm-project\build\bin\filecheck.exe C:\_work\llvm-project\llvm-project\mlir\test\Dialect\SCF\canonicalize.mlir
# executed command: 'c:\_work\llvm-project\llvm-project\build\bin\mlir-opt.exe' 'C:\_work\llvm-project\llvm-project\mlir\test\Dialect\SCF\canonicalize.mlir' '-pass-pipeline=builtin.module(func.func(canonicalize{test-convergence}))' -split-input-file
# note: command had no output on stdout or stderr
# executed command: 'c:\_work\llvm-project\llvm-project\build\bin\filecheck.exe' 'C:\_work\llvm-project\llvm-project\mlir\test\Dialect\SCF\canonicalize.mlir'
# .---command stderr------------
# | C:\_work\llvm-project\llvm-project\mlir\test\Dialect\SCF\canonicalize.mlir:1954:16: error: CHECK-NEXT: expected string not found in input
# | // CHECK-NEXT: %[[SLICE:.*]] = tensor.extract_slice %[[OUT]]
# |                ^
# | <stdin>:1082:19: note: scanning from here
# |  %0 = tensor.empty() : tensor<8x8xf32>
# |                   ^
# | <stdin>:1082:19: note: with "OUT" equal to "0"
# |  %0 = tensor.empty() : tensor<8x8xf32>
# |                   ^
# | <stdin>:1082:19: note: pattern attempts to capture variables: "SLICE"
# |  %0 = tensor.empty() : tensor<8x8xf32>
# |                   ^
# | <stdin>:1085:10: note: possible intended match here
# |  %inserted_slice = tensor.insert_slice %2 into %0[0, 0] [2, 3] [1, 1] : tensor<2x3xf32> into tensor<8x8xf32>
# |          ^
# | 
# | Input file: <stdin>
# | Check file: C:\_work\llvm-project\llvm-project\mlir\test\Dialect\SCF\canonicalize.mlir
# | 
# | -dump-input=help explains the following input dump.
# | 
# | Input was:
# | <<<<<<
# |              .
# |              .
# |              .
# |           1077:  
# |           1078: // ----- 
# |           1079: module { 
# |           1080:  func.func @inline_forall_loop(%arg0: tensor<8x8xf32>) -> tensor<8x8xf32> { 
# |           1081:  %cst = arith.constant 0.000000e+00 : f32 
# |           1082:  %0 = tensor.empty() : tensor<8x8xf32> 
# | next:1954'0                      {                       search range start (exclusive)
# | next:1954'1                                              error: no match found in search range
# | next:1954'2                                              with "OUT" equal to "0"
# | next:1954'3                                              pattern attempts to capture variables: "SLICE"
# |           1083:  %1 = tensor.empty() : tensor<2x3xf32> 
# |           1084:  %2 = linalg.fill ins(%cst : f32) outs(%1 : tensor<2x3xf32>) -> tensor<2x3xf32> 
# |           1085:  %inserted_slice = tensor.insert_slice %2 into %0[0, 0] [2, 3] [1, 1] : tensor<2x3xf32> into tensor<8x8xf32> 
# | next:1954'4              ?                                                                                                     possible intended match
# |           1086:  return %inserted_slice : tensor<8x8xf32> 
# |           1087:  } 
# |           1088: } 
# |           1089:  
# |           1090: // ----- 
# |           1091: module { 
# |           1092:  func.func @do_not_inline_distributed_forall_loop(%arg0: tensor<8x8xf32>) -> tensor<8x8xf32> { 
# | next:1954'5                                                      }                                               search range end (exclusive)
# |           1093:  %cst = arith.constant 0.000000e+00 : f32 
# |           1094:  %0 = tensor.empty() : tensor<8x8xf32> 
# |           1095:  %1 = scf.forall (%arg1, %arg2) = (0, 4) to (1, 5) step (8, 8) shared_outs(%arg3 = %0) -> (tensor<8x8xf32>) { 
# |           1096:  %extracted_slice = tensor.extract_slice %arg3[0, 4] [2, 3] [1, 1] : tensor<8x8xf32> to tensor<2x3xf32> 
# |           1097:  %2 = linalg.fill ins(%cst : f32) outs(%extracted_slice : tensor<2x3xf32>) -> tensor<2x3xf32> 
# |              .
# |              .
# |              .
# | >>>>>>
# `-----------------------------
# error: command failed with exit status: 1

--

```
</details>
<details>
<summary>MLIR.Dialect/Tensor/transform-op-make-loop-independent.mlir</summary>

```
Exit Code: 1

Command Output (stdout):
--
# RUN: at line 1
c:\_work\llvm-project\llvm-project\build\bin\mlir-opt.exe C:\_work\llvm-project\llvm-project\mlir\test\Dialect\Tensor\transform-op-make-loop-independent.mlir -allow-unregistered-dialect      -transform-interpreter -canonicalize      -split-input-file -verify-diagnostics | c:\_work\llvm-project\llvm-project\build\bin\filecheck.exe C:\_work\llvm-project\llvm-project\mlir\test\Dialect\Tensor\transform-op-make-loop-independent.mlir
# executed command: 'c:\_work\llvm-project\llvm-project\build\bin\mlir-opt.exe' 'C:\_work\llvm-project\llvm-project\mlir\test\Dialect\Tensor\transform-op-make-loop-independent.mlir' -allow-unregistered-dialect -transform-interpreter -canonicalize -split-input-file -verify-diagnostics
# note: command had no output on stdout or stderr
# executed command: 'c:\_work\llvm-project\llvm-project\build\bin\filecheck.exe' 'C:\_work\llvm-project\llvm-project\mlir\test\Dialect\Tensor\transform-op-make-loop-independent.mlir'
# .---command stderr------------
# | C:\_work\llvm-project\llvm-project\mlir\test\Dialect\Tensor\transform-op-make-loop-independent.mlir:137:11: error: CHECK: expected string not found in input
# | // CHECK: #[[$map1:.*]] = affine_map<()[s0, s1] -> (s0 - s1)>
# |           ^
# | <stdin>:92:42: note: scanning from here
# | #map = affine_map<(d0)[s0] -> (-d0 + s0)>
# |                                          ^
# | <stdin>:92:42: note: pattern attempts to capture variables: "$map1"
# | #map = affine_map<(d0)[s0] -> (-d0 + s0)>
# |                                          ^
# | <stdin>:94:4: note: possible intended match here
# |  func.func @make_empty_loop_independent(%arg0: index, %arg1: index, %arg2: index) {
# |    ^
# | C:\_work\llvm-project\llvm-project\mlir\test\Dialect\Tensor\transform-op-make-loop-independent.mlir:144:12: error: CHECK: expected string not found in input
# |  // CHECK: %[[empty_sz:.*]] = affine.apply #[[$map1]]()[%[[ub]], %[[lb]]]
# |            ^
# | <stdin>:96:38: note: scanning from here
# |  %0 = affine.apply #map(%arg3)[%arg1]
# |                                      ^
# | <stdin>:96:38: note: with "$map1" equal to "map1"
# |  %0 = affine.apply #map(%arg3)[%arg1]
# |                                      ^
# | <stdin>:96:38: note: with "ub" equal to "arg1"
# |  %0 = affine.apply #map(%arg3)[%arg1]
# |                                      ^
# | <stdin>:96:38: note: with "lb" equal to "arg0"
# |  %0 = affine.apply #map(%arg3)[%arg1]
# |                                      ^
# | <stdin>:96:38: note: pattern attempts to capture variables: "empty_sz"
# |  %0 = affine.apply #map(%arg3)[%arg1]
# |                                      ^
# | <stdin>:98:17: note: possible intended match here
# |  "dummy.some_use"(%1) : (tensor<?xf32>) -> ()
# |                 ^
# | 
# | Input file: <stdin>
# | Check file: C:\_work\llvm-project\llvm-project\mlir\test\Dialect\Tensor\transform-op-make-loop-independent.mlir
# | 
# | -dump-input=help explains the following input dump.
# | 
# | Input was:
# | <<<<<<
# |              .
# |              .
# |              .
# |             87:  } 
# |             88: } 
# |             89:  
# |             90: // ----- 
# |             91: // ----- 
# |             92: #map = affine_map<(d0)[s0] -> (-d0 + s0)> 
# | check:137'0                                             {   search range start (exclusive)
# | check:137'1                                                 error: no match found in search range
# | check:137'2                                                 pattern attempts to capture variables: "$map1"
# |             93: module { 
# |             94:  func.func @make_empty_loop_independent(%arg0: index, %arg1: index, %arg2: index) { 
# | check:137'3        ?                                                                                  possible intended match
# | check:137'4                                             }                                             search range end (exclusive)
# |             95:  scf.for %arg3 = %arg0 to %arg1 step %arg2 { 
# |             96:  %0 = affine.apply #map(%arg3)[%arg1] 
# | check:144'0                                         {   search range start (exclusive)
# | check:144'1                                             error: no match found in search range
# | check:144'2                                             with "$map1" equal to "map1"
# | check:144'3                                             with "ub" equal to "arg1"
# | check:144'4                                             with "lb" equal to "arg0"
# | check:144'5                                             pattern attempts to capture variables: "empty_sz"
# |             97:  %1 = tensor.empty(%0) : tensor<?xf32> 
# |             98:  "dummy.some_use"(%1) : (tensor<?xf32>) -> () 
# | check:144'6                     ?                               possible intended match
# |             99:  } 
# |            100:  return 
# |            101:  } 
# |            102:  module attributes {transform.with_named_sequence} { 
# |            103:  transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) { 
# |            104:  %0 = transform.structured.match ops{["tensor.empty"]} in %arg0 : (!transform.any_op) -> !transform.any_op 
# |            105:  %1 = transform.tensor.make_loop_independent %0 {num_loops = 1 : i64} : (!transform.any_op) -> !transform.any_op 
# |            106:  transform.yield  
# |            107:  } 
# |            108:  } 
# |            109: } 
# |            110:  
# | check:144'7      } search range end (exclusive)
# | >>>>>>
# `-----------------------------
# error: command failed with exit status: 1

--

```
</details>
<details>
<summary>MLIR.Interfaces/TilingInterface/tile-and-fuse-using-interface.mlir</summary>

```
Exit Code: 1

Command Output (stdout):
--
# RUN: at line 1
c:\_work\llvm-project\llvm-project\build\bin\mlir-opt.exe -transform-interpreter -cse -split-input-file C:\_work\llvm-project\llvm-project\mlir\test\Interfaces\TilingInterface\tile-and-fuse-using-interface.mlir | c:\_work\llvm-project\llvm-project\build\bin\filecheck.exe C:\_work\llvm-project\llvm-project\mlir\test\Interfaces\TilingInterface\tile-and-fuse-using-interface.mlir
# executed command: 'c:\_work\llvm-project\llvm-project\build\bin\mlir-opt.exe' -transform-interpreter -cse -split-input-file 'C:\_work\llvm-project\llvm-project\mlir\test\Interfaces\TilingInterface\tile-and-fuse-using-interface.mlir'
# note: command had no output on stdout or stderr
# executed command: 'c:\_work\llvm-project\llvm-project\build\bin\filecheck.exe' 'C:\_work\llvm-project\llvm-project\mlir\test\Interfaces\TilingInterface\tile-and-fuse-using-interface.mlir'
# .---command stderr------------
# | C:\_work\llvm-project\llvm-project\mlir\test\Interfaces\TilingInterface\tile-and-fuse-using-interface.mlir:727:11: error: CHECK: expected string not found in input
# | // CHECK: %[[TILE_3D:.+]] = tensor.extract_slice %[[EMPTY_3D]][0, 0, %[[IV]]] [4, 1, 32] [1, 1, 1]
# |           ^
# | <stdin>:596:69: note: scanning from here
# |  %2 = scf.for %arg1 = %c0 to %c96 step %c32 iter_args(%arg2 = %arg0) -> (tensor<4x96xf32>) {
# |                                                                     ^
# | <stdin>:596:69: note: with "EMPTY_3D" equal to "0"
# |  %2 = scf.for %arg1 = %c0 to %c96 step %c32 iter_args(%arg2 = %arg0) -> (tensor<4x96xf32>) {
# |                                                                     ^
# | <stdin>:596:69: note: with "IV" equal to "arg1"
# |  %2 = scf.for %arg1 = %c0 to %c96 step %c32 iter_args(%arg2 = %arg0) -> (tensor<4x96xf32>) {
# |                                                                     ^
# | <stdin>:596:69: note: pattern attempts to capture variables: "TILE_3D"
# |  %2 = scf.for %arg1 = %c0 to %c96 step %c32 iter_args(%arg2 = %arg0) -> (tensor<4x96xf32>) {
# |                                                                     ^
# | <stdin>:599:7: note: possible intended match here
# |  %extracted_slice = tensor.extract_slice %4[0, 0, 0] [4, 1, 32] [1, 1, 1] : tensor<4x1x32xf32> to tensor<4x32xf32>
# |       ^
# | 
# | Input file: <stdin>
# | Check file: C:\_work\llvm-project\llvm-project\mlir\test\Interfaces\TilingInterface\tile-and-fuse-using-interface.mlir
# | 
# | -dump-input=help explains the following input dump.
# | 
# | Input was:
# | <<<<<<
# |              .
# |              .
# |              .
# |            591:  %0 = tensor.empty() : tensor<4x1x96xf32> 
# |            592:  %1 = linalg.fill ins(%cst : f32) outs(%0 : tensor<4x1x96xf32>) -> tensor<4x1x96xf32> 
# |            593:  %c0 = arith.constant 0 : index 
# |            594:  %c96 = arith.constant 96 : index 
# |            595:  %c32 = arith.constant 32 : index 
# |            596:  %2 = scf.for %arg1 = %c0 to %c96 step %c32 iter_args(%arg2 = %arg0) -> (tensor<4x96xf32>) { 
# | check:727'0                                                                        {                           search range start (exclusive)
# | check:727'1                                                                                                    error: no match found in search range
# | check:727'2                                                                                                    with "EMPTY_3D" equal to "0"
# | check:727'3                                                                                                    with "IV" equal to "arg1"
# | check:727'4                                                                                                    pattern attempts to capture variables: "TILE_3D"
# |            597:  %3 = tensor.empty() : tensor<4x1x32xf32> 
# |            598:  %4 = linalg.fill ins(%cst : f32) outs(%3 : tensor<4x1x32xf32>) -> tensor<4x1x32xf32> 
# |            599:  %extracted_slice = tensor.extract_slice %4[0, 0, 0] [4, 1, 32] [1, 1, 1] : tensor<4x1x32xf32> to tensor<4x32xf32> 
# | check:727'5           ?                                                                                                              possible intended match
# |            600:  %extracted_slice_0 = tensor.extract_slice %arg2[0, %arg1] [4, 32] [1, 1] : tensor<4x96xf32> to tensor<4x32xf32> 
# |            601:  %5 = linalg.generic {indexing_maps = [#map, #map], iterator_types = ["parallel", "parallel"]} ins(%extracted_slice : tensor<4x32xf32>) outs(%extracted_slice_0 : tensor<4x32xf32>) { 
# |            602:  ^bb0(%in: f32, %out: f32): 
# |            603:  %6 = arith.addf %in, %out : f32 
# |            604:  linalg.yield %6 : f32 
# |              .
# |              .
# |              .
# |            614:  %transformed, %loops = transform.structured.fuse %0 tile_sizes [0, 32] {apply_cleanup} : (!transform.any_op) -> (!transform.any_op, !transform.op<"scf.for">) 
# |            615:  transform.yield  
# |            616:  } 
# |            617:  } 
# |            618: } 
# |            619:  
# | check:727'6      } search range end (exclusive)
# | >>>>>>
# `-----------------------------
# error: command failed with exit status: 1

--

```
</details>
<details>
<summary>MLIR.Interfaces/TilingInterface/tile-fuse-and-yield-using-scfforall.mlir</summary>

```
Exit Code: 1

Command Output (stdout):
--
# RUN: at line 1
c:\_work\llvm-project\llvm-project\build\bin\mlir-opt.exe -transform-interpreter -cse -canonicalize -split-input-file C:\_work\llvm-project\llvm-project\mlir\test\Interfaces\TilingInterface\tile-fuse-and-yield-using-scfforall.mlir | c:\_work\llvm-project\llvm-project\build\bin\filecheck.exe C:\_work\llvm-project\llvm-project\mlir\test\Interfaces\TilingInterface\tile-fuse-and-yield-using-scfforall.mlir
# executed command: 'c:\_work\llvm-project\llvm-project\build\bin\mlir-opt.exe' -transform-interpreter -cse -canonicalize -split-input-file 'C:\_work\llvm-project\llvm-project\mlir\test\Interfaces\TilingInterface\tile-fuse-and-yield-using-scfforall.mlir'
# note: command had no output on stdout or stderr
# executed command: 'c:\_work\llvm-project\llvm-project\build\bin\filecheck.exe' 'C:\_work\llvm-project\llvm-project\mlir\test\Interfaces\TilingInterface\tile-fuse-and-yield-using-scfforall.mlir'
# .---command stderr------------
# | C:\_work\llvm-project\llvm-project\mlir\test\Interfaces\TilingInterface\tile-fuse-and-yield-using-scfforall.mlir:108:15: error: CHECK-DAG: expected string not found in input
# | // CHECK-DAG: %[[OUTPUT_I8:.+]] = tensor.empty() : tensor<32x1024xi8>
# |               ^
# | <stdin>:44:85: note: scanning from here
# |  func.func @fuse_pack_consumer_into_multi_output_generic(%arg0: tensor<32x1024xf32>) -> (tensor<32x1024xf32>, tensor<2x512x16x2xi8>) {
# |                                                                                     ^
# | <stdin>:44:85: note: pattern attempts to capture variables: "OUTPUT_I8"
# |  func.func @fuse_pack_consumer_into_multi_output_generic(%arg0: tensor<32x1024xf32>) -> (tensor<32x1024xf32>, tensor<2x512x16x2xi8>) {
# |                                                                                     ^
# | <stdin>:46:2: note: possible intended match here
# |  %0 = tensor.empty() : tensor<32x1024xf32>
# |  ^
# | 
# | Input file: <stdin>
# | Check file: C:\_work\llvm-project\llvm-project\mlir\test\Interfaces\TilingInterface\tile-fuse-and-yield-using-scfforall.mlir
# | 
# | -dump-input=help explains the following input dump.
# | 
# | Input was:
# | <<<<<<
# |            .
# |            .
# |            .
# |           39: // ----- 
# |           40: #map = affine_map<(d0) -> (d0 * 16)> 
# |           41: #map1 = affine_map<(d0) -> (d0 * -16 + 32, 16)> 
# |           42: #map2 = affine_map<(d0, d1) -> (d0, d1)> 
# |           43: module { 
# |           44:  func.func @fuse_pack_consumer_into_multi_output_generic(%arg0: tensor<32x1024xf32>) -> (tensor<32x1024xf32>, tensor<2x512x16x2xi8>) { 
# | dag:108'0                                                                                        {                                                     search range start (exclusive)
# | dag:108'1                                                                                                                                              error: no match found in search range
# | dag:108'2                                                                                                                                              pattern attempts to capture variables: "OUTPUT_I8"
# |           45:  %c0_i8 = arith.constant 0 : i8 
# |           46:  %0 = tensor.empty() : tensor<32x1024xf32> 
# | dag:108'3      ?                                           possible intended match
# |           47:  %1 = tensor.empty() : tensor<2x512x16x2xi8> 
# |           48:  %2:2 = scf.forall (%arg1) in (2) shared_outs(%arg2 = %1, %arg3 = %0) -> (tensor<2x512x16x2xi8>, tensor<32x1024xf32>) { 
# |           49:  %3 = affine.apply #map(%arg1) 
# |           50:  %4 = affine.min #map1(%arg1) 
# |           51:  %extracted_slice = tensor.extract_slice %arg0[%3, 0] [%4, 1024] [1, 1] : tensor<32x1024xf32> to tensor<?x1024xf32> 
# |            .
# |            .
# |            .
# |           71:  %transfomed, %loops = transform.test.fuse_and_yield %0 [1] use_forall true : (!transform.any_op) -> (!transform.any_op, !transform.any_op) 
# |           72:  transform.yield  
# |           73:  } 
# |           74:  } 
# |           75: } 
# |           76:  
# | dag:108'4      } search range end (exclusive)
# | >>>>>>
# `-----------------------------
# error: command failed with exit status: 1

--

```
</details>

If these failures are unrelated to your changes (for example tests are broken or flaky at HEAD), please open an issue at https://github.com/llvm/llvm-project/issues and add the `infrastructure` label.

https://github.com/llvm/llvm-project/pull/212974


More information about the Mlir-commits mailing list