Skip to content

Commit eba5092

Browse files
committed
[X86] X86DAGToDAGISel - fix typo in #73126
We were casting the LoadSDNode from the wrong node in the base pointer uses list, meaning the ptr/chain comparison were comparing against themselves.
1 parent 08a6968 commit eba5092

File tree

3 files changed

+44
-42
lines changed

3 files changed

+44
-42
lines changed

llvm/lib/Target/X86/X86ISelDAGToDAG.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1054,7 +1054,7 @@ void X86DAGToDAGISel::PreprocessISelDAG() {
10541054
SDValue Ptr = Ld->getBasePtr();
10551055
SDValue Chain = Ld->getChain();
10561056
for (SDNode *User : Ptr->uses()) {
1057-
auto *UserLd = dyn_cast<LoadSDNode>(N);
1057+
auto *UserLd = dyn_cast<LoadSDNode>(User);
10581058
MVT UserVT = User->getSimpleValueType(0);
10591059
if (User != N && UserLd && ISD::isNormalLoad(User) &&
10601060
UserLd->getBasePtr() == Ptr && UserLd->getChain() == Chain &&

llvm/test/CodeGen/X86/pr57340.ll

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,16 @@ define void @main.41() local_unnamed_addr #1 {
55
; CHECK-LABEL: main.41:
66
; CHECK: # %bb.0: # %entry
77
; CHECK-NEXT: vpbroadcastw (%rax), %xmm0
8-
; CHECK-NEXT: vmovdqu (%rax), %ymm1
9-
; CHECK-NEXT: vmovdqa {{.*#+}} ymm4 = [31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
10-
; CHECK-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm2
11-
; CHECK-NEXT: vpermt2w %ymm2, %ymm4, %ymm1
8+
; CHECK-NEXT: vmovdqu (%rax), %ymm2
9+
; CHECK-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm3
10+
; CHECK-NEXT: vmovdqa {{.*#+}} ymm1 = [31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
11+
; CHECK-NEXT: vpermi2w %ymm3, %ymm2, %ymm1
1212
; CHECK-NEXT: vpextrw $0, %xmm0, %eax
1313
; CHECK-NEXT: movzwl %ax, %eax
1414
; CHECK-NEXT: vmovd %eax, %xmm0
1515
; CHECK-NEXT: vcvtph2ps %xmm0, %xmm0
16-
; CHECK-NEXT: vpextrw $0, %xmm4, %eax
16+
; CHECK-NEXT: vmovdqu (%rax), %xmm5
17+
; CHECK-NEXT: vpextrw $0, %xmm5, %eax
1718
; CHECK-NEXT: movzwl %ax, %eax
1819
; CHECK-NEXT: vmovd %eax, %xmm2
1920
; CHECK-NEXT: vcvtph2ps %xmm2, %xmm2
@@ -25,14 +26,14 @@ define void @main.41() local_unnamed_addr #1 {
2526
; CHECK-NEXT: vpextrw $0, %xmm3, %eax
2627
; CHECK-NEXT: movzwl %ax, %eax
2728
; CHECK-NEXT: vmovd %eax, %xmm3
28-
; CHECK-NEXT: vpsrld $16, %xmm4, %xmm5
29-
; CHECK-NEXT: vpextrw $0, %xmm5, %eax
29+
; CHECK-NEXT: vpsrld $16, %xmm5, %xmm4
30+
; CHECK-NEXT: vpextrw $0, %xmm4, %eax
3031
; CHECK-NEXT: movzwl %ax, %eax
31-
; CHECK-NEXT: vmovd %eax, %xmm5
32+
; CHECK-NEXT: vmovd %eax, %xmm4
3233
; CHECK-NEXT: setne %al
3334
; CHECK-NEXT: andl $1, %eax
3435
; CHECK-NEXT: vcvtph2ps %xmm3, %xmm6
35-
; CHECK-NEXT: vcvtph2ps %xmm5, %xmm3
36+
; CHECK-NEXT: vcvtph2ps %xmm4, %xmm3
3637
; CHECK-NEXT: kmovw %eax, %k0
3738
; CHECK-NEXT: vucomiss %xmm6, %xmm3
3839
; CHECK-NEXT: setnp %al
@@ -46,12 +47,12 @@ define void @main.41() local_unnamed_addr #1 {
4647
; CHECK-NEXT: movw $-5, %ax
4748
; CHECK-NEXT: kmovd %eax, %k1
4849
; CHECK-NEXT: kandw %k1, %k0, %k0
49-
; CHECK-NEXT: vprolq $32, %xmm1, %xmm5
50-
; CHECK-NEXT: vpextrw $0, %xmm5, %eax
50+
; CHECK-NEXT: vprolq $32, %xmm1, %xmm4
51+
; CHECK-NEXT: vpextrw $0, %xmm4, %eax
5152
; CHECK-NEXT: movzwl %ax, %eax
52-
; CHECK-NEXT: vmovd %eax, %xmm5
53-
; CHECK-NEXT: vcvtph2ps %xmm5, %xmm5
54-
; CHECK-NEXT: vucomiss %xmm5, %xmm0
53+
; CHECK-NEXT: vmovd %eax, %xmm4
54+
; CHECK-NEXT: vcvtph2ps %xmm4, %xmm4
55+
; CHECK-NEXT: vucomiss %xmm4, %xmm0
5556
; CHECK-NEXT: setnp %al
5657
; CHECK-NEXT: sete %cl
5758
; CHECK-NEXT: testb %al, %cl
@@ -62,18 +63,18 @@ define void @main.41() local_unnamed_addr #1 {
6263
; CHECK-NEXT: korw %k1, %k0, %k0
6364
; CHECK-NEXT: movw $-9, %ax
6465
; CHECK-NEXT: kmovd %eax, %k1
65-
; CHECK-NEXT: vpsrlq $48, %xmm1, %xmm5
66-
; CHECK-NEXT: vpextrw $0, %xmm5, %eax
66+
; CHECK-NEXT: vpsrlq $48, %xmm1, %xmm4
67+
; CHECK-NEXT: vpextrw $0, %xmm4, %eax
6768
; CHECK-NEXT: kandw %k1, %k0, %k0
6869
; CHECK-NEXT: movzwl %ax, %eax
69-
; CHECK-NEXT: vmovd %eax, %xmm5
70-
; CHECK-NEXT: vcvtph2ps %xmm5, %xmm6
71-
; CHECK-NEXT: vpsrlq $48, %xmm4, %xmm5
72-
; CHECK-NEXT: vpextrw $0, %xmm5, %eax
70+
; CHECK-NEXT: vmovd %eax, %xmm4
71+
; CHECK-NEXT: vcvtph2ps %xmm4, %xmm6
72+
; CHECK-NEXT: vpsrlq $48, %xmm5, %xmm4
73+
; CHECK-NEXT: vpextrw $0, %xmm4, %eax
7374
; CHECK-NEXT: movzwl %ax, %eax
74-
; CHECK-NEXT: vmovd %eax, %xmm5
75-
; CHECK-NEXT: vcvtph2ps %xmm5, %xmm5
76-
; CHECK-NEXT: vucomiss %xmm6, %xmm5
75+
; CHECK-NEXT: vmovd %eax, %xmm4
76+
; CHECK-NEXT: vcvtph2ps %xmm4, %xmm4
77+
; CHECK-NEXT: vucomiss %xmm6, %xmm4
7778
; CHECK-NEXT: setnp %al
7879
; CHECK-NEXT: sete %cl
7980
; CHECK-NEXT: testb %al, %cl
@@ -106,7 +107,7 @@ define void @main.41() local_unnamed_addr #1 {
106107
; CHECK-NEXT: movzwl %ax, %eax
107108
; CHECK-NEXT: vmovd %eax, %xmm6
108109
; CHECK-NEXT: vcvtph2ps %xmm6, %xmm7
109-
; CHECK-NEXT: vpsrldq {{.*#+}} xmm6 = xmm4[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
110+
; CHECK-NEXT: vpsrldq {{.*#+}} xmm6 = xmm5[10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
110111
; CHECK-NEXT: vpextrw $0, %xmm6, %eax
111112
; CHECK-NEXT: kandw %k1, %k0, %k0
112113
; CHECK-NEXT: movzwl %ax, %eax
@@ -146,12 +147,12 @@ define void @main.41() local_unnamed_addr #1 {
146147
; CHECK-NEXT: movzwl %ax, %eax
147148
; CHECK-NEXT: vmovd %eax, %xmm7
148149
; CHECK-NEXT: vcvtph2ps %xmm7, %xmm7
149-
; CHECK-NEXT: vpsrldq {{.*#+}} xmm4 = xmm4[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
150-
; CHECK-NEXT: vpextrw $0, %xmm4, %eax
150+
; CHECK-NEXT: vpsrldq {{.*#+}} xmm5 = xmm5[14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
151+
; CHECK-NEXT: vpextrw $0, %xmm5, %eax
151152
; CHECK-NEXT: movzwl %ax, %eax
152-
; CHECK-NEXT: vmovd %eax, %xmm4
153-
; CHECK-NEXT: vcvtph2ps %xmm4, %xmm4
154-
; CHECK-NEXT: vucomiss %xmm7, %xmm4
153+
; CHECK-NEXT: vmovd %eax, %xmm5
154+
; CHECK-NEXT: vcvtph2ps %xmm5, %xmm5
155+
; CHECK-NEXT: vucomiss %xmm7, %xmm5
155156
; CHECK-NEXT: setnp %al
156157
; CHECK-NEXT: sete %cl
157158
; CHECK-NEXT: testb %al, %cl
@@ -219,7 +220,7 @@ define void @main.41() local_unnamed_addr #1 {
219220
; CHECK-NEXT: movzwl %ax, %eax
220221
; CHECK-NEXT: vmovd %eax, %xmm2
221222
; CHECK-NEXT: vcvtph2ps %xmm2, %xmm2
222-
; CHECK-NEXT: vucomiss %xmm2, %xmm5
223+
; CHECK-NEXT: vucomiss %xmm2, %xmm4
223224
; CHECK-NEXT: setnp %al
224225
; CHECK-NEXT: sete %cl
225226
; CHECK-NEXT: testb %al, %cl
@@ -285,7 +286,7 @@ define void @main.41() local_unnamed_addr #1 {
285286
; CHECK-NEXT: vmovd %eax, %xmm0
286287
; CHECK-NEXT: vcvtph2ps %xmm0, %xmm0
287288
; CHECK-NEXT: kshiftrw $1, %k0, %k0
288-
; CHECK-NEXT: vucomiss %xmm0, %xmm4
289+
; CHECK-NEXT: vucomiss %xmm0, %xmm5
289290
; CHECK-NEXT: setnp %al
290291
; CHECK-NEXT: sete %cl
291292
; CHECK-NEXT: testb %al, %cl

llvm/test/CodeGen/X86/vselect-avx.ll

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -328,18 +328,19 @@ define void @vselect_concat_splat() {
328328
; AVX512-LABEL: vselect_concat_splat:
329329
; AVX512: ## %bb.0: ## %entry
330330
; AVX512-NEXT: vmovups (%rax), %ymm0
331-
; AVX512-NEXT: vmovaps {{.*#+}} ymm1 = [0,3,6,9,1,4,7,10]
332-
; AVX512-NEXT: vmovaps {{.*#+}} xmm2 = [0,3,6,9]
333-
; AVX512-NEXT: vpermi2ps %ymm1, %ymm0, %ymm2
334-
; AVX512-NEXT: vmovups 32, %xmm3
335-
; AVX512-NEXT: vmovups 0, %ymm4
336-
; AVX512-NEXT: vxorps %xmm5, %xmm5, %xmm5
337-
; AVX512-NEXT: vcmpneqps %xmm5, %xmm2, %k0
331+
; AVX512-NEXT: vmovups (%rax), %xmm1
332+
; AVX512-NEXT: vmovaps {{.*#+}} ymm2 = [0,3,6,9,1,4,7,10]
333+
; AVX512-NEXT: vmovaps %ymm2, %ymm3
334+
; AVX512-NEXT: vpermi2ps %ymm1, %ymm0, %ymm3
335+
; AVX512-NEXT: vmovups 32, %xmm4
336+
; AVX512-NEXT: vmovups 0, %ymm5
337+
; AVX512-NEXT: vxorps %xmm6, %xmm6, %xmm6
338+
; AVX512-NEXT: vcmpneqps %xmm6, %xmm3, %k0
338339
; AVX512-NEXT: kshiftlw $4, %k0, %k1
339340
; AVX512-NEXT: korw %k1, %k0, %k1
340-
; AVX512-NEXT: vpermt2ps %ymm3, %ymm1, %ymm4
341-
; AVX512-NEXT: vpermt2ps %ymm1, %ymm1, %ymm0
342-
; AVX512-NEXT: vmovaps %ymm4, %ymm0 {%k1}
341+
; AVX512-NEXT: vpermt2ps %ymm4, %ymm2, %ymm5
342+
; AVX512-NEXT: vpermt2ps %ymm1, %ymm2, %ymm0
343+
; AVX512-NEXT: vmovaps %ymm5, %ymm0 {%k1}
343344
; AVX512-NEXT: vmovups %ymm0, (%rax)
344345
; AVX512-NEXT: vzeroupper
345346
; AVX512-NEXT: retq

0 commit comments

Comments
 (0)