Skip to content

Commit 7a5a78b

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 7a5a78b

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

llvm/test/CodeGen/X86/vselect.ll

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,53 @@
77
; Verify that we don't emit packed vector shifts instructions if the
88
; condition used by the vector select is a vector of constants.
99

10+
define <2 x i64> @masked_select_const(<2 x i64> %a, <2 x i64> %x, <2 x i64> %y) {
11+
; SSE2-LABEL: masked_select_const:
12+
; SSE2: # %bb.0:
13+
; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [4294967272,4294967272,4294967272,4294967272]
14+
; SSE2-NEXT: paddd %xmm0, %xmm3
15+
; SSE2-NEXT: pcmpgtd %xmm2, %xmm1
16+
; SSE2-NEXT: pand %xmm1, %xmm3
17+
; SSE2-NEXT: pandn %xmm0, %xmm1
18+
; SSE2-NEXT: por %xmm1, %xmm3
19+
; SSE2-NEXT: movdqa %xmm3, %xmm0
20+
; SSE2-NEXT: retq
21+
;
22+
; SSE41-LABEL: masked_select_const:
23+
; SSE41: # %bb.0:
24+
; SSE41-NEXT: movdqa %xmm0, %xmm3
25+
; SSE41-NEXT: pmovsxbd {{.*#+}} xmm4 = [4294967272,4294967272,4294967272,4294967272]
26+
; SSE41-NEXT: paddd %xmm0, %xmm4
27+
; SSE41-NEXT: pcmpgtd %xmm2, %xmm1
28+
; SSE41-NEXT: movdqa %xmm1, %xmm0
29+
; SSE41-NEXT: blendvps %xmm0, %xmm4, %xmm3
30+
; SSE41-NEXT: movaps %xmm3, %xmm0
31+
; SSE41-NEXT: retq
32+
;
33+
; AVX1-LABEL: masked_select_const:
34+
; AVX1: # %bb.0:
35+
; AVX1-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm3
36+
; AVX1-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1
37+
; AVX1-NEXT: vblendvps %xmm1, %xmm3, %xmm0, %xmm0
38+
; AVX1-NEXT: retq
39+
;
40+
; AVX2-LABEL: masked_select_const:
41+
; AVX2: # %bb.0:
42+
; AVX2-NEXT: vpbroadcastd {{.*#+}} xmm3 = [4294967272,4294967272,4294967272,4294967272]
43+
; AVX2-NEXT: vpaddd %xmm3, %xmm0, %xmm3
44+
; AVX2-NEXT: vpcmpgtd %xmm2, %xmm1, %xmm1
45+
; AVX2-NEXT: vblendvps %xmm1, %xmm3, %xmm0, %xmm0
46+
; AVX2-NEXT: retq
47+
%bit_a = bitcast <2 x i64> %a to <4 x i32>
48+
%sub.i = add <4 x i32> %bit_a, <i32 -24, i32 -24, i32 -24, i32 -24>
49+
%bit_x = bitcast <2 x i64> %x to <4 x i32>
50+
%bit_y = bitcast <2 x i64> %y to <4 x i32>
51+
%cmp.i = icmp sgt <4 x i32> %bit_x, %bit_y
52+
%sel = select <4 x i1> %cmp.i, <4 x i32> %sub.i, <4 x i32> %bit_a
53+
%bit_sel = bitcast <4 x i32> %sel to <2 x i64>
54+
ret <2 x i64> %bit_sel
55+
}
56+
1057
define <4 x float> @test1(<4 x float> %a, <4 x float> %b) {
1158
; SSE2-LABEL: test1:
1259
; SSE2: # %bb.0:

0 commit comments

Comments
 (0)