Revert r354244 "[DAGCombiner] Eliminate dead stores to stack."
[llvm-complete.git] / test / CodeGen / X86 / avx512-skx-insert-subvec.ll
blob5338eb3c3a16d980efdeb3b245bdcc0c6019ca0e
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw -mattr=+avx512dq -mattr=+avx512vl| FileCheck %s
4 define <8 x i1> @test(<2 x i1> %a) {
5 ; CHECK-LABEL: test:
6 ; CHECK:       # %bb.0:
7 ; CHECK-NEXT:    vpsllq $63, %xmm0, %xmm0
8 ; CHECK-NEXT:    vpmovq2m %xmm0, %k0
9 ; CHECK-NEXT:    kshiftlb $2, %k0, %k0
10 ; CHECK-NEXT:    vpmovm2w %k0, %xmm0
11 ; CHECK-NEXT:    retq
12   %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   ret <8 x i1> %res
16 define <8 x i1> @test1(<2 x i1> %a) {
17 ; CHECK-LABEL: test1:
18 ; CHECK:       # %bb.0:
19 ; CHECK-NEXT:    vpsllq $63, %xmm0, %xmm0
20 ; CHECK-NEXT:    vpmovq2m %xmm0, %k0
21 ; CHECK-NEXT:    kshiftlb $4, %k0, %k0
22 ; CHECK-NEXT:    vpmovm2w %k0, %xmm0
23 ; CHECK-NEXT:    retq
24   %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   ret <8 x i1> %res
28 define <8 x i1> @test2(<2 x i1> %a) {
29 ; CHECK-LABEL: test2:
30 ; CHECK:       # %bb.0:
31 ; CHECK-NEXT:    vpsllq $63, %xmm0, %xmm0
32 ; CHECK-NEXT:    vpmovq2m %xmm0, %k0
33 ; CHECK-NEXT:    kshiftlb $4, %k0, %k0
34 ; CHECK-NEXT:    vpmovm2w %k0, %xmm0
35 ; CHECK-NEXT:    retq
36   %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>
37   ret <8 x i1> %res
40 define <8 x i1> @test3(<4 x i1> %a) {
41 ; CHECK-LABEL: test3:
42 ; CHECK:       # %bb.0:
43 ; CHECK-NEXT:    vpslld $31, %xmm0, %xmm0
44 ; CHECK-NEXT:    vpmovd2m %xmm0, %k0
45 ; CHECK-NEXT:    vpmovm2w %k0, %xmm0
46 ; CHECK-NEXT:    retq
48   %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>
49   ret <8 x i1> %res
52 define <8 x i1> @test4(<4 x i1> %a, <4 x i1>%b) {
53 ; CHECK-LABEL: test4:
54 ; CHECK:       # %bb.0:
55 ; CHECK-NEXT:    vpslld $31, %xmm1, %xmm1
56 ; CHECK-NEXT:    vpmovd2m %xmm1, %k0
57 ; CHECK-NEXT:    vpslld $31, %xmm0, %xmm0
58 ; CHECK-NEXT:    vpmovd2m %xmm0, %k1
59 ; CHECK-NEXT:    kshiftlb $4, %k0, %k0
60 ; CHECK-NEXT:    korb %k0, %k1, %k0
61 ; CHECK-NEXT:    vpmovm2w %k0, %xmm0
62 ; CHECK-NEXT:    retq
64   %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>
65   ret <8 x i1> %res
68 define <4 x i1> @test5(<2 x i1> %a, <2 x i1>%b) {
69 ; CHECK-LABEL: test5:
70 ; CHECK:       # %bb.0:
71 ; CHECK-NEXT:    vpsllq $63, %xmm1, %xmm1
72 ; CHECK-NEXT:    vpmovq2m %xmm1, %k0
73 ; CHECK-NEXT:    vpsllq $63, %xmm0, %xmm0
74 ; CHECK-NEXT:    vpmovq2m %xmm0, %k1
75 ; CHECK-NEXT:    kshiftlb $2, %k0, %k0
76 ; CHECK-NEXT:    korw %k0, %k1, %k0
77 ; CHECK-NEXT:    vpmovm2d %k0, %xmm0
78 ; CHECK-NEXT:    retq
80   %res = shufflevector <2 x i1> %a, <2 x i1> %b, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
81   ret <4 x i1> %res
84 define <16 x i1> @test6(<2 x i1> %a, <2 x i1>%b) {
85 ; CHECK-LABEL: test6:
86 ; CHECK:       # %bb.0:
87 ; CHECK-NEXT:    vpsllq $63, %xmm1, %xmm1
88 ; CHECK-NEXT:    vpmovq2m %xmm1, %k0
89 ; CHECK-NEXT:    vpsllq $63, %xmm0, %xmm0
90 ; CHECK-NEXT:    vpmovq2m %xmm0, %k1
91 ; CHECK-NEXT:    kshiftlb $2, %k0, %k0
92 ; CHECK-NEXT:    korw %k0, %k1, %k0
93 ; CHECK-NEXT:    vpmovm2b %k0, %xmm0
94 ; CHECK-NEXT:    retq
96   %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>
97   ret <16 x i1> %res
100 define <32 x i1> @test7(<4 x i1> %a, <4 x i1>%b) {
101 ; CHECK-LABEL: test7:
102 ; CHECK:       # %bb.0:
103 ; CHECK-NEXT:    vpslld $31, %xmm1, %xmm1
104 ; CHECK-NEXT:    vpmovd2m %xmm1, %k0
105 ; CHECK-NEXT:    vpslld $31, %xmm0, %xmm0
106 ; CHECK-NEXT:    vpmovd2m %xmm0, %k1
107 ; CHECK-NEXT:    kshiftlb $4, %k0, %k0
108 ; CHECK-NEXT:    korb %k0, %k1, %k0
109 ; CHECK-NEXT:    vpmovm2b %k0, %ymm0
110 ; CHECK-NEXT:    retq
112   %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>
113   ret <32 x i1> %res
116 define <64 x i1> @test8(<8 x i1> %a, <8 x i1>%b) {
117 ; CHECK-LABEL: test8:
118 ; CHECK:       # %bb.0:
119 ; CHECK-NEXT:    vpsllw $15, %xmm1, %xmm1
120 ; CHECK-NEXT:    vpmovw2m %xmm1, %k0
121 ; CHECK-NEXT:    vpsllw $15, %xmm0, %xmm0
122 ; CHECK-NEXT:    vpmovw2m %xmm0, %k1
123 ; CHECK-NEXT:    kunpckdq %k1, %k0, %k0
124 ; CHECK-NEXT:    vpmovm2b %k0, %zmm0
125 ; CHECK-NEXT:    retq
127   %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>
128   ret <64 x i1> %res
131 define <4 x i1> @test9(<8 x i1> %a, <8 x i1> %b) {
132 ; CHECK-LABEL: test9:
133 ; CHECK:       # %bb.0:
134 ; CHECK-NEXT:    vpsllw $15, %xmm0, %xmm0
135 ; CHECK-NEXT:    vpmovw2m %xmm0, %k0
136 ; CHECK-NEXT:    kshiftrb $4, %k0, %k0
137 ; CHECK-NEXT:    vpmovm2d %k0, %xmm0
138 ; CHECK-NEXT:    retq
139   %res = shufflevector <8 x i1> %a, <8 x i1> %b, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
140   ret <4 x i1> %res
143 define <2 x i1> @test10(<4 x i1> %a, <4 x i1> %b) {
144 ; CHECK-LABEL: test10:
145 ; CHECK:       # %bb.0:
146 ; CHECK-NEXT:    vpslld $31, %xmm0, %xmm0
147 ; CHECK-NEXT:    vpmovd2m %xmm0, %k0
148 ; CHECK-NEXT:    kshiftrb $2, %k0, %k0
149 ; CHECK-NEXT:    vpmovm2q %k0, %xmm0
150 ; CHECK-NEXT:    retq
151   %res = shufflevector <4 x i1> %a, <4 x i1> %b, <2 x i32> <i32 2, i32 3>
152   ret <2 x i1> %res
155 define <8 x i1> @test11(<4 x i1> %a, <4 x i1>%b) {
156 ; CHECK-LABEL: test11:
157 ; CHECK:       # %bb.0:
158 ; CHECK-NEXT:    vpslld $31, %xmm0, %xmm0
159 ; CHECK-NEXT:    vpmovd2m %xmm0, %k0
160 ; CHECK-NEXT:    kshiftlb $4, %k0, %k0
161 ; CHECK-NEXT:    vpmovm2w %k0, %xmm0
162 ; CHECK-NEXT:    retq
163   %res = shufflevector <4 x i1> %a, <4 x i1> undef, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 0, i32 1, i32 2, i32 3>
164   ret <8 x i1> %res