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

    <tr>
        <th>Summary</th>
        <td>
            [mlir] crash in memref.copy
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          MiraaChan
      </td>
    </tr>
</table>

<pre>
    Hi, I was running this mlir with mlir-cpu-runner.
```mlir
#map0 = affine_map<(d0, d1)[s0] -> (d0 * 128 + s0 + d1)>
#map1 = affine_map<(d0, d1)[s0, s1] -> (d0 * s1 + s0 + d1)>
module {
  func.func @matmul(%arg0: memref<128x128xf32>, %arg1: memref<128x128xf32>, %arg2: memref<128x128xf32>) attributes {llvm.emit_c_interface} {
    %cst = arith.constant 0.000000e+00 : f32
    linalg.fill ins(%cst : f32) outs(%arg2 : memref<128x128xf32>)
    %c0 = arith.constant 0 : index
    %c128 = arith.constant 128 : index
    %c8 = arith.constant 8 : index
    %c4 = arith.constant 4 : index
    %c16 = arith.constant 16 : index
    scf.for %arg3 = %c0 to %c128 step %c8 {
      scf.for %arg4 = %c0 to %c128 step %c4 {
        scf.for %arg5 = %c0 to %c128 step %c16 {
          %0 = memref.subview %arg0[%arg3, %arg4] [8, 4] [1, 1] : memref<128x128xf32> to memref<8x4xf32, #map0>
          %1 = memref.subview %arg1[%arg4, %arg5] [4, 16] [1, 1] : memref<128x128xf32> to memref<4x16xf32, #map0>
          %2 = memref.subview %arg2[%arg3, %arg5] [8, 16] [1, 1] : memref<128x128xf32> to memref<8x16xf32, #map0>
          %c2 = arith.constant 2 : index
          scf.for %arg6 = %c0 to %c8 step %c2 {
            scf.for %arg7 = %c0 to %c16 step %c4 {
              %3 = memref.subview %0[%arg6, 0] [2, 4] [1, 1] : memref<8x4xf32, #map0> to memref<2x4xf32, #map0>
              %4 = memref.subview %1[0, %arg7] [4, 4] [1, 1] : memref<4x16xf32, #map0> to memref<4x4xf32, #map0>
              %5 = memref.subview %2[%arg6, %arg7] [2, 4] [1, 1] : memref<8x16xf32, #map0> to memref<2x4xf32, #map0>
              %6 = memref.alloc() : memref<32xi8>
              %7 = memref.view %6[%c0][%c2, %c4] : memref<32xi8> to memref<?x?xf32>
              %8 = memref.subview %7[0, 0] [%c2, %c4] [1, 1] : memref<?x?xf32> to memref<?x?xf32, #map1>
              %9 = memref.alloc() : memref<32xi8>
              %10 = memref.view %9[%c0][%c2, %c4] : memref<32xi8> to memref<?x?xf32>
              %11 = memref.subview %10[0, 0] [%c2, %c4] [1, 1] : memref<?x?xf32> to memref<?x?xf32, #map1>
              memref.copy %3, %8 : memref<2x4xf32, #map0> to memref<?x?xf32, #map1>
              memref.copy %5, %11 : memref<2x4xf32, #map0> to memref<?x?xf32, #map1>
              linalg.matmul ins(%8, %4 : memref<?x?xf32, #map1>, memref<4x4xf32, #map0>) outs(%11 : memref<?x?xf32, #map1>)
              memref.copy %11, %5 : memref<?x?xf32, #map1> to memref<2x4xf32, #map0>
              memref.dealloc %6 : memref<32xi8>
              memref.dealloc %9 : memref<32xi8>
            }
          }
        }
      }
    }
    return
  }
  func.func @main() {
    %cst = arith.constant 1.000000e+00 : f32
    %cst_0 = arith.constant 1.280000e+02 : f32
    %c0 = arith.constant 0 : index
    %c1 = arith.constant 1 : index
    %c128 = arith.constant 128 : index
    %0 = memref.alloc() : memref<128x128xf32>
    %1 = memref.alloc() : memref<128x128xf32>
    %2 = memref.alloc() : memref<128x128xf32>
    linalg.fill ins(%cst : f32) outs(%0 : memref<128x128xf32>)
    linalg.fill ins(%cst : f32) outs(%1 : memref<128x128xf32>)
    call @matmul(%2, %0, %1) : (memref<128x128xf32>, memref<128x128xf32>, memref<128x128xf32>) -> ()
    scf.for %arg0 = %c0 to %c128 step %c1 {
      scf.for %arg1 = %c0 to %c128 step %c1 {
        %3 = memref.load %2[%arg0, %arg1] : memref<128x128xf32>
        %4 = arith.cmpf oeq, %3, %cst_0 : f32
        cf.assert %4, "Matmul does not produce the right output"
      }
    }
    memref.dealloc %0 : memref<128x128xf32>
    memref.dealloc %1 : memref<128x128xf32>
    memref.dealloc %2 : memref<128x128xf32>
    return
  }
}
```

The command is 
```
mlir-opt copy_test.mlir -pass-pipeline="func.func(convert-linalg-to-loops,convert-scf-to-cf,convert-arith-to-llvm),convert-linalg-to-llvm,convert-memref-to-llvm,convert-func-to-llvm,reconcile-unrealized-casts" | \
mlir-cpu-runner -e main -entry-point-result=void \
-shared-libs=/data/3rdparty/llvm-project/build/lib/libmlir_runner_utils.so,/data/3rdparty/llvm-project/build/lib/libmlir_c_runner_utils.so
```
And it crashed with:
```
Stack dump:
0.      Program arguments: mlir-cpu-runner -e main -entry-point-result=void -shared-libs=/data/3rdparty/llvm-project/build/lib/libmlir_runner_utils.so,/data/3rdparty/llvm-project/build/lib/libmlir_c_runner_utils.so
 #0 0x000055d56f369ee0 PrintStackTraceSignalHandler(void*) (/data/3rdparty/llvm-project/build/bin/mlir-cpu-runner+0x2aaee0)
 #1 0x000055d56f367904 SignalHandler(int) (/data/3rdparty/llvm-project/build/bin/mlir-cpu-runner+0x2a8904)
 #2 0x00007f2c180a2980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #3 0x00007f2c0ece9bf0 memrefCopy (/data/3rdparty/llvm-project/build/lib/libmlir_c_runner_utils.so+0x18bf0)
 #4 0x00007f2c184cd229
 #5 0x00007f2c184cd604
 #6 0x00007f2c184cd7ed
 #7 0x000055d56f83dedc compileAndExecute((anonymous namespace)::Options&, mlir::ModuleOp, llvm::StringRef, (anonymous namespace)::CompileAndExecuteConfig, void**) (/data/3rdparty/llvm-project/build/bin/mlir-cpu-runner+0x77eedc)
 #8 0x000055d56f83e37a compileAndExecuteVoidFunction((anonymous namespace)::Options&, mlir::ModuleOp, llvm::StringRef, (anonymous namespace)::CompileAndExecuteConfig) (/data/3rdparty/llvm-project/build/bin/mlir-cpu-runner+0x77f37a)
 #9 0x000055d56f841a82 mlir::JitRunnerMain(int, char**, mlir::DialectRegistry const&, mlir::JitRunnerConfig) (/data/3rdparty/llvm-project/build/bin/mlir-cpu-runner+0x782a82)
#10 0x000055d56f2e1629 main (/data/3rdparty/llvm-project/build/bin/mlir-cpu-runner+0x222629)
#11 0x00007f2c16cb2c87 __libc_start_main /build/glibc-uZu3wS/glibc-2.27/csu/../csu/libc-start.c:344:0
#12 0x000055d56f34ed1a _start (/data/3rdparty/llvm-project/build/bin/mlir-cpu-runner+0x28fd1a)
[1]    13928 done                mlir-opt tmp/reg_tile_inter_promote.mlir  |
       13929 segmentation fault  mlir-cpu-runner -e main -entry-point-result=void
```
the commit id of my llvm is e0a3964affe82a63702e231c84be535d39413d1b, any help would be appreciated.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzVWUtv4zgS_jXKhbBAUu-DD2mng9kFGrPoHuxhLwYtUTZ39VqRSpz99VukZFmSZVtJZwYzedjmq-qrj8Vilbwrk7f1L8KiG_Q39MokqpuiEMUeqYOQKM9EjV6FOphPq7hqVnqc17aFnyz8aPm4_dPDXRd1clZhZDlPiKWpKPgW2pazsWiYYK0nIRaNLO-LxJb3hFaW8xWZMXh9RISG8P4FSWze2rnO16Fsskw2tCSZ0SDJdQV5mTQZR1bwpW0jlDZFbOsXZLk4ZypvMhBlUY_Ve2w5jyjnec1TwADIj_o_daiWB-rbWWTRLHpzVoSYUrXYNYpLjS7LXnKb50Jt460oFK9TFnMreBoiR1pyLFXLVg2baMdlIRUrFMI2Nj8cKMB6rx6RVtWvzETBsr2diixDopCtxa2sdiYgKhsleyoouo1_DArPYjIiRJHw43i2cYnL-W337IrZ-Vdnu3Oz3ato_Fkw_tx8Gad2WtbdFjtmYWu_KnvTpOLVCfVw96bL3TvL3enyqQDvjgBtw1SCsbndrnZzbdnsXgR_Racj4H3prDv7sqtPHQyEuuvUILphzuMNT9G4-qHw6JpuI9cElf6cjuCR6_BID889w_M6RKaL-B_G5x6JvwggvQ6QzvHnDfn7CYDhUoAxnfNpOufSc47lXzrWwK3onFdNRQQzvunf9O0evHOF3bNr-poA3NFIFzjlrOeNqKVLfLMD6F4BqJ0Tn3c9GLrlHYDzrjfxzuUIvSsI6ZjCMc5lRN7F-R4m_SFOlmVlbC6gaKzUoUcRXhcSDIWcLPVbS2PtJd3HDhI434VZJw0jQyzn-aj_uztvXnl4heng5AsnN51BcJXlsearoHqGyXV80WcwTPAcxdEfRDG5dh8Q_GcgucMVl9WbiV6d-nCsbfZUfJpSr1NqqPr9tHZZZJs1n_PIsNPuXid4LBpad8LaKB2dWnVDcLSALEI6vN5CsR8Lb53WhJtTd4p2Cw_d5eLFJxaqhouMYNo16Rg1R42aq6YuTu3B0KSMEsUprCyrV8ideqVduZ2tK4hNw34tnV_7zoJkVs2nlS94UQyelFhDAeRnBdCfEvC-4hEvrhzfJ5cslhuDhdPq_nQrnPIzcrIehm_U8h8ZivoHFCNU4_wY36vdbteO5L3LLzPrrGTJOCcc5K73ypIL0aOaO69SVPL_duJON-LpQE-Oq9kx8Eopea2MqHY-_dZeM0nJJSpKhaq6TJqYI3XgqBb7g9LOUTUKpi4LZpdB9bav3lh42xlvLLz9XOVe3D1_OD2n65rm9TcgJi7znBUJEhLNzjSP_cpKIX0bbhWXyjbPBFcVbMCqEhWHU8lhL4HVPsaDK0OYe4H9WbVndqXKVVaWFRzNzWkEHFR3x-mgz_iDmZy95Po0nIcGgsxYP9ByMzOgkQy6aw4Dscj4qilqIFj8jyermEkdL3SJCj7kbQZGn591ohVH-sqC90LVb6uqFIVa1Vw2mQLLX0qRnNeu5IHVIDkTO2loeU6YYvDm1EnFavUGHzWiFbjnv3kM3vi8a0SW6G6xa1-1_m2re9sokUlblmDBx2XFF9Lm9vpR-wHsdM3kgSfmsS843-zUH4rF_0FJk1f9DGy35-kfdbmvWQ5ne9_kQJg0Dvx-Rv9KROrUDiN81GmG5yWenzp-xDkGMsAwQ9ZvNYv5D7EHL_4FDlzGazgl2lCLPpq7RYf_5bB2OoN6ntCqE5wjZQw0n68SgEYm0IIIu2iKBYB-Mo4Q1Ixw0A5HkNKYhJjRKMRou4V9V2XNtyachz3nx9Df-q4--M1xtS-adqBSBzi9CVBvY6OHaCkjNc5ADeYxj3Yp7kLops3p32XiPQ8wIELQMQLhjmx144QOR73pqA9U9aP-dDTgyXk0GO1m6CQ8iXUcryC2wRH-euRxo7gxMmRFWbzlZQM3Isu5rPS3BPrrjkf4-7VSotRplHm2Y77AMf3fzHcgv1a618RO0_tDgSvvv_O0vW1vSt5MwWzKIhV7vbL3-M91-iDgwMJoA8IJTdwJ2CVN_wQ8z3BRaCr-lJR9KkkpcDAiKRqT5BIW0oFdfxfqu1n_ra3YTIzYoBgi82kThzQ8CZYBmO98LySEdWRqnQuyeqG_h4khhB3am6hj3zguU058UGgun88LdZT6OlkZaCXDI-zHOxqHAYQ6iCLxFuq_Wm07CL34vR5bNf9qnNcffZPaNIBGLHX0s-3-oxk0cuwYKHVcF17xWT0dR3yXJ4ShVvEnmh2mIPZstn50BmUA_BAnguoiKQuOJj99PqkgdaDPNd9vIY7y9kvMLWjPS8XbFFPnZKO0X0uNkOR7nVYwfRJRyiBjQB9IL2azGtUlxJAEQQJSpih_M8dZZ8ccMyfyXZamHHzMdwJMORAdh-6Oe46XOJFLnITstK-z4g0deFah17LJErTjiFUV5J-CKZ7YD3xNfC-C34CGD8naSSInYg9KqIyvgURzUoBHk4dBoTt8HvXQ1Nn6oFSlsyrgTzsKpGnNDkbzbg8vt1JI2XCIWs-eHxH34bBOSEjcNAxSzw12CfZISAPu-SR1mcc4jR4ytuOZXJtSjxb8FRkRunLynh7EmmJKcYhd7LuhG9ipGznYg_t8FzHHT1yopTnwn9nma-qy3j_UawNp1-wlDGYQHuR5ECoJyEW4MV7LZ406lPX6m6gZ2xxY8WCUrw34_wOp0ymF">