<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/122071>122071</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Error:mlir-translate -mlir-to-cpp -declare-variables-at-top
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
pyl3000
</td>
</tr>
</table>
<pre>
when i run:`mlir-translate -mlir-to-cpp -declare-variables-at-top matmul-emitc.mlir -o matmul-emitc.cpp`,The following error occurs:
![Image](https://github.com/user-attachments/assets/b4d3ea7b-2d65-4ea5-aa46-32db1583bf1b)
The input file as follow:
```
module {
emitc.func @main() {
%0 = "emitc.constant"() <{value = 0.000000e+00 : f64}> : () -> f64
%1 = "emitc.constant"() <{value = 6.000000e+00 : f64}> : () -> f64
%2 = "emitc.constant"() <{value = 5.000000e+00 : f64}> : () -> f64
%3 = "emitc.constant"() <{value = 4.000000e+00 : f64}> : () -> f64
%4 = "emitc.constant"() <{value = 3.000000e+00 : f64}> : () -> f64
%5 = "emitc.constant"() <{value = 2.000000e+00 : f64}> : () -> f64
%6 = "emitc.constant"() <{value = 1.000000e+00 : f64}> : () -> f64
%7 = "emitc.variable"() <{value = #emitc.opaque<"">}> : () -> !emitc.array<2x2xf64>
%8 = "emitc.variable"() <{value = #emitc.opaque<"">}> : () -> !emitc.array<2x3xf64>
%9 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
%10 = builtin.unrealized_conversion_cast %9 : !emitc.size_t to index
%11 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
%12 = builtin.unrealized_conversion_cast %11 : !emitc.size_t to index
%13 = subscript %8[%10, %12] : (!emitc.array<2x3xf64>, index, index) -> !emitc.lvalue<f64>
assign %6 : f64 to %13 : <f64>
%14 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
%15 = builtin.unrealized_conversion_cast %14 : !emitc.size_t to index
%16 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
%17 = builtin.unrealized_conversion_cast %16 : !emitc.size_t to index
%18 = subscript %8[%15, %17] : (!emitc.array<2x3xf64>, index, index) -> !emitc.lvalue<f64>
assign %5 : f64 to %18 : <f64>
%19 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
%20 = builtin.unrealized_conversion_cast %19 : !emitc.size_t to index
%21 = "emitc.constant"() <{value = 2 : index}> : () -> !emitc.size_t
%22 = builtin.unrealized_conversion_cast %21 : !emitc.size_t to index
%23 = subscript %8[%20, %22] : (!emitc.array<2x3xf64>, index, index) -> !emitc.lvalue<f64>
assign %4 : f64 to %23 : <f64>
%24 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
%25 = builtin.unrealized_conversion_cast %24 : !emitc.size_t to index
%26 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
%27 = builtin.unrealized_conversion_cast %26 : !emitc.size_t to index
%28 = subscript %8[%25, %27] : (!emitc.array<2x3xf64>, index, index) -> !emitc.lvalue<f64>
assign %3 : f64 to %28 : <f64>
%29 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
%30 = builtin.unrealized_conversion_cast %29 : !emitc.size_t to index
%31 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
%32 = builtin.unrealized_conversion_cast %31 : !emitc.size_t to index
%33 = subscript %8[%30, %32] : (!emitc.array<2x3xf64>, index, index) -> !emitc.lvalue<f64>
assign %2 : f64 to %33 : <f64>
%34 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
%35 = builtin.unrealized_conversion_cast %34 : !emitc.size_t to index
%36 = "emitc.constant"() <{value = 2 : index}> : () -> !emitc.size_t
%37 = builtin.unrealized_conversion_cast %36 : !emitc.size_t to index
%38 = subscript %8[%35, %37] : (!emitc.array<2x3xf64>, index, index) -> !emitc.lvalue<f64>
assign %1 : f64 to %38 : <f64>
%39 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
%40 = builtin.unrealized_conversion_cast %39 : !emitc.size_t to index
%41 = "emitc.constant"() <{value = 2 : index}> : () -> !emitc.size_t
%42 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
cf.br ^bb1(%40 : index)
^bb1(%43: index): // 2 preds: ^bb0, ^bb8
%44 = builtin.unrealized_conversion_cast %43 : index to !emitc.size_t
%45 = cast %44 : !emitc.size_t to !emitc.ptrdiff_t
%46 = cast %41 : !emitc.size_t to !emitc.ptrdiff_t
%47 = cmp lt, %45, %46 : (!emitc.ptrdiff_t, !emitc.ptrdiff_t) -> i1
cf.cond_br %47, ^bb2, ^bb9
^bb2: // pred: ^bb1
%48 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
%49 = builtin.unrealized_conversion_cast %48 : !emitc.size_t to index
%50 = "emitc.constant"() <{value = 2 : index}> : () -> !emitc.size_t
%51 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
cf.br ^bb3(%49 : index)
^bb3(%52: index): // 2 preds: ^bb2, ^bb7
%53 = builtin.unrealized_conversion_cast %52 : index to !emitc.size_t
%54 = cast %53 : !emitc.size_t to !emitc.ptrdiff_t
%55 = cast %50 : !emitc.size_t to !emitc.ptrdiff_t
%56 = cmp lt, %54, %55 : (!emitc.ptrdiff_t, !emitc.ptrdiff_t) -> i1
cf.cond_br %56, ^bb4, ^bb8
^bb4: // pred: ^bb3
%57 = subscript %7[%52, %43] : (!emitc.array<2x2xf64>, index, index) -> !emitc.lvalue<f64>
assign %0 : f64 to %57 : <f64>
%58 = "emitc.constant"() <{value = 0 : index}> : () -> !emitc.size_t
%59 = builtin.unrealized_conversion_cast %58 : !emitc.size_t to index
%60 = "emitc.constant"() <{value = 3 : index}> : () -> !emitc.size_t
%61 = "emitc.constant"() <{value = 1 : index}> : () -> !emitc.size_t
cf.br ^bb5(%59 : index)
^bb5(%62: index): // 2 preds: ^bb4, ^bb6
%63 = builtin.unrealized_conversion_cast %62 : index to !emitc.size_t
%64 = cast %63 : !emitc.size_t to !emitc.ptrdiff_t
%65 = cast %60 : !emitc.size_t to !emitc.ptrdiff_t
%66 = cmp lt, %64, %65 : (!emitc.ptrdiff_t, !emitc.ptrdiff_t) -> i1
cf.cond_br %66, ^bb6, ^bb7
^bb6: // pred: ^bb5
%67 = subscript %8[%43, %62] : (!emitc.array<2x3xf64>, index, index) -> !emitc.lvalue<f64>
%68 = load %67 : <f64>
%69 = subscript %8[%52, %62] : (!emitc.array<2x3xf64>, index, index) -> !emitc.lvalue<f64>
%70 = load %69 : <f64>
%71 = subscript %7[%52, %43] : (!emitc.array<2x2xf64>, index, index) -> !emitc.lvalue<f64>
%72 = load %71 : <f64>
%73 = mul %70, %68 : (f64, f64) -> f64
%74 = add %72, %73 : (f64, f64) -> f64
%75 = subscript %7[%52, %43] : (!emitc.array<2x2xf64>, index, index) -> !emitc.lvalue<f64>
assign %74 : f64 to %75 : <f64>
%76 = add %63, %61 : (!emitc.size_t, !emitc.size_t) -> !emitc.size_t
%77 = builtin.unrealized_conversion_cast %76 : !emitc.size_t to index
cf.br ^bb5(%77 : index)
^bb7: // pred: ^bb5
%78 = add %53, %51 : (!emitc.size_t, !emitc.size_t) -> !emitc.size_t
%79 = builtin.unrealized_conversion_cast %78 : !emitc.size_t to index
cf.br ^bb3(%79 : index)
^bb8: // pred: ^bb3
%80 = add %44, %42 : (!emitc.size_t, !emitc.size_t) -> !emitc.size_t
%81 = builtin.unrealized_conversion_cast %80 : !emitc.size_t to index
cf.br ^bb1(%81 : index)
^bb9: // pred: ^bb1
return
}
}
```
how to fix it?
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMmstyo7wSgJ9G3qhwiRaS8MILx4mrzv7sUwLkmFMYOEIkmf_p_-JqbEczyM54JuWKAV36ou6vQUZWVfqWK7VG7Amx54WszaHQ6_JHRgkhi6hIfqw_DirHKdZ1jl526GmLVhvEyTFLtWe0zKtMGoW97rzw4rLEXqLiTGrlvUudyihTlSeNZ4oSH6U51pmnjqmJl80Q7BXnF-OyRJz0ksLtfw8K74ssKz7S_A0rrQuNiziudYXoBpH2Az5iT_85yjeF2DOC8GBM2TbDDsHuLTWHOlrGxRHBrq6U9qQxMj4cVW4qBDtZVao9iIKEKikiDxLOvEBJ5kkZcI9CEvkspNHejxCsOqGNXmle1gbv00xhWfVanlzU6cZJ_yGbY5HUmcJIPCGywbgzd1_nMUYBOco0RxAiWI0dMEbACEb0GSOA3jtFXhmZGwQw9KZbJJ7eZVartitZkvZPIXgizegN3vMAiWdEX9qzfpzXnDctoyjfVRS_WRS4imI3i6KuooKbRQWuoujNopirKLhZFHcV5d8sSpyLGuhhF4WAdl2LUv6_Vk1z0xcQfbHIQ-B3I6TW8geiW_iEz0YJ-nLSI_wjetArPVbOyd_KSfNEff5KbpX-o17NJPs70kR1mpk0X9a5VjJL_1HJa1zk70pXaZG_xrIyg2Kby7mwKXrRp0mdmXKPBeBgQavZLBM6gFR1VMU6LdvBYVMtG5ch2HaSEXs-KWpfWdj2058OLq3KWl8guj0Lhq5OD-nYJlSj66DfBl8OaFqceXSP85mL84O5zneHzx0mCBcT-FwTQnv8sCF-xOPih13GT2iNn0fiB1zw48_lDzjzB-4wwYU_MJc_YOcPDPyBB_InuIgfsPIHnPlzR_KCC39gLn_AmT_3pIALf2Auf8DOHxj4Aw_kD72MHyt_wJk_d8QPdeEPzOUPdebPPSa48IfO5Q-184cO_KEP5A9cxA-18oc-kj_UhT90Ln-oM3_uqF_UhT90Ln-onT904A99IH_8y_ix8oc-8v4ncOEPncuf4JH3P4Hzrs6t-Rbvl5HGiL1Ekd_27ty3GWOi7XfWTs-aadPc7g5iwKVWSdUKbgZ0TGuOwolpgcPqBPSkSxdkNod1zBjHWakwXiqNTtL9_mwSfj6Jles_naRL_fhY4sz0SRkM2Rnwq9Q8TdF2ub7aL1_qn1YsLvLktVm2RtzoZBiPJosG0wVqlmdcHX-ic_jI9Fy5BEA4Mz3dd3fvSE_3_d1vSE_ap9_Kkp59O4O56XmKFzExjTqsDoOZ6dnv547j6C2Zxc5znJGbJuHX6cmC4YB9d3oyPjo5uKBhf9GWnnSis7iu-6Kr-wwGstCf1334xrpPLup-q9-Xdf9y-_e3goW5gIXNBQt3Bgu93QT-J8DCenDYwNK389lgOUU6n5jmAhY-Fyz8HCz8JrDwc7Dwm8DCvwALH8DCvx0snE-cfM7x_qINLGyi8xdg6R8oAjqo_tsfSBshHSeyQiajXl8Cha-sGo8ofIjGgpxrvLJpLPy_Ad6NUDjTWPhWjbtMPdZZZ-jg1oGY4b6L6_bry98eu6SUSSdosFLQ2ROwv8Fnp4InLndqBbM6j09t52MW-Veq9iibZv9w6VdlQrhsL4hZ2wvX9UAISz0Qc9Aiwqkf2OAH9r1-cKn4YlbFv77hFra6GM65dwvJ1A_BUBAC-E4_hL6DH0JrebP4oX_uD32LH1a_fMTUytQ670aIZ0Q2_f_JGz2H4qNRYZ9-4tQMb_7sENkskjVNVnQlF2rtC8opcE7E4rDeJxHjENG9SpKQRoQkQOIk8KNVpCDcs0W6BgKM-CQkIeOBWEbRnjAKMgllEgQsQQFRR5lmyyx7Py4L_bZIq6pWax-ACH-RyUhlVfs6F0CuPnDbitpfiBZ63QzyovqtQgHJ0spUp2lMajK1ftG60ONLTDe95LWodbb-yTtYjcT-yyt18T8VGwS7Vs8Kwa435H0N_wYAAP__SguNfw">