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

    <tr>
        <th>Summary</th>
        <td>
            [mlir][vector] Unify Op argument names (draft)
        </td>
    </tr>

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

    <tr>
      <th>Assignees</th>
      <td>
            banach-space
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          banach-space
      </td>
    </tr>
</table>

<pre>
    Below is a list of vector dialect operations that move values from an abstract
**source** to an abstract **destination**, i.e. "read"/"write" operations:

* `vector.load`, `vector.store`, `vector.transfer_read`,
 `vector.transfer_write`, `vector.gather`, `vector.scatter`,
 `vector.compressstore`, `vector.expandload`, `vector.maskedload`,
 `vector.maskedstore`, `vector.extract`, `vector.insert`,
 `vector.scalable_extract`, `vector.scalable_insert`,
 `vector.extract_strided_slice`, `vector.insert_strided_slice`.

```
| **Vector Dialect Op**          | **Operand Names**        | **Operand Types** | **Result Name**  | **Result Type** |
|--------------------------------|--------------------------|-------------------------------|------------------|----------------------|
| `vector.load`                  | `base`                   | `memref` | `result`         | `vector`             |
| `vector.store` | `valueToStore`, `base`   | `vector`, `memref`            | - | -                    |
| `vector.transfer_read`         | `source`                 | `memref` / `tensor`           | `vector`         | `vector`             |
| `vector.transfer_write`        | `vector`, `source` | `vector`, `memref`/ `tensor`  | `result`         | `vector` |
| `vector.gather`                | `base`                   | `memref` | `result`         | `vector`             |
| `vector.scatter`               | `valueToStore`, `base`   | `vector`, `memref`            | -                | -                    |
| `vector.expandload`            | `base`                   | `memref` | `result`         | `vector`             |
| `vector.compressstore`         | `valueToStore`,`base`    | `vector`, `memref`            | -                | -                    |
| `vector.maskedload`            | `base`                   | `memref` | `result`         | `vector`             |
| `vector.maskedstore`           | `valueToStore`, `base`   | `vector`, `memref`            | -                | -                    |
| `vector.extract`               | `vector`                 | `vector` | `result`         | `scalar` / `vector`  |
| `vector.insert` | `source`, `dest`         | `scalar` / `vector`, `vector` | `result`         | `vector`             |
| `vector.scalable_extract`      | `source`                 | `vector`                      | `res`            | `scalar` / `vector`  |
| `vector.scalable_insert`       | `source`, `dest` | `scalar` / `vector`, `vector` | `res`            | `vector` |
| `vector.extract_strided_slice` | `vector`                 | `vector` | (missing name)   | `vector`             |
| `vector.insert_strided_slice`  | `source`, `dest`         | `vector` | `res`            | `vector`             |
```

Note that "read" operations take one operand ("from"), whereas "write"
operations require two ("value-to-store" and "to").

### Observations
Each "read" operation has a "from" argument, while each "write" operation has a
"to" and a "value-to-store" operand. However, the naming conventions are
**inconsistent**, making it difficult to extract common patterns or determine
operand roles. Here are some inconsistencies:

- `getBase()` in `vector.load` refers to the **"from"** operand (source).
- `getBase()` in `vector.store` refers to the **"to"** operand (destination).
- `vector.transfer_read` and `vector.transfer_write` use `getSource()`, which:
  - **Conflicts** with the `vector.load` / `vector.store` naming pattern.
  - **Does not clearly indicate** whether the operand represents a **source**
    or **destination**.
- `vector.insert` defines `getSource()` and `getDest()`, making the distinction
  between "to" and "from" operands **clear**. However, its sibling operation,
 `vector.extract`, only defines `getVector()`, making it unclear whether it
 represents a **source** or **destination**.
- `vector.store` uses `getValueToStore()`, whereas
  `vector.insert_strided_slice` does not.

There is **no consistent way** to identify:
- `"from"` (read operand)
- `"to"` (write operand)
- `"value-to-store"` (written value)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMWEuP2zYQ_jXyZWBDptf2-uCDN1sjpyzQpL0uKGlksZFIl6Ts-t8XfOgtxbtpUKwhJAtyHh8_DoczpEqxE0fcB-ungJCIchpnc3WmMQaEBOvnGS11JuS-PTOLRHLbP2EursAUUMiZ0iBSuGCshYSE0RxjDeKMkmomuAKdUQ2FuCBcaF6iglSKAigHGiktaayD8BAQ8ylRSuPc_A1atGXAjSaoNOPWsBsIyCdgC1xAQIhEmhjk5BgQcpVMm3W0kASrg3FlvUGwCR3kRS5oEmxCY6kZVFpIHIxqSblKUb5aV3Y2CA9jAs59X_9EdYZy6CymWlfjXYOxKM4SlRrHg_-cKU9GF1BQ9R1bU12zbnbKqNuV_jjjCqUes6ZimtMox9cp1Vpg2oZXfVVasgSTV5WzeIjN6Q-EFn5fN6H_wkOw_eRj5k8Xmc8-Ml_OPsDqXyP6YmKFJ_CFFqi6YkOhb7dzLdTM_o6qzLW1UBkYTBrNRtGBnd_5_VDkvv6oxKRajWp4TGDw82IRVTg6XwkUWEhMjYgfkJaNtk7HY9_YGKgqgmtNk2G-ia_dwG6g9R14gQZaD_bc_zu-qgGcfn7oL8wnuBGWhhyRoxnQyFWfikmW3k3fIF1NWfI8NfjvETmE__ZNH0NaZ84PFX113h73-eujccTPm4Ozc1l8FAr799t9CrtI_18KO5fqR6Gwe5cPfX60KKxKhHGGxtc9KnCPQlt1yFYybdkeg1YXJ4N07Skx1ee7_HSKl1-ee_o1VxfUvatmmui2lEQ1HurvJXdYAsI43h7X_4XjceQ_vmim6tCfjU_yWDClGD8BtyXh7mc2e6LsvUveG47OPY5GoLWr7PDwRWh0PV7TgnXaP_odQXB0YzwxlASEmCbQNms7g_maoUSqoNW4BeGhZUXi3yWTCPoqvAGb1uZazF3mIwSccaKFs1s1BWTlPniJFMqL7wXDw280zkYxQ0ZNZ9uABCpPZYFcO6gsR0CvPGwznbZ17KBYXNbcELLnZAGfxRUvKI0DnaGJFRMyseAX5I4BKrFulBmPBVdMaYup6oML-t0oMQ0JS1MWm1ZDC_ARDbEoCsHhbGsWrsB066hRFoxjRTZPQIoc1QI-o0TjE5QoEFoOY4ZNJz03wXJC_WRuE7MtOxMzjI_0DRJTlMoAMgusUDdxYNuhVoxUjwF2H9_gp74AJxz5sOi76bwoNL6mCnqr9YP6uVTooX71-D1YHzpx5rgD01pYMJ8ET3MW66qVvDKdOeQDCjupr1mwDxa_sYuO9WeBCrjQEOdIZX4DxhMWU131n9cMTWFtHdYRgKYkQ67dKei_zFj7YMJn4k2mT2KT8RNMGUc1zlDF7Qn1s8lfbeZ8aBuUCTPuYuvOIIlQXxE5dI5b6-z6VSmP1vLgcbZPHdMKFIty46Y-y1OvFB6V4Pmttyb32DCGnWkoufVek860sX6H7ncQXUdEqRpA7eqvG4w25VoO7980iY8jn1S_GWVgFalcQJOQ4EpvzRseS0wCS28u7C3a1qm3Qf1oDle1TwZgI-cOrZOyZ2xcbJBYWyoauXt4DMhuluxXyW61ozPcL7cPhCyXq81qlu23UbxMks1qiY8PaZqEy8cwWsebR9wmuwiXjzO2JyFZh6vl1qiEq8UKMdouoyjd0jjZhevgIcSCsnyR55diIeRpxpQqcb9cLTchmeU0wlz5p9YiZzJYHRzl4qz8c6vcG915VJ5U8BDmTGnVWNNM5_ap1iqvn4P1k7-k18_wB2fpDV7O9UVliw1l85ukqTZLL2W-z7Q-2-RNjgE5npjOysi0YAE5Gkf-v_lZir8w1gE52jWogBz9Mi578m8AAAD__yg1OXk">