Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(256)

Side by Side Diff: crosstest/test_vector_ops.ll

Issue 1909013002: Subzero. X86. Lowers shufflevector using xmm instructions. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: fixes 80-col Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 define <4 x float> @insertelement_v4f32(<4 x float> %vec, float %elt, i32 %idx) {
2 switch i32 %idx, label %abort [
3 i32 0, label %idx0
4 i32 1, label %idx1
5 i32 2, label %idx2
6 i32 3, label %idx3
7 ]
8 idx0:
9 %res0 = insertelement <4 x float> %vec, float %elt, i32 0
10 ret <4 x float> %res0
11 idx1:
12 %res1 = insertelement <4 x float> %vec, float %elt, i32 1
13 ret <4 x float> %res1
14 idx2:
15 %res2 = insertelement <4 x float> %vec, float %elt, i32 2
16 ret <4 x float> %res2
17 idx3:
18 %res3 = insertelement <4 x float> %vec, float %elt, i32 3
19 ret <4 x float> %res3
20 abort:
21 unreachable
22 }
23
24 define <4 x i32> @insertelement_v4i1(<4 x i32> %arg_vec, i64 %elt_arg, i32 %idx) {
25 %vec = trunc <4 x i32> %arg_vec to <4 x i1>
26 %elt = trunc i64 %elt_arg to i1
27 switch i32 %idx, label %abort [
28 i32 0, label %idx0
29 i32 1, label %idx1
30 i32 2, label %idx2
31 i32 3, label %idx3
32 ]
33 idx0:
34 %res0_i1 = insertelement <4 x i1> %vec, i1 %elt, i32 0
35 %res0 = zext <4 x i1> %res0_i1 to <4 x i32>
36 ret <4 x i32> %res0
37 idx1:
38 %res1_i1 = insertelement <4 x i1> %vec, i1 %elt, i32 1
39 %res1 = zext <4 x i1> %res1_i1 to <4 x i32>
40 ret <4 x i32> %res1
41 idx2:
42 %res2_i1 = insertelement <4 x i1> %vec, i1 %elt, i32 2
43 %res2 = zext <4 x i1> %res2_i1 to <4 x i32>
44 ret <4 x i32> %res2
45 idx3:
46 %res3_i1 = insertelement <4 x i1> %vec, i1 %elt, i32 3
47 %res3 = zext <4 x i1> %res3_i1 to <4 x i32>
48 ret <4 x i32> %res3
49 abort:
50 unreachable
51 }
52
53 define <8 x i16> @insertelement_v8i1(<8 x i16> %arg_vec, i64 %elt_arg, i32 %idx) {
54 %vec = trunc <8 x i16> %arg_vec to <8 x i1>
55 %elt = trunc i64 %elt_arg to i1
56 switch i32 %idx, label %abort [
57 i32 0, label %idx0
58 i32 1, label %idx1
59 i32 2, label %idx2
60 i32 3, label %idx3
61 i32 4, label %idx4
62 i32 5, label %idx5
63 i32 6, label %idx6
64 i32 7, label %idx7
65 ]
66 idx0:
67 %res0_i1 = insertelement <8 x i1> %vec, i1 %elt, i32 0
68 %res0 = zext <8 x i1> %res0_i1 to <8 x i16>
69 ret <8 x i16> %res0
70 idx1:
71 %res1_i1 = insertelement <8 x i1> %vec, i1 %elt, i32 1
72 %res1 = zext <8 x i1> %res1_i1 to <8 x i16>
73 ret <8 x i16> %res1
74 idx2:
75 %res2_i1 = insertelement <8 x i1> %vec, i1 %elt, i32 2
76 %res2 = zext <8 x i1> %res2_i1 to <8 x i16>
77 ret <8 x i16> %res2
78 idx3:
79 %res3_i1 = insertelement <8 x i1> %vec, i1 %elt, i32 3
80 %res3 = zext <8 x i1> %res3_i1 to <8 x i16>
81 ret <8 x i16> %res3
82 idx4:
83 %res4_i1 = insertelement <8 x i1> %vec, i1 %elt, i32 4
84 %res4 = zext <8 x i1> %res4_i1 to <8 x i16>
85 ret <8 x i16> %res4
86 idx5:
87 %res5_i1 = insertelement <8 x i1> %vec, i1 %elt, i32 5
88 %res5 = zext <8 x i1> %res5_i1 to <8 x i16>
89 ret <8 x i16> %res5
90 idx6:
91 %res6_i1 = insertelement <8 x i1> %vec, i1 %elt, i32 6
92 %res6 = zext <8 x i1> %res6_i1 to <8 x i16>
93 ret <8 x i16> %res6
94 idx7:
95 %res7_i1 = insertelement <8 x i1> %vec, i1 %elt, i32 7
96 %res7 = zext <8 x i1> %res7_i1 to <8 x i16>
97 ret <8 x i16> %res7
98 abort:
99 unreachable
100 }
101
102 define <16 x i8> @insertelement_v16i1(<16 x i8> %arg_vec, i64 %elt_arg, i32 %idx ) {
103 %vec = trunc <16 x i8> %arg_vec to <16 x i1>
104 %elt = trunc i64 %elt_arg to i1
105 switch i32 %idx, label %abort [
106 i32 0, label %idx0
107 i32 1, label %idx1
108 i32 2, label %idx2
109 i32 3, label %idx3
110 i32 4, label %idx4
111 i32 5, label %idx5
112 i32 6, label %idx6
113 i32 7, label %idx7
114 i32 8, label %idx8
115 i32 9, label %idx9
116 i32 10, label %idx10
117 i32 11, label %idx11
118 i32 12, label %idx12
119 i32 13, label %idx13
120 i32 14, label %idx14
121 i32 15, label %idx15
122 ]
123 idx0:
124 %res0_i1 = insertelement <16 x i1> %vec, i1 %elt, i32 0
125 %res0 = zext <16 x i1> %res0_i1 to <16 x i8>
126 ret <16 x i8> %res0
127 idx1:
128 %res1_i1 = insertelement <16 x i1> %vec, i1 %elt, i32 1
129 %res1 = zext <16 x i1> %res1_i1 to <16 x i8>
130 ret <16 x i8> %res1
131 idx2:
132 %res2_i1 = insertelement <16 x i1> %vec, i1 %elt, i32 2
133 %res2 = zext <16 x i1> %res2_i1 to <16 x i8>
134 ret <16 x i8> %res2
135 idx3:
136 %res3_i1 = insertelement <16 x i1> %vec, i1 %elt, i32 3
137 %res3 = zext <16 x i1> %res3_i1 to <16 x i8>
138 ret <16 x i8> %res3
139 idx4:
140 %res4_i1 = insertelement <16 x i1> %vec, i1 %elt, i32 4
141 %res4 = zext <16 x i1> %res4_i1 to <16 x i8>
142 ret <16 x i8> %res4
143 idx5:
144 %res5_i1 = insertelement <16 x i1> %vec, i1 %elt, i32 5
145 %res5 = zext <16 x i1> %res5_i1 to <16 x i8>
146 ret <16 x i8> %res5
147 idx6:
148 %res6_i1 = insertelement <16 x i1> %vec, i1 %elt, i32 6
149 %res6 = zext <16 x i1> %res6_i1 to <16 x i8>
150 ret <16 x i8> %res6
151 idx7:
152 %res7_i1 = insertelement <16 x i1> %vec, i1 %elt, i32 7
153 %res7 = zext <16 x i1> %res7_i1 to <16 x i8>
154 ret <16 x i8> %res7
155 idx8:
156 %res8_i1 = insertelement <16 x i1> %vec, i1 %elt, i32 8
157 %res8 = zext <16 x i1> %res8_i1 to <16 x i8>
158 ret <16 x i8> %res8
159 idx9:
160 %res9_i1 = insertelement <16 x i1> %vec, i1 %elt, i32 9
161 %res9 = zext <16 x i1> %res9_i1 to <16 x i8>
162 ret <16 x i8> %res9
163 idx10:
164 %res10_i1 = insertelement <16 x i1> %vec, i1 %elt, i32 10
165 %res10 = zext <16 x i1> %res10_i1 to <16 x i8>
166 ret <16 x i8> %res10
167 idx11:
168 %res11_i1 = insertelement <16 x i1> %vec, i1 %elt, i32 11
169 %res11 = zext <16 x i1> %res11_i1 to <16 x i8>
170 ret <16 x i8> %res11
171 idx12:
172 %res12_i1 = insertelement <16 x i1> %vec, i1 %elt, i32 12
173 %res12 = zext <16 x i1> %res12_i1 to <16 x i8>
174 ret <16 x i8> %res12
175 idx13:
176 %res13_i1 = insertelement <16 x i1> %vec, i1 %elt, i32 13
177 %res13 = zext <16 x i1> %res13_i1 to <16 x i8>
178 ret <16 x i8> %res13
179 idx14:
180 %res14_i1 = insertelement <16 x i1> %vec, i1 %elt, i32 14
181 %res14 = zext <16 x i1> %res14_i1 to <16 x i8>
182 ret <16 x i8> %res14
183 idx15:
184 %res15_i1 = insertelement <16 x i1> %vec, i1 %elt, i32 15
185 %res15 = zext <16 x i1> %res15_i1 to <16 x i8>
186 ret <16 x i8> %res15
187 abort:
188 unreachable
189 }
190
191 define <4 x i32> @insertelement_v4si32(<4 x i32> %vec, i64 %elt_arg, i32 %idx) {
192 entry:
193 %elt = trunc i64 %elt_arg to i32
194 switch i32 %idx, label %abort [
195 i32 0, label %idx0
196 i32 1, label %idx1
197 i32 2, label %idx2
198 i32 3, label %idx3
199 ]
200 idx0:
201 %res0 = insertelement <4 x i32> %vec, i32 %elt, i32 0
202 ret <4 x i32> %res0
203 idx1:
204 %res1 = insertelement <4 x i32> %vec, i32 %elt, i32 1
205 ret <4 x i32> %res1
206 idx2:
207 %res2 = insertelement <4 x i32> %vec, i32 %elt, i32 2
208 ret <4 x i32> %res2
209 idx3:
210 %res3 = insertelement <4 x i32> %vec, i32 %elt, i32 3
211 ret <4 x i32> %res3
212 abort:
213 unreachable
214 }
215
216 define <4 x i32> @insertelement_v4ui32(<4 x i32> %vec, i64 %elt_arg, i32 %idx) {
217 entry:
218 %res = call <4 x i32> @insertelement_v4si32(<4 x i32> %vec, i64 %elt_arg, i32 %idx)
219 ret <4 x i32> %res
220 }
221
222 define <8 x i16> @insertelement_v8si16(<8 x i16> %vec, i64 %elt_arg, i32 %idx) {
223 entry:
224 %elt = trunc i64 %elt_arg to i16
225 switch i32 %idx, label %abort [
226 i32 0, label %idx0
227 i32 1, label %idx1
228 i32 2, label %idx2
229 i32 3, label %idx3
230 i32 4, label %idx4
231 i32 5, label %idx5
232 i32 6, label %idx6
233 i32 7, label %idx7
234 ]
235 idx0:
236 %res0 = insertelement <8 x i16> %vec, i16 %elt, i32 0
237 ret <8 x i16> %res0
238 idx1:
239 %res1 = insertelement <8 x i16> %vec, i16 %elt, i32 1
240 ret <8 x i16> %res1
241 idx2:
242 %res2 = insertelement <8 x i16> %vec, i16 %elt, i32 2
243 ret <8 x i16> %res2
244 idx3:
245 %res3 = insertelement <8 x i16> %vec, i16 %elt, i32 3
246 ret <8 x i16> %res3
247 idx4:
248 %res4 = insertelement <8 x i16> %vec, i16 %elt, i32 4
249 ret <8 x i16> %res4
250 idx5:
251 %res5 = insertelement <8 x i16> %vec, i16 %elt, i32 5
252 ret <8 x i16> %res5
253 idx6:
254 %res6 = insertelement <8 x i16> %vec, i16 %elt, i32 6
255 ret <8 x i16> %res6
256 idx7:
257 %res7 = insertelement <8 x i16> %vec, i16 %elt, i32 7
258 ret <8 x i16> %res7
259 abort:
260 unreachable
261 }
262
263 define <8 x i16> @insertelement_v8ui16(<8 x i16> %vec, i64 %elt_arg, i32 %idx) {
264 entry:
265 %res = call <8 x i16> @insertelement_v8si16(<8 x i16> %vec, i64 %elt_arg, i32 %idx)
266 ret <8 x i16> %res
267 }
268
269 define <16 x i8> @insertelement_v16si8(<16 x i8> %vec, i64 %elt_arg, i32 %idx) {
270 entry:
271 %elt = trunc i64 %elt_arg to i8
272 switch i32 %idx, label %abort [
273 i32 0, label %idx0
274 i32 1, label %idx1
275 i32 2, label %idx2
276 i32 3, label %idx3
277 i32 4, label %idx4
278 i32 5, label %idx5
279 i32 6, label %idx6
280 i32 7, label %idx7
281 i32 8, label %idx8
282 i32 9, label %idx9
283 i32 10, label %idx10
284 i32 11, label %idx11
285 i32 12, label %idx12
286 i32 13, label %idx13
287 i32 14, label %idx14
288 i32 15, label %idx15
289 ]
290 idx0:
291 %res0 = insertelement <16 x i8> %vec, i8 %elt, i32 0
292 ret <16 x i8> %res0
293 idx1:
294 %res1 = insertelement <16 x i8> %vec, i8 %elt, i32 1
295 ret <16 x i8> %res1
296 idx2:
297 %res2 = insertelement <16 x i8> %vec, i8 %elt, i32 2
298 ret <16 x i8> %res2
299 idx3:
300 %res3 = insertelement <16 x i8> %vec, i8 %elt, i32 3
301 ret <16 x i8> %res3
302 idx4:
303 %res4 = insertelement <16 x i8> %vec, i8 %elt, i32 4
304 ret <16 x i8> %res4
305 idx5:
306 %res5 = insertelement <16 x i8> %vec, i8 %elt, i32 5
307 ret <16 x i8> %res5
308 idx6:
309 %res6 = insertelement <16 x i8> %vec, i8 %elt, i32 6
310 ret <16 x i8> %res6
311 idx7:
312 %res7 = insertelement <16 x i8> %vec, i8 %elt, i32 7
313 ret <16 x i8> %res7
314 idx8:
315 %res8 = insertelement <16 x i8> %vec, i8 %elt, i32 8
316 ret <16 x i8> %res8
317 idx9:
318 %res9 = insertelement <16 x i8> %vec, i8 %elt, i32 9
319 ret <16 x i8> %res9
320 idx10:
321 %res10 = insertelement <16 x i8> %vec, i8 %elt, i32 10
322 ret <16 x i8> %res10
323 idx11:
324 %res11 = insertelement <16 x i8> %vec, i8 %elt, i32 11
325 ret <16 x i8> %res11
326 idx12:
327 %res12 = insertelement <16 x i8> %vec, i8 %elt, i32 12
328 ret <16 x i8> %res12
329 idx13:
330 %res13 = insertelement <16 x i8> %vec, i8 %elt, i32 13
331 ret <16 x i8> %res13
332 idx14:
333 %res14 = insertelement <16 x i8> %vec, i8 %elt, i32 14
334 ret <16 x i8> %res14
335 idx15:
336 %res15 = insertelement <16 x i8> %vec, i8 %elt, i32 15
337 ret <16 x i8> %res15
338 abort:
339 unreachable
340 }
341
342 define <16 x i8> @insertelement_v16ui8(<16 x i8> %vec, i64 %elt_arg, i32 %idx) {
343 entry:
344 %res = call <16 x i8> @insertelement_v16si8(<16 x i8> %vec, i64 %elt_arg, i32 %idx)
345 ret <16 x i8> %res
346 }
347
348 define float @extractelement_v4f32(<4 x float> %vec, i32 %idx) {
349 switch i32 %idx, label %abort [
350 i32 0, label %idx0
351 i32 1, label %idx1
352 i32 2, label %idx2
353 i32 3, label %idx3
354 ]
355 idx0:
356 %res0 = extractelement <4 x float> %vec, i32 0
357 ret float %res0
358 idx1:
359 %res1 = extractelement <4 x float> %vec, i32 1
360 ret float %res1
361 idx2:
362 %res2 = extractelement <4 x float> %vec, i32 2
363 ret float %res2
364 idx3:
365 %res3 = extractelement <4 x float> %vec, i32 3
366 ret float %res3
367 abort:
368 unreachable
369 }
370
371 define i64 @extractelement_v4i1(<4 x i32> %arg_vec, i32 %idx) {
372 %vec = trunc <4 x i32> %arg_vec to <4 x i1>
373 switch i32 %idx, label %abort [
374 i32 0, label %idx0
375 i32 1, label %idx1
376 i32 2, label %idx2
377 i32 3, label %idx3
378 ]
379 idx0:
380 %res0_i1 = extractelement <4 x i1> %vec, i32 0
381 %res0 = zext i1 %res0_i1 to i64
382 ret i64 %res0
383 idx1:
384 %res1_i1 = extractelement <4 x i1> %vec, i32 1
385 %res1 = zext i1 %res1_i1 to i64
386 ret i64 %res1
387 idx2:
388 %res2_i1 = extractelement <4 x i1> %vec, i32 2
389 %res2 = zext i1 %res2_i1 to i64
390 ret i64 %res2
391 idx3:
392 %res3_i1 = extractelement <4 x i1> %vec, i32 3
393 %res3 = zext i1 %res3_i1 to i64
394 ret i64 %res3
395 abort:
396 unreachable
397 }
398
399 define i64 @extractelement_v8i1(<8 x i16> %arg_vec, i32 %idx) {
400 %vec = trunc <8 x i16> %arg_vec to <8 x i1>
401 switch i32 %idx, label %abort [
402 i32 0, label %idx0
403 i32 1, label %idx1
404 i32 2, label %idx2
405 i32 3, label %idx3
406 i32 4, label %idx4
407 i32 5, label %idx5
408 i32 6, label %idx6
409 i32 7, label %idx7
410 ]
411 idx0:
412 %res0_i1 = extractelement <8 x i1> %vec, i32 0
413 %res0 = zext i1 %res0_i1 to i64
414 ret i64 %res0
415 idx1:
416 %res1_i1 = extractelement <8 x i1> %vec, i32 1
417 %res1 = zext i1 %res1_i1 to i64
418 ret i64 %res1
419 idx2:
420 %res2_i1 = extractelement <8 x i1> %vec, i32 2
421 %res2 = zext i1 %res2_i1 to i64
422 ret i64 %res2
423 idx3:
424 %res3_i1 = extractelement <8 x i1> %vec, i32 3
425 %res3 = zext i1 %res3_i1 to i64
426 ret i64 %res3
427 idx4:
428 %res4_i1 = extractelement <8 x i1> %vec, i32 4
429 %res4 = zext i1 %res4_i1 to i64
430 ret i64 %res4
431 idx5:
432 %res5_i1 = extractelement <8 x i1> %vec, i32 5
433 %res5 = zext i1 %res5_i1 to i64
434 ret i64 %res5
435 idx6:
436 %res6_i1 = extractelement <8 x i1> %vec, i32 6
437 %res6 = zext i1 %res6_i1 to i64
438 ret i64 %res6
439 idx7:
440 %res7_i1 = extractelement <8 x i1> %vec, i32 7
441 %res7 = zext i1 %res7_i1 to i64
442 ret i64 %res7
443 abort:
444 unreachable
445 }
446
447 define i64 @extractelement_v16i1(<16 x i8> %arg_vec, i32 %idx) {
448 %vec = trunc <16 x i8> %arg_vec to <16 x i1>
449 switch i32 %idx, label %abort [
450 i32 0, label %idx0
451 i32 1, label %idx1
452 i32 2, label %idx2
453 i32 3, label %idx3
454 i32 4, label %idx4
455 i32 5, label %idx5
456 i32 6, label %idx6
457 i32 7, label %idx7
458 i32 8, label %idx8
459 i32 9, label %idx9
460 i32 10, label %idx10
461 i32 11, label %idx11
462 i32 12, label %idx12
463 i32 13, label %idx13
464 i32 14, label %idx14
465 i32 15, label %idx15
466 ]
467 idx0:
468 %res0_i1 = extractelement <16 x i1> %vec, i32 0
469 %res0 = zext i1 %res0_i1 to i64
470 ret i64 %res0
471 idx1:
472 %res1_i1 = extractelement <16 x i1> %vec, i32 1
473 %res1 = zext i1 %res1_i1 to i64
474 ret i64 %res1
475 idx2:
476 %res2_i1 = extractelement <16 x i1> %vec, i32 2
477 %res2 = zext i1 %res2_i1 to i64
478 ret i64 %res2
479 idx3:
480 %res3_i1 = extractelement <16 x i1> %vec, i32 3
481 %res3 = zext i1 %res3_i1 to i64
482 ret i64 %res3
483 idx4:
484 %res4_i1 = extractelement <16 x i1> %vec, i32 4
485 %res4 = zext i1 %res4_i1 to i64
486 ret i64 %res4
487 idx5:
488 %res5_i1 = extractelement <16 x i1> %vec, i32 5
489 %res5 = zext i1 %res5_i1 to i64
490 ret i64 %res5
491 idx6:
492 %res6_i1 = extractelement <16 x i1> %vec, i32 6
493 %res6 = zext i1 %res6_i1 to i64
494 ret i64 %res6
495 idx7:
496 %res7_i1 = extractelement <16 x i1> %vec, i32 7
497 %res7 = zext i1 %res7_i1 to i64
498 ret i64 %res7
499 idx8:
500 %res8_i1 = extractelement <16 x i1> %vec, i32 8
501 %res8 = zext i1 %res8_i1 to i64
502 ret i64 %res8
503 idx9:
504 %res9_i1 = extractelement <16 x i1> %vec, i32 9
505 %res9 = zext i1 %res9_i1 to i64
506 ret i64 %res9
507 idx10:
508 %res10_i1 = extractelement <16 x i1> %vec, i32 10
509 %res10 = zext i1 %res10_i1 to i64
510 ret i64 %res10
511 idx11:
512 %res11_i1 = extractelement <16 x i1> %vec, i32 11
513 %res11 = zext i1 %res11_i1 to i64
514 ret i64 %res11
515 idx12:
516 %res12_i1 = extractelement <16 x i1> %vec, i32 12
517 %res12 = zext i1 %res12_i1 to i64
518 ret i64 %res12
519 idx13:
520 %res13_i1 = extractelement <16 x i1> %vec, i32 13
521 %res13 = zext i1 %res13_i1 to i64
522 ret i64 %res13
523 idx14:
524 %res14_i1 = extractelement <16 x i1> %vec, i32 14
525 %res14 = zext i1 %res14_i1 to i64
526 ret i64 %res14
527 idx15:
528 %res15_i1 = extractelement <16 x i1> %vec, i32 15
529 %res15 = zext i1 %res15_i1 to i64
530 ret i64 %res15
531 abort:
532 unreachable
533 }
534
535 define i64 @extractelement_v4si32(<4 x i32> %vec, i32 %idx) {
536 entry:
537 switch i32 %idx, label %abort [
538 i32 0, label %idx0
539 i32 1, label %idx1
540 i32 2, label %idx2
541 i32 3, label %idx3
542 ]
543 idx0:
544 %res0_i32 = extractelement <4 x i32> %vec, i32 0
545 %res0 = zext i32 %res0_i32 to i64
546 ret i64 %res0
547 idx1:
548 %res1_i32 = extractelement <4 x i32> %vec, i32 1
549 %res1 = zext i32 %res1_i32 to i64
550 ret i64 %res1
551 idx2:
552 %res2_i32 = extractelement <4 x i32> %vec, i32 2
553 %res2 = zext i32 %res2_i32 to i64
554 ret i64 %res2
555 idx3:
556 %res3_i32 = extractelement <4 x i32> %vec, i32 3
557 %res3 = zext i32 %res3_i32 to i64
558 ret i64 %res3
559 abort:
560 unreachable
561 }
562
563 define i64 @extractelement_v4ui32(<4 x i32> %vec, i32 %idx) {
564 entry:
565 %res = call i64 @extractelement_v4si32(<4 x i32> %vec, i32 %idx)
566 ret i64 %res
567 }
568
569 define i64 @extractelement_v8si16(<8 x i16> %vec, i32 %idx) {
570 entry:
571 switch i32 %idx, label %abort [
572 i32 0, label %idx0
573 i32 1, label %idx1
574 i32 2, label %idx2
575 i32 3, label %idx3
576 i32 4, label %idx4
577 i32 5, label %idx5
578 i32 6, label %idx6
579 i32 7, label %idx7
580 ]
581 idx0:
582 %res0_i16 = extractelement <8 x i16> %vec, i32 0
583 %res0 = zext i16 %res0_i16 to i64
584 ret i64 %res0
585 idx1:
586 %res1_i16 = extractelement <8 x i16> %vec, i32 1
587 %res1 = zext i16 %res1_i16 to i64
588 ret i64 %res1
589 idx2:
590 %res2_i16 = extractelement <8 x i16> %vec, i32 2
591 %res2 = zext i16 %res2_i16 to i64
592 ret i64 %res2
593 idx3:
594 %res3_i16 = extractelement <8 x i16> %vec, i32 3
595 %res3 = zext i16 %res3_i16 to i64
596 ret i64 %res3
597 idx4:
598 %res4_i16 = extractelement <8 x i16> %vec, i32 4
599 %res4 = zext i16 %res4_i16 to i64
600 ret i64 %res4
601 idx5:
602 %res5_i16 = extractelement <8 x i16> %vec, i32 5
603 %res5 = zext i16 %res5_i16 to i64
604 ret i64 %res5
605 idx6:
606 %res6_i16 = extractelement <8 x i16> %vec, i32 6
607 %res6 = zext i16 %res6_i16 to i64
608 ret i64 %res6
609 idx7:
610 %res7_i16 = extractelement <8 x i16> %vec, i32 7
611 %res7 = zext i16 %res7_i16 to i64
612 ret i64 %res7
613 abort:
614 unreachable
615 }
616
617 define i64 @extractelement_v8ui16(<8 x i16> %vec, i32 %idx) {
618 entry:
619 %res = call i64 @extractelement_v8si16(<8 x i16> %vec, i32 %idx)
620 ret i64 %res
621 }
622
623 define i64 @extractelement_v16si8(<16 x i8> %vec, i32 %idx) {
624 entry:
625 switch i32 %idx, label %abort [
626 i32 0, label %idx0
627 i32 1, label %idx1
628 i32 2, label %idx2
629 i32 3, label %idx3
630 i32 4, label %idx4
631 i32 5, label %idx5
632 i32 6, label %idx6
633 i32 7, label %idx7
634 i32 8, label %idx8
635 i32 9, label %idx9
636 i32 10, label %idx10
637 i32 11, label %idx11
638 i32 12, label %idx12
639 i32 13, label %idx13
640 i32 14, label %idx14
641 i32 15, label %idx15
642 ]
643 idx0:
644 %res0_i8 = extractelement <16 x i8> %vec, i32 0
645 %res0 = zext i8 %res0_i8 to i64
646 ret i64 %res0
647 idx1:
648 %res1_i8 = extractelement <16 x i8> %vec, i32 1
649 %res1 = zext i8 %res1_i8 to i64
650 ret i64 %res1
651 idx2:
652 %res2_i8 = extractelement <16 x i8> %vec, i32 2
653 %res2 = zext i8 %res2_i8 to i64
654 ret i64 %res2
655 idx3:
656 %res3_i8 = extractelement <16 x i8> %vec, i32 3
657 %res3 = zext i8 %res3_i8 to i64
658 ret i64 %res3
659 idx4:
660 %res4_i8 = extractelement <16 x i8> %vec, i32 4
661 %res4 = zext i8 %res4_i8 to i64
662 ret i64 %res4
663 idx5:
664 %res5_i8 = extractelement <16 x i8> %vec, i32 5
665 %res5 = zext i8 %res5_i8 to i64
666 ret i64 %res5
667 idx6:
668 %res6_i8 = extractelement <16 x i8> %vec, i32 6
669 %res6 = zext i8 %res6_i8 to i64
670 ret i64 %res6
671 idx7:
672 %res7_i8 = extractelement <16 x i8> %vec, i32 7
673 %res7 = zext i8 %res7_i8 to i64
674 ret i64 %res7
675 idx8:
676 %res8_i8 = extractelement <16 x i8> %vec, i32 8
677 %res8 = zext i8 %res8_i8 to i64
678 ret i64 %res8
679 idx9:
680 %res9_i8 = extractelement <16 x i8> %vec, i32 9
681 %res9 = zext i8 %res9_i8 to i64
682 ret i64 %res9
683 idx10:
684 %res10_i8 = extractelement <16 x i8> %vec, i32 10
685 %res10 = zext i8 %res10_i8 to i64
686 ret i64 %res10
687 idx11:
688 %res11_i8 = extractelement <16 x i8> %vec, i32 11
689 %res11 = zext i8 %res11_i8 to i64
690 ret i64 %res11
691 idx12:
692 %res12_i8 = extractelement <16 x i8> %vec, i32 12
693 %res12 = zext i8 %res12_i8 to i64
694 ret i64 %res12
695 idx13:
696 %res13_i8 = extractelement <16 x i8> %vec, i32 13
697 %res13 = zext i8 %res13_i8 to i64
698 ret i64 %res13
699 idx14:
700 %res14_i8 = extractelement <16 x i8> %vec, i32 14
701 %res14 = zext i8 %res14_i8 to i64
702 ret i64 %res14
703 idx15:
704 %res15_i8 = extractelement <16 x i8> %vec, i32 15
705 %res15 = zext i8 %res15_i8 to i64
706 ret i64 %res15
707 abort:
708 unreachable
709 }
710
711 define i64 @extractelement_v16ui8(<16 x i8> %vec, i32 %idx) {
712 entry:
713 %res = call i64 @extractelement_v16si8(<16 x i8> %vec, i32 %idx)
714 ret i64 %res
715 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698