Skip to content

Commit 372c808

Browse files
authored
[X86] canCreateUndefOrPoisonForTargetNode - PCMPEQ/PCMPGT don't create poison/undef (#146116)
1 parent b8f1228 commit 372c808

File tree

2 files changed

+24
-24
lines changed

2 files changed

+24
-24
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45093,9 +45093,11 @@ bool X86TargetLowering::canCreateUndefOrPoisonForTargetNode(
4509345093
case X86ISD::UNPCKH:
4509445094
case X86ISD::UNPCKL:
4509545095
return false;
45096-
// SSE comparisons handle all fcmp cases.
45097-
// TODO: Add PCMPEQ/GT and CMPM/MM with test coverage.
45096+
// SSE comparisons handle all icmp/fcmp cases.
45097+
// TODO: Add CMPM/MM with test coverage.
4509845098
case X86ISD::CMPP:
45099+
case X86ISD::PCMPEQ:
45100+
case X86ISD::PCMPGT:
4509945101
return false;
4510045102
case ISD::INTRINSIC_WO_CHAIN:
4510145103
switch (Op->getConstantOperandVal(0)) {

llvm/test/CodeGen/X86/vector-compress.ll

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -138,22 +138,21 @@ define <2 x i64> @test_compress_v2i64(<2 x i64> %vec, <2 x i1> %mask, <2 x i64>
138138
; AVX2-NEXT: vmovaps %xmm2, -{{[0-9]+}}(%rsp)
139139
; AVX2-NEXT: vpextrq $1, %xmm1, %rax
140140
; AVX2-NEXT: vmovq %xmm1, %rcx
141+
; AVX2-NEXT: andl $1, %ecx
141142
; AVX2-NEXT: movl %ecx, %edx
142-
; AVX2-NEXT: subl %eax, %edx
143-
; AVX2-NEXT: andl $1, %edx
143+
; AVX2-NEXT: subq %rax, %rcx
144+
; AVX2-NEXT: movl %ecx, %eax
144145
; AVX2-NEXT: andl $1, %eax
145-
; AVX2-NEXT: andl $1, %ecx
146-
; AVX2-NEXT: addq %rcx, %rax
147146
; AVX2-NEXT: vpextrq $1, %xmm0, %rsi
148-
; AVX2-NEXT: cmpq $2, %rax
149-
; AVX2-NEXT: cmovbq -24(%rsp,%rdx,8), %rsi
147+
; AVX2-NEXT: cmpq $2, %rcx
148+
; AVX2-NEXT: cmovbq -24(%rsp,%rax,8), %rsi
150149
; AVX2-NEXT: vmovq %xmm0, -{{[0-9]+}}(%rsp)
151-
; AVX2-NEXT: movl %ecx, %ecx
152-
; AVX2-NEXT: vpextrq $1, %xmm0, -24(%rsp,%rcx,8)
153-
; AVX2-NEXT: cmpq $1, %rax
154-
; AVX2-NEXT: movl $1, %ecx
155-
; AVX2-NEXT: cmovbq %rax, %rcx
156-
; AVX2-NEXT: movq %rsi, -24(%rsp,%rcx,8)
150+
; AVX2-NEXT: vpextrq $1, %xmm0, -24(%rsp,%rdx,8)
151+
; AVX2-NEXT: cmpq $1, %rcx
152+
; AVX2-NEXT: movl $1, %eax
153+
; AVX2-NEXT: cmovbq %rcx, %rax
154+
; AVX2-NEXT: movl %eax, %eax
155+
; AVX2-NEXT: movq %rsi, -24(%rsp,%rax,8)
157156
; AVX2-NEXT: vmovaps -{{[0-9]+}}(%rsp), %xmm0
158157
; AVX2-NEXT: retq
159158
;
@@ -188,18 +187,16 @@ define <2 x double> @test_compress_v2f64(<2 x double> %vec, <2 x i1> %mask, <2 x
188187
; AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3
189188
; AVX2-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm1
190189
; AVX2-NEXT: vmovaps %xmm2, -{{[0-9]+}}(%rsp)
191-
; AVX2-NEXT: vpextrq $1, %xmm1, %rax
192-
; AVX2-NEXT: vmovq %xmm1, %rcx
193-
; AVX2-NEXT: movl %ecx, %edx
194-
; AVX2-NEXT: subl %eax, %edx
195-
; AVX2-NEXT: andl $1, %edx
190+
; AVX2-NEXT: vpextrq $1, %xmm1, %rcx
191+
; AVX2-NEXT: vmovq %xmm1, %rax
192+
; AVX2-NEXT: andl $1, %eax
193+
; AVX2-NEXT: movl %eax, %edx
194+
; AVX2-NEXT: subq %rcx, %rax
195+
; AVX2-NEXT: movl %eax, %ecx
196+
; AVX2-NEXT: andl $1, %ecx
196197
; AVX2-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero
197198
; AVX2-NEXT: vmovlpd %xmm0, -{{[0-9]+}}(%rsp)
198-
; AVX2-NEXT: andl $1, %ecx
199-
; AVX2-NEXT: movl %ecx, %edx
200199
; AVX2-NEXT: vmovhpd %xmm0, -24(%rsp,%rdx,8)
201-
; AVX2-NEXT: andl $1, %eax
202-
; AVX2-NEXT: addq %rcx, %rax
203200
; AVX2-NEXT: cmpq $2, %rax
204201
; AVX2-NEXT: jb .LBB3_2
205202
; AVX2-NEXT: # %bb.1:
@@ -208,7 +205,8 @@ define <2 x double> @test_compress_v2f64(<2 x double> %vec, <2 x i1> %mask, <2 x
208205
; AVX2-NEXT: cmpq $1, %rax
209206
; AVX2-NEXT: movl $1, %ecx
210207
; AVX2-NEXT: cmovbq %rax, %rcx
211-
; AVX2-NEXT: vmovsd %xmm1, -24(%rsp,%rcx,8)
208+
; AVX2-NEXT: movl %ecx, %eax
209+
; AVX2-NEXT: vmovsd %xmm1, -24(%rsp,%rax,8)
212210
; AVX2-NEXT: vmovaps -{{[0-9]+}}(%rsp), %xmm0
213211
; AVX2-NEXT: retq
214212
;

0 commit comments

Comments
 (0)