xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/fold-vector-sext-zext.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-linux-gnu -mcpu=corei7-avx -mattr=+avx | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; Verify that the backend correctly folds a sign/zero extend of a vector where
5*9880d681SAndroid Build Coastguard Worker; elements are all constant values or UNDEFs.
6*9880d681SAndroid Build Coastguard Worker; The backend should be able to optimize all the test functions below into
7*9880d681SAndroid Build Coastguard Worker; simple loads from constant pool of the result. That is because the resulting
8*9880d681SAndroid Build Coastguard Worker; vector should be known at static time.
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test1() {
11*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1:
12*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} xmm0 = [0,4294967295,2,4294967293]
14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
15*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <4 x i8> undef, i8 0, i32 0
16*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <4 x i8> %1, i8 -1, i32 1
17*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <4 x i8> %2, i8 2, i32 2
18*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <4 x i8> %3, i8 -3, i32 3
19*9880d681SAndroid Build Coastguard Worker  %5 = sext <4 x i8> %4 to <4 x i16>
20*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %5
21*9880d681SAndroid Build Coastguard Worker}
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test2() {
24*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2:
25*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} xmm0 = <u,4294967295,u,4294967293>
27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
28*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <4 x i8> undef, i8 undef, i32 0
29*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <4 x i8> %1, i8 -1, i32 1
30*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <4 x i8> %2, i8 undef, i32 2
31*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <4 x i8> %3, i8 -3, i32 3
32*9880d681SAndroid Build Coastguard Worker  %5 = sext <4 x i8> %4 to <4 x i16>
33*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %5
34*9880d681SAndroid Build Coastguard Worker}
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test3() {
37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3:
38*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
39*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} xmm0 = [0,4294967295,2,4294967293]
40*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
41*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <4 x i8> undef, i8 0, i32 0
42*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <4 x i8> %1, i8 -1, i32 1
43*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <4 x i8> %2, i8 2, i32 2
44*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <4 x i8> %3, i8 -3, i32 3
45*9880d681SAndroid Build Coastguard Worker  %5 = sext <4 x i8> %4 to <4 x i32>
46*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %5
47*9880d681SAndroid Build Coastguard Worker}
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test4() {
50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test4:
51*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} xmm0 = <u,4294967295,u,4294967293>
53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
54*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <4 x i8> undef, i8 undef, i32 0
55*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <4 x i8> %1, i8 -1, i32 1
56*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <4 x i8> %2, i8 undef, i32 2
57*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <4 x i8> %3, i8 -3, i32 3
58*9880d681SAndroid Build Coastguard Worker  %5 = sext <4 x i8> %4 to <4 x i32>
59*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %5
60*9880d681SAndroid Build Coastguard Worker}
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test5() {
63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test5:
64*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} ymm0 = [0,18446744073709551615,2,18446744073709551613]
66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
67*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <4 x i8> undef, i8 0, i32 0
68*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <4 x i8> %1, i8 -1, i32 1
69*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <4 x i8> %2, i8 2, i32 2
70*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <4 x i8> %3, i8 -3, i32 3
71*9880d681SAndroid Build Coastguard Worker  %5 = sext <4 x i8> %4 to <4 x i64>
72*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %5
73*9880d681SAndroid Build Coastguard Worker}
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test6() {
76*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test6:
77*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
78*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} ymm0 = <u,18446744073709551615,u,18446744073709551613>
79*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
80*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <4 x i8> undef, i8 undef, i32 0
81*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <4 x i8> %1, i8 -1, i32 1
82*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <4 x i8> %2, i8 undef, i32 2
83*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <4 x i8> %3, i8 -3, i32 3
84*9880d681SAndroid Build Coastguard Worker  %5 = sext <4 x i8> %4 to <4 x i64>
85*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %5
86*9880d681SAndroid Build Coastguard Worker}
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test7() {
89*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test7:
90*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} xmm0 = <0,65535,2,65533,u,u,u,u>
92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
93*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <8 x i8> undef, i8 0, i32 0
94*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <8 x i8> %1, i8 -1, i32 1
95*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <8 x i8> %2, i8 2, i32 2
96*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <8 x i8> %3, i8 -3, i32 3
97*9880d681SAndroid Build Coastguard Worker  %5 = insertelement <8 x i8> %4, i8 4, i32 4
98*9880d681SAndroid Build Coastguard Worker  %6 = insertelement <8 x i8> %5, i8 -5, i32 5
99*9880d681SAndroid Build Coastguard Worker  %7 = insertelement <8 x i8> %6, i8 6, i32 6
100*9880d681SAndroid Build Coastguard Worker  %8 = insertelement <8 x i8> %7, i8 -7, i32 7
101*9880d681SAndroid Build Coastguard Worker  %9 = sext <8 x i8> %4 to <8 x i16>
102*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %9
103*9880d681SAndroid Build Coastguard Worker}
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test8() {
106*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test8:
107*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} ymm0 = <0,4294967295,2,4294967293,u,u,u,u>
109*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
110*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <8 x i8> undef, i8 0, i32 0
111*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <8 x i8> %1, i8 -1, i32 1
112*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <8 x i8> %2, i8 2, i32 2
113*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <8 x i8> %3, i8 -3, i32 3
114*9880d681SAndroid Build Coastguard Worker  %5 = insertelement <8 x i8> %4, i8 4, i32 4
115*9880d681SAndroid Build Coastguard Worker  %6 = insertelement <8 x i8> %5, i8 -5, i32 5
116*9880d681SAndroid Build Coastguard Worker  %7 = insertelement <8 x i8> %6, i8 6, i32 6
117*9880d681SAndroid Build Coastguard Worker  %8 = insertelement <8 x i8> %7, i8 -7, i32 7
118*9880d681SAndroid Build Coastguard Worker  %9 = sext <8 x i8> %4 to <8 x i32>
119*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %9
120*9880d681SAndroid Build Coastguard Worker}
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test9() {
123*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test9:
124*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} xmm0 = <u,65535,u,65533,u,u,u,u>
126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
127*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <8 x i8> undef, i8 undef, i32 0
128*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <8 x i8> %1, i8 -1, i32 1
129*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <8 x i8> %2, i8 undef, i32 2
130*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <8 x i8> %3, i8 -3, i32 3
131*9880d681SAndroid Build Coastguard Worker  %5 = insertelement <8 x i8> %4, i8 undef, i32 4
132*9880d681SAndroid Build Coastguard Worker  %6 = insertelement <8 x i8> %5, i8 -5, i32 5
133*9880d681SAndroid Build Coastguard Worker  %7 = insertelement <8 x i8> %6, i8 undef, i32 6
134*9880d681SAndroid Build Coastguard Worker  %8 = insertelement <8 x i8> %7, i8 -7, i32 7
135*9880d681SAndroid Build Coastguard Worker  %9 = sext <8 x i8> %4 to <8 x i16>
136*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %9
137*9880d681SAndroid Build Coastguard Worker}
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test10() {
140*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test10:
141*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
142*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} ymm0 = <0,u,2,u,u,u,u,u>
143*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
144*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <8 x i8> undef, i8 0, i32 0
145*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <8 x i8> %1, i8 undef, i32 1
146*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <8 x i8> %2, i8 2, i32 2
147*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <8 x i8> %3, i8 undef, i32 3
148*9880d681SAndroid Build Coastguard Worker  %5 = insertelement <8 x i8> %4, i8 4, i32 4
149*9880d681SAndroid Build Coastguard Worker  %6 = insertelement <8 x i8> %5, i8 undef, i32 5
150*9880d681SAndroid Build Coastguard Worker  %7 = insertelement <8 x i8> %6, i8 6, i32 6
151*9880d681SAndroid Build Coastguard Worker  %8 = insertelement <8 x i8> %7, i8 undef, i32 7
152*9880d681SAndroid Build Coastguard Worker  %9 = sext <8 x i8> %4 to <8 x i32>
153*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %9
154*9880d681SAndroid Build Coastguard Worker}
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test11() {
157*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test11:
158*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
159*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} xmm0 = [0,255,2,253]
160*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
161*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <4 x i8> undef, i8 0, i32 0
162*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <4 x i8> %1, i8 -1, i32 1
163*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <4 x i8> %2, i8 2, i32 2
164*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <4 x i8> %3, i8 -3, i32 3
165*9880d681SAndroid Build Coastguard Worker  %5 = zext <4 x i8> %4 to <4 x i16>
166*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %5
167*9880d681SAndroid Build Coastguard Worker}
168*9880d681SAndroid Build Coastguard Worker
169*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test12() {
170*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test12:
171*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
172*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} xmm0 = [0,255,2,253]
173*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
174*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <4 x i8> undef, i8 0, i32 0
175*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <4 x i8> %1, i8 -1, i32 1
176*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <4 x i8> %2, i8 2, i32 2
177*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <4 x i8> %3, i8 -3, i32 3
178*9880d681SAndroid Build Coastguard Worker  %5 = zext <4 x i8> %4 to <4 x i32>
179*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %5
180*9880d681SAndroid Build Coastguard Worker}
181*9880d681SAndroid Build Coastguard Worker
182*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test13() {
183*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test13:
184*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
185*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} ymm0 = [0,255,2,253]
186*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
187*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <4 x i8> undef, i8 0, i32 0
188*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <4 x i8> %1, i8 -1, i32 1
189*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <4 x i8> %2, i8 2, i32 2
190*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <4 x i8> %3, i8 -3, i32 3
191*9880d681SAndroid Build Coastguard Worker  %5 = zext <4 x i8> %4 to <4 x i64>
192*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %5
193*9880d681SAndroid Build Coastguard Worker}
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test14() {
196*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test14:
197*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
198*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} xmm0 = <u,255,u,253>
199*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
200*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <4 x i8> undef, i8 undef, i32 0
201*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <4 x i8> %1, i8 -1, i32 1
202*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <4 x i8> %2, i8 undef, i32 2
203*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <4 x i8> %3, i8 -3, i32 3
204*9880d681SAndroid Build Coastguard Worker  %5 = zext <4 x i8> %4 to <4 x i16>
205*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %5
206*9880d681SAndroid Build Coastguard Worker}
207*9880d681SAndroid Build Coastguard Worker
208*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test15() {
209*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test15:
210*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
211*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} xmm0 = <0,u,2,u>
212*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
213*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <4 x i8> undef, i8 0, i32 0
214*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <4 x i8> %1, i8 undef, i32 1
215*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <4 x i8> %2, i8 2, i32 2
216*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <4 x i8> %3, i8 undef, i32 3
217*9880d681SAndroid Build Coastguard Worker  %5 = zext <4 x i8> %4 to <4 x i32>
218*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %5
219*9880d681SAndroid Build Coastguard Worker}
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test16() {
222*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test16:
223*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
224*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} ymm0 = <u,255,2,u>
225*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
226*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <4 x i8> undef, i8 undef, i32 0
227*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <4 x i8> %1, i8 -1, i32 1
228*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <4 x i8> %2, i8 2, i32 2
229*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <4 x i8> %3, i8 undef, i32 3
230*9880d681SAndroid Build Coastguard Worker  %5 = zext <4 x i8> %4 to <4 x i64>
231*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %5
232*9880d681SAndroid Build Coastguard Worker}
233*9880d681SAndroid Build Coastguard Worker
234*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test17() {
235*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test17:
236*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
237*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} xmm0 = [0,255,2,253,4,251,6,249]
238*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
239*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <8 x i8> undef, i8 0, i32 0
240*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <8 x i8> %1, i8 -1, i32 1
241*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <8 x i8> %2, i8 2, i32 2
242*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <8 x i8> %3, i8 -3, i32 3
243*9880d681SAndroid Build Coastguard Worker  %5 = insertelement <8 x i8> %4, i8 4, i32 4
244*9880d681SAndroid Build Coastguard Worker  %6 = insertelement <8 x i8> %5, i8 -5, i32 5
245*9880d681SAndroid Build Coastguard Worker  %7 = insertelement <8 x i8> %6, i8 6, i32 6
246*9880d681SAndroid Build Coastguard Worker  %8 = insertelement <8 x i8> %7, i8 -7, i32 7
247*9880d681SAndroid Build Coastguard Worker  %9 = zext <8 x i8> %8 to <8 x i16>
248*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %9
249*9880d681SAndroid Build Coastguard Worker}
250*9880d681SAndroid Build Coastguard Worker
251*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test18() {
252*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test18:
253*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
254*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} ymm0 = [0,255,2,253,4,251,6,249]
255*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
256*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <8 x i8> undef, i8 0, i32 0
257*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <8 x i8> %1, i8 -1, i32 1
258*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <8 x i8> %2, i8 2, i32 2
259*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <8 x i8> %3, i8 -3, i32 3
260*9880d681SAndroid Build Coastguard Worker  %5 = insertelement <8 x i8> %4, i8 4, i32 4
261*9880d681SAndroid Build Coastguard Worker  %6 = insertelement <8 x i8> %5, i8 -5, i32 5
262*9880d681SAndroid Build Coastguard Worker  %7 = insertelement <8 x i8> %6, i8 6, i32 6
263*9880d681SAndroid Build Coastguard Worker  %8 = insertelement <8 x i8> %7, i8 -7, i32 7
264*9880d681SAndroid Build Coastguard Worker  %9 = zext <8 x i8> %8 to <8 x i32>
265*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %9
266*9880d681SAndroid Build Coastguard Worker}
267*9880d681SAndroid Build Coastguard Worker
268*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test19() {
269*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test19:
270*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
271*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} xmm0 = <u,255,u,253,u,251,u,249>
272*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
273*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <8 x i8> undef, i8 undef, i32 0
274*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <8 x i8> %1, i8 -1, i32 1
275*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <8 x i8> %2, i8 undef, i32 2
276*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <8 x i8> %3, i8 -3, i32 3
277*9880d681SAndroid Build Coastguard Worker  %5 = insertelement <8 x i8> %4, i8 undef, i32 4
278*9880d681SAndroid Build Coastguard Worker  %6 = insertelement <8 x i8> %5, i8 -5, i32 5
279*9880d681SAndroid Build Coastguard Worker  %7 = insertelement <8 x i8> %6, i8 undef, i32 6
280*9880d681SAndroid Build Coastguard Worker  %8 = insertelement <8 x i8> %7, i8 -7, i32 7
281*9880d681SAndroid Build Coastguard Worker  %9 = zext <8 x i8> %8 to <8 x i16>
282*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %9
283*9880d681SAndroid Build Coastguard Worker}
284*9880d681SAndroid Build Coastguard Worker
285*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test20() {
286*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test20:
287*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
288*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps {{.*#+}} ymm0 = <0,u,2,253,4,u,6,u>
289*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
290*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <8 x i8> undef, i8 0, i32 0
291*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <8 x i8> %1, i8 undef, i32 1
292*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <8 x i8> %2, i8 2, i32 2
293*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <8 x i8> %3, i8 -3, i32 3
294*9880d681SAndroid Build Coastguard Worker  %5 = insertelement <8 x i8> %4, i8 4, i32 4
295*9880d681SAndroid Build Coastguard Worker  %6 = insertelement <8 x i8> %5, i8 undef, i32 5
296*9880d681SAndroid Build Coastguard Worker  %7 = insertelement <8 x i8> %6, i8 6, i32 6
297*9880d681SAndroid Build Coastguard Worker  %8 = insertelement <8 x i8> %7, i8 undef, i32 7
298*9880d681SAndroid Build Coastguard Worker  %9 = zext <8 x i8> %8 to <8 x i32>
299*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %9
300*9880d681SAndroid Build Coastguard Worker}
301