Skip to content

Commit 1fe9a56

Browse files
committed
[DAG][X86] Add tests for Folding select m, add(X, C), X --> add (X, and(C, m))(NFC)
1 parent 45d82f3 commit 1fe9a56

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

llvm/test/CodeGen/X86/vselect.ll

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,50 @@
44
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1
55
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2
66

7+
; should Fold select (sext m), (add X, C), X --> (add X, (and C, (sext m))))
8+
define <4 x i32> @masked_select_const(<4 x i32> %a, <4 x i32> %x, <4 x i32> %y) {
9+
; SSE2-LABEL: masked_select_const:
10+
; SSE2: # %bb.0:
11+
; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [4294967272,4294967272,4294967272,4294967272]
12+
; SSE2-NEXT: paddd %xmm0, %xmm3
13+
; SSE2-NEXT: pcmpgtd %xmm2, %xmm1
14+
; SSE2-NEXT: pand %xmm1, %xmm3
15+
; SSE2-NEXT: pandn %xmm0, %xmm1
16+
; SSE2-NEXT: por %xmm1, %xmm3
17+
; SSE2-NEXT: movdqa %xmm3, %xmm0
18+
; SSE2-NEXT: retq
19+
;
20+
; SSE41-LABEL: masked_select_const:
21+
; SSE41: # %bb.0:
22+
; SSE41-NEXT: movdqa %xmm0, %xmm3
23+
; SSE41-NEXT: pmovsxbd {{.*#+}} xmm4 = [4294967272,4294967272,4294967272,4294967272]
24+
; SSE41-NEXT: paddd %xmm0, %xmm4
25+
; SSE41-NEXT: pcmpgtd %xmm2, %xmm1
26+
; SSE41-NEXT: movdqa %xmm1, %xmm0
27+
; SSE41-NEXT: blendvps %xmm0, %xmm4, %xmm3
28+
; SSE41-NEXT: movaps %xmm3, %xmm0
29+
; SSE41-NEXT: retq
30+
;
31+
; AVX1-LABEL: masked_select_const:
32+
; AVX1: # %bb.0:
33+
; AVX1-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm3
34+
; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1
35+
; AVX1-NEXT: vblendvps %xmm1, %xmm3, %xmm0, %xmm0
36+
; AVX1-NEXT: retq
37+
;
38+
; AVX2-LABEL: masked_select_const:
39+
; AVX2: # %bb.0:
40+
; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm3 = [4294967272,4294967272,4294967272,4294967272]
41+
; AVX2-NEXT: vpaddd %xmm3, %xmm0, %xmm3
42+
; AVX2-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1
43+
; AVX2-NEXT: vblendvps %xmm1, %xmm3, %xmm0, %xmm0
44+
; AVX2-NEXT: retq
45+
%sub.i = add <4 x i32> %a, <i32 -24, i32 -24, i32 -24, i32 -24>
46+
%cmp.i = icmp sgt <4 x i32> %x, %y
47+
%sel = select <4 x i1> %cmp.i, <4 x i32> %sub.i, <4 x i32> %a
48+
ret <4 x i32> %sel
49+
}
50+
751
; Verify that we don't emit packed vector shifts instructions if the
852
; condition used by the vector select is a vector of constants.
953

0 commit comments

Comments
 (0)