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

    <tr>
        <th>Summary</th>
        <td>
            [MLIR][memref] The Normalizing Memref on removing extra input arguments on`memref.load`
        </td>
    </tr>

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

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

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

<pre>
    Hi. If you want to normalize the `memref` layout that reduces the dimensionality, the `-normalize-memrefs` pass will work perfectly if there is `affine.load`, but in the case that the operation is `memref.load`, the code fails to reduce the inputs to `memref.load`.

Complier explorer link: https://godbolt.org/z/zYT7jxs9n
```
#map0 = affine_map<(i,k) -> (2*(i mod 2) + (k mod 2) + 4 * (i floordiv 2) + 8*(k floordiv 2))>
#map1 = affine_map<(k,j) -> ((k mod 2) + 2 * (j mod 2) + 8 * (k floordiv 2) + 4*(j floordiv 2))>
#map2 = affine_map<(i,j) -> (4*i+j)>

func.func @test_norm(%arg0 :  memref<4x4xf32,#map2>) -> () {
    %0 = memref.alloc() : memref<4x8xf32,#map0>
    %1 = memref.alloc() : memref<8x4xf32,#map1>
    %2 = memref.alloc() : memref<4x4xf32,#map2>

    %cst = arith.constant 3.0 : f32
    %cst0 = arith.constant 0 : index

    affine.for %i = 0 to 4 {
 affine.for %j = 0 to 8 {
                affine.for %k = 0 to 8 {
 %a = memref.load %0[%i, %k] : memref<4x8xf32,#map0>

 %b = memref.load %1[%k, %j] :memref<8x4xf32,#map1>
 %c = memref.load %2[%i, %j] : memref<4x4xf32,#map2>

 %3 = arith.mulf %a, %b : f32 
                    %4 = arith.addf %3, %c : f32
                    affine.store %4, %arg0[%i, %j] : memref<4x4xf32,#map2>
            }
        }
    }
 return
}
```

Reproducing the error
```
mlir-opt -normalize-memrefs test.mlir
```

The error
```
# For more information see the output window
MLIR opt (trunk) - 908ms
<source>:16:26: error: 'memref.load' op incorrect number of indices for load, expected 1 but got 2
                    %a = memref.load %0[%i, %k] : memref<4x8xf32,#map0>
                         ^
<source>:16:26: note: see current operation: %5 = "memref.load"(%0, %arg1, %arg3) : (memref<32xf32>, index, index) -> f32
Compiler returned: 1
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vk2P4jgT_jXmUmqUOAkJBw40DHpHemcPo7nsaeQkFTA4dmQ7_TG_flVOaAjNTLdW2hYdiF31-KkvVwnn5F4jrlj2yLLtTPT-YOzKiydxOhklRSttaw6ibUU9K039uvqfnMPXBl5ND89Ce_AGtLGtUPIXgj8gsEXUYmuxYYsIlHg1vQd_EB4s1n2FLgjVskXtpNFCSf_K-Oas-vAG9jCgOILphHPwLJWCZ2NP0KFtsPLqFWRDihZBOtIWTSM1zpURNVtEBFv2HqQO6JVwODChN9OhFV4aPaoOp12rBh1TIzRCKkeGDhaEDam73ofFd7pzFm1ZtB6eG9N2SqIFfOmUsWhBSX1iyRoO3neOJWvGd4zv9qYujfJzY_eM737R_98_8uOLW-oRbhGNn-GVJ63oImDJFgarf7aiY8mG8UIyvjkxvoQHlnwBxgvO-JrWoTU1cNph_JE2TtOVFBhfQ5BslDG2lk-XzWIAOU236JN8ueYU3-V0YnxzvOb0_nR-Pv04XS_O66c7rNKB1fEjVvy3npqwIjjJ-ONxghCeTa-rOT2ApZFH539SqgZLMmH3FIo1wJj6ySZ9SV-ahDO-GQkQ3MT-JbD8ccAGAGA8G8I5ZpNQylRnwWR9jVxMkKM3oiNM_CmY4oZgfAvDP8nmjp1XbhvBKueHCFjpD_PKaOfp9kjmg98I4UY8uic_SEtd48vtIWPtN8YSgAzaERVoeuXnqdDxIlRMg3H9N9U53dehJLj2F90FIaR0sfKMEi1os2z72WhekMt7yPGAfBqRjyPyZ-JLDr4Hyadkj3fIfhBsxrPkKm5tr5rgmhGxPAcb7rt6jH56BSHqOkAkI0T1Pl9-EzDnjcUAN6pSlf57Cycc8-10cbJwebHoe3u-wM-rtzd5eH7Hzpq6r6Teh_6C1hp7V75V0j6YzsP7Vgl0Lc1J4A8n_fgjOuMJ7IyFlnwndUNHhC7pcGh8pvdd7-FZ6to8Dzrf_v_1OxAjxgtvez30HlhGRetG1GTjTG8rJG8m63jBkjWnx8gkoczJr9soz8F0IHVlrMXKg-7bEi2Yhopf0hhB9TiIbqi5YuWxhjg0_L3x8If8-A9q9d4xw1nZl49coI1H-iYPV721qP1lOhlck2WBL-N84iM-dJ_okt_x5WdyvqoZL94sSHgwgFrRZrxGLz_G5vRWWzS7SIV2TGOsCS2-SZtZvUrqZbIUM1zFeVQseL4oitlhtUibdJFjXiyTqFhUWOTLhajjpioxr5aCz-SKRzyNOOdxkRZRMW94viybZVFinGYVj1kaYSukmiv11NJkNJPO9bgq-CLPZkqUqNx5cLUrEnoo-71jaaSk8-6i5qVXYcSlTGXZlmWPo0eyLVA9_DVWElXft7ADRoPF1jzREr54K4aRD4Td9y1q78Dod6PfrLdqdTPYSX_oy3llWsZ3xGj8euisOWLlGd8Fqxzju2DYPwEAAP__dRM44A">