<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/145879>145879</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [mlir][linalg] using outputDimSize in `getPackOpSourceOrPaddedSource` to lower linanlg.pack for sources with dynamic leading dims
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            mlir
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          rYm-A
      </td>
    </tr>
</table>

<pre>
    Lowering the following linalg.pack op generates an issue:

```
func.func @main(%arg0: tensor<?x?x8xf32>, %arg1:  tensor<?x?x8x8x1xf32>, %cst: f32 ) -> tensor<?x?x8x8x1xf32> {
  %result = linalg.pack %arg0
    padding_value(%cst : f32)
    outer_dims_perm = [0, 1, 2]
    inner_dims_pos = [1, 2]
    inner_tiles = [8, 1]
    into %arg1
    {lowering_config = #iree_codegen.lowering_config<tile_sizes = [[64, 8, 8], [1, 1, 1]]>}
    : tensor<?x?x8xf32> -> tensor<?x?x8x8x1xf32>
  return %result : tensor<?x?x8x8x1xf32>
}
```

...using 

```
iree-opt packOp.mlir \
--pass-pipeline="builtin.module(func.func(iree-llvmcpu-tile{tiling-level=1}, iree-codegen-decompose-pack-unpack-ops))"  \
--debug \
--mlir-disable-threading 
```

...will generate the following IR after `iree-llvmcpu-tile{tiling-level=1}`:

```
func.func @main(%arg0: tensor<?x?x8xf32>, %arg1: tensor<?x?x8x8x1xf32>, %arg2: f32) -> tensor<?x?x8x8x1xf32> {
  %c8 = arith.constant 8 : index
  %c1 = arith.constant 1 : index
  %c0 = arith.constant 0 : index
  %dim = tensor.dim %arg1, %c0 : tensor<?x?x8x8x1xf32>
  %dim_0 = tensor.dim %arg1, %c1 : tensor<?x?x8x8x1xf32>
  %0 = scf.for %arg3 = %c0 to %dim step %c1 iter_args(%arg4 = %arg1) -> (tensor<?x?x8x8x1xf32>) {
    %1 = scf.for %arg5 = %c0 to %dim_0 step %c1 iter_args(%arg6 = %arg4) -> (tensor<?x?x8x8x1xf32>) {
      %2 = scf.for %arg7 = %c0 to %c8 step %c1 iter_args(%arg8 = %arg6) -> (tensor<?x?x8x8x1xf32>) {
        %dim_1 = tensor.dim %arg0, %c0 : tensor<?x?x8xf32>
        %dim_2 = tensor.dim %arg0, %c1 : tensor<?x?x8xf32>
        %3 = affine.min affine_map<(d0)[s0] -> (-d0 + s0, 1)>(%arg3)[%dim_1]
        %4 = affine.apply affine_map<(d0) -> (d0 * 8)>(%arg5)
        %5 = affine.min affine_map<(d0)[s0] -> (d0 * -8 + s0, 8)>(%arg5)[%dim_2]
        %extracted_slice = tensor.extract_slice %arg0[%arg3, %4, %arg7] [%3, %5, 1] [1, 1, 1] : tensor<?x?x8xf32> to tensor<?x?x1xf32>
        %extracted_slice_3 = tensor.extract_slice %arg8[%arg3, %arg5, %arg7, 0, 0] [1, 1, 1, 8, 1] [1, 1, 1, 1, 1] : tensor<?x?x8x8x1xf32> to tensor<1x1x1x8x1xf32>
        %pack = linalg.pack %extracted_slice_1 padding_value(%cst : f32) 
                        outer_dims_perm = [0, 1, 2] 
                        inner_dims_pos = [1, 2] 
                        inner_tiles = [8, 1] 
                        into %extracted_slice_2 {lowering_config = #iree_codegen.lowering_config<tile_sizes = [[64, 8, 8], [1, 1, 1]]>} : 
                        tensor<?x?x1xf32> -> tensor<1x1x1x8x1xf32>
        %inserted_slice = tensor.insert_slice %pack into %arg8[%arg3, %arg5, %arg7, 0, 0] [1, 1, 1, 8, 1] [1, 1, 1, 1, 1] : tensor<1x1x1x8x1xf32> into tensor<?x?x8x8x1xf32>
        scf.yield %inserted_slice : tensor<?x?x8x8x1xf32>
      }
      scf.yield %2 : tensor<?x?x8x8x1xf32>
    }
    scf.yield %1 : tensor<?x?x8x8x1xf32>
  }
  return %0 : tensor<?x?x8x8x1xf32>
}
```

The conversion `iree-codegen-decompose-pack-unpack-ops` will trigger this [assert](https://github.com/llvm/llvm-project/blob/66f84c8b8a762832af39e91370018f8f8307a0fc/mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp#L1057) in `getPackOpSourceOrPaddedSource` , since the source's outermost dim of the linalg.pack op isn't 1 but dynamic.

@banach-space, why not using packOp.SourceType() instead? The `iree-llvmcpu-tile{tiling-level=1}` pass already ensures that the non-tiled outer dimension of the linalg.pack result is set to 1.

This time, not a duplicated issue ðŸ™‚

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEWFuv2yoW_jXkBdnC-JqHPCQ7J9JIlU417cs8RQRjhxkMFuB96a8fAY5zc3fSSkdtXe96e7H4vrUW62JiDG8lYyuQb0C-XZDBHpVe6f900XpxUPXH6ot6Y5rLFtojg40SQr25J8ElEW3cE_o_qHrYMsk0scxAIiE3ZmAgXQPkrwKNF1o3g6Sxu0GQoY5wCXAFcE50i0C6hpZJozRIX0C6e3f_qvcmxSD9C-AXGOQSJzcnWL0n18LUWCfbpBgCvIQRSP_6fB0E5QagNXSLNTODsBCk2yumJ6xOCsKe1DWX7f6ViIEFJtS4RX5XgJejnBos0_uad2bfM915rSDfIAc0cTcM8u0oy6WcZJU5ic5LWS7YJFIFbRciVk02C78C5UaM3txTJRvehsU45ZqxPVU1a5mMb2RA-uI22hv-47wbyDdF5naswi3fequPSJMJS751DilPoD518hMu8mo0s4OWV16a1Xq1LGC4jEWA1nEcD8ZF832kOotEqrfQ-f3vPu4E1xDkLwCto6gnxkQ975ngkoF0CzA-DFxYLuNO1YNwwTCFOsCVVybEa0f7IXLGBOXGcsFlGwn2ygRIt4kDiF-gFx09EdWMqq5XhkUORTRI_0P1xsWWuzCcMNXsMLTTk4Mb1dyQg2CRPWpG6hPPOxO8cSGmA3xzzP_1b0gayzQEBXqWRYH-ybP_zNEnusXnU_iLR59WPsiJ5vYYUyWNJdLCykcZlzV7nwSTOcFkRhDNCaJ7wZqH5BCwxv5xZD7mNPRUsJ-U7dEDdcnz6oIqQ5u4UXrUk475w-EK2cbtYSzrR-3cJT6iWzP5OjstCTBG5wBcPfDrcnKRR5PMoMnn0OzR53iKCzzZb-LxiPAMovIOEa0-h1NdwCl-G87k_2Te_-hhOF34_kohfqDwpwE1pzCED2kaLlnccTn-d9-R3q3FVY1clss3BoF8O5kiqhEEeAPNqYAuvQlGC6ZhyckA54I4bppdbkr6XnzMbztt53dbu0J3tU9-ru-j5vz36Iz6o-qC1OxmEyl8R4q9W02oZfXeCE7ZpZPGV6cXo7u8rmAt77jsnDlLBy4InN7mp3p-X-EflHSr7l8ms8FwQ2GfPiJR3ZEIhjrzwC8Qhds98lPrMsfqGX4XteOSY_Lu_lY_4Rh6yPue8pZ78ri1DC3LMlxPNZhXKx60mTOy883mjWBIcrd08J_sPL3NLlH-NB5v-oTPXcmlYXr2wIU351D1Tr7oxv9E3N5yCXge1_3wxxW1D85EPUv8mf4hTB_npHWlET-t5KziSsHTXcy4_DxAPNdOzc4O348MUiVfmTZcyak_fty6Fwj6jttq3rZMQ3vkxnmSGGdYH8_V0dreuC4a7wDetdweh0NMVQfwzjXg44-o1-q_jFqAdwehDgDviqKpMlodKlIWuEoxadIlWyZpiVBSNVVTpagkqKEA79yE4PRwt27LiQiKvvjMBPDuuybSNEp35uohpn0PcPolQXnp0hD31Ftmv_o56ZsaNGV_66-krlkdnhxjF5aGSxrmCxN-j0sTZuNOGQtdN6Ea__7m4wI3EuDStdaHwcL6Q5KO03icMDJ0IJLQY2R64nS-wLfjB5TKwjDajfNbgPL9ow_Z1AE3lpEapDvoXPlL8w10AyAkwo1VH5BJM2hmoD0S6-FLJf36OrBzzJj0UTLDb5xhuYGGWVdLkvgUYNxAyzvPyfEhsB56wSmxrA7fWCDYIbDcgeUSVBig9aJepfUyXZIFWyVljpYZyrJicVxl5SFvDgkpMkyXqMgbmhRpVuIDaRAq6WHBVxjhHBW4SDBGWRGnNE0TmtY0qUia4gZkiHWEi9gZKFa6XXgEqyTLq3K5EOTAhPFfkTAOoeXqyEKvfKAehtaADAlurDlrsNwK_-XJL3A5exMs4_JX8J4abD_YLe--8R_s2WCzCvpK4u0sT4Z2bXkIPAPfuD2eAgmKcTh21XAxaLH65dPnTeHOyWiN1xX-fwAAAP__3E2R8A">