xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx512-skx-insert-subvec.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw -mattr=+avx512dq -mattr=+avx512vl| FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test(<2 x i1> %a) {
5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test:
6*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllq $63, %xmm0, %xmm0
8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vptestmq %xmm0, %xmm0, %k0
9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kshiftlb $2, %k0, %k0
10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmovm2w %k0, %xmm0
11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
12*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <2 x i1> %a, <2 x i1> undef, <8 x i32> <i32 undef, i32 undef, i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef>
13*9880d681SAndroid Build Coastguard Worker  ret <8 x i1> %res
14*9880d681SAndroid Build Coastguard Worker}
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test1(<2 x i1> %a) {
17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1:
18*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllq $63, %xmm0, %xmm0
20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vptestmq %xmm0, %xmm0, %k0
21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kshiftlb $4, %k0, %k0
22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmovm2w %k0, %xmm0
23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
24*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <2 x i1> %a, <2 x i1> undef, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 0, i32 1, i32 undef, i32 undef>
25*9880d681SAndroid Build Coastguard Worker  ret <8 x i1> %res
26*9880d681SAndroid Build Coastguard Worker}
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test2(<2 x i1> %a) {
29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2:
30*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllq $63, %xmm0, %xmm0
32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vptestmq %xmm0, %xmm0, %k0
33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmovm2q %k0, %zmm0
34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm1, %zmm1, %zmm1
35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vshufi64x2 {{.*#+}} zmm0 = zmm1[0,1,0,1],zmm0[0,1,0,1]
36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllq $63, %zmm0, %zmm0
37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vptestmq %zmm0, %zmm0, %k0
38*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmovm2w %k0, %xmm0
39*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
40*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <2 x i1> %a, <2 x i1> zeroinitializer, <8 x i32> <i32 3, i32 3, i32 undef, i32 undef, i32 0, i32 1, i32 undef, i32 undef>
41*9880d681SAndroid Build Coastguard Worker  ret <8 x i1> %res
42*9880d681SAndroid Build Coastguard Worker}
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test3(<4 x i1> %a) {
45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3:
46*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpslld $31, %xmm0, %xmm0
48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vptestmd %xmm0, %xmm0, %k0
49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kshiftlb $4, %k0, %k0
50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kshiftrb $4, %k0, %k0
51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmovm2w %k0, %xmm0
52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x i1> %a, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
55*9880d681SAndroid Build Coastguard Worker  ret <8 x i1> %res
56*9880d681SAndroid Build Coastguard Worker}
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test4(<4 x i1> %a, <4 x i1>%b) {
59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test4:
60*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpslld $31, %xmm0, %xmm0
62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vptestmd %xmm0, %xmm0, %k0
63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpslld $31, %xmm1, %xmm0
64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vptestmd %xmm0, %xmm0, %k1
65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kshiftlb $4, %k1, %k1
66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kshiftlb $4, %k0, %k0
67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kshiftrb $4, %k0, %k0
68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    korb %k1, %k0, %k0
69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmovm2w %k0, %xmm0
70*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x i1> %a, <4 x i1> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
73*9880d681SAndroid Build Coastguard Worker  ret <8 x i1> %res
74*9880d681SAndroid Build Coastguard Worker}
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Workerdefine <4 x i1> @test5(<2 x i1> %a, <2 x i1>%b) {
77*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test5:
78*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
79*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllq $63, %xmm0, %xmm0
80*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vptestmq %xmm0, %xmm0, %k0
81*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllq $63, %xmm1, %xmm0
82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vptestmq %xmm0, %xmm0, %k1
83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kshiftlb $2, %k1, %k1
84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kshiftlb $2, %k0, %k0
85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kshiftrb $2, %k0, %k0
86*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    korb %k1, %k0, %k0
87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmovm2d %k0, %xmm0
88*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <2 x i1> %a, <2 x i1> %b, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
91*9880d681SAndroid Build Coastguard Worker  ret <4 x i1> %res
92*9880d681SAndroid Build Coastguard Worker}
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Workerdefine <16 x i1> @test6(<2 x i1> %a, <2 x i1>%b) {
95*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test6:
96*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllq $63, %xmm0, %xmm0
98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vptestmq %xmm0, %xmm0, %k0
99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllq $63, %xmm1, %xmm0
100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vptestmq %xmm0, %xmm0, %k1
101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kshiftlb $2, %k1, %k1
102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kshiftlb $2, %k0, %k0
103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kshiftrb $2, %k0, %k0
104*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    korb %k1, %k0, %k0
105*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kunpckbw %k0, %k0, %k0
106*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmovm2b %k0, %xmm0
107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <2 x i1> %a, <2 x i1> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
110*9880d681SAndroid Build Coastguard Worker  ret <16 x i1> %res
111*9880d681SAndroid Build Coastguard Worker}
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Workerdefine <32 x i1> @test7(<4 x i1> %a, <4 x i1>%b) {
114*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test7:
115*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpslld $31, %xmm0, %xmm0
117*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vptestmd %xmm0, %xmm0, %k0
118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpslld $31, %xmm1, %xmm0
119*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vptestmd %xmm0, %xmm0, %k1
120*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kshiftlb $4, %k1, %k1
121*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kshiftlb $4, %k0, %k0
122*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kshiftrb $4, %k0, %k0
123*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    korb %k1, %k0, %k0
124*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kunpckbw %k0, %k0, %k0
125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kunpckwd %k0, %k0, %k0
126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmovm2b %k0, %ymm0
127*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
128*9880d681SAndroid Build Coastguard Worker
129*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x i1> %a, <4 x i1> %b, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
130*9880d681SAndroid Build Coastguard Worker  ret <32 x i1> %res
131*9880d681SAndroid Build Coastguard Worker}
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Workerdefine <64 x i1> @test8(<8 x i1> %a, <8 x i1>%b) {
134*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test8:
135*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
136*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllw $15, %xmm1, %xmm1
137*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmovw2m %xmm1, %k0
138*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllw $15, %xmm0, %xmm0
139*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmovw2m %xmm0, %k1
140*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kunpckdq %k1, %k0, %k0
141*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmovm2b %k0, %zmm0
142*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
143*9880d681SAndroid Build Coastguard Worker
144*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <8 x i1> %a, <8 x i1> %b, <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
145*9880d681SAndroid Build Coastguard Worker  ret <64 x i1> %res
146*9880d681SAndroid Build Coastguard Worker}
147*9880d681SAndroid Build Coastguard Worker
148*9880d681SAndroid Build Coastguard Workerdefine <4 x i1> @test9(<8 x i1> %a, <8 x i1> %b) {
149*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test9:
150*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
151*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllw $15, %xmm0, %xmm0
152*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmovw2m %xmm0, %k0
153*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kshiftrw $4, %k0, %k0
154*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmovm2d %k0, %xmm0
155*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
156*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <8 x i1> %a, <8 x i1> %b, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
157*9880d681SAndroid Build Coastguard Worker  ret <4 x i1> %res
158*9880d681SAndroid Build Coastguard Worker}
159*9880d681SAndroid Build Coastguard Worker
160*9880d681SAndroid Build Coastguard Workerdefine <2 x i1> @test10(<4 x i1> %a, <4 x i1> %b) {
161*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test10:
162*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
163*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpslld $31, %xmm0, %xmm0
164*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vptestmd %xmm0, %xmm0, %k0
165*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kshiftrw $2, %k0, %k0
166*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpmovm2q %k0, %xmm0
167*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
168*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x i1> %a, <4 x i1> %b, <2 x i32> <i32 2, i32 3>
169*9880d681SAndroid Build Coastguard Worker  ret <2 x i1> %res
170*9880d681SAndroid Build Coastguard Worker}
171