<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/101624>101624</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[LoongArch][Clang] Miss optimization for code mixed with replgr2vr and insgr2vr
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
24bit-xjkp
</td>
</tr>
</table>
<pre>
## Information
### clang
clang version 20.0.0git (https://github.com/llvm/llvm-project.git 73c72f2c6505d5bc8b47bb0420f6cba5b24270fe)
Target: x86_64-unknown-windows-gnu
Thread model: posix
### gcc
Using built-in specs.
COLLECT_GCC=D:\Tools\loongarch64-linux-gnu\bin\loongarch64-linux-gnu-g++.exe
COLLECT_LTO_WRAPPER=D:/Tools/loongarch64-linux-gnu/bin/../libexec/gcc/loongarch64-linux-gnu/15.0.0/lto-wrapper.exe
Target: loongarch64-linux-gnu
Configured with: ../configure --disable-werror --prefix=/home/luo/x86_64-w64-mingw32-host-loongarch64-linux-gnu-target-gcc15 --host=x86_64-w64-mingw32 --target=loongarch64-linux-gnu --disable-multilib --enable-languages=c,c++
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 15.0.0 20240714 (experimental) (GCC)
## Code
```c++
#include <cstdint>
#include <lasxintrin.h>
auto f(::std::uint64_t a, ::std::uint64_t b) noexcept
{
auto v{__lasx_xvreplgr2vr_d(a)};
v = __lasx_xvinsgr2vr_d(v, b, 2);
return v;
}
```
## Assembly
```asm
# clang++ --target=loongarch64-linux-gnu -O3 -march=la664 -S
_Z1fmm:
xvinsgr2vr.d $xr0, $a1, 0
xvinsgr2vr.d $xr0, $a1, 1
xvinsgr2vr.d $xr0, $a2, 2
xvinsgr2vr.d $xr0, $a1, 3
xvst $xr0, $a0, 0
ret
# loongarch64-linux-gnu-g++ -O3 -march=la664 -S
_Z1fmm:
xvreplgr2vr.d $xr0,$r5
xvinsgr2vr.d $xr0,$r6,2
xvst $xr0,$r4,0
jr $r1
```
Broadcast the general register `a` to the vector register `v` then insert another general register `b` into `v` is more efficient, with less instructions and lower latency.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVtuO4jwSfhpzYyUylQP0BRd0GFYr9apHM71aaW-QY1cSzzh2ZDvAzNP_cqA5aJiThEJU9dXRXznFvVetQVyR4pkUmxkfQ2fdCvJaheT45eswq638tiKQEcjov01jXc-DsoawDWHr83PSRoDQ3LS3qklA9-i8soYCS1nKWhUogWUXwuBJtiawJbBtVejGOhW2J7DVev_-lwzOfkER0mi1yMQCGhBlwQpZ1GJZ54u6ZjmwphQ1L2rIYcEaJPB0Cv_GXYuBZGt6XJa7Mk9G89XYg0kOykh78ElrxjOyc8gl7a1EHfGD9er4uMhWiFvFf70yLa1HpUOiDPUDCp-eVNXry8uH6m33r6oi2WYTiy2qN2u1J0WlrTUtd6Ir80QrMx6nZIqqVuZn2qQl8EzgOcUj3kd4eXvd_e_T-uPHD5_eI8H2FAm2jyPBNkaCbZpGiKrxiCIehBC_MJkX8QQjINjk4PgwoLtmc233Y_tTytY0qh0dSnpQoYvoKQXxLqdJIpXntcbkgM5ZR5NkcNioI8k2BLad7TFmMFoC2_O5Hso86ZVpDxkknfUhedy_MCWYtELMC5pMSJJtfvRBkzOUZJuHnm5y7EcdlFY1TRI0kyRyfuQtepJtBIFKnE7tt0T7PA6DdQElfXl7pcL2g0M_DQ7XrXUqdH0cGPpdq_pk0QpxGa7T0VBgkLPFPI8jhscBnerRBK4JPEVRpOL7dNwSm1ZW4p24ZKffXfYEMmWEHiVSklXCB6lMINmHR1rN_VGZ4JRJuwuEj8HShsAyUjRb-yBPL6Myocx3gXICFf2Zso5VGItHgUM4x1ycU6OU0sn7niyed7sYfXfcOxx062DvdpLAksfaFxuS3djsKck29GKgjL_i9zGZOj4gWt6aOQyjM3R_EUa_95170OW199jX-tvDTnPfX8Dnq3Rq_R-w8TWjSR_FEcLLMqfJ55Ov3f_nTd_HPp5DPl1rTCVhTwTyo2NT1yHn8_jC_gI7_zMsnJr4536zG6wPP2DYfZ4Ow7V1v7w7_7ZXFwLdJ0ogd8Vvy4mokkAFPy0mInIC1bWUL-6kd_Nf0OnZWS4F94GGDmmLBh3X1GGrfEBHI5lIyWiwk36PIlh3p95P6g4NVcajC5QbGzp0D33VEaxMsBdL5WlvHVJsGiUUmhCPI17nVKP30Wdwo4iLgqfcSKrtAR3VPKAR39KZXGXyKXviM1zNFwDFEpbAZt2qeBK5zECWGUqe54uGFZJxyVgmlzVncqZW0_22ZMAW8yxnaVnkWGeymS-X0CBIkjPsudJpXB5S69qZ8n7E1ZzNS8hnmteo_bTtAJxHDOLi41bTtlGPrSc508oHf3URVNDTivQSmbWO1Ck2pHiuJgfFhv5HeU_tEFSvvk_rEW2so8JKpL06nr909EKlqSXvjJmNTq_-bhkisJ2qih_3c2H7FfwTAAD__8aB7Gw">