[llvm] Fix implicit PesudoXVINSGR2VR error (PR #152432)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 6 23:54:33 PDT 2025
================
@@ -6,7 +6,9 @@
define <32 x i8> @scalar_to_32xi8(i8 %val) {
; CHECK-LABEL: scalar_to_32xi8:
; CHECK: # %bb.0:
-; CHECK-NEXT: vinsgr2vr.b $vr0, $a0, 0
+; CHECK-NEXT: xvreplgr2vr.b $xr0, $a0
+; CHECK-NEXT: xvpermi.q $xr0, $xr0, 18
+; CHECK-NEXT: xvextrins.b $xr0, $xr0, 0
----------------
tangaac wrote:
Not enough.
```llvm
define <16 x i16> @test(i16 %a0, i16 %a1) {
%v0 = insertelement <16 x i16> poison, i16 %a0, i32 0
%v1 = insertelement <16 x i16> %v0, i16 %a1, i32 1
ret <16 x i16> %v1
}
```
```asm
vinsgr2vr.b $vr0, $a0, 0
xvreplgr2vr.h $xr1, $a1
xvpermi.q $xr1, $xr0, 18
xvextrins.h $xr0, $xr1, 17
ret
```
We may should split `v32i8/v16i16` into two `v16i8/v8i16` as early as possible,
Then use `vinsgr2vr.{b,h}` to handle and concat them.
This is also what gcc does.
https://github.com/llvm/llvm-project/pull/152432
More information about the llvm-commits
mailing list