[llvm] [X86][SelectionDAG] Fix the Gather's base and index by modifying the Scale value (PR #134979)

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 16 10:01:26 PDT 2025


================
@@ -604,17 +604,49 @@ define <16 x float> @test13(ptr %base, <16 x i32> %ind) {
 
 ; The base pointer is not splat, can't find unform base
 define <16 x float> @test14(ptr %base, i32 %ind, <16 x ptr> %vec) {
-; X64-KNL-LABEL: test14:
-; X64-KNL:       # %bb.0:
-; X64-KNL-NEXT:    vmovq %xmm0, %rax
-; X64-KNL-NEXT:    vmovd %esi, %xmm0
-; X64-KNL-NEXT:    vpbroadcastd %xmm0, %ymm0
-; X64-KNL-NEXT:    vpmovsxdq %ymm0, %zmm0
-; X64-KNL-NEXT:    kxnorw %k0, %k0, %k1
-; X64-KNL-NEXT:    vxorps %xmm1, %xmm1, %xmm1
-; X64-KNL-NEXT:    vgatherqps (%rax,%zmm0,4), %ymm1 {%k1}
-; X64-KNL-NEXT:    vinsertf64x4 $1, %ymm1, %zmm1, %zmm0
-; X64-KNL-NEXT:    retq
+; KNL_64-LABEL: test14:
+; KNL_64:       # %bb.0:
+; KNL_64-NEXT:    vmovq %xmm0, %rax
+; KNL_64-NEXT:    vpbroadcastd %esi, %zmm1
+; KNL_64-NEXT:    kxnorw %k0, %k0, %k1
+; KNL_64-NEXT:    vpxor %xmm0, %xmm0, %xmm0
+; KNL_64-NEXT:    vgatherdps (%rax,%zmm1,4), %zmm0 {%k1}
+; KNL_64-NEXT:    retq
+;
+; KNL_32-LABEL: test14:
+; KNL_32:       # %bb.0:
+; KNL_32-NEXT:    vmovd %xmm0, %eax
+; KNL_32-NEXT:    vbroadcastss {{[0-9]+}}(%esp), %zmm1
+; KNL_32-NEXT:    kxnorw %k0, %k0, %k1
+; KNL_32-NEXT:    vpxor %xmm0, %xmm0, %xmm0
+; KNL_32-NEXT:    vgatherdps (%eax,%zmm1,4), %zmm0 {%k1}
+; KNL_32-NEXT:    retl
+;
+; SKX-LABEL: test14:
+; SKX:       # %bb.0:
+; SKX-NEXT:    vmovq %xmm0, %rax
+; SKX-NEXT:    vpbroadcastd %esi, %zmm1
+; SKX-NEXT:    kxnorw %k0, %k0, %k1
+; SKX-NEXT:    vpxor %xmm0, %xmm0, %xmm0
+; SKX-NEXT:    vgatherdps (%rax,%zmm1,4), %zmm0 {%k1}
+; SKX-NEXT:    retq
+;
+; SKX_32-LABEL: test14:
+; SKX_32:       # %bb.0:
+; SKX_32-NEXT:    vmovd %xmm0, %eax
+; SKX_32-NEXT:    vbroadcastss {{[0-9]+}}(%esp), %zmm1
+; SKX_32-NEXT:    kxnorw %k0, %k0, %k1
+; SKX_32-NEXT:    vpxor %xmm0, %xmm0, %xmm0
+; SKX_32-NEXT:    vgatherdps (%eax,%zmm1,4), %zmm0 {%k1}
+; SKX_32-NEXT:    retl
+; X64-LABEL: test14:
+; X64:       # %bb.0:
+; X64-NEXT:    vmovq %xmm0, %rax
+; X64-NEXT:    vpbroadcastd %esi, %zmm1
+; X64-NEXT:    kxnorw %k0, %k0, %k1
+; X64-NEXT:    vpxor %xmm0, %xmm0, %xmm0
+; X64-NEXT:    vgatherdps (%rax,%zmm1,4), %zmm0 {%k1}
+; X64-NEXT:    retq
----------------
RKSimon wrote:

This kind of thing can happen with the update scripts as they only remove checks from known prefixes - you will need to remove all the `; .......` check lines and then re-run the update script to recreate them.

https://github.com/llvm/llvm-project/pull/134979


More information about the llvm-commits mailing list