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

    <tr>
        <th>Summary</th>
        <td>
            Missed oppurtunity to narrow vluxei64.v (gatther load)
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:RISC-V,
            performance
      </td>
    </tr>

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

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

<pre>
    This is a performance opportunity noted when analyzing sqlite3. Filing this with reproduction instructions for the original observation and some analysis below, plan to follow up with reduced test cases when I have some time.

`$clang -isystem $GNU_TOOLCHAIN_DIR/sysroot/usr/include/ --target=riscv64 -mllvm -riscv-v-vector-bits-min=256 -mllvm -scalable-vectorization=on -Xclang -target-feature -Xclang +v,+f,+m,+c,+d,+zba sqlite-autoconf-3380500/sqlite3.c -c -O2 -g`

The amalgamation file is taken from the sqlite3 website.

Non optimal assembly observed:
```
        li      a1, 98
        ... and a bit later ... 
        vsetvli zero, zero, e16, mf2, ta, mu
        vluxei64.v      v8, (zero), v12
        vluxei64.v      v12, (zero), v16
        vand.vx v8, v8, a1
        vand.vx v12, v12, a1
```
We're using a wider data type for the indexed load then is required.  

This assembly should look something like:
```
        li      a1, 98
        ... and a bit later ... 
        vsetvli zero, zero, e8, mf2, ta, mu
        vluxei64.v      v8, (zero), v12
        vluxei64.v      v12, (zero), v16
        vand.vx v8, v8, a1
        vand.vx v12, v12, a1
```
In this particular case, using a narrow datatype doesn't gain us much, but it's still an interesting missed opportunity.  As a guess, I would say this is probably a missing IR level optimization before this loop got vectorized.  
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzdVU1v4zgM_TXORbDhyI0bH3zotOhugN0W6HY_bgNaYhxtZckjyU7TX7-U7aQtMHOdwyaGKMkkRfGRz42Vp_r5oDyjB1iPbm9dB0Ygs31vXRiMCidmbEDJjgc0DAzo05syLfPftApYZOxe6bgO0c1RhQNz2DsrBxGUNUwZH9w894y8kx45d6pV5InZxqMbYdIEI5m3Hc5nePLWoLbHhN-yXoNhwZK9ph029OeD6BSKLKAPTIBHPwe5YwcYcXYWVIdZkt8l-c0ylnnCrwR5bFmq_MkH7Bjt_PLw59fnx8ffbn-92T18vds9Jfye3jprA80G72hURuhBIs1YmgZwLYakuHPKi7G8Ymmn9dixdFqn9EcRrEsbFXzaKUOafFNetLwADY3GRU29TVkgJUpF-s8S33xGukcIg8PLfsK_jJQXEvtZdLMQs5CzeGtgQSmFIVhhzT4tim2-yfN4twU_wVJ6HjlL25iaD5l6JqSgA93SMCG0VxpjpQR4oSzvne0mNBdP7IiNp8mnbD-Qme0JBAIbvMeu0acFdZRJ8QGT-VlMK61ogHUEv9rOu2z5ZVk21QowyizTENBNexfb0WMYJwdv6Gx0cZa4LqPo9jyKANNieDfUwyuq8iob42Ib3yZ8OxtXcTWu-Q-U1_x72uW7NkWcja8Xv_NIF_yOwuxrEReVzyn6m4rwmipi8LH3gPpBUhokBGDh1OOl05SR-Eotoi3IuGEifg6_DYqaJ2PsM96RBc4g-YMddDS0L1MnUX_TSVq94M-Hbfs_QW1nZprswQUlBg1uoq1ocQbSgHNEcRHJCUhp0RvCOrAWlCE1uro4RItmCEwRN1175oPS1F-RbSmtxIbRV6cISvmRyAnvm8jz7YDeRxc7dpxA9nCaA4uxOdtALACYPERPuyemcUQ9d_LCVMTOVGQ421GV9Ky1gZ3JbCqulawLWRUVrIIKGuvfLxEN508Lkfpy43dkIiAtBKpWN9UtAbManK4PIfQ-Fh-_p6elL8DQZMIS991HSl1EShf4l6KIdO093ZQmm7JYX68O9b7ccLmvylxuhKxyhHW1xUJgla_3eVE0K2Jk1L5ONl8SzhsQxHORpZ52f9ymf9HWXC78w4cybm7uVqrmOed5WeQ8z9e8zGQp6CwhxXa7qSqqiqscO1A6izFm1rUrV0_hNkPr6aVWPvj3l9SGqjWIUyjknwj8YF3dO4QO_Wq6WT1d6z-yLmxt">