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
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> poison, i64 %x0, i32 0
30 %v1 = insertelement <2 x i64> %v0, i64 %x1, i32 1
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> poison, 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
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> poison, 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
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> poison, 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
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> poison, 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
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> poison, 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
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> poison, i64 %x0, i32 0
280 %v1 = insertelement <2 x i64> %v0, i64 %x1, i32 1
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> poison, 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
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> poison, 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
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> poison, 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
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> poison, i64 %x0, i32 0
408 %v1 = insertelement <2 x i64> %v0, i64 %x1, i32 1
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> poison, 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