OLD | NEW |
| (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 } | |
OLD | NEW |