Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / SLPVectorizer / X86 / sext.ll
blob744a50906cfc48ad464a439d53d6f3d73cc48dac
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -mtriple=x86_64-unknown -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=SSE
3 ; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=slm -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=SSE
4 ; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7-avx -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=AVX
5 ; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=core-avx2 -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=AVX
6 ; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=knl -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=AVX
7 ; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=skx -mattr=+avx512bw -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=AVX
10 ; vXi8
13 define <2 x i64> @loadext_2i8_to_2i64(ptr %p0) {
14 ; SSE-LABEL: @loadext_2i8_to_2i64(
15 ; SSE-NEXT:    [[TMP1:%.*]] = load <2 x i8>, ptr [[P0:%.*]], align 1
16 ; SSE-NEXT:    [[TMP2:%.*]] = sext <2 x i8> [[TMP1]] to <2 x i64>
17 ; SSE-NEXT:    ret <2 x i64> [[TMP2]]
19 ; AVX-LABEL: @loadext_2i8_to_2i64(
20 ; AVX-NEXT:    [[TMP2:%.*]] = load <2 x i8>, ptr [[P0:%.*]], align 1
21 ; AVX-NEXT:    [[TMP3:%.*]] = sext <2 x i8> [[TMP2]] to <2 x i64>
22 ; AVX-NEXT:    ret <2 x i64> [[TMP3]]
24   %p1 = getelementptr inbounds i8, ptr %p0, i64 1
25   %i0 = load i8, ptr %p0, align 1
26   %i1 = load i8, ptr %p1, align 1
27   %x0 = sext i8 %i0 to i64
28   %x1 = sext i8 %i1 to i64
29   %v0 = insertelement <2 x i64> undef, i64 %x0, i32 0
30   %v1 = insertelement <2 x i64>   %v0, i64 %x1, i32 1
31   ret <2 x i64> %v1
34 define <4 x i32> @loadext_4i8_to_4i32(ptr %p0) {
35 ; SSE-LABEL: @loadext_4i8_to_4i32(
36 ; SSE-NEXT:    [[TMP2:%.*]] = load <4 x i8>, ptr [[P0:%.*]], align 1
37 ; SSE-NEXT:    [[TMP3:%.*]] = sext <4 x i8> [[TMP2]] to <4 x i32>
38 ; SSE-NEXT:    ret <4 x i32> [[TMP3]]
40 ; AVX-LABEL: @loadext_4i8_to_4i32(
41 ; AVX-NEXT:    [[TMP2:%.*]] = load <4 x i8>, ptr [[P0:%.*]], align 1
42 ; AVX-NEXT:    [[TMP3:%.*]] = sext <4 x i8> [[TMP2]] to <4 x i32>
43 ; AVX-NEXT:    ret <4 x i32> [[TMP3]]
45   %p1 = getelementptr inbounds i8, ptr %p0, i64 1
46   %p2 = getelementptr inbounds i8, ptr %p0, i64 2
47   %p3 = getelementptr inbounds i8, ptr %p0, i64 3
48   %i0 = load i8, ptr %p0, align 1
49   %i1 = load i8, ptr %p1, align 1
50   %i2 = load i8, ptr %p2, align 1
51   %i3 = load i8, ptr %p3, align 1
52   %x0 = sext i8 %i0 to i32
53   %x1 = sext i8 %i1 to i32
54   %x2 = sext i8 %i2 to i32
55   %x3 = sext i8 %i3 to i32
56   %v0 = insertelement <4 x i32> undef, i32 %x0, i32 0
57   %v1 = insertelement <4 x i32>   %v0, i32 %x1, i32 1
58   %v2 = insertelement <4 x i32>   %v1, i32 %x2, i32 2
59   %v3 = insertelement <4 x i32>   %v2, i32 %x3, i32 3
60   ret <4 x i32> %v3
63 define <4 x i64> @loadext_4i8_to_4i64(ptr %p0) {
64 ; SSE-LABEL: @loadext_4i8_to_4i64(
65 ; SSE-NEXT:    [[TMP2:%.*]] = load <4 x i8>, ptr [[P0:%.*]], align 1
66 ; SSE-NEXT:    [[TMP3:%.*]] = sext <4 x i8> [[TMP2]] to <4 x i64>
67 ; SSE-NEXT:    ret <4 x i64> [[TMP3]]
69 ; AVX-LABEL: @loadext_4i8_to_4i64(
70 ; AVX-NEXT:    [[TMP2:%.*]] = load <4 x i8>, ptr [[P0:%.*]], align 1
71 ; AVX-NEXT:    [[TMP3:%.*]] = sext <4 x i8> [[TMP2]] to <4 x i64>
72 ; AVX-NEXT:    ret <4 x i64> [[TMP3]]
74   %p1 = getelementptr inbounds i8, ptr %p0, i64 1
75   %p2 = getelementptr inbounds i8, ptr %p0, i64 2
76   %p3 = getelementptr inbounds i8, ptr %p0, i64 3
77   %i0 = load i8, ptr %p0, align 1
78   %i1 = load i8, ptr %p1, align 1
79   %i2 = load i8, ptr %p2, align 1
80   %i3 = load i8, ptr %p3, align 1
81   %x0 = sext i8 %i0 to i64
82   %x1 = sext i8 %i1 to i64
83   %x2 = sext i8 %i2 to i64
84   %x3 = sext i8 %i3 to i64
85   %v0 = insertelement <4 x i64> undef, i64 %x0, i32 0
86   %v1 = insertelement <4 x i64>   %v0, i64 %x1, i32 1
87   %v2 = insertelement <4 x i64>   %v1, i64 %x2, i32 2
88   %v3 = insertelement <4 x i64>   %v2, i64 %x3, i32 3
89   ret <4 x i64> %v3
92 define <8 x i16> @loadext_8i8_to_8i16(ptr %p0) {
93 ; SSE-LABEL: @loadext_8i8_to_8i16(
94 ; SSE-NEXT:    [[TMP2:%.*]] = load <8 x i8>, ptr [[P0:%.*]], align 1
95 ; SSE-NEXT:    [[TMP3:%.*]] = sext <8 x i8> [[TMP2]] to <8 x i16>
96 ; SSE-NEXT:    ret <8 x i16> [[TMP3]]
98 ; AVX-LABEL: @loadext_8i8_to_8i16(
99 ; AVX-NEXT:    [[TMP2:%.*]] = load <8 x i8>, ptr [[P0:%.*]], align 1
100 ; AVX-NEXT:    [[TMP3:%.*]] = sext <8 x i8> [[TMP2]] to <8 x i16>
101 ; AVX-NEXT:    ret <8 x i16> [[TMP3]]
103   %p1 = getelementptr inbounds i8, ptr %p0, i64 1
104   %p2 = getelementptr inbounds i8, ptr %p0, i64 2
105   %p3 = getelementptr inbounds i8, ptr %p0, i64 3
106   %p4 = getelementptr inbounds i8, ptr %p0, i64 4
107   %p5 = getelementptr inbounds i8, ptr %p0, i64 5
108   %p6 = getelementptr inbounds i8, ptr %p0, i64 6
109   %p7 = getelementptr inbounds i8, ptr %p0, i64 7
110   %i0 = load i8, ptr %p0, align 1
111   %i1 = load i8, ptr %p1, align 1
112   %i2 = load i8, ptr %p2, align 1
113   %i3 = load i8, ptr %p3, align 1
114   %i4 = load i8, ptr %p4, align 1
115   %i5 = load i8, ptr %p5, align 1
116   %i6 = load i8, ptr %p6, align 1
117   %i7 = load i8, ptr %p7, align 1
118   %x0 = sext i8 %i0 to i16
119   %x1 = sext i8 %i1 to i16
120   %x2 = sext i8 %i2 to i16
121   %x3 = sext i8 %i3 to i16
122   %x4 = sext i8 %i4 to i16
123   %x5 = sext i8 %i5 to i16
124   %x6 = sext i8 %i6 to i16
125   %x7 = sext i8 %i7 to i16
126   %v0 = insertelement <8 x i16> undef, i16 %x0, i32 0
127   %v1 = insertelement <8 x i16>   %v0, i16 %x1, i32 1
128   %v2 = insertelement <8 x i16>   %v1, i16 %x2, i32 2
129   %v3 = insertelement <8 x i16>   %v2, i16 %x3, i32 3
130   %v4 = insertelement <8 x i16>   %v3, i16 %x4, i32 4
131   %v5 = insertelement <8 x i16>   %v4, i16 %x5, i32 5
132   %v6 = insertelement <8 x i16>   %v5, i16 %x6, i32 6
133   %v7 = insertelement <8 x i16>   %v6, i16 %x7, i32 7
134   ret <8 x i16> %v7
137 define <8 x i32> @loadext_8i8_to_8i32(ptr %p0) {
138 ; SSE-LABEL: @loadext_8i8_to_8i32(
139 ; SSE-NEXT:    [[TMP2:%.*]] = load <8 x i8>, ptr [[P0:%.*]], align 1
140 ; SSE-NEXT:    [[TMP3:%.*]] = sext <8 x i8> [[TMP2]] to <8 x i32>
141 ; SSE-NEXT:    ret <8 x i32> [[TMP3]]
143 ; AVX-LABEL: @loadext_8i8_to_8i32(
144 ; AVX-NEXT:    [[TMP2:%.*]] = load <8 x i8>, ptr [[P0:%.*]], align 1
145 ; AVX-NEXT:    [[TMP3:%.*]] = sext <8 x i8> [[TMP2]] to <8 x i32>
146 ; AVX-NEXT:    ret <8 x i32> [[TMP3]]
148   %p1 = getelementptr inbounds i8, ptr %p0, i64 1
149   %p2 = getelementptr inbounds i8, ptr %p0, i64 2
150   %p3 = getelementptr inbounds i8, ptr %p0, i64 3
151   %p4 = getelementptr inbounds i8, ptr %p0, i64 4
152   %p5 = getelementptr inbounds i8, ptr %p0, i64 5
153   %p6 = getelementptr inbounds i8, ptr %p0, i64 6
154   %p7 = getelementptr inbounds i8, ptr %p0, i64 7
155   %i0 = load i8, ptr %p0, align 1
156   %i1 = load i8, ptr %p1, align 1
157   %i2 = load i8, ptr %p2, align 1
158   %i3 = load i8, ptr %p3, align 1
159   %i4 = load i8, ptr %p4, align 1
160   %i5 = load i8, ptr %p5, align 1
161   %i6 = load i8, ptr %p6, align 1
162   %i7 = load i8, ptr %p7, align 1
163   %x0 = sext i8 %i0 to i32
164   %x1 = sext i8 %i1 to i32
165   %x2 = sext i8 %i2 to i32
166   %x3 = sext i8 %i3 to i32
167   %x4 = sext i8 %i4 to i32
168   %x5 = sext i8 %i5 to i32
169   %x6 = sext i8 %i6 to i32
170   %x7 = sext i8 %i7 to i32
171   %v0 = insertelement <8 x i32> undef, i32 %x0, i32 0
172   %v1 = insertelement <8 x i32>   %v0, i32 %x1, i32 1
173   %v2 = insertelement <8 x i32>   %v1, i32 %x2, i32 2
174   %v3 = insertelement <8 x i32>   %v2, i32 %x3, i32 3
175   %v4 = insertelement <8 x i32>   %v3, i32 %x4, i32 4
176   %v5 = insertelement <8 x i32>   %v4, i32 %x5, i32 5
177   %v6 = insertelement <8 x i32>   %v5, i32 %x6, i32 6
178   %v7 = insertelement <8 x i32>   %v6, i32 %x7, i32 7
179   ret <8 x i32> %v7
182 define <16 x i16> @loadext_16i8_to_16i16(ptr %p0) {
183 ; SSE-LABEL: @loadext_16i8_to_16i16(
184 ; SSE-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr [[P0:%.*]], align 1
185 ; SSE-NEXT:    [[TMP3:%.*]] = sext <16 x i8> [[TMP2]] to <16 x i16>
186 ; SSE-NEXT:    ret <16 x i16> [[TMP3]]
188 ; AVX-LABEL: @loadext_16i8_to_16i16(
189 ; AVX-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr [[P0:%.*]], align 1
190 ; AVX-NEXT:    [[TMP3:%.*]] = sext <16 x i8> [[TMP2]] to <16 x i16>
191 ; AVX-NEXT:    ret <16 x i16> [[TMP3]]
193   %p1  = getelementptr inbounds i8, ptr %p0, i64 1
194   %p2  = getelementptr inbounds i8, ptr %p0, i64 2
195   %p3  = getelementptr inbounds i8, ptr %p0, i64 3
196   %p4  = getelementptr inbounds i8, ptr %p0, i64 4
197   %p5  = getelementptr inbounds i8, ptr %p0, i64 5
198   %p6  = getelementptr inbounds i8, ptr %p0, i64 6
199   %p7  = getelementptr inbounds i8, ptr %p0, i64 7
200   %p8  = getelementptr inbounds i8, ptr %p0, i64 8
201   %p9  = getelementptr inbounds i8, ptr %p0, i64 9
202   %p10 = getelementptr inbounds i8, ptr %p0, i64 10
203   %p11 = getelementptr inbounds i8, ptr %p0, i64 11
204   %p12 = getelementptr inbounds i8, ptr %p0, i64 12
205   %p13 = getelementptr inbounds i8, ptr %p0, i64 13
206   %p14 = getelementptr inbounds i8, ptr %p0, i64 14
207   %p15 = getelementptr inbounds i8, ptr %p0, i64 15
208   %i0  = load i8, ptr %p0,  align 1
209   %i1  = load i8, ptr %p1,  align 1
210   %i2  = load i8, ptr %p2,  align 1
211   %i3  = load i8, ptr %p3,  align 1
212   %i4  = load i8, ptr %p4,  align 1
213   %i5  = load i8, ptr %p5,  align 1
214   %i6  = load i8, ptr %p6,  align 1
215   %i7  = load i8, ptr %p7,  align 1
216   %i8  = load i8, ptr %p8,  align 1
217   %i9  = load i8, ptr %p9,  align 1
218   %i10 = load i8, ptr %p10, align 1
219   %i11 = load i8, ptr %p11, align 1
220   %i12 = load i8, ptr %p12, align 1
221   %i13 = load i8, ptr %p13, align 1
222   %i14 = load i8, ptr %p14, align 1
223   %i15 = load i8, ptr %p15, align 1
224   %x0  = sext i8 %i0  to i16
225   %x1  = sext i8 %i1  to i16
226   %x2  = sext i8 %i2  to i16
227   %x3  = sext i8 %i3  to i16
228   %x4  = sext i8 %i4  to i16
229   %x5  = sext i8 %i5  to i16
230   %x6  = sext i8 %i6  to i16
231   %x7  = sext i8 %i7  to i16
232   %x8  = sext i8 %i8  to i16
233   %x9  = sext i8 %i9  to i16
234   %x10 = sext i8 %i10 to i16
235   %x11 = sext i8 %i11 to i16
236   %x12 = sext i8 %i12 to i16
237   %x13 = sext i8 %i13 to i16
238   %x14 = sext i8 %i14 to i16
239   %x15 = sext i8 %i15 to i16
240   %v0  = insertelement <16 x i16> undef, i16 %x0,  i32 0
241   %v1  = insertelement <16 x i16>  %v0,  i16 %x1,  i32 1
242   %v2  = insertelement <16 x i16>  %v1,  i16 %x2,  i32 2
243   %v3  = insertelement <16 x i16>  %v2,  i16 %x3,  i32 3
244   %v4  = insertelement <16 x i16>  %v3,  i16 %x4,  i32 4
245   %v5  = insertelement <16 x i16>  %v4,  i16 %x5,  i32 5
246   %v6  = insertelement <16 x i16>  %v5,  i16 %x6,  i32 6
247   %v7  = insertelement <16 x i16>  %v6,  i16 %x7,  i32 7
248   %v8  = insertelement <16 x i16>  %v7,  i16 %x8,  i32 8
249   %v9  = insertelement <16 x i16>  %v8,  i16 %x9,  i32 9
250   %v10 = insertelement <16 x i16>  %v9,  i16 %x10, i32 10
251   %v11 = insertelement <16 x i16>  %v10, i16 %x11, i32 11
252   %v12 = insertelement <16 x i16>  %v11, i16 %x12, i32 12
253   %v13 = insertelement <16 x i16>  %v12, i16 %x13, i32 13
254   %v14 = insertelement <16 x i16>  %v13, i16 %x14, i32 14
255   %v15 = insertelement <16 x i16>  %v14, i16 %x15, i32 15
256   ret <16 x i16> %v15
260 ; vXi16
263 define <2 x i64> @loadext_2i16_to_2i64(ptr %p0) {
264 ; SSE-LABEL: @loadext_2i16_to_2i64(
265 ; SSE-NEXT:    [[TMP2:%.*]] = load <2 x i16>, ptr [[P0:%.*]], align 1
266 ; SSE-NEXT:    [[TMP3:%.*]] = sext <2 x i16> [[TMP2]] to <2 x i64>
267 ; SSE-NEXT:    ret <2 x i64> [[TMP3]]
269 ; AVX-LABEL: @loadext_2i16_to_2i64(
270 ; AVX-NEXT:    [[TMP2:%.*]] = load <2 x i16>, ptr [[P0:%.*]], align 1
271 ; AVX-NEXT:    [[TMP3:%.*]] = sext <2 x i16> [[TMP2]] to <2 x i64>
272 ; AVX-NEXT:    ret <2 x i64> [[TMP3]]
274   %p1 = getelementptr inbounds i16, ptr %p0, i64 1
275   %i0 = load i16, ptr %p0, align 1
276   %i1 = load i16, ptr %p1, align 1
277   %x0 = sext i16 %i0 to i64
278   %x1 = sext i16 %i1 to i64
279   %v0 = insertelement <2 x i64> undef, i64 %x0, i32 0
280   %v1 = insertelement <2 x i64>   %v0, i64 %x1, i32 1
281   ret <2 x i64> %v1
284 define <4 x i32> @loadext_4i16_to_4i32(ptr %p0) {
285 ; SSE-LABEL: @loadext_4i16_to_4i32(
286 ; SSE-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[P0:%.*]], align 1
287 ; SSE-NEXT:    [[TMP3:%.*]] = sext <4 x i16> [[TMP2]] to <4 x i32>
288 ; SSE-NEXT:    ret <4 x i32> [[TMP3]]
290 ; AVX-LABEL: @loadext_4i16_to_4i32(
291 ; AVX-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[P0:%.*]], align 1
292 ; AVX-NEXT:    [[TMP3:%.*]] = sext <4 x i16> [[TMP2]] to <4 x i32>
293 ; AVX-NEXT:    ret <4 x i32> [[TMP3]]
295   %p1 = getelementptr inbounds i16, ptr %p0, i64 1
296   %p2 = getelementptr inbounds i16, ptr %p0, i64 2
297   %p3 = getelementptr inbounds i16, ptr %p0, i64 3
298   %i0 = load i16, ptr %p0, align 1
299   %i1 = load i16, ptr %p1, align 1
300   %i2 = load i16, ptr %p2, align 1
301   %i3 = load i16, ptr %p3, align 1
302   %x0 = sext i16 %i0 to i32
303   %x1 = sext i16 %i1 to i32
304   %x2 = sext i16 %i2 to i32
305   %x3 = sext i16 %i3 to i32
306   %v0 = insertelement <4 x i32> undef, i32 %x0, i32 0
307   %v1 = insertelement <4 x i32>   %v0, i32 %x1, i32 1
308   %v2 = insertelement <4 x i32>   %v1, i32 %x2, i32 2
309   %v3 = insertelement <4 x i32>   %v2, i32 %x3, i32 3
310   ret <4 x i32> %v3
313 define <4 x i64> @loadext_4i16_to_4i64(ptr %p0) {
314 ; SSE-LABEL: @loadext_4i16_to_4i64(
315 ; SSE-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[P0:%.*]], align 1
316 ; SSE-NEXT:    [[TMP3:%.*]] = sext <4 x i16> [[TMP2]] to <4 x i64>
317 ; SSE-NEXT:    ret <4 x i64> [[TMP3]]
319 ; AVX-LABEL: @loadext_4i16_to_4i64(
320 ; AVX-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[P0:%.*]], align 1
321 ; AVX-NEXT:    [[TMP3:%.*]] = sext <4 x i16> [[TMP2]] to <4 x i64>
322 ; AVX-NEXT:    ret <4 x i64> [[TMP3]]
324   %p1 = getelementptr inbounds i16, ptr %p0, i64 1
325   %p2 = getelementptr inbounds i16, ptr %p0, i64 2
326   %p3 = getelementptr inbounds i16, ptr %p0, i64 3
327   %i0 = load i16, ptr %p0, align 1
328   %i1 = load i16, ptr %p1, align 1
329   %i2 = load i16, ptr %p2, align 1
330   %i3 = load i16, ptr %p3, align 1
331   %x0 = sext i16 %i0 to i64
332   %x1 = sext i16 %i1 to i64
333   %x2 = sext i16 %i2 to i64
334   %x3 = sext i16 %i3 to i64
335   %v0 = insertelement <4 x i64> undef, i64 %x0, i32 0
336   %v1 = insertelement <4 x i64>   %v0, i64 %x1, i32 1
337   %v2 = insertelement <4 x i64>   %v1, i64 %x2, i32 2
338   %v3 = insertelement <4 x i64>   %v2, i64 %x3, i32 3
339   ret <4 x i64> %v3
342 define <8 x i32> @loadext_8i16_to_8i32(ptr %p0) {
343 ; SSE-LABEL: @loadext_8i16_to_8i32(
344 ; SSE-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr [[P0:%.*]], align 1
345 ; SSE-NEXT:    [[TMP3:%.*]] = sext <8 x i16> [[TMP2]] to <8 x i32>
346 ; SSE-NEXT:    ret <8 x i32> [[TMP3]]
348 ; AVX-LABEL: @loadext_8i16_to_8i32(
349 ; AVX-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr [[P0:%.*]], align 1
350 ; AVX-NEXT:    [[TMP3:%.*]] = sext <8 x i16> [[TMP2]] to <8 x i32>
351 ; AVX-NEXT:    ret <8 x i32> [[TMP3]]
353   %p1 = getelementptr inbounds i16, ptr %p0, i64 1
354   %p2 = getelementptr inbounds i16, ptr %p0, i64 2
355   %p3 = getelementptr inbounds i16, ptr %p0, i64 3
356   %p4 = getelementptr inbounds i16, ptr %p0, i64 4
357   %p5 = getelementptr inbounds i16, ptr %p0, i64 5
358   %p6 = getelementptr inbounds i16, ptr %p0, i64 6
359   %p7 = getelementptr inbounds i16, ptr %p0, i64 7
360   %i0 = load i16, ptr %p0, align 1
361   %i1 = load i16, ptr %p1, align 1
362   %i2 = load i16, ptr %p2, align 1
363   %i3 = load i16, ptr %p3, align 1
364   %i4 = load i16, ptr %p4, align 1
365   %i5 = load i16, ptr %p5, align 1
366   %i6 = load i16, ptr %p6, align 1
367   %i7 = load i16, ptr %p7, align 1
368   %x0 = sext i16 %i0 to i32
369   %x1 = sext i16 %i1 to i32
370   %x2 = sext i16 %i2 to i32
371   %x3 = sext i16 %i3 to i32
372   %x4 = sext i16 %i4 to i32
373   %x5 = sext i16 %i5 to i32
374   %x6 = sext i16 %i6 to i32
375   %x7 = sext i16 %i7 to i32
376   %v0 = insertelement <8 x i32> undef, i32 %x0, i32 0
377   %v1 = insertelement <8 x i32>   %v0, i32 %x1, i32 1
378   %v2 = insertelement <8 x i32>   %v1, i32 %x2, i32 2
379   %v3 = insertelement <8 x i32>   %v2, i32 %x3, i32 3
380   %v4 = insertelement <8 x i32>   %v3, i32 %x4, i32 4
381   %v5 = insertelement <8 x i32>   %v4, i32 %x5, i32 5
382   %v6 = insertelement <8 x i32>   %v5, i32 %x6, i32 6
383   %v7 = insertelement <8 x i32>   %v6, i32 %x7, i32 7
384   ret <8 x i32> %v7
388 ; vXi32
391 define <2 x i64> @loadext_2i32_to_2i64(ptr %p0) {
392 ; SSE-LABEL: @loadext_2i32_to_2i64(
393 ; SSE-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr [[P0:%.*]], align 1
394 ; SSE-NEXT:    [[TMP3:%.*]] = sext <2 x i32> [[TMP2]] to <2 x i64>
395 ; SSE-NEXT:    ret <2 x i64> [[TMP3]]
397 ; AVX-LABEL: @loadext_2i32_to_2i64(
398 ; AVX-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr [[P0:%.*]], align 1
399 ; AVX-NEXT:    [[TMP3:%.*]] = sext <2 x i32> [[TMP2]] to <2 x i64>
400 ; AVX-NEXT:    ret <2 x i64> [[TMP3]]
402   %p1 = getelementptr inbounds i32, ptr %p0, i64 1
403   %i0 = load i32, ptr %p0, align 1
404   %i1 = load i32, ptr %p1, align 1
405   %x0 = sext i32 %i0 to i64
406   %x1 = sext i32 %i1 to i64
407   %v0 = insertelement <2 x i64> undef, i64 %x0, i32 0
408   %v1 = insertelement <2 x i64>   %v0, i64 %x1, i32 1
409   ret <2 x i64> %v1
412 define <4 x i64> @loadext_4i32_to_4i64(ptr %p0) {
413 ; SSE-LABEL: @loadext_4i32_to_4i64(
414 ; SSE-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr [[P0:%.*]], align 1
415 ; SSE-NEXT:    [[TMP3:%.*]] = sext <4 x i32> [[TMP2]] to <4 x i64>
416 ; SSE-NEXT:    ret <4 x i64> [[TMP3]]
418 ; AVX-LABEL: @loadext_4i32_to_4i64(
419 ; AVX-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr [[P0:%.*]], align 1
420 ; AVX-NEXT:    [[TMP3:%.*]] = sext <4 x i32> [[TMP2]] to <4 x i64>
421 ; AVX-NEXT:    ret <4 x i64> [[TMP3]]
423   %p1 = getelementptr inbounds i32, ptr %p0, i64 1
424   %p2 = getelementptr inbounds i32, ptr %p0, i64 2
425   %p3 = getelementptr inbounds i32, ptr %p0, i64 3
426   %i0 = load i32, ptr %p0, align 1
427   %i1 = load i32, ptr %p1, align 1
428   %i2 = load i32, ptr %p2, align 1
429   %i3 = load i32, ptr %p3, align 1
430   %x0 = sext i32 %i0 to i64
431   %x1 = sext i32 %i1 to i64
432   %x2 = sext i32 %i2 to i64
433   %x3 = sext i32 %i3 to i64
434   %v0 = insertelement <4 x i64> undef, i64 %x0, i32 0
435   %v1 = insertelement <4 x i64>   %v0, i64 %x1, i32 1
436   %v2 = insertelement <4 x i64>   %v1, i64 %x2, i32 2
437   %v3 = insertelement <4 x i64>   %v2, i64 %x3, i32 3
438   ret <4 x i64> %v3