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

Side by Side Diff: test/Transforms/NaCl/vector-canonicalization-casts.ll

Issue 1423873002: PNaCl: Add a vector type legalization pass. Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Created 5 years, 1 month 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 ; RUN: opt -S -pnacl-vector-canonicalization %s | FileCheck %s
2
3 ; Auto-generated tests for all casts.
4
5 target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64 :64:64-p:32:32:32-v128:32:128"
6
7 define <2 x i8> @fptoui_cast_2xfloat_to_2xi8(<2 x float>) {
8 %2 = fptoui <2 x float> %0 to <2 x i8>
9 ret <2 x i8> %2
10 }
11 ; CHECK-LABEL: define <16 x i8> @fptoui_cast_2xfloat_to_2xi8(<4 x float>)
12 ; CHECK-NEXT: %2 = extractelement <4 x float> %0, i32 0
13 ; CHECK-NEXT: %3 = fptoui float %2 to i8
14 ; CHECK-NEXT: %4 = insertelement <16 x i8> undef, i8 %3, i32 0
15 ; CHECK-NEXT: %5 = extractelement <4 x float> %0, i32 1
16 ; CHECK-NEXT: %6 = fptoui float %5 to i8
17 ; CHECK-NEXT: %7 = insertelement <16 x i8> %4, i8 %6, i32 1
18 ; CHECK-NEXT: ret <16 x i8> %7
19
20 define <2 x i16> @fptoui_cast_2xfloat_to_2xi16(<2 x float>) {
21 %2 = fptoui <2 x float> %0 to <2 x i16>
22 ret <2 x i16> %2
23 }
24 ; CHECK-LABEL: define <8 x i16> @fptoui_cast_2xfloat_to_2xi16(<4 x float>)
25 ; CHECK-NEXT: %2 = extractelement <4 x float> %0, i32 0
26 ; CHECK-NEXT: %3 = fptoui float %2 to i16
27 ; CHECK-NEXT: %4 = insertelement <8 x i16> undef, i16 %3, i32 0
28 ; CHECK-NEXT: %5 = extractelement <4 x float> %0, i32 1
29 ; CHECK-NEXT: %6 = fptoui float %5 to i16
30 ; CHECK-NEXT: %7 = insertelement <8 x i16> %4, i16 %6, i32 1
31 ; CHECK-NEXT: ret <8 x i16> %7
32
33 define <2 x i32> @fptoui_cast_2xfloat_to_2xi32(<2 x float>) {
34 %2 = fptoui <2 x float> %0 to <2 x i32>
35 ret <2 x i32> %2
36 }
37 ; CHECK-LABEL: define <4 x i32> @fptoui_cast_2xfloat_to_2xi32(<4 x float>)
38 ; CHECK-NEXT: %2 = fptoui <4 x float> %0 to <4 x i32>
39 ; CHECK-NEXT: ret <4 x i32> %2
40
41 define <2 x i64> @fptoui_cast_2xfloat_to_2xi64(<2 x float>) {
42 %2 = fptoui <2 x float> %0 to <2 x i64>
43 ret <2 x i64> %2
44 }
45 ; CHECK-LABEL: define <2 x i64> @fptoui_cast_2xfloat_to_2xi64(<4 x float>)
46 ; CHECK-NEXT: %2 = extractelement <4 x float> %0, i32 0
47 ; CHECK-NEXT: %3 = fptoui float %2 to i64
48 ; CHECK-NEXT: %4 = insertelement <2 x i64> undef, i64 %3, i32 0
49 ; CHECK-NEXT: %5 = extractelement <4 x float> %0, i32 1
50 ; CHECK-NEXT: %6 = fptoui float %5 to i64
51 ; CHECK-NEXT: %7 = insertelement <2 x i64> %4, i64 %6, i32 1
52 ; CHECK-NEXT: ret <2 x i64> %7
53
54 define <2 x i8> @fptoui_cast_2xdouble_to_2xi8(<2 x double>) {
55 %2 = fptoui <2 x double> %0 to <2 x i8>
56 ret <2 x i8> %2
57 }
58 ; CHECK-LABEL: define <16 x i8> @fptoui_cast_2xdouble_to_2xi8(<2 x double>)
59 ; CHECK-NEXT: %2 = extractelement <2 x double> %0, i32 0
60 ; CHECK-NEXT: %3 = fptoui double %2 to i8
61 ; CHECK-NEXT: %4 = insertelement <16 x i8> undef, i8 %3, i32 0
62 ; CHECK-NEXT: %5 = extractelement <2 x double> %0, i32 1
63 ; CHECK-NEXT: %6 = fptoui double %5 to i8
64 ; CHECK-NEXT: %7 = insertelement <16 x i8> %4, i8 %6, i32 1
65 ; CHECK-NEXT: ret <16 x i8> %7
66
67 define <2 x i16> @fptoui_cast_2xdouble_to_2xi16(<2 x double>) {
68 %2 = fptoui <2 x double> %0 to <2 x i16>
69 ret <2 x i16> %2
70 }
71 ; CHECK-LABEL: define <8 x i16> @fptoui_cast_2xdouble_to_2xi16(<2 x double>)
72 ; CHECK-NEXT: %2 = extractelement <2 x double> %0, i32 0
73 ; CHECK-NEXT: %3 = fptoui double %2 to i16
74 ; CHECK-NEXT: %4 = insertelement <8 x i16> undef, i16 %3, i32 0
75 ; CHECK-NEXT: %5 = extractelement <2 x double> %0, i32 1
76 ; CHECK-NEXT: %6 = fptoui double %5 to i16
77 ; CHECK-NEXT: %7 = insertelement <8 x i16> %4, i16 %6, i32 1
78 ; CHECK-NEXT: ret <8 x i16> %7
79
80 define <2 x i32> @fptoui_cast_2xdouble_to_2xi32(<2 x double>) {
81 %2 = fptoui <2 x double> %0 to <2 x i32>
82 ret <2 x i32> %2
83 }
84 ; CHECK-LABEL: define <4 x i32> @fptoui_cast_2xdouble_to_2xi32(<2 x double>)
85 ; CHECK-NEXT: %2 = extractelement <2 x double> %0, i32 0
86 ; CHECK-NEXT: %3 = fptoui double %2 to i32
87 ; CHECK-NEXT: %4 = insertelement <4 x i32> undef, i32 %3, i32 0
88 ; CHECK-NEXT: %5 = extractelement <2 x double> %0, i32 1
89 ; CHECK-NEXT: %6 = fptoui double %5 to i32
90 ; CHECK-NEXT: %7 = insertelement <4 x i32> %4, i32 %6, i32 1
91 ; CHECK-NEXT: ret <4 x i32> %7
92
93 define <2 x i64> @fptoui_cast_2xdouble_to_2xi64(<2 x double>) {
94 %2 = fptoui <2 x double> %0 to <2 x i64>
95 ret <2 x i64> %2
96 }
97 ; CHECK-LABEL: define <2 x i64> @fptoui_cast_2xdouble_to_2xi64(<2 x double>)
98 ; CHECK-NEXT: %2 = fptoui <2 x double> %0 to <2 x i64>
99 ; CHECK-NEXT: ret <2 x i64> %2
100
101 define <2 x i8> @fptosi_cast_2xfloat_to_2xi8(<2 x float>) {
102 %2 = fptosi <2 x float> %0 to <2 x i8>
103 ret <2 x i8> %2
104 }
105 ; CHECK-LABEL: define <16 x i8> @fptosi_cast_2xfloat_to_2xi8(<4 x float>)
106 ; CHECK-NEXT: %2 = extractelement <4 x float> %0, i32 0
107 ; CHECK-NEXT: %3 = fptosi float %2 to i8
108 ; CHECK-NEXT: %4 = insertelement <16 x i8> undef, i8 %3, i32 0
109 ; CHECK-NEXT: %5 = extractelement <4 x float> %0, i32 1
110 ; CHECK-NEXT: %6 = fptosi float %5 to i8
111 ; CHECK-NEXT: %7 = insertelement <16 x i8> %4, i8 %6, i32 1
112 ; CHECK-NEXT: ret <16 x i8> %7
113
114 define <2 x i16> @fptosi_cast_2xfloat_to_2xi16(<2 x float>) {
115 %2 = fptosi <2 x float> %0 to <2 x i16>
116 ret <2 x i16> %2
117 }
118 ; CHECK-LABEL: define <8 x i16> @fptosi_cast_2xfloat_to_2xi16(<4 x float>)
119 ; CHECK-NEXT: %2 = extractelement <4 x float> %0, i32 0
120 ; CHECK-NEXT: %3 = fptosi float %2 to i16
121 ; CHECK-NEXT: %4 = insertelement <8 x i16> undef, i16 %3, i32 0
122 ; CHECK-NEXT: %5 = extractelement <4 x float> %0, i32 1
123 ; CHECK-NEXT: %6 = fptosi float %5 to i16
124 ; CHECK-NEXT: %7 = insertelement <8 x i16> %4, i16 %6, i32 1
125 ; CHECK-NEXT: ret <8 x i16> %7
126
127 define <2 x i32> @fptosi_cast_2xfloat_to_2xi32(<2 x float>) {
128 %2 = fptosi <2 x float> %0 to <2 x i32>
129 ret <2 x i32> %2
130 }
131 ; CHECK-LABEL: define <4 x i32> @fptosi_cast_2xfloat_to_2xi32(<4 x float>)
132 ; CHECK-NEXT: %2 = fptosi <4 x float> %0 to <4 x i32>
133 ; CHECK-NEXT: ret <4 x i32> %2
134
135 define <2 x i64> @fptosi_cast_2xfloat_to_2xi64(<2 x float>) {
136 %2 = fptosi <2 x float> %0 to <2 x i64>
137 ret <2 x i64> %2
138 }
139 ; CHECK-LABEL: define <2 x i64> @fptosi_cast_2xfloat_to_2xi64(<4 x float>)
140 ; CHECK-NEXT: %2 = extractelement <4 x float> %0, i32 0
141 ; CHECK-NEXT: %3 = fptosi float %2 to i64
142 ; CHECK-NEXT: %4 = insertelement <2 x i64> undef, i64 %3, i32 0
143 ; CHECK-NEXT: %5 = extractelement <4 x float> %0, i32 1
144 ; CHECK-NEXT: %6 = fptosi float %5 to i64
145 ; CHECK-NEXT: %7 = insertelement <2 x i64> %4, i64 %6, i32 1
146 ; CHECK-NEXT: ret <2 x i64> %7
147
148 define <2 x i8> @fptosi_cast_2xdouble_to_2xi8(<2 x double>) {
149 %2 = fptosi <2 x double> %0 to <2 x i8>
150 ret <2 x i8> %2
151 }
152 ; CHECK-LABEL: define <16 x i8> @fptosi_cast_2xdouble_to_2xi8(<2 x double>)
153 ; CHECK-NEXT: %2 = extractelement <2 x double> %0, i32 0
154 ; CHECK-NEXT: %3 = fptosi double %2 to i8
155 ; CHECK-NEXT: %4 = insertelement <16 x i8> undef, i8 %3, i32 0
156 ; CHECK-NEXT: %5 = extractelement <2 x double> %0, i32 1
157 ; CHECK-NEXT: %6 = fptosi double %5 to i8
158 ; CHECK-NEXT: %7 = insertelement <16 x i8> %4, i8 %6, i32 1
159 ; CHECK-NEXT: ret <16 x i8> %7
160
161 define <2 x i16> @fptosi_cast_2xdouble_to_2xi16(<2 x double>) {
162 %2 = fptosi <2 x double> %0 to <2 x i16>
163 ret <2 x i16> %2
164 }
165 ; CHECK-LABEL: define <8 x i16> @fptosi_cast_2xdouble_to_2xi16(<2 x double>)
166 ; CHECK-NEXT: %2 = extractelement <2 x double> %0, i32 0
167 ; CHECK-NEXT: %3 = fptosi double %2 to i16
168 ; CHECK-NEXT: %4 = insertelement <8 x i16> undef, i16 %3, i32 0
169 ; CHECK-NEXT: %5 = extractelement <2 x double> %0, i32 1
170 ; CHECK-NEXT: %6 = fptosi double %5 to i16
171 ; CHECK-NEXT: %7 = insertelement <8 x i16> %4, i16 %6, i32 1
172 ; CHECK-NEXT: ret <8 x i16> %7
173
174 define <2 x i32> @fptosi_cast_2xdouble_to_2xi32(<2 x double>) {
175 %2 = fptosi <2 x double> %0 to <2 x i32>
176 ret <2 x i32> %2
177 }
178 ; CHECK-LABEL: define <4 x i32> @fptosi_cast_2xdouble_to_2xi32(<2 x double>)
179 ; CHECK-NEXT: %2 = extractelement <2 x double> %0, i32 0
180 ; CHECK-NEXT: %3 = fptosi double %2 to i32
181 ; CHECK-NEXT: %4 = insertelement <4 x i32> undef, i32 %3, i32 0
182 ; CHECK-NEXT: %5 = extractelement <2 x double> %0, i32 1
183 ; CHECK-NEXT: %6 = fptosi double %5 to i32
184 ; CHECK-NEXT: %7 = insertelement <4 x i32> %4, i32 %6, i32 1
185 ; CHECK-NEXT: ret <4 x i32> %7
186
187 define <2 x i64> @fptosi_cast_2xdouble_to_2xi64(<2 x double>) {
188 %2 = fptosi <2 x double> %0 to <2 x i64>
189 ret <2 x i64> %2
190 }
191 ; CHECK-LABEL: define <2 x i64> @fptosi_cast_2xdouble_to_2xi64(<2 x double>)
192 ; CHECK-NEXT: %2 = fptosi <2 x double> %0 to <2 x i64>
193 ; CHECK-NEXT: ret <2 x i64> %2
194
195 define <2 x float> @uitofp_cast_2xi8_to_2xfloat(<2 x i8>) {
196 %2 = uitofp <2 x i8> %0 to <2 x float>
197 ret <2 x float> %2
198 }
199 ; CHECK-LABEL: define <4 x float> @uitofp_cast_2xi8_to_2xfloat(<16 x i8>)
200 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
201 ; CHECK-NEXT: %3 = uitofp i8 %2 to float
202 ; CHECK-NEXT: %4 = insertelement <4 x float> undef, float %3, i32 0
203 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
204 ; CHECK-NEXT: %6 = uitofp i8 %5 to float
205 ; CHECK-NEXT: %7 = insertelement <4 x float> %4, float %6, i32 1
206 ; CHECK-NEXT: ret <4 x float> %7
207
208 define <2 x float> @uitofp_cast_2xi16_to_2xfloat(<2 x i16>) {
209 %2 = uitofp <2 x i16> %0 to <2 x float>
210 ret <2 x float> %2
211 }
212 ; CHECK-LABEL: define <4 x float> @uitofp_cast_2xi16_to_2xfloat(<8 x i16>)
213 ; CHECK-NEXT: %2 = extractelement <8 x i16> %0, i32 0
214 ; CHECK-NEXT: %3 = uitofp i16 %2 to float
215 ; CHECK-NEXT: %4 = insertelement <4 x float> undef, float %3, i32 0
216 ; CHECK-NEXT: %5 = extractelement <8 x i16> %0, i32 1
217 ; CHECK-NEXT: %6 = uitofp i16 %5 to float
218 ; CHECK-NEXT: %7 = insertelement <4 x float> %4, float %6, i32 1
219 ; CHECK-NEXT: ret <4 x float> %7
220
221 define <2 x float> @uitofp_cast_2xi32_to_2xfloat(<2 x i32>) {
222 %2 = uitofp <2 x i32> %0 to <2 x float>
223 ret <2 x float> %2
224 }
225 ; CHECK-LABEL: define <4 x float> @uitofp_cast_2xi32_to_2xfloat(<4 x i32>)
226 ; CHECK-NEXT: %2 = uitofp <4 x i32> %0 to <4 x float>
227 ; CHECK-NEXT: ret <4 x float> %2
228
229 define <2 x float> @uitofp_cast_2xi64_to_2xfloat(<2 x i64>) {
230 %2 = uitofp <2 x i64> %0 to <2 x float>
231 ret <2 x float> %2
232 }
233 ; CHECK-LABEL: define <4 x float> @uitofp_cast_2xi64_to_2xfloat(<2 x i64>)
234 ; CHECK-NEXT: %2 = extractelement <2 x i64> %0, i32 0
235 ; CHECK-NEXT: %3 = uitofp i64 %2 to float
236 ; CHECK-NEXT: %4 = insertelement <4 x float> undef, float %3, i32 0
237 ; CHECK-NEXT: %5 = extractelement <2 x i64> %0, i32 1
238 ; CHECK-NEXT: %6 = uitofp i64 %5 to float
239 ; CHECK-NEXT: %7 = insertelement <4 x float> %4, float %6, i32 1
240 ; CHECK-NEXT: ret <4 x float> %7
241
242 define <2 x double> @uitofp_cast_2xi8_to_2xdouble(<2 x i8>) {
243 %2 = uitofp <2 x i8> %0 to <2 x double>
244 ret <2 x double> %2
245 }
246 ; CHECK-LABEL: define <2 x double> @uitofp_cast_2xi8_to_2xdouble(<16 x i8>)
247 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
248 ; CHECK-NEXT: %3 = uitofp i8 %2 to double
249 ; CHECK-NEXT: %4 = insertelement <2 x double> undef, double %3, i32 0
250 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
251 ; CHECK-NEXT: %6 = uitofp i8 %5 to double
252 ; CHECK-NEXT: %7 = insertelement <2 x double> %4, double %6, i32 1
253 ; CHECK-NEXT: ret <2 x double> %7
254
255 define <2 x double> @uitofp_cast_2xi16_to_2xdouble(<2 x i16>) {
256 %2 = uitofp <2 x i16> %0 to <2 x double>
257 ret <2 x double> %2
258 }
259 ; CHECK-LABEL: define <2 x double> @uitofp_cast_2xi16_to_2xdouble(<8 x i16>)
260 ; CHECK-NEXT: %2 = extractelement <8 x i16> %0, i32 0
261 ; CHECK-NEXT: %3 = uitofp i16 %2 to double
262 ; CHECK-NEXT: %4 = insertelement <2 x double> undef, double %3, i32 0
263 ; CHECK-NEXT: %5 = extractelement <8 x i16> %0, i32 1
264 ; CHECK-NEXT: %6 = uitofp i16 %5 to double
265 ; CHECK-NEXT: %7 = insertelement <2 x double> %4, double %6, i32 1
266 ; CHECK-NEXT: ret <2 x double> %7
267
268 define <2 x double> @uitofp_cast_2xi32_to_2xdouble(<2 x i32>) {
269 %2 = uitofp <2 x i32> %0 to <2 x double>
270 ret <2 x double> %2
271 }
272 ; CHECK-LABEL: define <2 x double> @uitofp_cast_2xi32_to_2xdouble(<4 x i32>)
273 ; CHECK-NEXT: %2 = extractelement <4 x i32> %0, i32 0
274 ; CHECK-NEXT: %3 = uitofp i32 %2 to double
275 ; CHECK-NEXT: %4 = insertelement <2 x double> undef, double %3, i32 0
276 ; CHECK-NEXT: %5 = extractelement <4 x i32> %0, i32 1
277 ; CHECK-NEXT: %6 = uitofp i32 %5 to double
278 ; CHECK-NEXT: %7 = insertelement <2 x double> %4, double %6, i32 1
279 ; CHECK-NEXT: ret <2 x double> %7
280
281 define <2 x double> @uitofp_cast_2xi64_to_2xdouble(<2 x i64>) {
282 %2 = uitofp <2 x i64> %0 to <2 x double>
283 ret <2 x double> %2
284 }
285 ; CHECK-LABEL: define <2 x double> @uitofp_cast_2xi64_to_2xdouble(<2 x i64>)
286 ; CHECK-NEXT: %2 = uitofp <2 x i64> %0 to <2 x double>
287 ; CHECK-NEXT: ret <2 x double> %2
288
289 define <2 x float> @sitofp_cast_2xi8_to_2xfloat(<2 x i8>) {
290 %2 = sitofp <2 x i8> %0 to <2 x float>
291 ret <2 x float> %2
292 }
293 ; CHECK-LABEL: define <4 x float> @sitofp_cast_2xi8_to_2xfloat(<16 x i8>)
294 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
295 ; CHECK-NEXT: %3 = sitofp i8 %2 to float
296 ; CHECK-NEXT: %4 = insertelement <4 x float> undef, float %3, i32 0
297 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
298 ; CHECK-NEXT: %6 = sitofp i8 %5 to float
299 ; CHECK-NEXT: %7 = insertelement <4 x float> %4, float %6, i32 1
300 ; CHECK-NEXT: ret <4 x float> %7
301
302 define <2 x float> @sitofp_cast_2xi16_to_2xfloat(<2 x i16>) {
303 %2 = sitofp <2 x i16> %0 to <2 x float>
304 ret <2 x float> %2
305 }
306 ; CHECK-LABEL: define <4 x float> @sitofp_cast_2xi16_to_2xfloat(<8 x i16>)
307 ; CHECK-NEXT: %2 = extractelement <8 x i16> %0, i32 0
308 ; CHECK-NEXT: %3 = sitofp i16 %2 to float
309 ; CHECK-NEXT: %4 = insertelement <4 x float> undef, float %3, i32 0
310 ; CHECK-NEXT: %5 = extractelement <8 x i16> %0, i32 1
311 ; CHECK-NEXT: %6 = sitofp i16 %5 to float
312 ; CHECK-NEXT: %7 = insertelement <4 x float> %4, float %6, i32 1
313 ; CHECK-NEXT: ret <4 x float> %7
314
315 define <2 x float> @sitofp_cast_2xi32_to_2xfloat(<2 x i32>) {
316 %2 = sitofp <2 x i32> %0 to <2 x float>
317 ret <2 x float> %2
318 }
319 ; CHECK-LABEL: define <4 x float> @sitofp_cast_2xi32_to_2xfloat(<4 x i32>)
320 ; CHECK-NEXT: %2 = sitofp <4 x i32> %0 to <4 x float>
321 ; CHECK-NEXT: ret <4 x float> %2
322
323 define <2 x float> @sitofp_cast_2xi64_to_2xfloat(<2 x i64>) {
324 %2 = sitofp <2 x i64> %0 to <2 x float>
325 ret <2 x float> %2
326 }
327 ; CHECK-LABEL: define <4 x float> @sitofp_cast_2xi64_to_2xfloat(<2 x i64>)
328 ; CHECK-NEXT: %2 = extractelement <2 x i64> %0, i32 0
329 ; CHECK-NEXT: %3 = sitofp i64 %2 to float
330 ; CHECK-NEXT: %4 = insertelement <4 x float> undef, float %3, i32 0
331 ; CHECK-NEXT: %5 = extractelement <2 x i64> %0, i32 1
332 ; CHECK-NEXT: %6 = sitofp i64 %5 to float
333 ; CHECK-NEXT: %7 = insertelement <4 x float> %4, float %6, i32 1
334 ; CHECK-NEXT: ret <4 x float> %7
335
336 define <2 x double> @sitofp_cast_2xi8_to_2xdouble(<2 x i8>) {
337 %2 = sitofp <2 x i8> %0 to <2 x double>
338 ret <2 x double> %2
339 }
340 ; CHECK-LABEL: define <2 x double> @sitofp_cast_2xi8_to_2xdouble(<16 x i8>)
341 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
342 ; CHECK-NEXT: %3 = sitofp i8 %2 to double
343 ; CHECK-NEXT: %4 = insertelement <2 x double> undef, double %3, i32 0
344 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
345 ; CHECK-NEXT: %6 = sitofp i8 %5 to double
346 ; CHECK-NEXT: %7 = insertelement <2 x double> %4, double %6, i32 1
347 ; CHECK-NEXT: ret <2 x double> %7
348
349 define <2 x double> @sitofp_cast_2xi16_to_2xdouble(<2 x i16>) {
350 %2 = sitofp <2 x i16> %0 to <2 x double>
351 ret <2 x double> %2
352 }
353 ; CHECK-LABEL: define <2 x double> @sitofp_cast_2xi16_to_2xdouble(<8 x i16>)
354 ; CHECK-NEXT: %2 = extractelement <8 x i16> %0, i32 0
355 ; CHECK-NEXT: %3 = sitofp i16 %2 to double
356 ; CHECK-NEXT: %4 = insertelement <2 x double> undef, double %3, i32 0
357 ; CHECK-NEXT: %5 = extractelement <8 x i16> %0, i32 1
358 ; CHECK-NEXT: %6 = sitofp i16 %5 to double
359 ; CHECK-NEXT: %7 = insertelement <2 x double> %4, double %6, i32 1
360 ; CHECK-NEXT: ret <2 x double> %7
361
362 define <2 x double> @sitofp_cast_2xi32_to_2xdouble(<2 x i32>) {
363 %2 = sitofp <2 x i32> %0 to <2 x double>
364 ret <2 x double> %2
365 }
366 ; CHECK-LABEL: define <2 x double> @sitofp_cast_2xi32_to_2xdouble(<4 x i32>)
367 ; CHECK-NEXT: %2 = extractelement <4 x i32> %0, i32 0
368 ; CHECK-NEXT: %3 = sitofp i32 %2 to double
369 ; CHECK-NEXT: %4 = insertelement <2 x double> undef, double %3, i32 0
370 ; CHECK-NEXT: %5 = extractelement <4 x i32> %0, i32 1
371 ; CHECK-NEXT: %6 = sitofp i32 %5 to double
372 ; CHECK-NEXT: %7 = insertelement <2 x double> %4, double %6, i32 1
373 ; CHECK-NEXT: ret <2 x double> %7
374
375 define <2 x double> @sitofp_cast_2xi64_to_2xdouble(<2 x i64>) {
376 %2 = sitofp <2 x i64> %0 to <2 x double>
377 ret <2 x double> %2
378 }
379 ; CHECK-LABEL: define <2 x double> @sitofp_cast_2xi64_to_2xdouble(<2 x i64>)
380 ; CHECK-NEXT: %2 = sitofp <2 x i64> %0 to <2 x double>
381 ; CHECK-NEXT: ret <2 x double> %2
382
383 define <4 x i8> @fptoui_cast_4xfloat_to_4xi8(<4 x float>) {
384 %2 = fptoui <4 x float> %0 to <4 x i8>
385 ret <4 x i8> %2
386 }
387 ; CHECK-LABEL: define <16 x i8> @fptoui_cast_4xfloat_to_4xi8(<4 x float>)
388 ; CHECK-NEXT: %2 = extractelement <4 x float> %0, i32 0
389 ; CHECK-NEXT: %3 = fptoui float %2 to i8
390 ; CHECK-NEXT: %4 = insertelement <16 x i8> undef, i8 %3, i32 0
391 ; CHECK-NEXT: %5 = extractelement <4 x float> %0, i32 1
392 ; CHECK-NEXT: %6 = fptoui float %5 to i8
393 ; CHECK-NEXT: %7 = insertelement <16 x i8> %4, i8 %6, i32 1
394 ; CHECK-NEXT: %8 = extractelement <4 x float> %0, i32 2
395 ; CHECK-NEXT: %9 = fptoui float %8 to i8
396 ; CHECK-NEXT: %10 = insertelement <16 x i8> %7, i8 %9, i32 2
397 ; CHECK-NEXT: %11 = extractelement <4 x float> %0, i32 3
398 ; CHECK-NEXT: %12 = fptoui float %11 to i8
399 ; CHECK-NEXT: %13 = insertelement <16 x i8> %10, i8 %12, i32 3
400 ; CHECK-NEXT: ret <16 x i8> %13
401
402 define <4 x i16> @fptoui_cast_4xfloat_to_4xi16(<4 x float>) {
403 %2 = fptoui <4 x float> %0 to <4 x i16>
404 ret <4 x i16> %2
405 }
406 ; CHECK-LABEL: define <8 x i16> @fptoui_cast_4xfloat_to_4xi16(<4 x float>)
407 ; CHECK-NEXT: %2 = extractelement <4 x float> %0, i32 0
408 ; CHECK-NEXT: %3 = fptoui float %2 to i16
409 ; CHECK-NEXT: %4 = insertelement <8 x i16> undef, i16 %3, i32 0
410 ; CHECK-NEXT: %5 = extractelement <4 x float> %0, i32 1
411 ; CHECK-NEXT: %6 = fptoui float %5 to i16
412 ; CHECK-NEXT: %7 = insertelement <8 x i16> %4, i16 %6, i32 1
413 ; CHECK-NEXT: %8 = extractelement <4 x float> %0, i32 2
414 ; CHECK-NEXT: %9 = fptoui float %8 to i16
415 ; CHECK-NEXT: %10 = insertelement <8 x i16> %7, i16 %9, i32 2
416 ; CHECK-NEXT: %11 = extractelement <4 x float> %0, i32 3
417 ; CHECK-NEXT: %12 = fptoui float %11 to i16
418 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 3
419 ; CHECK-NEXT: ret <8 x i16> %13
420
421 define <4 x i32> @fptoui_cast_4xfloat_to_4xi32(<4 x float>) {
422 %2 = fptoui <4 x float> %0 to <4 x i32>
423 ret <4 x i32> %2
424 }
425 ; CHECK-LABEL: define <4 x i32> @fptoui_cast_4xfloat_to_4xi32(<4 x float>)
426 ; CHECK-NEXT: %2 = fptoui <4 x float> %0 to <4 x i32>
427 ; CHECK-NEXT: ret <4 x i32> %2
428
429 define <4 x i64> @fptoui_cast_4xfloat_to_4xi64(<4 x float>) {
430 %2 = fptoui <4 x float> %0 to <4 x i64>
431 ret <4 x i64> %2
432 }
433 ; CHECK-LABEL: define <2 x i64> @fptoui_cast_4xfloat_to_4xi64(<2 x i64>* nocaptu re nonnull dereferenceable(16), <4 x float>)
434 ; CHECK-NEXT: %3 = extractelement <4 x float> %1, i32 0
435 ; CHECK-NEXT: %4 = fptoui float %3 to i64
436 ; CHECK-NEXT: %5 = insertelement <2 x i64> undef, i64 %4, i32 0
437 ; CHECK-NEXT: %6 = extractelement <4 x float> %1, i32 1
438 ; CHECK-NEXT: %7 = fptoui float %6 to i64
439 ; CHECK-NEXT: %8 = insertelement <2 x i64> %5, i64 %7, i32 1
440 ; CHECK-NEXT: %9 = extractelement <4 x float> %1, i32 2
441 ; CHECK-NEXT: %10 = fptoui float %9 to i64
442 ; CHECK-NEXT: %11 = insertelement <2 x i64> undef, i64 %10, i32 0
443 ; CHECK-NEXT: %12 = extractelement <4 x float> %1, i32 3
444 ; CHECK-NEXT: %13 = fptoui float %12 to i64
445 ; CHECK-NEXT: %14 = insertelement <2 x i64> %11, i64 %13, i32 1
446 ; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %0, align 16
447 ; CHECK-NEXT: ret <2 x i64> %8
448
449 define <4 x i8> @fptoui_cast_4xdouble_to_4xi8(<4 x double>) {
450 %2 = fptoui <4 x double> %0 to <4 x i8>
451 ret <4 x i8> %2
452 }
453 ; CHECK-LABEL: define <16 x i8> @fptoui_cast_4xdouble_to_4xi8(<2 x double>, <2 x double>)
454 ; CHECK-NEXT: %3 = extractelement <2 x double> %0, i32 0
455 ; CHECK-NEXT: %4 = fptoui double %3 to i8
456 ; CHECK-NEXT: %5 = insertelement <16 x i8> undef, i8 %4, i32 0
457 ; CHECK-NEXT: %6 = extractelement <2 x double> %0, i32 1
458 ; CHECK-NEXT: %7 = fptoui double %6 to i8
459 ; CHECK-NEXT: %8 = insertelement <16 x i8> %5, i8 %7, i32 1
460 ; CHECK-NEXT: %9 = extractelement <2 x double> %1, i32 0
461 ; CHECK-NEXT: %10 = fptoui double %9 to i8
462 ; CHECK-NEXT: %11 = insertelement <16 x i8> %8, i8 %10, i32 2
463 ; CHECK-NEXT: %12 = extractelement <2 x double> %1, i32 1
464 ; CHECK-NEXT: %13 = fptoui double %12 to i8
465 ; CHECK-NEXT: %14 = insertelement <16 x i8> %11, i8 %13, i32 3
466 ; CHECK-NEXT: ret <16 x i8> %14
467
468 define <4 x i16> @fptoui_cast_4xdouble_to_4xi16(<4 x double>) {
469 %2 = fptoui <4 x double> %0 to <4 x i16>
470 ret <4 x i16> %2
471 }
472 ; CHECK-LABEL: define <8 x i16> @fptoui_cast_4xdouble_to_4xi16(<2 x double>, <2 x double>)
473 ; CHECK-NEXT: %3 = extractelement <2 x double> %0, i32 0
474 ; CHECK-NEXT: %4 = fptoui double %3 to i16
475 ; CHECK-NEXT: %5 = insertelement <8 x i16> undef, i16 %4, i32 0
476 ; CHECK-NEXT: %6 = extractelement <2 x double> %0, i32 1
477 ; CHECK-NEXT: %7 = fptoui double %6 to i16
478 ; CHECK-NEXT: %8 = insertelement <8 x i16> %5, i16 %7, i32 1
479 ; CHECK-NEXT: %9 = extractelement <2 x double> %1, i32 0
480 ; CHECK-NEXT: %10 = fptoui double %9 to i16
481 ; CHECK-NEXT: %11 = insertelement <8 x i16> %8, i16 %10, i32 2
482 ; CHECK-NEXT: %12 = extractelement <2 x double> %1, i32 1
483 ; CHECK-NEXT: %13 = fptoui double %12 to i16
484 ; CHECK-NEXT: %14 = insertelement <8 x i16> %11, i16 %13, i32 3
485 ; CHECK-NEXT: ret <8 x i16> %14
486
487 define <4 x i32> @fptoui_cast_4xdouble_to_4xi32(<4 x double>) {
488 %2 = fptoui <4 x double> %0 to <4 x i32>
489 ret <4 x i32> %2
490 }
491 ; CHECK-LABEL: define <4 x i32> @fptoui_cast_4xdouble_to_4xi32(<2 x double>, <2 x double>)
492 ; CHECK-NEXT: %3 = extractelement <2 x double> %0, i32 0
493 ; CHECK-NEXT: %4 = fptoui double %3 to i32
494 ; CHECK-NEXT: %5 = insertelement <4 x i32> undef, i32 %4, i32 0
495 ; CHECK-NEXT: %6 = extractelement <2 x double> %0, i32 1
496 ; CHECK-NEXT: %7 = fptoui double %6 to i32
497 ; CHECK-NEXT: %8 = insertelement <4 x i32> %5, i32 %7, i32 1
498 ; CHECK-NEXT: %9 = extractelement <2 x double> %1, i32 0
499 ; CHECK-NEXT: %10 = fptoui double %9 to i32
500 ; CHECK-NEXT: %11 = insertelement <4 x i32> %8, i32 %10, i32 2
501 ; CHECK-NEXT: %12 = extractelement <2 x double> %1, i32 1
502 ; CHECK-NEXT: %13 = fptoui double %12 to i32
503 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 3
504 ; CHECK-NEXT: ret <4 x i32> %14
505
506 define <4 x i64> @fptoui_cast_4xdouble_to_4xi64(<4 x double>) {
507 %2 = fptoui <4 x double> %0 to <4 x i64>
508 ret <4 x i64> %2
509 }
510 ; CHECK-LABEL: define <2 x i64> @fptoui_cast_4xdouble_to_4xi64(<2 x i64>* nocapt ure nonnull dereferenceable(16), <2 x double>, <2 x double>)
511 ; CHECK-NEXT: %4 = fptoui <2 x double> %1 to <2 x i64>
512 ; CHECK-NEXT: %5 = fptoui <2 x double> %2 to <2 x i64>
513 ; CHECK-NEXT: store <2 x i64> %5, <2 x i64>* %0, align 16
514 ; CHECK-NEXT: ret <2 x i64> %4
515
516 define <4 x i8> @fptosi_cast_4xfloat_to_4xi8(<4 x float>) {
517 %2 = fptosi <4 x float> %0 to <4 x i8>
518 ret <4 x i8> %2
519 }
520 ; CHECK-LABEL: define <16 x i8> @fptosi_cast_4xfloat_to_4xi8(<4 x float>)
521 ; CHECK-NEXT: %2 = extractelement <4 x float> %0, i32 0
522 ; CHECK-NEXT: %3 = fptosi float %2 to i8
523 ; CHECK-NEXT: %4 = insertelement <16 x i8> undef, i8 %3, i32 0
524 ; CHECK-NEXT: %5 = extractelement <4 x float> %0, i32 1
525 ; CHECK-NEXT: %6 = fptosi float %5 to i8
526 ; CHECK-NEXT: %7 = insertelement <16 x i8> %4, i8 %6, i32 1
527 ; CHECK-NEXT: %8 = extractelement <4 x float> %0, i32 2
528 ; CHECK-NEXT: %9 = fptosi float %8 to i8
529 ; CHECK-NEXT: %10 = insertelement <16 x i8> %7, i8 %9, i32 2
530 ; CHECK-NEXT: %11 = extractelement <4 x float> %0, i32 3
531 ; CHECK-NEXT: %12 = fptosi float %11 to i8
532 ; CHECK-NEXT: %13 = insertelement <16 x i8> %10, i8 %12, i32 3
533 ; CHECK-NEXT: ret <16 x i8> %13
534
535 define <4 x i16> @fptosi_cast_4xfloat_to_4xi16(<4 x float>) {
536 %2 = fptosi <4 x float> %0 to <4 x i16>
537 ret <4 x i16> %2
538 }
539 ; CHECK-LABEL: define <8 x i16> @fptosi_cast_4xfloat_to_4xi16(<4 x float>)
540 ; CHECK-NEXT: %2 = extractelement <4 x float> %0, i32 0
541 ; CHECK-NEXT: %3 = fptosi float %2 to i16
542 ; CHECK-NEXT: %4 = insertelement <8 x i16> undef, i16 %3, i32 0
543 ; CHECK-NEXT: %5 = extractelement <4 x float> %0, i32 1
544 ; CHECK-NEXT: %6 = fptosi float %5 to i16
545 ; CHECK-NEXT: %7 = insertelement <8 x i16> %4, i16 %6, i32 1
546 ; CHECK-NEXT: %8 = extractelement <4 x float> %0, i32 2
547 ; CHECK-NEXT: %9 = fptosi float %8 to i16
548 ; CHECK-NEXT: %10 = insertelement <8 x i16> %7, i16 %9, i32 2
549 ; CHECK-NEXT: %11 = extractelement <4 x float> %0, i32 3
550 ; CHECK-NEXT: %12 = fptosi float %11 to i16
551 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 3
552 ; CHECK-NEXT: ret <8 x i16> %13
553
554 define <4 x i32> @fptosi_cast_4xfloat_to_4xi32(<4 x float>) {
555 %2 = fptosi <4 x float> %0 to <4 x i32>
556 ret <4 x i32> %2
557 }
558 ; CHECK-LABEL: define <4 x i32> @fptosi_cast_4xfloat_to_4xi32(<4 x float>)
559 ; CHECK-NEXT: %2 = fptosi <4 x float> %0 to <4 x i32>
560 ; CHECK-NEXT: ret <4 x i32> %2
561
562 define <4 x i64> @fptosi_cast_4xfloat_to_4xi64(<4 x float>) {
563 %2 = fptosi <4 x float> %0 to <4 x i64>
564 ret <4 x i64> %2
565 }
566 ; CHECK-LABEL: define <2 x i64> @fptosi_cast_4xfloat_to_4xi64(<2 x i64>* nocaptu re nonnull dereferenceable(16), <4 x float>)
567 ; CHECK-NEXT: %3 = extractelement <4 x float> %1, i32 0
568 ; CHECK-NEXT: %4 = fptosi float %3 to i64
569 ; CHECK-NEXT: %5 = insertelement <2 x i64> undef, i64 %4, i32 0
570 ; CHECK-NEXT: %6 = extractelement <4 x float> %1, i32 1
571 ; CHECK-NEXT: %7 = fptosi float %6 to i64
572 ; CHECK-NEXT: %8 = insertelement <2 x i64> %5, i64 %7, i32 1
573 ; CHECK-NEXT: %9 = extractelement <4 x float> %1, i32 2
574 ; CHECK-NEXT: %10 = fptosi float %9 to i64
575 ; CHECK-NEXT: %11 = insertelement <2 x i64> undef, i64 %10, i32 0
576 ; CHECK-NEXT: %12 = extractelement <4 x float> %1, i32 3
577 ; CHECK-NEXT: %13 = fptosi float %12 to i64
578 ; CHECK-NEXT: %14 = insertelement <2 x i64> %11, i64 %13, i32 1
579 ; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %0, align 16
580 ; CHECK-NEXT: ret <2 x i64> %8
581
582 define <4 x i8> @fptosi_cast_4xdouble_to_4xi8(<4 x double>) {
583 %2 = fptosi <4 x double> %0 to <4 x i8>
584 ret <4 x i8> %2
585 }
586 ; CHECK-LABEL: define <16 x i8> @fptosi_cast_4xdouble_to_4xi8(<2 x double>, <2 x double>)
587 ; CHECK-NEXT: %3 = extractelement <2 x double> %0, i32 0
588 ; CHECK-NEXT: %4 = fptosi double %3 to i8
589 ; CHECK-NEXT: %5 = insertelement <16 x i8> undef, i8 %4, i32 0
590 ; CHECK-NEXT: %6 = extractelement <2 x double> %0, i32 1
591 ; CHECK-NEXT: %7 = fptosi double %6 to i8
592 ; CHECK-NEXT: %8 = insertelement <16 x i8> %5, i8 %7, i32 1
593 ; CHECK-NEXT: %9 = extractelement <2 x double> %1, i32 0
594 ; CHECK-NEXT: %10 = fptosi double %9 to i8
595 ; CHECK-NEXT: %11 = insertelement <16 x i8> %8, i8 %10, i32 2
596 ; CHECK-NEXT: %12 = extractelement <2 x double> %1, i32 1
597 ; CHECK-NEXT: %13 = fptosi double %12 to i8
598 ; CHECK-NEXT: %14 = insertelement <16 x i8> %11, i8 %13, i32 3
599 ; CHECK-NEXT: ret <16 x i8> %14
600
601 define <4 x i16> @fptosi_cast_4xdouble_to_4xi16(<4 x double>) {
602 %2 = fptosi <4 x double> %0 to <4 x i16>
603 ret <4 x i16> %2
604 }
605 ; CHECK-LABEL: define <8 x i16> @fptosi_cast_4xdouble_to_4xi16(<2 x double>, <2 x double>)
606 ; CHECK-NEXT: %3 = extractelement <2 x double> %0, i32 0
607 ; CHECK-NEXT: %4 = fptosi double %3 to i16
608 ; CHECK-NEXT: %5 = insertelement <8 x i16> undef, i16 %4, i32 0
609 ; CHECK-NEXT: %6 = extractelement <2 x double> %0, i32 1
610 ; CHECK-NEXT: %7 = fptosi double %6 to i16
611 ; CHECK-NEXT: %8 = insertelement <8 x i16> %5, i16 %7, i32 1
612 ; CHECK-NEXT: %9 = extractelement <2 x double> %1, i32 0
613 ; CHECK-NEXT: %10 = fptosi double %9 to i16
614 ; CHECK-NEXT: %11 = insertelement <8 x i16> %8, i16 %10, i32 2
615 ; CHECK-NEXT: %12 = extractelement <2 x double> %1, i32 1
616 ; CHECK-NEXT: %13 = fptosi double %12 to i16
617 ; CHECK-NEXT: %14 = insertelement <8 x i16> %11, i16 %13, i32 3
618 ; CHECK-NEXT: ret <8 x i16> %14
619
620 define <4 x i32> @fptosi_cast_4xdouble_to_4xi32(<4 x double>) {
621 %2 = fptosi <4 x double> %0 to <4 x i32>
622 ret <4 x i32> %2
623 }
624 ; CHECK-LABEL: define <4 x i32> @fptosi_cast_4xdouble_to_4xi32(<2 x double>, <2 x double>)
625 ; CHECK-NEXT: %3 = extractelement <2 x double> %0, i32 0
626 ; CHECK-NEXT: %4 = fptosi double %3 to i32
627 ; CHECK-NEXT: %5 = insertelement <4 x i32> undef, i32 %4, i32 0
628 ; CHECK-NEXT: %6 = extractelement <2 x double> %0, i32 1
629 ; CHECK-NEXT: %7 = fptosi double %6 to i32
630 ; CHECK-NEXT: %8 = insertelement <4 x i32> %5, i32 %7, i32 1
631 ; CHECK-NEXT: %9 = extractelement <2 x double> %1, i32 0
632 ; CHECK-NEXT: %10 = fptosi double %9 to i32
633 ; CHECK-NEXT: %11 = insertelement <4 x i32> %8, i32 %10, i32 2
634 ; CHECK-NEXT: %12 = extractelement <2 x double> %1, i32 1
635 ; CHECK-NEXT: %13 = fptosi double %12 to i32
636 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 3
637 ; CHECK-NEXT: ret <4 x i32> %14
638
639 define <4 x i64> @fptosi_cast_4xdouble_to_4xi64(<4 x double>) {
640 %2 = fptosi <4 x double> %0 to <4 x i64>
641 ret <4 x i64> %2
642 }
643 ; CHECK-LABEL: define <2 x i64> @fptosi_cast_4xdouble_to_4xi64(<2 x i64>* nocapt ure nonnull dereferenceable(16), <2 x double>, <2 x double>)
644 ; CHECK-NEXT: %4 = fptosi <2 x double> %1 to <2 x i64>
645 ; CHECK-NEXT: %5 = fptosi <2 x double> %2 to <2 x i64>
646 ; CHECK-NEXT: store <2 x i64> %5, <2 x i64>* %0, align 16
647 ; CHECK-NEXT: ret <2 x i64> %4
648
649 define <4 x float> @uitofp_cast_4xi8_to_4xfloat(<4 x i8>) {
650 %2 = uitofp <4 x i8> %0 to <4 x float>
651 ret <4 x float> %2
652 }
653 ; CHECK-LABEL: define <4 x float> @uitofp_cast_4xi8_to_4xfloat(<16 x i8>)
654 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
655 ; CHECK-NEXT: %3 = uitofp i8 %2 to float
656 ; CHECK-NEXT: %4 = insertelement <4 x float> undef, float %3, i32 0
657 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
658 ; CHECK-NEXT: %6 = uitofp i8 %5 to float
659 ; CHECK-NEXT: %7 = insertelement <4 x float> %4, float %6, i32 1
660 ; CHECK-NEXT: %8 = extractelement <16 x i8> %0, i32 2
661 ; CHECK-NEXT: %9 = uitofp i8 %8 to float
662 ; CHECK-NEXT: %10 = insertelement <4 x float> %7, float %9, i32 2
663 ; CHECK-NEXT: %11 = extractelement <16 x i8> %0, i32 3
664 ; CHECK-NEXT: %12 = uitofp i8 %11 to float
665 ; CHECK-NEXT: %13 = insertelement <4 x float> %10, float %12, i32 3
666 ; CHECK-NEXT: ret <4 x float> %13
667
668 define <4 x float> @uitofp_cast_4xi16_to_4xfloat(<4 x i16>) {
669 %2 = uitofp <4 x i16> %0 to <4 x float>
670 ret <4 x float> %2
671 }
672 ; CHECK-LABEL: define <4 x float> @uitofp_cast_4xi16_to_4xfloat(<8 x i16>)
673 ; CHECK-NEXT: %2 = extractelement <8 x i16> %0, i32 0
674 ; CHECK-NEXT: %3 = uitofp i16 %2 to float
675 ; CHECK-NEXT: %4 = insertelement <4 x float> undef, float %3, i32 0
676 ; CHECK-NEXT: %5 = extractelement <8 x i16> %0, i32 1
677 ; CHECK-NEXT: %6 = uitofp i16 %5 to float
678 ; CHECK-NEXT: %7 = insertelement <4 x float> %4, float %6, i32 1
679 ; CHECK-NEXT: %8 = extractelement <8 x i16> %0, i32 2
680 ; CHECK-NEXT: %9 = uitofp i16 %8 to float
681 ; CHECK-NEXT: %10 = insertelement <4 x float> %7, float %9, i32 2
682 ; CHECK-NEXT: %11 = extractelement <8 x i16> %0, i32 3
683 ; CHECK-NEXT: %12 = uitofp i16 %11 to float
684 ; CHECK-NEXT: %13 = insertelement <4 x float> %10, float %12, i32 3
685 ; CHECK-NEXT: ret <4 x float> %13
686
687 define <4 x float> @uitofp_cast_4xi32_to_4xfloat(<4 x i32>) {
688 %2 = uitofp <4 x i32> %0 to <4 x float>
689 ret <4 x float> %2
690 }
691 ; CHECK-LABEL: define <4 x float> @uitofp_cast_4xi32_to_4xfloat(<4 x i32>)
692 ; CHECK-NEXT: %2 = uitofp <4 x i32> %0 to <4 x float>
693 ; CHECK-NEXT: ret <4 x float> %2
694
695 define <4 x float> @uitofp_cast_4xi64_to_4xfloat(<4 x i64>) {
696 %2 = uitofp <4 x i64> %0 to <4 x float>
697 ret <4 x float> %2
698 }
699 ; CHECK-LABEL: define <4 x float> @uitofp_cast_4xi64_to_4xfloat(<2 x i64>, <2 x i64>)
700 ; CHECK-NEXT: %3 = extractelement <2 x i64> %0, i32 0
701 ; CHECK-NEXT: %4 = uitofp i64 %3 to float
702 ; CHECK-NEXT: %5 = insertelement <4 x float> undef, float %4, i32 0
703 ; CHECK-NEXT: %6 = extractelement <2 x i64> %0, i32 1
704 ; CHECK-NEXT: %7 = uitofp i64 %6 to float
705 ; CHECK-NEXT: %8 = insertelement <4 x float> %5, float %7, i32 1
706 ; CHECK-NEXT: %9 = extractelement <2 x i64> %1, i32 0
707 ; CHECK-NEXT: %10 = uitofp i64 %9 to float
708 ; CHECK-NEXT: %11 = insertelement <4 x float> %8, float %10, i32 2
709 ; CHECK-NEXT: %12 = extractelement <2 x i64> %1, i32 1
710 ; CHECK-NEXT: %13 = uitofp i64 %12 to float
711 ; CHECK-NEXT: %14 = insertelement <4 x float> %11, float %13, i32 3
712 ; CHECK-NEXT: ret <4 x float> %14
713
714 define <4 x double> @uitofp_cast_4xi8_to_4xdouble(<4 x i8>) {
715 %2 = uitofp <4 x i8> %0 to <4 x double>
716 ret <4 x double> %2
717 }
718 ; CHECK-LABEL: define <2 x double> @uitofp_cast_4xi8_to_4xdouble(<2 x double>* n ocapture nonnull dereferenceable(16), <16 x i8>)
719 ; CHECK-NEXT: %3 = extractelement <16 x i8> %1, i32 0
720 ; CHECK-NEXT: %4 = uitofp i8 %3 to double
721 ; CHECK-NEXT: %5 = insertelement <2 x double> undef, double %4, i32 0
722 ; CHECK-NEXT: %6 = extractelement <16 x i8> %1, i32 1
723 ; CHECK-NEXT: %7 = uitofp i8 %6 to double
724 ; CHECK-NEXT: %8 = insertelement <2 x double> %5, double %7, i32 1
725 ; CHECK-NEXT: %9 = extractelement <16 x i8> %1, i32 2
726 ; CHECK-NEXT: %10 = uitofp i8 %9 to double
727 ; CHECK-NEXT: %11 = insertelement <2 x double> undef, double %10, i32 0
728 ; CHECK-NEXT: %12 = extractelement <16 x i8> %1, i32 3
729 ; CHECK-NEXT: %13 = uitofp i8 %12 to double
730 ; CHECK-NEXT: %14 = insertelement <2 x double> %11, double %13, i32 1
731 ; CHECK-NEXT: store <2 x double> %14, <2 x double>* %0, align 16
732 ; CHECK-NEXT: ret <2 x double> %8
733
734 define <4 x double> @uitofp_cast_4xi16_to_4xdouble(<4 x i16>) {
735 %2 = uitofp <4 x i16> %0 to <4 x double>
736 ret <4 x double> %2
737 }
738 ; CHECK-LABEL: define <2 x double> @uitofp_cast_4xi16_to_4xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <8 x i16>)
739 ; CHECK-NEXT: %3 = extractelement <8 x i16> %1, i32 0
740 ; CHECK-NEXT: %4 = uitofp i16 %3 to double
741 ; CHECK-NEXT: %5 = insertelement <2 x double> undef, double %4, i32 0
742 ; CHECK-NEXT: %6 = extractelement <8 x i16> %1, i32 1
743 ; CHECK-NEXT: %7 = uitofp i16 %6 to double
744 ; CHECK-NEXT: %8 = insertelement <2 x double> %5, double %7, i32 1
745 ; CHECK-NEXT: %9 = extractelement <8 x i16> %1, i32 2
746 ; CHECK-NEXT: %10 = uitofp i16 %9 to double
747 ; CHECK-NEXT: %11 = insertelement <2 x double> undef, double %10, i32 0
748 ; CHECK-NEXT: %12 = extractelement <8 x i16> %1, i32 3
749 ; CHECK-NEXT: %13 = uitofp i16 %12 to double
750 ; CHECK-NEXT: %14 = insertelement <2 x double> %11, double %13, i32 1
751 ; CHECK-NEXT: store <2 x double> %14, <2 x double>* %0, align 16
752 ; CHECK-NEXT: ret <2 x double> %8
753
754 define <4 x double> @uitofp_cast_4xi32_to_4xdouble(<4 x i32>) {
755 %2 = uitofp <4 x i32> %0 to <4 x double>
756 ret <4 x double> %2
757 }
758 ; CHECK-LABEL: define <2 x double> @uitofp_cast_4xi32_to_4xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <4 x i32>)
759 ; CHECK-NEXT: %3 = extractelement <4 x i32> %1, i32 0
760 ; CHECK-NEXT: %4 = uitofp i32 %3 to double
761 ; CHECK-NEXT: %5 = insertelement <2 x double> undef, double %4, i32 0
762 ; CHECK-NEXT: %6 = extractelement <4 x i32> %1, i32 1
763 ; CHECK-NEXT: %7 = uitofp i32 %6 to double
764 ; CHECK-NEXT: %8 = insertelement <2 x double> %5, double %7, i32 1
765 ; CHECK-NEXT: %9 = extractelement <4 x i32> %1, i32 2
766 ; CHECK-NEXT: %10 = uitofp i32 %9 to double
767 ; CHECK-NEXT: %11 = insertelement <2 x double> undef, double %10, i32 0
768 ; CHECK-NEXT: %12 = extractelement <4 x i32> %1, i32 3
769 ; CHECK-NEXT: %13 = uitofp i32 %12 to double
770 ; CHECK-NEXT: %14 = insertelement <2 x double> %11, double %13, i32 1
771 ; CHECK-NEXT: store <2 x double> %14, <2 x double>* %0, align 16
772 ; CHECK-NEXT: ret <2 x double> %8
773
774 define <4 x double> @uitofp_cast_4xi64_to_4xdouble(<4 x i64>) {
775 %2 = uitofp <4 x i64> %0 to <4 x double>
776 ret <4 x double> %2
777 }
778 ; CHECK-LABEL: define <2 x double> @uitofp_cast_4xi64_to_4xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>)
779 ; CHECK-NEXT: %4 = uitofp <2 x i64> %1 to <2 x double>
780 ; CHECK-NEXT: %5 = uitofp <2 x i64> %2 to <2 x double>
781 ; CHECK-NEXT: store <2 x double> %5, <2 x double>* %0, align 16
782 ; CHECK-NEXT: ret <2 x double> %4
783
784 define <4 x float> @sitofp_cast_4xi8_to_4xfloat(<4 x i8>) {
785 %2 = sitofp <4 x i8> %0 to <4 x float>
786 ret <4 x float> %2
787 }
788 ; CHECK-LABEL: define <4 x float> @sitofp_cast_4xi8_to_4xfloat(<16 x i8>)
789 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
790 ; CHECK-NEXT: %3 = sitofp i8 %2 to float
791 ; CHECK-NEXT: %4 = insertelement <4 x float> undef, float %3, i32 0
792 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
793 ; CHECK-NEXT: %6 = sitofp i8 %5 to float
794 ; CHECK-NEXT: %7 = insertelement <4 x float> %4, float %6, i32 1
795 ; CHECK-NEXT: %8 = extractelement <16 x i8> %0, i32 2
796 ; CHECK-NEXT: %9 = sitofp i8 %8 to float
797 ; CHECK-NEXT: %10 = insertelement <4 x float> %7, float %9, i32 2
798 ; CHECK-NEXT: %11 = extractelement <16 x i8> %0, i32 3
799 ; CHECK-NEXT: %12 = sitofp i8 %11 to float
800 ; CHECK-NEXT: %13 = insertelement <4 x float> %10, float %12, i32 3
801 ; CHECK-NEXT: ret <4 x float> %13
802
803 define <4 x float> @sitofp_cast_4xi16_to_4xfloat(<4 x i16>) {
804 %2 = sitofp <4 x i16> %0 to <4 x float>
805 ret <4 x float> %2
806 }
807 ; CHECK-LABEL: define <4 x float> @sitofp_cast_4xi16_to_4xfloat(<8 x i16>)
808 ; CHECK-NEXT: %2 = extractelement <8 x i16> %0, i32 0
809 ; CHECK-NEXT: %3 = sitofp i16 %2 to float
810 ; CHECK-NEXT: %4 = insertelement <4 x float> undef, float %3, i32 0
811 ; CHECK-NEXT: %5 = extractelement <8 x i16> %0, i32 1
812 ; CHECK-NEXT: %6 = sitofp i16 %5 to float
813 ; CHECK-NEXT: %7 = insertelement <4 x float> %4, float %6, i32 1
814 ; CHECK-NEXT: %8 = extractelement <8 x i16> %0, i32 2
815 ; CHECK-NEXT: %9 = sitofp i16 %8 to float
816 ; CHECK-NEXT: %10 = insertelement <4 x float> %7, float %9, i32 2
817 ; CHECK-NEXT: %11 = extractelement <8 x i16> %0, i32 3
818 ; CHECK-NEXT: %12 = sitofp i16 %11 to float
819 ; CHECK-NEXT: %13 = insertelement <4 x float> %10, float %12, i32 3
820 ; CHECK-NEXT: ret <4 x float> %13
821
822 define <4 x float> @sitofp_cast_4xi32_to_4xfloat(<4 x i32>) {
823 %2 = sitofp <4 x i32> %0 to <4 x float>
824 ret <4 x float> %2
825 }
826 ; CHECK-LABEL: define <4 x float> @sitofp_cast_4xi32_to_4xfloat(<4 x i32>)
827 ; CHECK-NEXT: %2 = sitofp <4 x i32> %0 to <4 x float>
828 ; CHECK-NEXT: ret <4 x float> %2
829
830 define <4 x float> @sitofp_cast_4xi64_to_4xfloat(<4 x i64>) {
831 %2 = sitofp <4 x i64> %0 to <4 x float>
832 ret <4 x float> %2
833 }
834 ; CHECK-LABEL: define <4 x float> @sitofp_cast_4xi64_to_4xfloat(<2 x i64>, <2 x i64>)
835 ; CHECK-NEXT: %3 = extractelement <2 x i64> %0, i32 0
836 ; CHECK-NEXT: %4 = sitofp i64 %3 to float
837 ; CHECK-NEXT: %5 = insertelement <4 x float> undef, float %4, i32 0
838 ; CHECK-NEXT: %6 = extractelement <2 x i64> %0, i32 1
839 ; CHECK-NEXT: %7 = sitofp i64 %6 to float
840 ; CHECK-NEXT: %8 = insertelement <4 x float> %5, float %7, i32 1
841 ; CHECK-NEXT: %9 = extractelement <2 x i64> %1, i32 0
842 ; CHECK-NEXT: %10 = sitofp i64 %9 to float
843 ; CHECK-NEXT: %11 = insertelement <4 x float> %8, float %10, i32 2
844 ; CHECK-NEXT: %12 = extractelement <2 x i64> %1, i32 1
845 ; CHECK-NEXT: %13 = sitofp i64 %12 to float
846 ; CHECK-NEXT: %14 = insertelement <4 x float> %11, float %13, i32 3
847 ; CHECK-NEXT: ret <4 x float> %14
848
849 define <4 x double> @sitofp_cast_4xi8_to_4xdouble(<4 x i8>) {
850 %2 = sitofp <4 x i8> %0 to <4 x double>
851 ret <4 x double> %2
852 }
853 ; CHECK-LABEL: define <2 x double> @sitofp_cast_4xi8_to_4xdouble(<2 x double>* n ocapture nonnull dereferenceable(16), <16 x i8>)
854 ; CHECK-NEXT: %3 = extractelement <16 x i8> %1, i32 0
855 ; CHECK-NEXT: %4 = sitofp i8 %3 to double
856 ; CHECK-NEXT: %5 = insertelement <2 x double> undef, double %4, i32 0
857 ; CHECK-NEXT: %6 = extractelement <16 x i8> %1, i32 1
858 ; CHECK-NEXT: %7 = sitofp i8 %6 to double
859 ; CHECK-NEXT: %8 = insertelement <2 x double> %5, double %7, i32 1
860 ; CHECK-NEXT: %9 = extractelement <16 x i8> %1, i32 2
861 ; CHECK-NEXT: %10 = sitofp i8 %9 to double
862 ; CHECK-NEXT: %11 = insertelement <2 x double> undef, double %10, i32 0
863 ; CHECK-NEXT: %12 = extractelement <16 x i8> %1, i32 3
864 ; CHECK-NEXT: %13 = sitofp i8 %12 to double
865 ; CHECK-NEXT: %14 = insertelement <2 x double> %11, double %13, i32 1
866 ; CHECK-NEXT: store <2 x double> %14, <2 x double>* %0, align 16
867 ; CHECK-NEXT: ret <2 x double> %8
868
869 define <4 x double> @sitofp_cast_4xi16_to_4xdouble(<4 x i16>) {
870 %2 = sitofp <4 x i16> %0 to <4 x double>
871 ret <4 x double> %2
872 }
873 ; CHECK-LABEL: define <2 x double> @sitofp_cast_4xi16_to_4xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <8 x i16>)
874 ; CHECK-NEXT: %3 = extractelement <8 x i16> %1, i32 0
875 ; CHECK-NEXT: %4 = sitofp i16 %3 to double
876 ; CHECK-NEXT: %5 = insertelement <2 x double> undef, double %4, i32 0
877 ; CHECK-NEXT: %6 = extractelement <8 x i16> %1, i32 1
878 ; CHECK-NEXT: %7 = sitofp i16 %6 to double
879 ; CHECK-NEXT: %8 = insertelement <2 x double> %5, double %7, i32 1
880 ; CHECK-NEXT: %9 = extractelement <8 x i16> %1, i32 2
881 ; CHECK-NEXT: %10 = sitofp i16 %9 to double
882 ; CHECK-NEXT: %11 = insertelement <2 x double> undef, double %10, i32 0
883 ; CHECK-NEXT: %12 = extractelement <8 x i16> %1, i32 3
884 ; CHECK-NEXT: %13 = sitofp i16 %12 to double
885 ; CHECK-NEXT: %14 = insertelement <2 x double> %11, double %13, i32 1
886 ; CHECK-NEXT: store <2 x double> %14, <2 x double>* %0, align 16
887 ; CHECK-NEXT: ret <2 x double> %8
888
889 define <4 x double> @sitofp_cast_4xi32_to_4xdouble(<4 x i32>) {
890 %2 = sitofp <4 x i32> %0 to <4 x double>
891 ret <4 x double> %2
892 }
893 ; CHECK-LABEL: define <2 x double> @sitofp_cast_4xi32_to_4xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <4 x i32>)
894 ; CHECK-NEXT: %3 = extractelement <4 x i32> %1, i32 0
895 ; CHECK-NEXT: %4 = sitofp i32 %3 to double
896 ; CHECK-NEXT: %5 = insertelement <2 x double> undef, double %4, i32 0
897 ; CHECK-NEXT: %6 = extractelement <4 x i32> %1, i32 1
898 ; CHECK-NEXT: %7 = sitofp i32 %6 to double
899 ; CHECK-NEXT: %8 = insertelement <2 x double> %5, double %7, i32 1
900 ; CHECK-NEXT: %9 = extractelement <4 x i32> %1, i32 2
901 ; CHECK-NEXT: %10 = sitofp i32 %9 to double
902 ; CHECK-NEXT: %11 = insertelement <2 x double> undef, double %10, i32 0
903 ; CHECK-NEXT: %12 = extractelement <4 x i32> %1, i32 3
904 ; CHECK-NEXT: %13 = sitofp i32 %12 to double
905 ; CHECK-NEXT: %14 = insertelement <2 x double> %11, double %13, i32 1
906 ; CHECK-NEXT: store <2 x double> %14, <2 x double>* %0, align 16
907 ; CHECK-NEXT: ret <2 x double> %8
908
909 define <4 x double> @sitofp_cast_4xi64_to_4xdouble(<4 x i64>) {
910 %2 = sitofp <4 x i64> %0 to <4 x double>
911 ret <4 x double> %2
912 }
913 ; CHECK-LABEL: define <2 x double> @sitofp_cast_4xi64_to_4xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>)
914 ; CHECK-NEXT: %4 = sitofp <2 x i64> %1 to <2 x double>
915 ; CHECK-NEXT: %5 = sitofp <2 x i64> %2 to <2 x double>
916 ; CHECK-NEXT: store <2 x double> %5, <2 x double>* %0, align 16
917 ; CHECK-NEXT: ret <2 x double> %4
918
919 define <6 x i8> @fptoui_cast_6xfloat_to_6xi8(<6 x float>) {
920 %2 = fptoui <6 x float> %0 to <6 x i8>
921 ret <6 x i8> %2
922 }
923 ; CHECK-LABEL: define <16 x i8> @fptoui_cast_6xfloat_to_6xi8(<4 x float>, <4 x f loat>)
924 ; CHECK-NEXT: %3 = extractelement <4 x float> %0, i32 0
925 ; CHECK-NEXT: %4 = fptoui float %3 to i8
926 ; CHECK-NEXT: %5 = insertelement <16 x i8> undef, i8 %4, i32 0
927 ; CHECK-NEXT: %6 = extractelement <4 x float> %0, i32 1
928 ; CHECK-NEXT: %7 = fptoui float %6 to i8
929 ; CHECK-NEXT: %8 = insertelement <16 x i8> %5, i8 %7, i32 1
930 ; CHECK-NEXT: %9 = extractelement <4 x float> %0, i32 2
931 ; CHECK-NEXT: %10 = fptoui float %9 to i8
932 ; CHECK-NEXT: %11 = insertelement <16 x i8> %8, i8 %10, i32 2
933 ; CHECK-NEXT: %12 = extractelement <4 x float> %0, i32 3
934 ; CHECK-NEXT: %13 = fptoui float %12 to i8
935 ; CHECK-NEXT: %14 = insertelement <16 x i8> %11, i8 %13, i32 3
936 ; CHECK-NEXT: %15 = extractelement <4 x float> %1, i32 0
937 ; CHECK-NEXT: %16 = fptoui float %15 to i8
938 ; CHECK-NEXT: %17 = insertelement <16 x i8> %14, i8 %16, i32 4
939 ; CHECK-NEXT: %18 = extractelement <4 x float> %1, i32 1
940 ; CHECK-NEXT: %19 = fptoui float %18 to i8
941 ; CHECK-NEXT: %20 = insertelement <16 x i8> %17, i8 %19, i32 5
942 ; CHECK-NEXT: ret <16 x i8> %20
943
944 define <6 x i16> @fptoui_cast_6xfloat_to_6xi16(<6 x float>) {
945 %2 = fptoui <6 x float> %0 to <6 x i16>
946 ret <6 x i16> %2
947 }
948 ; CHECK-LABEL: define <8 x i16> @fptoui_cast_6xfloat_to_6xi16(<4 x float>, <4 x float>)
949 ; CHECK-NEXT: %3 = extractelement <4 x float> %0, i32 0
950 ; CHECK-NEXT: %4 = fptoui float %3 to i16
951 ; CHECK-NEXT: %5 = insertelement <8 x i16> undef, i16 %4, i32 0
952 ; CHECK-NEXT: %6 = extractelement <4 x float> %0, i32 1
953 ; CHECK-NEXT: %7 = fptoui float %6 to i16
954 ; CHECK-NEXT: %8 = insertelement <8 x i16> %5, i16 %7, i32 1
955 ; CHECK-NEXT: %9 = extractelement <4 x float> %0, i32 2
956 ; CHECK-NEXT: %10 = fptoui float %9 to i16
957 ; CHECK-NEXT: %11 = insertelement <8 x i16> %8, i16 %10, i32 2
958 ; CHECK-NEXT: %12 = extractelement <4 x float> %0, i32 3
959 ; CHECK-NEXT: %13 = fptoui float %12 to i16
960 ; CHECK-NEXT: %14 = insertelement <8 x i16> %11, i16 %13, i32 3
961 ; CHECK-NEXT: %15 = extractelement <4 x float> %1, i32 0
962 ; CHECK-NEXT: %16 = fptoui float %15 to i16
963 ; CHECK-NEXT: %17 = insertelement <8 x i16> %14, i16 %16, i32 4
964 ; CHECK-NEXT: %18 = extractelement <4 x float> %1, i32 1
965 ; CHECK-NEXT: %19 = fptoui float %18 to i16
966 ; CHECK-NEXT: %20 = insertelement <8 x i16> %17, i16 %19, i32 5
967 ; CHECK-NEXT: ret <8 x i16> %20
968
969 define <6 x i32> @fptoui_cast_6xfloat_to_6xi32(<6 x float>) {
970 %2 = fptoui <6 x float> %0 to <6 x i32>
971 ret <6 x i32> %2
972 }
973 ; CHECK-LABEL: define <4 x i32> @fptoui_cast_6xfloat_to_6xi32(<4 x i32>* nocaptu re nonnull dereferenceable(16), <4 x float>, <4 x float>)
974 ; CHECK-NEXT: %4 = fptoui <4 x float> %1 to <4 x i32>
975 ; CHECK-NEXT: %5 = fptoui <4 x float> %2 to <4 x i32>
976 ; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
977 ; CHECK-NEXT: ret <4 x i32> %4
978
979 define <6 x i64> @fptoui_cast_6xfloat_to_6xi64(<6 x float>) {
980 %2 = fptoui <6 x float> %0 to <6 x i64>
981 ret <6 x i64> %2
982 }
983 ; CHECK-LABEL: define <2 x i64> @fptoui_cast_6xfloat_to_6xi64(<2 x i64>* nocaptu re nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16) , <4 x float>, <4 x float>)
984 ; CHECK-NEXT: %5 = extractelement <4 x float> %2, i32 0
985 ; CHECK-NEXT: %6 = fptoui float %5 to i64
986 ; CHECK-NEXT: %7 = insertelement <2 x i64> undef, i64 %6, i32 0
987 ; CHECK-NEXT: %8 = extractelement <4 x float> %2, i32 1
988 ; CHECK-NEXT: %9 = fptoui float %8 to i64
989 ; CHECK-NEXT: %10 = insertelement <2 x i64> %7, i64 %9, i32 1
990 ; CHECK-NEXT: %11 = extractelement <4 x float> %2, i32 2
991 ; CHECK-NEXT: %12 = fptoui float %11 to i64
992 ; CHECK-NEXT: %13 = insertelement <2 x i64> undef, i64 %12, i32 0
993 ; CHECK-NEXT: %14 = extractelement <4 x float> %2, i32 3
994 ; CHECK-NEXT: %15 = fptoui float %14 to i64
995 ; CHECK-NEXT: %16 = insertelement <2 x i64> %13, i64 %15, i32 1
996 ; CHECK-NEXT: %17 = extractelement <4 x float> %3, i32 0
997 ; CHECK-NEXT: %18 = fptoui float %17 to i64
998 ; CHECK-NEXT: %19 = insertelement <2 x i64> undef, i64 %18, i32 0
999 ; CHECK-NEXT: %20 = extractelement <4 x float> %3, i32 1
1000 ; CHECK-NEXT: %21 = fptoui float %20 to i64
1001 ; CHECK-NEXT: %22 = insertelement <2 x i64> %19, i64 %21, i32 1
1002 ; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %0, align 16
1003 ; CHECK-NEXT: store <2 x i64> %22, <2 x i64>* %1, align 16
1004 ; CHECK-NEXT: ret <2 x i64> %10
1005
1006 define <6 x i8> @fptoui_cast_6xdouble_to_6xi8(<6 x double>) {
1007 %2 = fptoui <6 x double> %0 to <6 x i8>
1008 ret <6 x i8> %2
1009 }
1010 ; CHECK-LABEL: define <16 x i8> @fptoui_cast_6xdouble_to_6xi8(<2 x double>, <2 x double>, <2 x double>)
1011 ; CHECK-NEXT: %4 = extractelement <2 x double> %0, i32 0
1012 ; CHECK-NEXT: %5 = fptoui double %4 to i8
1013 ; CHECK-NEXT: %6 = insertelement <16 x i8> undef, i8 %5, i32 0
1014 ; CHECK-NEXT: %7 = extractelement <2 x double> %0, i32 1
1015 ; CHECK-NEXT: %8 = fptoui double %7 to i8
1016 ; CHECK-NEXT: %9 = insertelement <16 x i8> %6, i8 %8, i32 1
1017 ; CHECK-NEXT: %10 = extractelement <2 x double> %1, i32 0
1018 ; CHECK-NEXT: %11 = fptoui double %10 to i8
1019 ; CHECK-NEXT: %12 = insertelement <16 x i8> %9, i8 %11, i32 2
1020 ; CHECK-NEXT: %13 = extractelement <2 x double> %1, i32 1
1021 ; CHECK-NEXT: %14 = fptoui double %13 to i8
1022 ; CHECK-NEXT: %15 = insertelement <16 x i8> %12, i8 %14, i32 3
1023 ; CHECK-NEXT: %16 = extractelement <2 x double> %2, i32 0
1024 ; CHECK-NEXT: %17 = fptoui double %16 to i8
1025 ; CHECK-NEXT: %18 = insertelement <16 x i8> %15, i8 %17, i32 4
1026 ; CHECK-NEXT: %19 = extractelement <2 x double> %2, i32 1
1027 ; CHECK-NEXT: %20 = fptoui double %19 to i8
1028 ; CHECK-NEXT: %21 = insertelement <16 x i8> %18, i8 %20, i32 5
1029 ; CHECK-NEXT: ret <16 x i8> %21
1030
1031 define <6 x i16> @fptoui_cast_6xdouble_to_6xi16(<6 x double>) {
1032 %2 = fptoui <6 x double> %0 to <6 x i16>
1033 ret <6 x i16> %2
1034 }
1035 ; CHECK-LABEL: define <8 x i16> @fptoui_cast_6xdouble_to_6xi16(<2 x double>, <2 x double>, <2 x double>)
1036 ; CHECK-NEXT: %4 = extractelement <2 x double> %0, i32 0
1037 ; CHECK-NEXT: %5 = fptoui double %4 to i16
1038 ; CHECK-NEXT: %6 = insertelement <8 x i16> undef, i16 %5, i32 0
1039 ; CHECK-NEXT: %7 = extractelement <2 x double> %0, i32 1
1040 ; CHECK-NEXT: %8 = fptoui double %7 to i16
1041 ; CHECK-NEXT: %9 = insertelement <8 x i16> %6, i16 %8, i32 1
1042 ; CHECK-NEXT: %10 = extractelement <2 x double> %1, i32 0
1043 ; CHECK-NEXT: %11 = fptoui double %10 to i16
1044 ; CHECK-NEXT: %12 = insertelement <8 x i16> %9, i16 %11, i32 2
1045 ; CHECK-NEXT: %13 = extractelement <2 x double> %1, i32 1
1046 ; CHECK-NEXT: %14 = fptoui double %13 to i16
1047 ; CHECK-NEXT: %15 = insertelement <8 x i16> %12, i16 %14, i32 3
1048 ; CHECK-NEXT: %16 = extractelement <2 x double> %2, i32 0
1049 ; CHECK-NEXT: %17 = fptoui double %16 to i16
1050 ; CHECK-NEXT: %18 = insertelement <8 x i16> %15, i16 %17, i32 4
1051 ; CHECK-NEXT: %19 = extractelement <2 x double> %2, i32 1
1052 ; CHECK-NEXT: %20 = fptoui double %19 to i16
1053 ; CHECK-NEXT: %21 = insertelement <8 x i16> %18, i16 %20, i32 5
1054 ; CHECK-NEXT: ret <8 x i16> %21
1055
1056 define <6 x i32> @fptoui_cast_6xdouble_to_6xi32(<6 x double>) {
1057 %2 = fptoui <6 x double> %0 to <6 x i32>
1058 ret <6 x i32> %2
1059 }
1060 ; CHECK-LABEL: define <4 x i32> @fptoui_cast_6xdouble_to_6xi32(<4 x i32>* nocapt ure nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>)
1061 ; CHECK-NEXT: %5 = extractelement <2 x double> %1, i32 0
1062 ; CHECK-NEXT: %6 = fptoui double %5 to i32
1063 ; CHECK-NEXT: %7 = insertelement <4 x i32> undef, i32 %6, i32 0
1064 ; CHECK-NEXT: %8 = extractelement <2 x double> %1, i32 1
1065 ; CHECK-NEXT: %9 = fptoui double %8 to i32
1066 ; CHECK-NEXT: %10 = insertelement <4 x i32> %7, i32 %9, i32 1
1067 ; CHECK-NEXT: %11 = extractelement <2 x double> %2, i32 0
1068 ; CHECK-NEXT: %12 = fptoui double %11 to i32
1069 ; CHECK-NEXT: %13 = insertelement <4 x i32> %10, i32 %12, i32 2
1070 ; CHECK-NEXT: %14 = extractelement <2 x double> %2, i32 1
1071 ; CHECK-NEXT: %15 = fptoui double %14 to i32
1072 ; CHECK-NEXT: %16 = insertelement <4 x i32> %13, i32 %15, i32 3
1073 ; CHECK-NEXT: %17 = extractelement <2 x double> %3, i32 0
1074 ; CHECK-NEXT: %18 = fptoui double %17 to i32
1075 ; CHECK-NEXT: %19 = insertelement <4 x i32> undef, i32 %18, i32 0
1076 ; CHECK-NEXT: %20 = extractelement <2 x double> %3, i32 1
1077 ; CHECK-NEXT: %21 = fptoui double %20 to i32
1078 ; CHECK-NEXT: %22 = insertelement <4 x i32> %19, i32 %21, i32 1
1079 ; CHECK-NEXT: store <4 x i32> %22, <4 x i32>* %0, align 16
1080 ; CHECK-NEXT: ret <4 x i32> %16
1081
1082 define <6 x i64> @fptoui_cast_6xdouble_to_6xi64(<6 x double>) {
1083 %2 = fptoui <6 x double> %0 to <6 x i64>
1084 ret <6 x i64> %2
1085 }
1086 ; CHECK-LABEL: define <2 x i64> @fptoui_cast_6xdouble_to_6xi64(<2 x i64>* nocapt ure nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16 ), <2 x double>, <2 x double>, <2 x double>)
1087 ; CHECK-NEXT: %6 = fptoui <2 x double> %2 to <2 x i64>
1088 ; CHECK-NEXT: %7 = fptoui <2 x double> %3 to <2 x i64>
1089 ; CHECK-NEXT: %8 = fptoui <2 x double> %4 to <2 x i64>
1090 ; CHECK-NEXT: store <2 x i64> %7, <2 x i64>* %0, align 16
1091 ; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %1, align 16
1092 ; CHECK-NEXT: ret <2 x i64> %6
1093
1094 define <6 x i8> @fptosi_cast_6xfloat_to_6xi8(<6 x float>) {
1095 %2 = fptosi <6 x float> %0 to <6 x i8>
1096 ret <6 x i8> %2
1097 }
1098 ; CHECK-LABEL: define <16 x i8> @fptosi_cast_6xfloat_to_6xi8(<4 x float>, <4 x f loat>)
1099 ; CHECK-NEXT: %3 = extractelement <4 x float> %0, i32 0
1100 ; CHECK-NEXT: %4 = fptosi float %3 to i8
1101 ; CHECK-NEXT: %5 = insertelement <16 x i8> undef, i8 %4, i32 0
1102 ; CHECK-NEXT: %6 = extractelement <4 x float> %0, i32 1
1103 ; CHECK-NEXT: %7 = fptosi float %6 to i8
1104 ; CHECK-NEXT: %8 = insertelement <16 x i8> %5, i8 %7, i32 1
1105 ; CHECK-NEXT: %9 = extractelement <4 x float> %0, i32 2
1106 ; CHECK-NEXT: %10 = fptosi float %9 to i8
1107 ; CHECK-NEXT: %11 = insertelement <16 x i8> %8, i8 %10, i32 2
1108 ; CHECK-NEXT: %12 = extractelement <4 x float> %0, i32 3
1109 ; CHECK-NEXT: %13 = fptosi float %12 to i8
1110 ; CHECK-NEXT: %14 = insertelement <16 x i8> %11, i8 %13, i32 3
1111 ; CHECK-NEXT: %15 = extractelement <4 x float> %1, i32 0
1112 ; CHECK-NEXT: %16 = fptosi float %15 to i8
1113 ; CHECK-NEXT: %17 = insertelement <16 x i8> %14, i8 %16, i32 4
1114 ; CHECK-NEXT: %18 = extractelement <4 x float> %1, i32 1
1115 ; CHECK-NEXT: %19 = fptosi float %18 to i8
1116 ; CHECK-NEXT: %20 = insertelement <16 x i8> %17, i8 %19, i32 5
1117 ; CHECK-NEXT: ret <16 x i8> %20
1118
1119 define <6 x i16> @fptosi_cast_6xfloat_to_6xi16(<6 x float>) {
1120 %2 = fptosi <6 x float> %0 to <6 x i16>
1121 ret <6 x i16> %2
1122 }
1123 ; CHECK-LABEL: define <8 x i16> @fptosi_cast_6xfloat_to_6xi16(<4 x float>, <4 x float>)
1124 ; CHECK-NEXT: %3 = extractelement <4 x float> %0, i32 0
1125 ; CHECK-NEXT: %4 = fptosi float %3 to i16
1126 ; CHECK-NEXT: %5 = insertelement <8 x i16> undef, i16 %4, i32 0
1127 ; CHECK-NEXT: %6 = extractelement <4 x float> %0, i32 1
1128 ; CHECK-NEXT: %7 = fptosi float %6 to i16
1129 ; CHECK-NEXT: %8 = insertelement <8 x i16> %5, i16 %7, i32 1
1130 ; CHECK-NEXT: %9 = extractelement <4 x float> %0, i32 2
1131 ; CHECK-NEXT: %10 = fptosi float %9 to i16
1132 ; CHECK-NEXT: %11 = insertelement <8 x i16> %8, i16 %10, i32 2
1133 ; CHECK-NEXT: %12 = extractelement <4 x float> %0, i32 3
1134 ; CHECK-NEXT: %13 = fptosi float %12 to i16
1135 ; CHECK-NEXT: %14 = insertelement <8 x i16> %11, i16 %13, i32 3
1136 ; CHECK-NEXT: %15 = extractelement <4 x float> %1, i32 0
1137 ; CHECK-NEXT: %16 = fptosi float %15 to i16
1138 ; CHECK-NEXT: %17 = insertelement <8 x i16> %14, i16 %16, i32 4
1139 ; CHECK-NEXT: %18 = extractelement <4 x float> %1, i32 1
1140 ; CHECK-NEXT: %19 = fptosi float %18 to i16
1141 ; CHECK-NEXT: %20 = insertelement <8 x i16> %17, i16 %19, i32 5
1142 ; CHECK-NEXT: ret <8 x i16> %20
1143
1144 define <6 x i32> @fptosi_cast_6xfloat_to_6xi32(<6 x float>) {
1145 %2 = fptosi <6 x float> %0 to <6 x i32>
1146 ret <6 x i32> %2
1147 }
1148 ; CHECK-LABEL: define <4 x i32> @fptosi_cast_6xfloat_to_6xi32(<4 x i32>* nocaptu re nonnull dereferenceable(16), <4 x float>, <4 x float>)
1149 ; CHECK-NEXT: %4 = fptosi <4 x float> %1 to <4 x i32>
1150 ; CHECK-NEXT: %5 = fptosi <4 x float> %2 to <4 x i32>
1151 ; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
1152 ; CHECK-NEXT: ret <4 x i32> %4
1153
1154 define <6 x i64> @fptosi_cast_6xfloat_to_6xi64(<6 x float>) {
1155 %2 = fptosi <6 x float> %0 to <6 x i64>
1156 ret <6 x i64> %2
1157 }
1158 ; CHECK-LABEL: define <2 x i64> @fptosi_cast_6xfloat_to_6xi64(<2 x i64>* nocaptu re nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16) , <4 x float>, <4 x float>)
1159 ; CHECK-NEXT: %5 = extractelement <4 x float> %2, i32 0
1160 ; CHECK-NEXT: %6 = fptosi float %5 to i64
1161 ; CHECK-NEXT: %7 = insertelement <2 x i64> undef, i64 %6, i32 0
1162 ; CHECK-NEXT: %8 = extractelement <4 x float> %2, i32 1
1163 ; CHECK-NEXT: %9 = fptosi float %8 to i64
1164 ; CHECK-NEXT: %10 = insertelement <2 x i64> %7, i64 %9, i32 1
1165 ; CHECK-NEXT: %11 = extractelement <4 x float> %2, i32 2
1166 ; CHECK-NEXT: %12 = fptosi float %11 to i64
1167 ; CHECK-NEXT: %13 = insertelement <2 x i64> undef, i64 %12, i32 0
1168 ; CHECK-NEXT: %14 = extractelement <4 x float> %2, i32 3
1169 ; CHECK-NEXT: %15 = fptosi float %14 to i64
1170 ; CHECK-NEXT: %16 = insertelement <2 x i64> %13, i64 %15, i32 1
1171 ; CHECK-NEXT: %17 = extractelement <4 x float> %3, i32 0
1172 ; CHECK-NEXT: %18 = fptosi float %17 to i64
1173 ; CHECK-NEXT: %19 = insertelement <2 x i64> undef, i64 %18, i32 0
1174 ; CHECK-NEXT: %20 = extractelement <4 x float> %3, i32 1
1175 ; CHECK-NEXT: %21 = fptosi float %20 to i64
1176 ; CHECK-NEXT: %22 = insertelement <2 x i64> %19, i64 %21, i32 1
1177 ; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %0, align 16
1178 ; CHECK-NEXT: store <2 x i64> %22, <2 x i64>* %1, align 16
1179 ; CHECK-NEXT: ret <2 x i64> %10
1180
1181 define <6 x i8> @fptosi_cast_6xdouble_to_6xi8(<6 x double>) {
1182 %2 = fptosi <6 x double> %0 to <6 x i8>
1183 ret <6 x i8> %2
1184 }
1185 ; CHECK-LABEL: define <16 x i8> @fptosi_cast_6xdouble_to_6xi8(<2 x double>, <2 x double>, <2 x double>)
1186 ; CHECK-NEXT: %4 = extractelement <2 x double> %0, i32 0
1187 ; CHECK-NEXT: %5 = fptosi double %4 to i8
1188 ; CHECK-NEXT: %6 = insertelement <16 x i8> undef, i8 %5, i32 0
1189 ; CHECK-NEXT: %7 = extractelement <2 x double> %0, i32 1
1190 ; CHECK-NEXT: %8 = fptosi double %7 to i8
1191 ; CHECK-NEXT: %9 = insertelement <16 x i8> %6, i8 %8, i32 1
1192 ; CHECK-NEXT: %10 = extractelement <2 x double> %1, i32 0
1193 ; CHECK-NEXT: %11 = fptosi double %10 to i8
1194 ; CHECK-NEXT: %12 = insertelement <16 x i8> %9, i8 %11, i32 2
1195 ; CHECK-NEXT: %13 = extractelement <2 x double> %1, i32 1
1196 ; CHECK-NEXT: %14 = fptosi double %13 to i8
1197 ; CHECK-NEXT: %15 = insertelement <16 x i8> %12, i8 %14, i32 3
1198 ; CHECK-NEXT: %16 = extractelement <2 x double> %2, i32 0
1199 ; CHECK-NEXT: %17 = fptosi double %16 to i8
1200 ; CHECK-NEXT: %18 = insertelement <16 x i8> %15, i8 %17, i32 4
1201 ; CHECK-NEXT: %19 = extractelement <2 x double> %2, i32 1
1202 ; CHECK-NEXT: %20 = fptosi double %19 to i8
1203 ; CHECK-NEXT: %21 = insertelement <16 x i8> %18, i8 %20, i32 5
1204 ; CHECK-NEXT: ret <16 x i8> %21
1205
1206 define <6 x i16> @fptosi_cast_6xdouble_to_6xi16(<6 x double>) {
1207 %2 = fptosi <6 x double> %0 to <6 x i16>
1208 ret <6 x i16> %2
1209 }
1210 ; CHECK-LABEL: define <8 x i16> @fptosi_cast_6xdouble_to_6xi16(<2 x double>, <2 x double>, <2 x double>)
1211 ; CHECK-NEXT: %4 = extractelement <2 x double> %0, i32 0
1212 ; CHECK-NEXT: %5 = fptosi double %4 to i16
1213 ; CHECK-NEXT: %6 = insertelement <8 x i16> undef, i16 %5, i32 0
1214 ; CHECK-NEXT: %7 = extractelement <2 x double> %0, i32 1
1215 ; CHECK-NEXT: %8 = fptosi double %7 to i16
1216 ; CHECK-NEXT: %9 = insertelement <8 x i16> %6, i16 %8, i32 1
1217 ; CHECK-NEXT: %10 = extractelement <2 x double> %1, i32 0
1218 ; CHECK-NEXT: %11 = fptosi double %10 to i16
1219 ; CHECK-NEXT: %12 = insertelement <8 x i16> %9, i16 %11, i32 2
1220 ; CHECK-NEXT: %13 = extractelement <2 x double> %1, i32 1
1221 ; CHECK-NEXT: %14 = fptosi double %13 to i16
1222 ; CHECK-NEXT: %15 = insertelement <8 x i16> %12, i16 %14, i32 3
1223 ; CHECK-NEXT: %16 = extractelement <2 x double> %2, i32 0
1224 ; CHECK-NEXT: %17 = fptosi double %16 to i16
1225 ; CHECK-NEXT: %18 = insertelement <8 x i16> %15, i16 %17, i32 4
1226 ; CHECK-NEXT: %19 = extractelement <2 x double> %2, i32 1
1227 ; CHECK-NEXT: %20 = fptosi double %19 to i16
1228 ; CHECK-NEXT: %21 = insertelement <8 x i16> %18, i16 %20, i32 5
1229 ; CHECK-NEXT: ret <8 x i16> %21
1230
1231 define <6 x i32> @fptosi_cast_6xdouble_to_6xi32(<6 x double>) {
1232 %2 = fptosi <6 x double> %0 to <6 x i32>
1233 ret <6 x i32> %2
1234 }
1235 ; CHECK-LABEL: define <4 x i32> @fptosi_cast_6xdouble_to_6xi32(<4 x i32>* nocapt ure nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>)
1236 ; CHECK-NEXT: %5 = extractelement <2 x double> %1, i32 0
1237 ; CHECK-NEXT: %6 = fptosi double %5 to i32
1238 ; CHECK-NEXT: %7 = insertelement <4 x i32> undef, i32 %6, i32 0
1239 ; CHECK-NEXT: %8 = extractelement <2 x double> %1, i32 1
1240 ; CHECK-NEXT: %9 = fptosi double %8 to i32
1241 ; CHECK-NEXT: %10 = insertelement <4 x i32> %7, i32 %9, i32 1
1242 ; CHECK-NEXT: %11 = extractelement <2 x double> %2, i32 0
1243 ; CHECK-NEXT: %12 = fptosi double %11 to i32
1244 ; CHECK-NEXT: %13 = insertelement <4 x i32> %10, i32 %12, i32 2
1245 ; CHECK-NEXT: %14 = extractelement <2 x double> %2, i32 1
1246 ; CHECK-NEXT: %15 = fptosi double %14 to i32
1247 ; CHECK-NEXT: %16 = insertelement <4 x i32> %13, i32 %15, i32 3
1248 ; CHECK-NEXT: %17 = extractelement <2 x double> %3, i32 0
1249 ; CHECK-NEXT: %18 = fptosi double %17 to i32
1250 ; CHECK-NEXT: %19 = insertelement <4 x i32> undef, i32 %18, i32 0
1251 ; CHECK-NEXT: %20 = extractelement <2 x double> %3, i32 1
1252 ; CHECK-NEXT: %21 = fptosi double %20 to i32
1253 ; CHECK-NEXT: %22 = insertelement <4 x i32> %19, i32 %21, i32 1
1254 ; CHECK-NEXT: store <4 x i32> %22, <4 x i32>* %0, align 16
1255 ; CHECK-NEXT: ret <4 x i32> %16
1256
1257 define <6 x i64> @fptosi_cast_6xdouble_to_6xi64(<6 x double>) {
1258 %2 = fptosi <6 x double> %0 to <6 x i64>
1259 ret <6 x i64> %2
1260 }
1261 ; CHECK-LABEL: define <2 x i64> @fptosi_cast_6xdouble_to_6xi64(<2 x i64>* nocapt ure nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16 ), <2 x double>, <2 x double>, <2 x double>)
1262 ; CHECK-NEXT: %6 = fptosi <2 x double> %2 to <2 x i64>
1263 ; CHECK-NEXT: %7 = fptosi <2 x double> %3 to <2 x i64>
1264 ; CHECK-NEXT: %8 = fptosi <2 x double> %4 to <2 x i64>
1265 ; CHECK-NEXT: store <2 x i64> %7, <2 x i64>* %0, align 16
1266 ; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %1, align 16
1267 ; CHECK-NEXT: ret <2 x i64> %6
1268
1269 define <6 x float> @uitofp_cast_6xi8_to_6xfloat(<6 x i8>) {
1270 %2 = uitofp <6 x i8> %0 to <6 x float>
1271 ret <6 x float> %2
1272 }
1273 ; CHECK-LABEL: define <4 x float> @uitofp_cast_6xi8_to_6xfloat(<4 x float>* noca pture nonnull dereferenceable(16), <16 x i8>)
1274 ; CHECK-NEXT: %3 = extractelement <16 x i8> %1, i32 0
1275 ; CHECK-NEXT: %4 = uitofp i8 %3 to float
1276 ; CHECK-NEXT: %5 = insertelement <4 x float> undef, float %4, i32 0
1277 ; CHECK-NEXT: %6 = extractelement <16 x i8> %1, i32 1
1278 ; CHECK-NEXT: %7 = uitofp i8 %6 to float
1279 ; CHECK-NEXT: %8 = insertelement <4 x float> %5, float %7, i32 1
1280 ; CHECK-NEXT: %9 = extractelement <16 x i8> %1, i32 2
1281 ; CHECK-NEXT: %10 = uitofp i8 %9 to float
1282 ; CHECK-NEXT: %11 = insertelement <4 x float> %8, float %10, i32 2
1283 ; CHECK-NEXT: %12 = extractelement <16 x i8> %1, i32 3
1284 ; CHECK-NEXT: %13 = uitofp i8 %12 to float
1285 ; CHECK-NEXT: %14 = insertelement <4 x float> %11, float %13, i32 3
1286 ; CHECK-NEXT: %15 = extractelement <16 x i8> %1, i32 4
1287 ; CHECK-NEXT: %16 = uitofp i8 %15 to float
1288 ; CHECK-NEXT: %17 = insertelement <4 x float> undef, float %16, i32 0
1289 ; CHECK-NEXT: %18 = extractelement <16 x i8> %1, i32 5
1290 ; CHECK-NEXT: %19 = uitofp i8 %18 to float
1291 ; CHECK-NEXT: %20 = insertelement <4 x float> %17, float %19, i32 1
1292 ; CHECK-NEXT: store <4 x float> %20, <4 x float>* %0, align 16
1293 ; CHECK-NEXT: ret <4 x float> %14
1294
1295 define <6 x float> @uitofp_cast_6xi16_to_6xfloat(<6 x i16>) {
1296 %2 = uitofp <6 x i16> %0 to <6 x float>
1297 ret <6 x float> %2
1298 }
1299 ; CHECK-LABEL: define <4 x float> @uitofp_cast_6xi16_to_6xfloat(<4 x float>* noc apture nonnull dereferenceable(16), <8 x i16>)
1300 ; CHECK-NEXT: %3 = extractelement <8 x i16> %1, i32 0
1301 ; CHECK-NEXT: %4 = uitofp i16 %3 to float
1302 ; CHECK-NEXT: %5 = insertelement <4 x float> undef, float %4, i32 0
1303 ; CHECK-NEXT: %6 = extractelement <8 x i16> %1, i32 1
1304 ; CHECK-NEXT: %7 = uitofp i16 %6 to float
1305 ; CHECK-NEXT: %8 = insertelement <4 x float> %5, float %7, i32 1
1306 ; CHECK-NEXT: %9 = extractelement <8 x i16> %1, i32 2
1307 ; CHECK-NEXT: %10 = uitofp i16 %9 to float
1308 ; CHECK-NEXT: %11 = insertelement <4 x float> %8, float %10, i32 2
1309 ; CHECK-NEXT: %12 = extractelement <8 x i16> %1, i32 3
1310 ; CHECK-NEXT: %13 = uitofp i16 %12 to float
1311 ; CHECK-NEXT: %14 = insertelement <4 x float> %11, float %13, i32 3
1312 ; CHECK-NEXT: %15 = extractelement <8 x i16> %1, i32 4
1313 ; CHECK-NEXT: %16 = uitofp i16 %15 to float
1314 ; CHECK-NEXT: %17 = insertelement <4 x float> undef, float %16, i32 0
1315 ; CHECK-NEXT: %18 = extractelement <8 x i16> %1, i32 5
1316 ; CHECK-NEXT: %19 = uitofp i16 %18 to float
1317 ; CHECK-NEXT: %20 = insertelement <4 x float> %17, float %19, i32 1
1318 ; CHECK-NEXT: store <4 x float> %20, <4 x float>* %0, align 16
1319 ; CHECK-NEXT: ret <4 x float> %14
1320
1321 define <6 x float> @uitofp_cast_6xi32_to_6xfloat(<6 x i32>) {
1322 %2 = uitofp <6 x i32> %0 to <6 x float>
1323 ret <6 x float> %2
1324 }
1325 ; CHECK-LABEL: define <4 x float> @uitofp_cast_6xi32_to_6xfloat(<4 x float>* noc apture nonnull dereferenceable(16), <4 x i32>, <4 x i32>)
1326 ; CHECK-NEXT: %4 = uitofp <4 x i32> %1 to <4 x float>
1327 ; CHECK-NEXT: %5 = uitofp <4 x i32> %2 to <4 x float>
1328 ; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
1329 ; CHECK-NEXT: ret <4 x float> %4
1330
1331 define <6 x float> @uitofp_cast_6xi64_to_6xfloat(<6 x i64>) {
1332 %2 = uitofp <6 x i64> %0 to <6 x float>
1333 ret <6 x float> %2
1334 }
1335 ; CHECK-LABEL: define <4 x float> @uitofp_cast_6xi64_to_6xfloat(<4 x float>* noc apture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>)
1336 ; CHECK-NEXT: %5 = extractelement <2 x i64> %1, i32 0
1337 ; CHECK-NEXT: %6 = uitofp i64 %5 to float
1338 ; CHECK-NEXT: %7 = insertelement <4 x float> undef, float %6, i32 0
1339 ; CHECK-NEXT: %8 = extractelement <2 x i64> %1, i32 1
1340 ; CHECK-NEXT: %9 = uitofp i64 %8 to float
1341 ; CHECK-NEXT: %10 = insertelement <4 x float> %7, float %9, i32 1
1342 ; CHECK-NEXT: %11 = extractelement <2 x i64> %2, i32 0
1343 ; CHECK-NEXT: %12 = uitofp i64 %11 to float
1344 ; CHECK-NEXT: %13 = insertelement <4 x float> %10, float %12, i32 2
1345 ; CHECK-NEXT: %14 = extractelement <2 x i64> %2, i32 1
1346 ; CHECK-NEXT: %15 = uitofp i64 %14 to float
1347 ; CHECK-NEXT: %16 = insertelement <4 x float> %13, float %15, i32 3
1348 ; CHECK-NEXT: %17 = extractelement <2 x i64> %3, i32 0
1349 ; CHECK-NEXT: %18 = uitofp i64 %17 to float
1350 ; CHECK-NEXT: %19 = insertelement <4 x float> undef, float %18, i32 0
1351 ; CHECK-NEXT: %20 = extractelement <2 x i64> %3, i32 1
1352 ; CHECK-NEXT: %21 = uitofp i64 %20 to float
1353 ; CHECK-NEXT: %22 = insertelement <4 x float> %19, float %21, i32 1
1354 ; CHECK-NEXT: store <4 x float> %22, <4 x float>* %0, align 16
1355 ; CHECK-NEXT: ret <4 x float> %16
1356
1357 define <6 x double> @uitofp_cast_6xi8_to_6xdouble(<6 x i8>) {
1358 %2 = uitofp <6 x i8> %0 to <6 x double>
1359 ret <6 x double> %2
1360 }
1361 ; CHECK-LABEL: define <2 x double> @uitofp_cast_6xi8_to_6xdouble(<2 x double>* n ocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenc eable(16), <16 x i8>)
1362 ; CHECK-NEXT: %4 = extractelement <16 x i8> %2, i32 0
1363 ; CHECK-NEXT: %5 = uitofp i8 %4 to double
1364 ; CHECK-NEXT: %6 = insertelement <2 x double> undef, double %5, i32 0
1365 ; CHECK-NEXT: %7 = extractelement <16 x i8> %2, i32 1
1366 ; CHECK-NEXT: %8 = uitofp i8 %7 to double
1367 ; CHECK-NEXT: %9 = insertelement <2 x double> %6, double %8, i32 1
1368 ; CHECK-NEXT: %10 = extractelement <16 x i8> %2, i32 2
1369 ; CHECK-NEXT: %11 = uitofp i8 %10 to double
1370 ; CHECK-NEXT: %12 = insertelement <2 x double> undef, double %11, i32 0
1371 ; CHECK-NEXT: %13 = extractelement <16 x i8> %2, i32 3
1372 ; CHECK-NEXT: %14 = uitofp i8 %13 to double
1373 ; CHECK-NEXT: %15 = insertelement <2 x double> %12, double %14, i32 1
1374 ; CHECK-NEXT: %16 = extractelement <16 x i8> %2, i32 4
1375 ; CHECK-NEXT: %17 = uitofp i8 %16 to double
1376 ; CHECK-NEXT: %18 = insertelement <2 x double> undef, double %17, i32 0
1377 ; CHECK-NEXT: %19 = extractelement <16 x i8> %2, i32 5
1378 ; CHECK-NEXT: %20 = uitofp i8 %19 to double
1379 ; CHECK-NEXT: %21 = insertelement <2 x double> %18, double %20, i32 1
1380 ; CHECK-NEXT: store <2 x double> %15, <2 x double>* %0, align 16
1381 ; CHECK-NEXT: store <2 x double> %21, <2 x double>* %1, align 16
1382 ; CHECK-NEXT: ret <2 x double> %9
1383
1384 define <6 x double> @uitofp_cast_6xi16_to_6xdouble(<6 x i16>) {
1385 %2 = uitofp <6 x i16> %0 to <6 x double>
1386 ret <6 x double> %2
1387 }
1388 ; CHECK-LABEL: define <2 x double> @uitofp_cast_6xi16_to_6xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <8 x i16>)
1389 ; CHECK-NEXT: %4 = extractelement <8 x i16> %2, i32 0
1390 ; CHECK-NEXT: %5 = uitofp i16 %4 to double
1391 ; CHECK-NEXT: %6 = insertelement <2 x double> undef, double %5, i32 0
1392 ; CHECK-NEXT: %7 = extractelement <8 x i16> %2, i32 1
1393 ; CHECK-NEXT: %8 = uitofp i16 %7 to double
1394 ; CHECK-NEXT: %9 = insertelement <2 x double> %6, double %8, i32 1
1395 ; CHECK-NEXT: %10 = extractelement <8 x i16> %2, i32 2
1396 ; CHECK-NEXT: %11 = uitofp i16 %10 to double
1397 ; CHECK-NEXT: %12 = insertelement <2 x double> undef, double %11, i32 0
1398 ; CHECK-NEXT: %13 = extractelement <8 x i16> %2, i32 3
1399 ; CHECK-NEXT: %14 = uitofp i16 %13 to double
1400 ; CHECK-NEXT: %15 = insertelement <2 x double> %12, double %14, i32 1
1401 ; CHECK-NEXT: %16 = extractelement <8 x i16> %2, i32 4
1402 ; CHECK-NEXT: %17 = uitofp i16 %16 to double
1403 ; CHECK-NEXT: %18 = insertelement <2 x double> undef, double %17, i32 0
1404 ; CHECK-NEXT: %19 = extractelement <8 x i16> %2, i32 5
1405 ; CHECK-NEXT: %20 = uitofp i16 %19 to double
1406 ; CHECK-NEXT: %21 = insertelement <2 x double> %18, double %20, i32 1
1407 ; CHECK-NEXT: store <2 x double> %15, <2 x double>* %0, align 16
1408 ; CHECK-NEXT: store <2 x double> %21, <2 x double>* %1, align 16
1409 ; CHECK-NEXT: ret <2 x double> %9
1410
1411 define <6 x double> @uitofp_cast_6xi32_to_6xdouble(<6 x i32>) {
1412 %2 = uitofp <6 x i32> %0 to <6 x double>
1413 ret <6 x double> %2
1414 }
1415 ; CHECK-LABEL: define <2 x double> @uitofp_cast_6xi32_to_6xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <4 x i32>, <4 x i32>)
1416 ; CHECK-NEXT: %5 = extractelement <4 x i32> %2, i32 0
1417 ; CHECK-NEXT: %6 = uitofp i32 %5 to double
1418 ; CHECK-NEXT: %7 = insertelement <2 x double> undef, double %6, i32 0
1419 ; CHECK-NEXT: %8 = extractelement <4 x i32> %2, i32 1
1420 ; CHECK-NEXT: %9 = uitofp i32 %8 to double
1421 ; CHECK-NEXT: %10 = insertelement <2 x double> %7, double %9, i32 1
1422 ; CHECK-NEXT: %11 = extractelement <4 x i32> %2, i32 2
1423 ; CHECK-NEXT: %12 = uitofp i32 %11 to double
1424 ; CHECK-NEXT: %13 = insertelement <2 x double> undef, double %12, i32 0
1425 ; CHECK-NEXT: %14 = extractelement <4 x i32> %2, i32 3
1426 ; CHECK-NEXT: %15 = uitofp i32 %14 to double
1427 ; CHECK-NEXT: %16 = insertelement <2 x double> %13, double %15, i32 1
1428 ; CHECK-NEXT: %17 = extractelement <4 x i32> %3, i32 0
1429 ; CHECK-NEXT: %18 = uitofp i32 %17 to double
1430 ; CHECK-NEXT: %19 = insertelement <2 x double> undef, double %18, i32 0
1431 ; CHECK-NEXT: %20 = extractelement <4 x i32> %3, i32 1
1432 ; CHECK-NEXT: %21 = uitofp i32 %20 to double
1433 ; CHECK-NEXT: %22 = insertelement <2 x double> %19, double %21, i32 1
1434 ; CHECK-NEXT: store <2 x double> %16, <2 x double>* %0, align 16
1435 ; CHECK-NEXT: store <2 x double> %22, <2 x double>* %1, align 16
1436 ; CHECK-NEXT: ret <2 x double> %10
1437
1438 define <6 x double> @uitofp_cast_6xi64_to_6xdouble(<6 x i64>) {
1439 %2 = uitofp <6 x i64> %0 to <6 x double>
1440 ret <6 x double> %2
1441 }
1442 ; CHECK-LABEL: define <2 x double> @uitofp_cast_6xi64_to_6xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <2 x i64>, <2 x i64>, <2 x i64>)
1443 ; CHECK-NEXT: %6 = uitofp <2 x i64> %2 to <2 x double>
1444 ; CHECK-NEXT: %7 = uitofp <2 x i64> %3 to <2 x double>
1445 ; CHECK-NEXT: %8 = uitofp <2 x i64> %4 to <2 x double>
1446 ; CHECK-NEXT: store <2 x double> %7, <2 x double>* %0, align 16
1447 ; CHECK-NEXT: store <2 x double> %8, <2 x double>* %1, align 16
1448 ; CHECK-NEXT: ret <2 x double> %6
1449
1450 define <6 x float> @sitofp_cast_6xi8_to_6xfloat(<6 x i8>) {
1451 %2 = sitofp <6 x i8> %0 to <6 x float>
1452 ret <6 x float> %2
1453 }
1454 ; CHECK-LABEL: define <4 x float> @sitofp_cast_6xi8_to_6xfloat(<4 x float>* noca pture nonnull dereferenceable(16), <16 x i8>)
1455 ; CHECK-NEXT: %3 = extractelement <16 x i8> %1, i32 0
1456 ; CHECK-NEXT: %4 = sitofp i8 %3 to float
1457 ; CHECK-NEXT: %5 = insertelement <4 x float> undef, float %4, i32 0
1458 ; CHECK-NEXT: %6 = extractelement <16 x i8> %1, i32 1
1459 ; CHECK-NEXT: %7 = sitofp i8 %6 to float
1460 ; CHECK-NEXT: %8 = insertelement <4 x float> %5, float %7, i32 1
1461 ; CHECK-NEXT: %9 = extractelement <16 x i8> %1, i32 2
1462 ; CHECK-NEXT: %10 = sitofp i8 %9 to float
1463 ; CHECK-NEXT: %11 = insertelement <4 x float> %8, float %10, i32 2
1464 ; CHECK-NEXT: %12 = extractelement <16 x i8> %1, i32 3
1465 ; CHECK-NEXT: %13 = sitofp i8 %12 to float
1466 ; CHECK-NEXT: %14 = insertelement <4 x float> %11, float %13, i32 3
1467 ; CHECK-NEXT: %15 = extractelement <16 x i8> %1, i32 4
1468 ; CHECK-NEXT: %16 = sitofp i8 %15 to float
1469 ; CHECK-NEXT: %17 = insertelement <4 x float> undef, float %16, i32 0
1470 ; CHECK-NEXT: %18 = extractelement <16 x i8> %1, i32 5
1471 ; CHECK-NEXT: %19 = sitofp i8 %18 to float
1472 ; CHECK-NEXT: %20 = insertelement <4 x float> %17, float %19, i32 1
1473 ; CHECK-NEXT: store <4 x float> %20, <4 x float>* %0, align 16
1474 ; CHECK-NEXT: ret <4 x float> %14
1475
1476 define <6 x float> @sitofp_cast_6xi16_to_6xfloat(<6 x i16>) {
1477 %2 = sitofp <6 x i16> %0 to <6 x float>
1478 ret <6 x float> %2
1479 }
1480 ; CHECK-LABEL: define <4 x float> @sitofp_cast_6xi16_to_6xfloat(<4 x float>* noc apture nonnull dereferenceable(16), <8 x i16>)
1481 ; CHECK-NEXT: %3 = extractelement <8 x i16> %1, i32 0
1482 ; CHECK-NEXT: %4 = sitofp i16 %3 to float
1483 ; CHECK-NEXT: %5 = insertelement <4 x float> undef, float %4, i32 0
1484 ; CHECK-NEXT: %6 = extractelement <8 x i16> %1, i32 1
1485 ; CHECK-NEXT: %7 = sitofp i16 %6 to float
1486 ; CHECK-NEXT: %8 = insertelement <4 x float> %5, float %7, i32 1
1487 ; CHECK-NEXT: %9 = extractelement <8 x i16> %1, i32 2
1488 ; CHECK-NEXT: %10 = sitofp i16 %9 to float
1489 ; CHECK-NEXT: %11 = insertelement <4 x float> %8, float %10, i32 2
1490 ; CHECK-NEXT: %12 = extractelement <8 x i16> %1, i32 3
1491 ; CHECK-NEXT: %13 = sitofp i16 %12 to float
1492 ; CHECK-NEXT: %14 = insertelement <4 x float> %11, float %13, i32 3
1493 ; CHECK-NEXT: %15 = extractelement <8 x i16> %1, i32 4
1494 ; CHECK-NEXT: %16 = sitofp i16 %15 to float
1495 ; CHECK-NEXT: %17 = insertelement <4 x float> undef, float %16, i32 0
1496 ; CHECK-NEXT: %18 = extractelement <8 x i16> %1, i32 5
1497 ; CHECK-NEXT: %19 = sitofp i16 %18 to float
1498 ; CHECK-NEXT: %20 = insertelement <4 x float> %17, float %19, i32 1
1499 ; CHECK-NEXT: store <4 x float> %20, <4 x float>* %0, align 16
1500 ; CHECK-NEXT: ret <4 x float> %14
1501
1502 define <6 x float> @sitofp_cast_6xi32_to_6xfloat(<6 x i32>) {
1503 %2 = sitofp <6 x i32> %0 to <6 x float>
1504 ret <6 x float> %2
1505 }
1506 ; CHECK-LABEL: define <4 x float> @sitofp_cast_6xi32_to_6xfloat(<4 x float>* noc apture nonnull dereferenceable(16), <4 x i32>, <4 x i32>)
1507 ; CHECK-NEXT: %4 = sitofp <4 x i32> %1 to <4 x float>
1508 ; CHECK-NEXT: %5 = sitofp <4 x i32> %2 to <4 x float>
1509 ; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
1510 ; CHECK-NEXT: ret <4 x float> %4
1511
1512 define <6 x float> @sitofp_cast_6xi64_to_6xfloat(<6 x i64>) {
1513 %2 = sitofp <6 x i64> %0 to <6 x float>
1514 ret <6 x float> %2
1515 }
1516 ; CHECK-LABEL: define <4 x float> @sitofp_cast_6xi64_to_6xfloat(<4 x float>* noc apture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>)
1517 ; CHECK-NEXT: %5 = extractelement <2 x i64> %1, i32 0
1518 ; CHECK-NEXT: %6 = sitofp i64 %5 to float
1519 ; CHECK-NEXT: %7 = insertelement <4 x float> undef, float %6, i32 0
1520 ; CHECK-NEXT: %8 = extractelement <2 x i64> %1, i32 1
1521 ; CHECK-NEXT: %9 = sitofp i64 %8 to float
1522 ; CHECK-NEXT: %10 = insertelement <4 x float> %7, float %9, i32 1
1523 ; CHECK-NEXT: %11 = extractelement <2 x i64> %2, i32 0
1524 ; CHECK-NEXT: %12 = sitofp i64 %11 to float
1525 ; CHECK-NEXT: %13 = insertelement <4 x float> %10, float %12, i32 2
1526 ; CHECK-NEXT: %14 = extractelement <2 x i64> %2, i32 1
1527 ; CHECK-NEXT: %15 = sitofp i64 %14 to float
1528 ; CHECK-NEXT: %16 = insertelement <4 x float> %13, float %15, i32 3
1529 ; CHECK-NEXT: %17 = extractelement <2 x i64> %3, i32 0
1530 ; CHECK-NEXT: %18 = sitofp i64 %17 to float
1531 ; CHECK-NEXT: %19 = insertelement <4 x float> undef, float %18, i32 0
1532 ; CHECK-NEXT: %20 = extractelement <2 x i64> %3, i32 1
1533 ; CHECK-NEXT: %21 = sitofp i64 %20 to float
1534 ; CHECK-NEXT: %22 = insertelement <4 x float> %19, float %21, i32 1
1535 ; CHECK-NEXT: store <4 x float> %22, <4 x float>* %0, align 16
1536 ; CHECK-NEXT: ret <4 x float> %16
1537
1538 define <6 x double> @sitofp_cast_6xi8_to_6xdouble(<6 x i8>) {
1539 %2 = sitofp <6 x i8> %0 to <6 x double>
1540 ret <6 x double> %2
1541 }
1542 ; CHECK-LABEL: define <2 x double> @sitofp_cast_6xi8_to_6xdouble(<2 x double>* n ocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenc eable(16), <16 x i8>)
1543 ; CHECK-NEXT: %4 = extractelement <16 x i8> %2, i32 0
1544 ; CHECK-NEXT: %5 = sitofp i8 %4 to double
1545 ; CHECK-NEXT: %6 = insertelement <2 x double> undef, double %5, i32 0
1546 ; CHECK-NEXT: %7 = extractelement <16 x i8> %2, i32 1
1547 ; CHECK-NEXT: %8 = sitofp i8 %7 to double
1548 ; CHECK-NEXT: %9 = insertelement <2 x double> %6, double %8, i32 1
1549 ; CHECK-NEXT: %10 = extractelement <16 x i8> %2, i32 2
1550 ; CHECK-NEXT: %11 = sitofp i8 %10 to double
1551 ; CHECK-NEXT: %12 = insertelement <2 x double> undef, double %11, i32 0
1552 ; CHECK-NEXT: %13 = extractelement <16 x i8> %2, i32 3
1553 ; CHECK-NEXT: %14 = sitofp i8 %13 to double
1554 ; CHECK-NEXT: %15 = insertelement <2 x double> %12, double %14, i32 1
1555 ; CHECK-NEXT: %16 = extractelement <16 x i8> %2, i32 4
1556 ; CHECK-NEXT: %17 = sitofp i8 %16 to double
1557 ; CHECK-NEXT: %18 = insertelement <2 x double> undef, double %17, i32 0
1558 ; CHECK-NEXT: %19 = extractelement <16 x i8> %2, i32 5
1559 ; CHECK-NEXT: %20 = sitofp i8 %19 to double
1560 ; CHECK-NEXT: %21 = insertelement <2 x double> %18, double %20, i32 1
1561 ; CHECK-NEXT: store <2 x double> %15, <2 x double>* %0, align 16
1562 ; CHECK-NEXT: store <2 x double> %21, <2 x double>* %1, align 16
1563 ; CHECK-NEXT: ret <2 x double> %9
1564
1565 define <6 x double> @sitofp_cast_6xi16_to_6xdouble(<6 x i16>) {
1566 %2 = sitofp <6 x i16> %0 to <6 x double>
1567 ret <6 x double> %2
1568 }
1569 ; CHECK-LABEL: define <2 x double> @sitofp_cast_6xi16_to_6xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <8 x i16>)
1570 ; CHECK-NEXT: %4 = extractelement <8 x i16> %2, i32 0
1571 ; CHECK-NEXT: %5 = sitofp i16 %4 to double
1572 ; CHECK-NEXT: %6 = insertelement <2 x double> undef, double %5, i32 0
1573 ; CHECK-NEXT: %7 = extractelement <8 x i16> %2, i32 1
1574 ; CHECK-NEXT: %8 = sitofp i16 %7 to double
1575 ; CHECK-NEXT: %9 = insertelement <2 x double> %6, double %8, i32 1
1576 ; CHECK-NEXT: %10 = extractelement <8 x i16> %2, i32 2
1577 ; CHECK-NEXT: %11 = sitofp i16 %10 to double
1578 ; CHECK-NEXT: %12 = insertelement <2 x double> undef, double %11, i32 0
1579 ; CHECK-NEXT: %13 = extractelement <8 x i16> %2, i32 3
1580 ; CHECK-NEXT: %14 = sitofp i16 %13 to double
1581 ; CHECK-NEXT: %15 = insertelement <2 x double> %12, double %14, i32 1
1582 ; CHECK-NEXT: %16 = extractelement <8 x i16> %2, i32 4
1583 ; CHECK-NEXT: %17 = sitofp i16 %16 to double
1584 ; CHECK-NEXT: %18 = insertelement <2 x double> undef, double %17, i32 0
1585 ; CHECK-NEXT: %19 = extractelement <8 x i16> %2, i32 5
1586 ; CHECK-NEXT: %20 = sitofp i16 %19 to double
1587 ; CHECK-NEXT: %21 = insertelement <2 x double> %18, double %20, i32 1
1588 ; CHECK-NEXT: store <2 x double> %15, <2 x double>* %0, align 16
1589 ; CHECK-NEXT: store <2 x double> %21, <2 x double>* %1, align 16
1590 ; CHECK-NEXT: ret <2 x double> %9
1591
1592 define <6 x double> @sitofp_cast_6xi32_to_6xdouble(<6 x i32>) {
1593 %2 = sitofp <6 x i32> %0 to <6 x double>
1594 ret <6 x double> %2
1595 }
1596 ; CHECK-LABEL: define <2 x double> @sitofp_cast_6xi32_to_6xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <4 x i32>, <4 x i32>)
1597 ; CHECK-NEXT: %5 = extractelement <4 x i32> %2, i32 0
1598 ; CHECK-NEXT: %6 = sitofp i32 %5 to double
1599 ; CHECK-NEXT: %7 = insertelement <2 x double> undef, double %6, i32 0
1600 ; CHECK-NEXT: %8 = extractelement <4 x i32> %2, i32 1
1601 ; CHECK-NEXT: %9 = sitofp i32 %8 to double
1602 ; CHECK-NEXT: %10 = insertelement <2 x double> %7, double %9, i32 1
1603 ; CHECK-NEXT: %11 = extractelement <4 x i32> %2, i32 2
1604 ; CHECK-NEXT: %12 = sitofp i32 %11 to double
1605 ; CHECK-NEXT: %13 = insertelement <2 x double> undef, double %12, i32 0
1606 ; CHECK-NEXT: %14 = extractelement <4 x i32> %2, i32 3
1607 ; CHECK-NEXT: %15 = sitofp i32 %14 to double
1608 ; CHECK-NEXT: %16 = insertelement <2 x double> %13, double %15, i32 1
1609 ; CHECK-NEXT: %17 = extractelement <4 x i32> %3, i32 0
1610 ; CHECK-NEXT: %18 = sitofp i32 %17 to double
1611 ; CHECK-NEXT: %19 = insertelement <2 x double> undef, double %18, i32 0
1612 ; CHECK-NEXT: %20 = extractelement <4 x i32> %3, i32 1
1613 ; CHECK-NEXT: %21 = sitofp i32 %20 to double
1614 ; CHECK-NEXT: %22 = insertelement <2 x double> %19, double %21, i32 1
1615 ; CHECK-NEXT: store <2 x double> %16, <2 x double>* %0, align 16
1616 ; CHECK-NEXT: store <2 x double> %22, <2 x double>* %1, align 16
1617 ; CHECK-NEXT: ret <2 x double> %10
1618
1619 define <6 x double> @sitofp_cast_6xi64_to_6xdouble(<6 x i64>) {
1620 %2 = sitofp <6 x i64> %0 to <6 x double>
1621 ret <6 x double> %2
1622 }
1623 ; CHECK-LABEL: define <2 x double> @sitofp_cast_6xi64_to_6xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <2 x i64>, <2 x i64>, <2 x i64>)
1624 ; CHECK-NEXT: %6 = sitofp <2 x i64> %2 to <2 x double>
1625 ; CHECK-NEXT: %7 = sitofp <2 x i64> %3 to <2 x double>
1626 ; CHECK-NEXT: %8 = sitofp <2 x i64> %4 to <2 x double>
1627 ; CHECK-NEXT: store <2 x double> %7, <2 x double>* %0, align 16
1628 ; CHECK-NEXT: store <2 x double> %8, <2 x double>* %1, align 16
1629 ; CHECK-NEXT: ret <2 x double> %6
1630
1631 define <8 x i8> @fptoui_cast_8xfloat_to_8xi8(<8 x float>) {
1632 %2 = fptoui <8 x float> %0 to <8 x i8>
1633 ret <8 x i8> %2
1634 }
1635 ; CHECK-LABEL: define <16 x i8> @fptoui_cast_8xfloat_to_8xi8(<4 x float>, <4 x f loat>)
1636 ; CHECK-NEXT: %3 = extractelement <4 x float> %0, i32 0
1637 ; CHECK-NEXT: %4 = fptoui float %3 to i8
1638 ; CHECK-NEXT: %5 = insertelement <16 x i8> undef, i8 %4, i32 0
1639 ; CHECK-NEXT: %6 = extractelement <4 x float> %0, i32 1
1640 ; CHECK-NEXT: %7 = fptoui float %6 to i8
1641 ; CHECK-NEXT: %8 = insertelement <16 x i8> %5, i8 %7, i32 1
1642 ; CHECK-NEXT: %9 = extractelement <4 x float> %0, i32 2
1643 ; CHECK-NEXT: %10 = fptoui float %9 to i8
1644 ; CHECK-NEXT: %11 = insertelement <16 x i8> %8, i8 %10, i32 2
1645 ; CHECK-NEXT: %12 = extractelement <4 x float> %0, i32 3
1646 ; CHECK-NEXT: %13 = fptoui float %12 to i8
1647 ; CHECK-NEXT: %14 = insertelement <16 x i8> %11, i8 %13, i32 3
1648 ; CHECK-NEXT: %15 = extractelement <4 x float> %1, i32 0
1649 ; CHECK-NEXT: %16 = fptoui float %15 to i8
1650 ; CHECK-NEXT: %17 = insertelement <16 x i8> %14, i8 %16, i32 4
1651 ; CHECK-NEXT: %18 = extractelement <4 x float> %1, i32 1
1652 ; CHECK-NEXT: %19 = fptoui float %18 to i8
1653 ; CHECK-NEXT: %20 = insertelement <16 x i8> %17, i8 %19, i32 5
1654 ; CHECK-NEXT: %21 = extractelement <4 x float> %1, i32 2
1655 ; CHECK-NEXT: %22 = fptoui float %21 to i8
1656 ; CHECK-NEXT: %23 = insertelement <16 x i8> %20, i8 %22, i32 6
1657 ; CHECK-NEXT: %24 = extractelement <4 x float> %1, i32 3
1658 ; CHECK-NEXT: %25 = fptoui float %24 to i8
1659 ; CHECK-NEXT: %26 = insertelement <16 x i8> %23, i8 %25, i32 7
1660 ; CHECK-NEXT: ret <16 x i8> %26
1661
1662 define <8 x i16> @fptoui_cast_8xfloat_to_8xi16(<8 x float>) {
1663 %2 = fptoui <8 x float> %0 to <8 x i16>
1664 ret <8 x i16> %2
1665 }
1666 ; CHECK-LABEL: define <8 x i16> @fptoui_cast_8xfloat_to_8xi16(<4 x float>, <4 x float>)
1667 ; CHECK-NEXT: %3 = extractelement <4 x float> %0, i32 0
1668 ; CHECK-NEXT: %4 = fptoui float %3 to i16
1669 ; CHECK-NEXT: %5 = insertelement <8 x i16> undef, i16 %4, i32 0
1670 ; CHECK-NEXT: %6 = extractelement <4 x float> %0, i32 1
1671 ; CHECK-NEXT: %7 = fptoui float %6 to i16
1672 ; CHECK-NEXT: %8 = insertelement <8 x i16> %5, i16 %7, i32 1
1673 ; CHECK-NEXT: %9 = extractelement <4 x float> %0, i32 2
1674 ; CHECK-NEXT: %10 = fptoui float %9 to i16
1675 ; CHECK-NEXT: %11 = insertelement <8 x i16> %8, i16 %10, i32 2
1676 ; CHECK-NEXT: %12 = extractelement <4 x float> %0, i32 3
1677 ; CHECK-NEXT: %13 = fptoui float %12 to i16
1678 ; CHECK-NEXT: %14 = insertelement <8 x i16> %11, i16 %13, i32 3
1679 ; CHECK-NEXT: %15 = extractelement <4 x float> %1, i32 0
1680 ; CHECK-NEXT: %16 = fptoui float %15 to i16
1681 ; CHECK-NEXT: %17 = insertelement <8 x i16> %14, i16 %16, i32 4
1682 ; CHECK-NEXT: %18 = extractelement <4 x float> %1, i32 1
1683 ; CHECK-NEXT: %19 = fptoui float %18 to i16
1684 ; CHECK-NEXT: %20 = insertelement <8 x i16> %17, i16 %19, i32 5
1685 ; CHECK-NEXT: %21 = extractelement <4 x float> %1, i32 2
1686 ; CHECK-NEXT: %22 = fptoui float %21 to i16
1687 ; CHECK-NEXT: %23 = insertelement <8 x i16> %20, i16 %22, i32 6
1688 ; CHECK-NEXT: %24 = extractelement <4 x float> %1, i32 3
1689 ; CHECK-NEXT: %25 = fptoui float %24 to i16
1690 ; CHECK-NEXT: %26 = insertelement <8 x i16> %23, i16 %25, i32 7
1691 ; CHECK-NEXT: ret <8 x i16> %26
1692
1693 define <8 x i32> @fptoui_cast_8xfloat_to_8xi32(<8 x float>) {
1694 %2 = fptoui <8 x float> %0 to <8 x i32>
1695 ret <8 x i32> %2
1696 }
1697 ; CHECK-LABEL: define <4 x i32> @fptoui_cast_8xfloat_to_8xi32(<4 x i32>* nocaptu re nonnull dereferenceable(16), <4 x float>, <4 x float>)
1698 ; CHECK-NEXT: %4 = fptoui <4 x float> %1 to <4 x i32>
1699 ; CHECK-NEXT: %5 = fptoui <4 x float> %2 to <4 x i32>
1700 ; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
1701 ; CHECK-NEXT: ret <4 x i32> %4
1702
1703 define <8 x i64> @fptoui_cast_8xfloat_to_8xi64(<8 x float>) {
1704 %2 = fptoui <8 x float> %0 to <8 x i64>
1705 ret <8 x i64> %2
1706 }
1707 ; CHECK-LABEL: define <2 x i64> @fptoui_cast_8xfloat_to_8xi64(<2 x i64>* nocaptu re nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16) , <2 x i64>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>)
1708 ; CHECK-NEXT: %6 = extractelement <4 x float> %3, i32 0
1709 ; CHECK-NEXT: %7 = fptoui float %6 to i64
1710 ; CHECK-NEXT: %8 = insertelement <2 x i64> undef, i64 %7, i32 0
1711 ; CHECK-NEXT: %9 = extractelement <4 x float> %3, i32 1
1712 ; CHECK-NEXT: %10 = fptoui float %9 to i64
1713 ; CHECK-NEXT: %11 = insertelement <2 x i64> %8, i64 %10, i32 1
1714 ; CHECK-NEXT: %12 = extractelement <4 x float> %3, i32 2
1715 ; CHECK-NEXT: %13 = fptoui float %12 to i64
1716 ; CHECK-NEXT: %14 = insertelement <2 x i64> undef, i64 %13, i32 0
1717 ; CHECK-NEXT: %15 = extractelement <4 x float> %3, i32 3
1718 ; CHECK-NEXT: %16 = fptoui float %15 to i64
1719 ; CHECK-NEXT: %17 = insertelement <2 x i64> %14, i64 %16, i32 1
1720 ; CHECK-NEXT: %18 = extractelement <4 x float> %4, i32 0
1721 ; CHECK-NEXT: %19 = fptoui float %18 to i64
1722 ; CHECK-NEXT: %20 = insertelement <2 x i64> undef, i64 %19, i32 0
1723 ; CHECK-NEXT: %21 = extractelement <4 x float> %4, i32 1
1724 ; CHECK-NEXT: %22 = fptoui float %21 to i64
1725 ; CHECK-NEXT: %23 = insertelement <2 x i64> %20, i64 %22, i32 1
1726 ; CHECK-NEXT: %24 = extractelement <4 x float> %4, i32 2
1727 ; CHECK-NEXT: %25 = fptoui float %24 to i64
1728 ; CHECK-NEXT: %26 = insertelement <2 x i64> undef, i64 %25, i32 0
1729 ; CHECK-NEXT: %27 = extractelement <4 x float> %4, i32 3
1730 ; CHECK-NEXT: %28 = fptoui float %27 to i64
1731 ; CHECK-NEXT: %29 = insertelement <2 x i64> %26, i64 %28, i32 1
1732 ; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %0, align 16
1733 ; CHECK-NEXT: store <2 x i64> %23, <2 x i64>* %1, align 16
1734 ; CHECK-NEXT: store <2 x i64> %29, <2 x i64>* %2, align 16
1735 ; CHECK-NEXT: ret <2 x i64> %11
1736
1737 define <8 x i8> @fptoui_cast_8xdouble_to_8xi8(<8 x double>) {
1738 %2 = fptoui <8 x double> %0 to <8 x i8>
1739 ret <8 x i8> %2
1740 }
1741 ; CHECK-LABEL: define <16 x i8> @fptoui_cast_8xdouble_to_8xi8(<2 x double>, <2 x double>, <2 x double>, <2 x double>)
1742 ; CHECK-NEXT: %5 = extractelement <2 x double> %0, i32 0
1743 ; CHECK-NEXT: %6 = fptoui double %5 to i8
1744 ; CHECK-NEXT: %7 = insertelement <16 x i8> undef, i8 %6, i32 0
1745 ; CHECK-NEXT: %8 = extractelement <2 x double> %0, i32 1
1746 ; CHECK-NEXT: %9 = fptoui double %8 to i8
1747 ; CHECK-NEXT: %10 = insertelement <16 x i8> %7, i8 %9, i32 1
1748 ; CHECK-NEXT: %11 = extractelement <2 x double> %1, i32 0
1749 ; CHECK-NEXT: %12 = fptoui double %11 to i8
1750 ; CHECK-NEXT: %13 = insertelement <16 x i8> %10, i8 %12, i32 2
1751 ; CHECK-NEXT: %14 = extractelement <2 x double> %1, i32 1
1752 ; CHECK-NEXT: %15 = fptoui double %14 to i8
1753 ; CHECK-NEXT: %16 = insertelement <16 x i8> %13, i8 %15, i32 3
1754 ; CHECK-NEXT: %17 = extractelement <2 x double> %2, i32 0
1755 ; CHECK-NEXT: %18 = fptoui double %17 to i8
1756 ; CHECK-NEXT: %19 = insertelement <16 x i8> %16, i8 %18, i32 4
1757 ; CHECK-NEXT: %20 = extractelement <2 x double> %2, i32 1
1758 ; CHECK-NEXT: %21 = fptoui double %20 to i8
1759 ; CHECK-NEXT: %22 = insertelement <16 x i8> %19, i8 %21, i32 5
1760 ; CHECK-NEXT: %23 = extractelement <2 x double> %3, i32 0
1761 ; CHECK-NEXT: %24 = fptoui double %23 to i8
1762 ; CHECK-NEXT: %25 = insertelement <16 x i8> %22, i8 %24, i32 6
1763 ; CHECK-NEXT: %26 = extractelement <2 x double> %3, i32 1
1764 ; CHECK-NEXT: %27 = fptoui double %26 to i8
1765 ; CHECK-NEXT: %28 = insertelement <16 x i8> %25, i8 %27, i32 7
1766 ; CHECK-NEXT: ret <16 x i8> %28
1767
1768 define <8 x i16> @fptoui_cast_8xdouble_to_8xi16(<8 x double>) {
1769 %2 = fptoui <8 x double> %0 to <8 x i16>
1770 ret <8 x i16> %2
1771 }
1772 ; CHECK-LABEL: define <8 x i16> @fptoui_cast_8xdouble_to_8xi16(<2 x double>, <2 x double>, <2 x double>, <2 x double>)
1773 ; CHECK-NEXT: %5 = extractelement <2 x double> %0, i32 0
1774 ; CHECK-NEXT: %6 = fptoui double %5 to i16
1775 ; CHECK-NEXT: %7 = insertelement <8 x i16> undef, i16 %6, i32 0
1776 ; CHECK-NEXT: %8 = extractelement <2 x double> %0, i32 1
1777 ; CHECK-NEXT: %9 = fptoui double %8 to i16
1778 ; CHECK-NEXT: %10 = insertelement <8 x i16> %7, i16 %9, i32 1
1779 ; CHECK-NEXT: %11 = extractelement <2 x double> %1, i32 0
1780 ; CHECK-NEXT: %12 = fptoui double %11 to i16
1781 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 2
1782 ; CHECK-NEXT: %14 = extractelement <2 x double> %1, i32 1
1783 ; CHECK-NEXT: %15 = fptoui double %14 to i16
1784 ; CHECK-NEXT: %16 = insertelement <8 x i16> %13, i16 %15, i32 3
1785 ; CHECK-NEXT: %17 = extractelement <2 x double> %2, i32 0
1786 ; CHECK-NEXT: %18 = fptoui double %17 to i16
1787 ; CHECK-NEXT: %19 = insertelement <8 x i16> %16, i16 %18, i32 4
1788 ; CHECK-NEXT: %20 = extractelement <2 x double> %2, i32 1
1789 ; CHECK-NEXT: %21 = fptoui double %20 to i16
1790 ; CHECK-NEXT: %22 = insertelement <8 x i16> %19, i16 %21, i32 5
1791 ; CHECK-NEXT: %23 = extractelement <2 x double> %3, i32 0
1792 ; CHECK-NEXT: %24 = fptoui double %23 to i16
1793 ; CHECK-NEXT: %25 = insertelement <8 x i16> %22, i16 %24, i32 6
1794 ; CHECK-NEXT: %26 = extractelement <2 x double> %3, i32 1
1795 ; CHECK-NEXT: %27 = fptoui double %26 to i16
1796 ; CHECK-NEXT: %28 = insertelement <8 x i16> %25, i16 %27, i32 7
1797 ; CHECK-NEXT: ret <8 x i16> %28
1798
1799 define <8 x i32> @fptoui_cast_8xdouble_to_8xi32(<8 x double>) {
1800 %2 = fptoui <8 x double> %0 to <8 x i32>
1801 ret <8 x i32> %2
1802 }
1803 ; CHECK-LABEL: define <4 x i32> @fptoui_cast_8xdouble_to_8xi32(<4 x i32>* nocapt ure nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>)
1804 ; CHECK-NEXT: %6 = extractelement <2 x double> %1, i32 0
1805 ; CHECK-NEXT: %7 = fptoui double %6 to i32
1806 ; CHECK-NEXT: %8 = insertelement <4 x i32> undef, i32 %7, i32 0
1807 ; CHECK-NEXT: %9 = extractelement <2 x double> %1, i32 1
1808 ; CHECK-NEXT: %10 = fptoui double %9 to i32
1809 ; CHECK-NEXT: %11 = insertelement <4 x i32> %8, i32 %10, i32 1
1810 ; CHECK-NEXT: %12 = extractelement <2 x double> %2, i32 0
1811 ; CHECK-NEXT: %13 = fptoui double %12 to i32
1812 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 2
1813 ; CHECK-NEXT: %15 = extractelement <2 x double> %2, i32 1
1814 ; CHECK-NEXT: %16 = fptoui double %15 to i32
1815 ; CHECK-NEXT: %17 = insertelement <4 x i32> %14, i32 %16, i32 3
1816 ; CHECK-NEXT: %18 = extractelement <2 x double> %3, i32 0
1817 ; CHECK-NEXT: %19 = fptoui double %18 to i32
1818 ; CHECK-NEXT: %20 = insertelement <4 x i32> undef, i32 %19, i32 0
1819 ; CHECK-NEXT: %21 = extractelement <2 x double> %3, i32 1
1820 ; CHECK-NEXT: %22 = fptoui double %21 to i32
1821 ; CHECK-NEXT: %23 = insertelement <4 x i32> %20, i32 %22, i32 1
1822 ; CHECK-NEXT: %24 = extractelement <2 x double> %4, i32 0
1823 ; CHECK-NEXT: %25 = fptoui double %24 to i32
1824 ; CHECK-NEXT: %26 = insertelement <4 x i32> %23, i32 %25, i32 2
1825 ; CHECK-NEXT: %27 = extractelement <2 x double> %4, i32 1
1826 ; CHECK-NEXT: %28 = fptoui double %27 to i32
1827 ; CHECK-NEXT: %29 = insertelement <4 x i32> %26, i32 %28, i32 3
1828 ; CHECK-NEXT: store <4 x i32> %29, <4 x i32>* %0, align 16
1829 ; CHECK-NEXT: ret <4 x i32> %17
1830
1831 define <8 x i64> @fptoui_cast_8xdouble_to_8xi64(<8 x double>) {
1832 %2 = fptoui <8 x double> %0 to <8 x i64>
1833 ret <8 x i64> %2
1834 }
1835 ; CHECK-LABEL: define <2 x i64> @fptoui_cast_8xdouble_to_8xi64(<2 x i64>* nocapt ure nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16 ), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>)
1836 ; CHECK-NEXT: %8 = fptoui <2 x double> %3 to <2 x i64>
1837 ; CHECK-NEXT: %9 = fptoui <2 x double> %4 to <2 x i64>
1838 ; CHECK-NEXT: %10 = fptoui <2 x double> %5 to <2 x i64>
1839 ; CHECK-NEXT: %11 = fptoui <2 x double> %6 to <2 x i64>
1840 ; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %0, align 16
1841 ; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %1, align 16
1842 ; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %2, align 16
1843 ; CHECK-NEXT: ret <2 x i64> %8
1844
1845 define <8 x i8> @fptosi_cast_8xfloat_to_8xi8(<8 x float>) {
1846 %2 = fptosi <8 x float> %0 to <8 x i8>
1847 ret <8 x i8> %2
1848 }
1849 ; CHECK-LABEL: define <16 x i8> @fptosi_cast_8xfloat_to_8xi8(<4 x float>, <4 x f loat>)
1850 ; CHECK-NEXT: %3 = extractelement <4 x float> %0, i32 0
1851 ; CHECK-NEXT: %4 = fptosi float %3 to i8
1852 ; CHECK-NEXT: %5 = insertelement <16 x i8> undef, i8 %4, i32 0
1853 ; CHECK-NEXT: %6 = extractelement <4 x float> %0, i32 1
1854 ; CHECK-NEXT: %7 = fptosi float %6 to i8
1855 ; CHECK-NEXT: %8 = insertelement <16 x i8> %5, i8 %7, i32 1
1856 ; CHECK-NEXT: %9 = extractelement <4 x float> %0, i32 2
1857 ; CHECK-NEXT: %10 = fptosi float %9 to i8
1858 ; CHECK-NEXT: %11 = insertelement <16 x i8> %8, i8 %10, i32 2
1859 ; CHECK-NEXT: %12 = extractelement <4 x float> %0, i32 3
1860 ; CHECK-NEXT: %13 = fptosi float %12 to i8
1861 ; CHECK-NEXT: %14 = insertelement <16 x i8> %11, i8 %13, i32 3
1862 ; CHECK-NEXT: %15 = extractelement <4 x float> %1, i32 0
1863 ; CHECK-NEXT: %16 = fptosi float %15 to i8
1864 ; CHECK-NEXT: %17 = insertelement <16 x i8> %14, i8 %16, i32 4
1865 ; CHECK-NEXT: %18 = extractelement <4 x float> %1, i32 1
1866 ; CHECK-NEXT: %19 = fptosi float %18 to i8
1867 ; CHECK-NEXT: %20 = insertelement <16 x i8> %17, i8 %19, i32 5
1868 ; CHECK-NEXT: %21 = extractelement <4 x float> %1, i32 2
1869 ; CHECK-NEXT: %22 = fptosi float %21 to i8
1870 ; CHECK-NEXT: %23 = insertelement <16 x i8> %20, i8 %22, i32 6
1871 ; CHECK-NEXT: %24 = extractelement <4 x float> %1, i32 3
1872 ; CHECK-NEXT: %25 = fptosi float %24 to i8
1873 ; CHECK-NEXT: %26 = insertelement <16 x i8> %23, i8 %25, i32 7
1874 ; CHECK-NEXT: ret <16 x i8> %26
1875
1876 define <8 x i16> @fptosi_cast_8xfloat_to_8xi16(<8 x float>) {
1877 %2 = fptosi <8 x float> %0 to <8 x i16>
1878 ret <8 x i16> %2
1879 }
1880 ; CHECK-LABEL: define <8 x i16> @fptosi_cast_8xfloat_to_8xi16(<4 x float>, <4 x float>)
1881 ; CHECK-NEXT: %3 = extractelement <4 x float> %0, i32 0
1882 ; CHECK-NEXT: %4 = fptosi float %3 to i16
1883 ; CHECK-NEXT: %5 = insertelement <8 x i16> undef, i16 %4, i32 0
1884 ; CHECK-NEXT: %6 = extractelement <4 x float> %0, i32 1
1885 ; CHECK-NEXT: %7 = fptosi float %6 to i16
1886 ; CHECK-NEXT: %8 = insertelement <8 x i16> %5, i16 %7, i32 1
1887 ; CHECK-NEXT: %9 = extractelement <4 x float> %0, i32 2
1888 ; CHECK-NEXT: %10 = fptosi float %9 to i16
1889 ; CHECK-NEXT: %11 = insertelement <8 x i16> %8, i16 %10, i32 2
1890 ; CHECK-NEXT: %12 = extractelement <4 x float> %0, i32 3
1891 ; CHECK-NEXT: %13 = fptosi float %12 to i16
1892 ; CHECK-NEXT: %14 = insertelement <8 x i16> %11, i16 %13, i32 3
1893 ; CHECK-NEXT: %15 = extractelement <4 x float> %1, i32 0
1894 ; CHECK-NEXT: %16 = fptosi float %15 to i16
1895 ; CHECK-NEXT: %17 = insertelement <8 x i16> %14, i16 %16, i32 4
1896 ; CHECK-NEXT: %18 = extractelement <4 x float> %1, i32 1
1897 ; CHECK-NEXT: %19 = fptosi float %18 to i16
1898 ; CHECK-NEXT: %20 = insertelement <8 x i16> %17, i16 %19, i32 5
1899 ; CHECK-NEXT: %21 = extractelement <4 x float> %1, i32 2
1900 ; CHECK-NEXT: %22 = fptosi float %21 to i16
1901 ; CHECK-NEXT: %23 = insertelement <8 x i16> %20, i16 %22, i32 6
1902 ; CHECK-NEXT: %24 = extractelement <4 x float> %1, i32 3
1903 ; CHECK-NEXT: %25 = fptosi float %24 to i16
1904 ; CHECK-NEXT: %26 = insertelement <8 x i16> %23, i16 %25, i32 7
1905 ; CHECK-NEXT: ret <8 x i16> %26
1906
1907 define <8 x i32> @fptosi_cast_8xfloat_to_8xi32(<8 x float>) {
1908 %2 = fptosi <8 x float> %0 to <8 x i32>
1909 ret <8 x i32> %2
1910 }
1911 ; CHECK-LABEL: define <4 x i32> @fptosi_cast_8xfloat_to_8xi32(<4 x i32>* nocaptu re nonnull dereferenceable(16), <4 x float>, <4 x float>)
1912 ; CHECK-NEXT: %4 = fptosi <4 x float> %1 to <4 x i32>
1913 ; CHECK-NEXT: %5 = fptosi <4 x float> %2 to <4 x i32>
1914 ; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
1915 ; CHECK-NEXT: ret <4 x i32> %4
1916
1917 define <8 x i64> @fptosi_cast_8xfloat_to_8xi64(<8 x float>) {
1918 %2 = fptosi <8 x float> %0 to <8 x i64>
1919 ret <8 x i64> %2
1920 }
1921 ; CHECK-LABEL: define <2 x i64> @fptosi_cast_8xfloat_to_8xi64(<2 x i64>* nocaptu re nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16) , <2 x i64>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>)
1922 ; CHECK-NEXT: %6 = extractelement <4 x float> %3, i32 0
1923 ; CHECK-NEXT: %7 = fptosi float %6 to i64
1924 ; CHECK-NEXT: %8 = insertelement <2 x i64> undef, i64 %7, i32 0
1925 ; CHECK-NEXT: %9 = extractelement <4 x float> %3, i32 1
1926 ; CHECK-NEXT: %10 = fptosi float %9 to i64
1927 ; CHECK-NEXT: %11 = insertelement <2 x i64> %8, i64 %10, i32 1
1928 ; CHECK-NEXT: %12 = extractelement <4 x float> %3, i32 2
1929 ; CHECK-NEXT: %13 = fptosi float %12 to i64
1930 ; CHECK-NEXT: %14 = insertelement <2 x i64> undef, i64 %13, i32 0
1931 ; CHECK-NEXT: %15 = extractelement <4 x float> %3, i32 3
1932 ; CHECK-NEXT: %16 = fptosi float %15 to i64
1933 ; CHECK-NEXT: %17 = insertelement <2 x i64> %14, i64 %16, i32 1
1934 ; CHECK-NEXT: %18 = extractelement <4 x float> %4, i32 0
1935 ; CHECK-NEXT: %19 = fptosi float %18 to i64
1936 ; CHECK-NEXT: %20 = insertelement <2 x i64> undef, i64 %19, i32 0
1937 ; CHECK-NEXT: %21 = extractelement <4 x float> %4, i32 1
1938 ; CHECK-NEXT: %22 = fptosi float %21 to i64
1939 ; CHECK-NEXT: %23 = insertelement <2 x i64> %20, i64 %22, i32 1
1940 ; CHECK-NEXT: %24 = extractelement <4 x float> %4, i32 2
1941 ; CHECK-NEXT: %25 = fptosi float %24 to i64
1942 ; CHECK-NEXT: %26 = insertelement <2 x i64> undef, i64 %25, i32 0
1943 ; CHECK-NEXT: %27 = extractelement <4 x float> %4, i32 3
1944 ; CHECK-NEXT: %28 = fptosi float %27 to i64
1945 ; CHECK-NEXT: %29 = insertelement <2 x i64> %26, i64 %28, i32 1
1946 ; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %0, align 16
1947 ; CHECK-NEXT: store <2 x i64> %23, <2 x i64>* %1, align 16
1948 ; CHECK-NEXT: store <2 x i64> %29, <2 x i64>* %2, align 16
1949 ; CHECK-NEXT: ret <2 x i64> %11
1950
1951 define <8 x i8> @fptosi_cast_8xdouble_to_8xi8(<8 x double>) {
1952 %2 = fptosi <8 x double> %0 to <8 x i8>
1953 ret <8 x i8> %2
1954 }
1955 ; CHECK-LABEL: define <16 x i8> @fptosi_cast_8xdouble_to_8xi8(<2 x double>, <2 x double>, <2 x double>, <2 x double>)
1956 ; CHECK-NEXT: %5 = extractelement <2 x double> %0, i32 0
1957 ; CHECK-NEXT: %6 = fptosi double %5 to i8
1958 ; CHECK-NEXT: %7 = insertelement <16 x i8> undef, i8 %6, i32 0
1959 ; CHECK-NEXT: %8 = extractelement <2 x double> %0, i32 1
1960 ; CHECK-NEXT: %9 = fptosi double %8 to i8
1961 ; CHECK-NEXT: %10 = insertelement <16 x i8> %7, i8 %9, i32 1
1962 ; CHECK-NEXT: %11 = extractelement <2 x double> %1, i32 0
1963 ; CHECK-NEXT: %12 = fptosi double %11 to i8
1964 ; CHECK-NEXT: %13 = insertelement <16 x i8> %10, i8 %12, i32 2
1965 ; CHECK-NEXT: %14 = extractelement <2 x double> %1, i32 1
1966 ; CHECK-NEXT: %15 = fptosi double %14 to i8
1967 ; CHECK-NEXT: %16 = insertelement <16 x i8> %13, i8 %15, i32 3
1968 ; CHECK-NEXT: %17 = extractelement <2 x double> %2, i32 0
1969 ; CHECK-NEXT: %18 = fptosi double %17 to i8
1970 ; CHECK-NEXT: %19 = insertelement <16 x i8> %16, i8 %18, i32 4
1971 ; CHECK-NEXT: %20 = extractelement <2 x double> %2, i32 1
1972 ; CHECK-NEXT: %21 = fptosi double %20 to i8
1973 ; CHECK-NEXT: %22 = insertelement <16 x i8> %19, i8 %21, i32 5
1974 ; CHECK-NEXT: %23 = extractelement <2 x double> %3, i32 0
1975 ; CHECK-NEXT: %24 = fptosi double %23 to i8
1976 ; CHECK-NEXT: %25 = insertelement <16 x i8> %22, i8 %24, i32 6
1977 ; CHECK-NEXT: %26 = extractelement <2 x double> %3, i32 1
1978 ; CHECK-NEXT: %27 = fptosi double %26 to i8
1979 ; CHECK-NEXT: %28 = insertelement <16 x i8> %25, i8 %27, i32 7
1980 ; CHECK-NEXT: ret <16 x i8> %28
1981
1982 define <8 x i16> @fptosi_cast_8xdouble_to_8xi16(<8 x double>) {
1983 %2 = fptosi <8 x double> %0 to <8 x i16>
1984 ret <8 x i16> %2
1985 }
1986 ; CHECK-LABEL: define <8 x i16> @fptosi_cast_8xdouble_to_8xi16(<2 x double>, <2 x double>, <2 x double>, <2 x double>)
1987 ; CHECK-NEXT: %5 = extractelement <2 x double> %0, i32 0
1988 ; CHECK-NEXT: %6 = fptosi double %5 to i16
1989 ; CHECK-NEXT: %7 = insertelement <8 x i16> undef, i16 %6, i32 0
1990 ; CHECK-NEXT: %8 = extractelement <2 x double> %0, i32 1
1991 ; CHECK-NEXT: %9 = fptosi double %8 to i16
1992 ; CHECK-NEXT: %10 = insertelement <8 x i16> %7, i16 %9, i32 1
1993 ; CHECK-NEXT: %11 = extractelement <2 x double> %1, i32 0
1994 ; CHECK-NEXT: %12 = fptosi double %11 to i16
1995 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 2
1996 ; CHECK-NEXT: %14 = extractelement <2 x double> %1, i32 1
1997 ; CHECK-NEXT: %15 = fptosi double %14 to i16
1998 ; CHECK-NEXT: %16 = insertelement <8 x i16> %13, i16 %15, i32 3
1999 ; CHECK-NEXT: %17 = extractelement <2 x double> %2, i32 0
2000 ; CHECK-NEXT: %18 = fptosi double %17 to i16
2001 ; CHECK-NEXT: %19 = insertelement <8 x i16> %16, i16 %18, i32 4
2002 ; CHECK-NEXT: %20 = extractelement <2 x double> %2, i32 1
2003 ; CHECK-NEXT: %21 = fptosi double %20 to i16
2004 ; CHECK-NEXT: %22 = insertelement <8 x i16> %19, i16 %21, i32 5
2005 ; CHECK-NEXT: %23 = extractelement <2 x double> %3, i32 0
2006 ; CHECK-NEXT: %24 = fptosi double %23 to i16
2007 ; CHECK-NEXT: %25 = insertelement <8 x i16> %22, i16 %24, i32 6
2008 ; CHECK-NEXT: %26 = extractelement <2 x double> %3, i32 1
2009 ; CHECK-NEXT: %27 = fptosi double %26 to i16
2010 ; CHECK-NEXT: %28 = insertelement <8 x i16> %25, i16 %27, i32 7
2011 ; CHECK-NEXT: ret <8 x i16> %28
2012
2013 define <8 x i32> @fptosi_cast_8xdouble_to_8xi32(<8 x double>) {
2014 %2 = fptosi <8 x double> %0 to <8 x i32>
2015 ret <8 x i32> %2
2016 }
2017 ; CHECK-LABEL: define <4 x i32> @fptosi_cast_8xdouble_to_8xi32(<4 x i32>* nocapt ure nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>)
2018 ; CHECK-NEXT: %6 = extractelement <2 x double> %1, i32 0
2019 ; CHECK-NEXT: %7 = fptosi double %6 to i32
2020 ; CHECK-NEXT: %8 = insertelement <4 x i32> undef, i32 %7, i32 0
2021 ; CHECK-NEXT: %9 = extractelement <2 x double> %1, i32 1
2022 ; CHECK-NEXT: %10 = fptosi double %9 to i32
2023 ; CHECK-NEXT: %11 = insertelement <4 x i32> %8, i32 %10, i32 1
2024 ; CHECK-NEXT: %12 = extractelement <2 x double> %2, i32 0
2025 ; CHECK-NEXT: %13 = fptosi double %12 to i32
2026 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 2
2027 ; CHECK-NEXT: %15 = extractelement <2 x double> %2, i32 1
2028 ; CHECK-NEXT: %16 = fptosi double %15 to i32
2029 ; CHECK-NEXT: %17 = insertelement <4 x i32> %14, i32 %16, i32 3
2030 ; CHECK-NEXT: %18 = extractelement <2 x double> %3, i32 0
2031 ; CHECK-NEXT: %19 = fptosi double %18 to i32
2032 ; CHECK-NEXT: %20 = insertelement <4 x i32> undef, i32 %19, i32 0
2033 ; CHECK-NEXT: %21 = extractelement <2 x double> %3, i32 1
2034 ; CHECK-NEXT: %22 = fptosi double %21 to i32
2035 ; CHECK-NEXT: %23 = insertelement <4 x i32> %20, i32 %22, i32 1
2036 ; CHECK-NEXT: %24 = extractelement <2 x double> %4, i32 0
2037 ; CHECK-NEXT: %25 = fptosi double %24 to i32
2038 ; CHECK-NEXT: %26 = insertelement <4 x i32> %23, i32 %25, i32 2
2039 ; CHECK-NEXT: %27 = extractelement <2 x double> %4, i32 1
2040 ; CHECK-NEXT: %28 = fptosi double %27 to i32
2041 ; CHECK-NEXT: %29 = insertelement <4 x i32> %26, i32 %28, i32 3
2042 ; CHECK-NEXT: store <4 x i32> %29, <4 x i32>* %0, align 16
2043 ; CHECK-NEXT: ret <4 x i32> %17
2044
2045 define <8 x i64> @fptosi_cast_8xdouble_to_8xi64(<8 x double>) {
2046 %2 = fptosi <8 x double> %0 to <8 x i64>
2047 ret <8 x i64> %2
2048 }
2049 ; CHECK-LABEL: define <2 x i64> @fptosi_cast_8xdouble_to_8xi64(<2 x i64>* nocapt ure nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16 ), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>)
2050 ; CHECK-NEXT: %8 = fptosi <2 x double> %3 to <2 x i64>
2051 ; CHECK-NEXT: %9 = fptosi <2 x double> %4 to <2 x i64>
2052 ; CHECK-NEXT: %10 = fptosi <2 x double> %5 to <2 x i64>
2053 ; CHECK-NEXT: %11 = fptosi <2 x double> %6 to <2 x i64>
2054 ; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %0, align 16
2055 ; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %1, align 16
2056 ; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %2, align 16
2057 ; CHECK-NEXT: ret <2 x i64> %8
2058
2059 define <8 x float> @uitofp_cast_8xi8_to_8xfloat(<8 x i8>) {
2060 %2 = uitofp <8 x i8> %0 to <8 x float>
2061 ret <8 x float> %2
2062 }
2063 ; CHECK-LABEL: define <4 x float> @uitofp_cast_8xi8_to_8xfloat(<4 x float>* noca pture nonnull dereferenceable(16), <16 x i8>)
2064 ; CHECK-NEXT: %3 = extractelement <16 x i8> %1, i32 0
2065 ; CHECK-NEXT: %4 = uitofp i8 %3 to float
2066 ; CHECK-NEXT: %5 = insertelement <4 x float> undef, float %4, i32 0
2067 ; CHECK-NEXT: %6 = extractelement <16 x i8> %1, i32 1
2068 ; CHECK-NEXT: %7 = uitofp i8 %6 to float
2069 ; CHECK-NEXT: %8 = insertelement <4 x float> %5, float %7, i32 1
2070 ; CHECK-NEXT: %9 = extractelement <16 x i8> %1, i32 2
2071 ; CHECK-NEXT: %10 = uitofp i8 %9 to float
2072 ; CHECK-NEXT: %11 = insertelement <4 x float> %8, float %10, i32 2
2073 ; CHECK-NEXT: %12 = extractelement <16 x i8> %1, i32 3
2074 ; CHECK-NEXT: %13 = uitofp i8 %12 to float
2075 ; CHECK-NEXT: %14 = insertelement <4 x float> %11, float %13, i32 3
2076 ; CHECK-NEXT: %15 = extractelement <16 x i8> %1, i32 4
2077 ; CHECK-NEXT: %16 = uitofp i8 %15 to float
2078 ; CHECK-NEXT: %17 = insertelement <4 x float> undef, float %16, i32 0
2079 ; CHECK-NEXT: %18 = extractelement <16 x i8> %1, i32 5
2080 ; CHECK-NEXT: %19 = uitofp i8 %18 to float
2081 ; CHECK-NEXT: %20 = insertelement <4 x float> %17, float %19, i32 1
2082 ; CHECK-NEXT: %21 = extractelement <16 x i8> %1, i32 6
2083 ; CHECK-NEXT: %22 = uitofp i8 %21 to float
2084 ; CHECK-NEXT: %23 = insertelement <4 x float> %20, float %22, i32 2
2085 ; CHECK-NEXT: %24 = extractelement <16 x i8> %1, i32 7
2086 ; CHECK-NEXT: %25 = uitofp i8 %24 to float
2087 ; CHECK-NEXT: %26 = insertelement <4 x float> %23, float %25, i32 3
2088 ; CHECK-NEXT: store <4 x float> %26, <4 x float>* %0, align 16
2089 ; CHECK-NEXT: ret <4 x float> %14
2090
2091 define <8 x float> @uitofp_cast_8xi16_to_8xfloat(<8 x i16>) {
2092 %2 = uitofp <8 x i16> %0 to <8 x float>
2093 ret <8 x float> %2
2094 }
2095 ; CHECK-LABEL: define <4 x float> @uitofp_cast_8xi16_to_8xfloat(<4 x float>* noc apture nonnull dereferenceable(16), <8 x i16>)
2096 ; CHECK-NEXT: %3 = extractelement <8 x i16> %1, i32 0
2097 ; CHECK-NEXT: %4 = uitofp i16 %3 to float
2098 ; CHECK-NEXT: %5 = insertelement <4 x float> undef, float %4, i32 0
2099 ; CHECK-NEXT: %6 = extractelement <8 x i16> %1, i32 1
2100 ; CHECK-NEXT: %7 = uitofp i16 %6 to float
2101 ; CHECK-NEXT: %8 = insertelement <4 x float> %5, float %7, i32 1
2102 ; CHECK-NEXT: %9 = extractelement <8 x i16> %1, i32 2
2103 ; CHECK-NEXT: %10 = uitofp i16 %9 to float
2104 ; CHECK-NEXT: %11 = insertelement <4 x float> %8, float %10, i32 2
2105 ; CHECK-NEXT: %12 = extractelement <8 x i16> %1, i32 3
2106 ; CHECK-NEXT: %13 = uitofp i16 %12 to float
2107 ; CHECK-NEXT: %14 = insertelement <4 x float> %11, float %13, i32 3
2108 ; CHECK-NEXT: %15 = extractelement <8 x i16> %1, i32 4
2109 ; CHECK-NEXT: %16 = uitofp i16 %15 to float
2110 ; CHECK-NEXT: %17 = insertelement <4 x float> undef, float %16, i32 0
2111 ; CHECK-NEXT: %18 = extractelement <8 x i16> %1, i32 5
2112 ; CHECK-NEXT: %19 = uitofp i16 %18 to float
2113 ; CHECK-NEXT: %20 = insertelement <4 x float> %17, float %19, i32 1
2114 ; CHECK-NEXT: %21 = extractelement <8 x i16> %1, i32 6
2115 ; CHECK-NEXT: %22 = uitofp i16 %21 to float
2116 ; CHECK-NEXT: %23 = insertelement <4 x float> %20, float %22, i32 2
2117 ; CHECK-NEXT: %24 = extractelement <8 x i16> %1, i32 7
2118 ; CHECK-NEXT: %25 = uitofp i16 %24 to float
2119 ; CHECK-NEXT: %26 = insertelement <4 x float> %23, float %25, i32 3
2120 ; CHECK-NEXT: store <4 x float> %26, <4 x float>* %0, align 16
2121 ; CHECK-NEXT: ret <4 x float> %14
2122
2123 define <8 x float> @uitofp_cast_8xi32_to_8xfloat(<8 x i32>) {
2124 %2 = uitofp <8 x i32> %0 to <8 x float>
2125 ret <8 x float> %2
2126 }
2127 ; CHECK-LABEL: define <4 x float> @uitofp_cast_8xi32_to_8xfloat(<4 x float>* noc apture nonnull dereferenceable(16), <4 x i32>, <4 x i32>)
2128 ; CHECK-NEXT: %4 = uitofp <4 x i32> %1 to <4 x float>
2129 ; CHECK-NEXT: %5 = uitofp <4 x i32> %2 to <4 x float>
2130 ; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
2131 ; CHECK-NEXT: ret <4 x float> %4
2132
2133 define <8 x float> @uitofp_cast_8xi64_to_8xfloat(<8 x i64>) {
2134 %2 = uitofp <8 x i64> %0 to <8 x float>
2135 ret <8 x float> %2
2136 }
2137 ; CHECK-LABEL: define <4 x float> @uitofp_cast_8xi64_to_8xfloat(<4 x float>* noc apture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
2138 ; CHECK-NEXT: %6 = extractelement <2 x i64> %1, i32 0
2139 ; CHECK-NEXT: %7 = uitofp i64 %6 to float
2140 ; CHECK-NEXT: %8 = insertelement <4 x float> undef, float %7, i32 0
2141 ; CHECK-NEXT: %9 = extractelement <2 x i64> %1, i32 1
2142 ; CHECK-NEXT: %10 = uitofp i64 %9 to float
2143 ; CHECK-NEXT: %11 = insertelement <4 x float> %8, float %10, i32 1
2144 ; CHECK-NEXT: %12 = extractelement <2 x i64> %2, i32 0
2145 ; CHECK-NEXT: %13 = uitofp i64 %12 to float
2146 ; CHECK-NEXT: %14 = insertelement <4 x float> %11, float %13, i32 2
2147 ; CHECK-NEXT: %15 = extractelement <2 x i64> %2, i32 1
2148 ; CHECK-NEXT: %16 = uitofp i64 %15 to float
2149 ; CHECK-NEXT: %17 = insertelement <4 x float> %14, float %16, i32 3
2150 ; CHECK-NEXT: %18 = extractelement <2 x i64> %3, i32 0
2151 ; CHECK-NEXT: %19 = uitofp i64 %18 to float
2152 ; CHECK-NEXT: %20 = insertelement <4 x float> undef, float %19, i32 0
2153 ; CHECK-NEXT: %21 = extractelement <2 x i64> %3, i32 1
2154 ; CHECK-NEXT: %22 = uitofp i64 %21 to float
2155 ; CHECK-NEXT: %23 = insertelement <4 x float> %20, float %22, i32 1
2156 ; CHECK-NEXT: %24 = extractelement <2 x i64> %4, i32 0
2157 ; CHECK-NEXT: %25 = uitofp i64 %24 to float
2158 ; CHECK-NEXT: %26 = insertelement <4 x float> %23, float %25, i32 2
2159 ; CHECK-NEXT: %27 = extractelement <2 x i64> %4, i32 1
2160 ; CHECK-NEXT: %28 = uitofp i64 %27 to float
2161 ; CHECK-NEXT: %29 = insertelement <4 x float> %26, float %28, i32 3
2162 ; CHECK-NEXT: store <4 x float> %29, <4 x float>* %0, align 16
2163 ; CHECK-NEXT: ret <4 x float> %17
2164
2165 define <8 x double> @uitofp_cast_8xi8_to_8xdouble(<8 x i8>) {
2166 %2 = uitofp <8 x i8> %0 to <8 x double>
2167 ret <8 x double> %2
2168 }
2169 ; CHECK-LABEL: define <2 x double> @uitofp_cast_8xi8_to_8xdouble(<2 x double>* n ocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenc eable(16), <2 x double>* nocapture nonnull dereferenceable(16), <16 x i8>)
2170 ; CHECK-NEXT: %5 = extractelement <16 x i8> %3, i32 0
2171 ; CHECK-NEXT: %6 = uitofp i8 %5 to double
2172 ; CHECK-NEXT: %7 = insertelement <2 x double> undef, double %6, i32 0
2173 ; CHECK-NEXT: %8 = extractelement <16 x i8> %3, i32 1
2174 ; CHECK-NEXT: %9 = uitofp i8 %8 to double
2175 ; CHECK-NEXT: %10 = insertelement <2 x double> %7, double %9, i32 1
2176 ; CHECK-NEXT: %11 = extractelement <16 x i8> %3, i32 2
2177 ; CHECK-NEXT: %12 = uitofp i8 %11 to double
2178 ; CHECK-NEXT: %13 = insertelement <2 x double> undef, double %12, i32 0
2179 ; CHECK-NEXT: %14 = extractelement <16 x i8> %3, i32 3
2180 ; CHECK-NEXT: %15 = uitofp i8 %14 to double
2181 ; CHECK-NEXT: %16 = insertelement <2 x double> %13, double %15, i32 1
2182 ; CHECK-NEXT: %17 = extractelement <16 x i8> %3, i32 4
2183 ; CHECK-NEXT: %18 = uitofp i8 %17 to double
2184 ; CHECK-NEXT: %19 = insertelement <2 x double> undef, double %18, i32 0
2185 ; CHECK-NEXT: %20 = extractelement <16 x i8> %3, i32 5
2186 ; CHECK-NEXT: %21 = uitofp i8 %20 to double
2187 ; CHECK-NEXT: %22 = insertelement <2 x double> %19, double %21, i32 1
2188 ; CHECK-NEXT: %23 = extractelement <16 x i8> %3, i32 6
2189 ; CHECK-NEXT: %24 = uitofp i8 %23 to double
2190 ; CHECK-NEXT: %25 = insertelement <2 x double> undef, double %24, i32 0
2191 ; CHECK-NEXT: %26 = extractelement <16 x i8> %3, i32 7
2192 ; CHECK-NEXT: %27 = uitofp i8 %26 to double
2193 ; CHECK-NEXT: %28 = insertelement <2 x double> %25, double %27, i32 1
2194 ; CHECK-NEXT: store <2 x double> %16, <2 x double>* %0, align 16
2195 ; CHECK-NEXT: store <2 x double> %22, <2 x double>* %1, align 16
2196 ; CHECK-NEXT: store <2 x double> %28, <2 x double>* %2, align 16
2197 ; CHECK-NEXT: ret <2 x double> %10
2198
2199 define <8 x double> @uitofp_cast_8xi16_to_8xdouble(<8 x i16>) {
2200 %2 = uitofp <8 x i16> %0 to <8 x double>
2201 ret <8 x double> %2
2202 }
2203 ; CHECK-LABEL: define <2 x double> @uitofp_cast_8xi16_to_8xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <8 x i16>)
2204 ; CHECK-NEXT: %5 = extractelement <8 x i16> %3, i32 0
2205 ; CHECK-NEXT: %6 = uitofp i16 %5 to double
2206 ; CHECK-NEXT: %7 = insertelement <2 x double> undef, double %6, i32 0
2207 ; CHECK-NEXT: %8 = extractelement <8 x i16> %3, i32 1
2208 ; CHECK-NEXT: %9 = uitofp i16 %8 to double
2209 ; CHECK-NEXT: %10 = insertelement <2 x double> %7, double %9, i32 1
2210 ; CHECK-NEXT: %11 = extractelement <8 x i16> %3, i32 2
2211 ; CHECK-NEXT: %12 = uitofp i16 %11 to double
2212 ; CHECK-NEXT: %13 = insertelement <2 x double> undef, double %12, i32 0
2213 ; CHECK-NEXT: %14 = extractelement <8 x i16> %3, i32 3
2214 ; CHECK-NEXT: %15 = uitofp i16 %14 to double
2215 ; CHECK-NEXT: %16 = insertelement <2 x double> %13, double %15, i32 1
2216 ; CHECK-NEXT: %17 = extractelement <8 x i16> %3, i32 4
2217 ; CHECK-NEXT: %18 = uitofp i16 %17 to double
2218 ; CHECK-NEXT: %19 = insertelement <2 x double> undef, double %18, i32 0
2219 ; CHECK-NEXT: %20 = extractelement <8 x i16> %3, i32 5
2220 ; CHECK-NEXT: %21 = uitofp i16 %20 to double
2221 ; CHECK-NEXT: %22 = insertelement <2 x double> %19, double %21, i32 1
2222 ; CHECK-NEXT: %23 = extractelement <8 x i16> %3, i32 6
2223 ; CHECK-NEXT: %24 = uitofp i16 %23 to double
2224 ; CHECK-NEXT: %25 = insertelement <2 x double> undef, double %24, i32 0
2225 ; CHECK-NEXT: %26 = extractelement <8 x i16> %3, i32 7
2226 ; CHECK-NEXT: %27 = uitofp i16 %26 to double
2227 ; CHECK-NEXT: %28 = insertelement <2 x double> %25, double %27, i32 1
2228 ; CHECK-NEXT: store <2 x double> %16, <2 x double>* %0, align 16
2229 ; CHECK-NEXT: store <2 x double> %22, <2 x double>* %1, align 16
2230 ; CHECK-NEXT: store <2 x double> %28, <2 x double>* %2, align 16
2231 ; CHECK-NEXT: ret <2 x double> %10
2232
2233 define <8 x double> @uitofp_cast_8xi32_to_8xdouble(<8 x i32>) {
2234 %2 = uitofp <8 x i32> %0 to <8 x double>
2235 ret <8 x double> %2
2236 }
2237 ; CHECK-LABEL: define <2 x double> @uitofp_cast_8xi32_to_8xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>)
2238 ; CHECK-NEXT: %6 = extractelement <4 x i32> %3, i32 0
2239 ; CHECK-NEXT: %7 = uitofp i32 %6 to double
2240 ; CHECK-NEXT: %8 = insertelement <2 x double> undef, double %7, i32 0
2241 ; CHECK-NEXT: %9 = extractelement <4 x i32> %3, i32 1
2242 ; CHECK-NEXT: %10 = uitofp i32 %9 to double
2243 ; CHECK-NEXT: %11 = insertelement <2 x double> %8, double %10, i32 1
2244 ; CHECK-NEXT: %12 = extractelement <4 x i32> %3, i32 2
2245 ; CHECK-NEXT: %13 = uitofp i32 %12 to double
2246 ; CHECK-NEXT: %14 = insertelement <2 x double> undef, double %13, i32 0
2247 ; CHECK-NEXT: %15 = extractelement <4 x i32> %3, i32 3
2248 ; CHECK-NEXT: %16 = uitofp i32 %15 to double
2249 ; CHECK-NEXT: %17 = insertelement <2 x double> %14, double %16, i32 1
2250 ; CHECK-NEXT: %18 = extractelement <4 x i32> %4, i32 0
2251 ; CHECK-NEXT: %19 = uitofp i32 %18 to double
2252 ; CHECK-NEXT: %20 = insertelement <2 x double> undef, double %19, i32 0
2253 ; CHECK-NEXT: %21 = extractelement <4 x i32> %4, i32 1
2254 ; CHECK-NEXT: %22 = uitofp i32 %21 to double
2255 ; CHECK-NEXT: %23 = insertelement <2 x double> %20, double %22, i32 1
2256 ; CHECK-NEXT: %24 = extractelement <4 x i32> %4, i32 2
2257 ; CHECK-NEXT: %25 = uitofp i32 %24 to double
2258 ; CHECK-NEXT: %26 = insertelement <2 x double> undef, double %25, i32 0
2259 ; CHECK-NEXT: %27 = extractelement <4 x i32> %4, i32 3
2260 ; CHECK-NEXT: %28 = uitofp i32 %27 to double
2261 ; CHECK-NEXT: %29 = insertelement <2 x double> %26, double %28, i32 1
2262 ; CHECK-NEXT: store <2 x double> %17, <2 x double>* %0, align 16
2263 ; CHECK-NEXT: store <2 x double> %23, <2 x double>* %1, align 16
2264 ; CHECK-NEXT: store <2 x double> %29, <2 x double>* %2, align 16
2265 ; CHECK-NEXT: ret <2 x double> %11
2266
2267 define <8 x double> @uitofp_cast_8xi64_to_8xdouble(<8 x i64>) {
2268 %2 = uitofp <8 x i64> %0 to <8 x double>
2269 ret <8 x double> %2
2270 }
2271 ; CHECK-LABEL: define <2 x double> @uitofp_cast_8xi64_to_8xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
2272 ; CHECK-NEXT: %8 = uitofp <2 x i64> %3 to <2 x double>
2273 ; CHECK-NEXT: %9 = uitofp <2 x i64> %4 to <2 x double>
2274 ; CHECK-NEXT: %10 = uitofp <2 x i64> %5 to <2 x double>
2275 ; CHECK-NEXT: %11 = uitofp <2 x i64> %6 to <2 x double>
2276 ; CHECK-NEXT: store <2 x double> %9, <2 x double>* %0, align 16
2277 ; CHECK-NEXT: store <2 x double> %10, <2 x double>* %1, align 16
2278 ; CHECK-NEXT: store <2 x double> %11, <2 x double>* %2, align 16
2279 ; CHECK-NEXT: ret <2 x double> %8
2280
2281 define <8 x float> @sitofp_cast_8xi8_to_8xfloat(<8 x i8>) {
2282 %2 = sitofp <8 x i8> %0 to <8 x float>
2283 ret <8 x float> %2
2284 }
2285 ; CHECK-LABEL: define <4 x float> @sitofp_cast_8xi8_to_8xfloat(<4 x float>* noca pture nonnull dereferenceable(16), <16 x i8>)
2286 ; CHECK-NEXT: %3 = extractelement <16 x i8> %1, i32 0
2287 ; CHECK-NEXT: %4 = sitofp i8 %3 to float
2288 ; CHECK-NEXT: %5 = insertelement <4 x float> undef, float %4, i32 0
2289 ; CHECK-NEXT: %6 = extractelement <16 x i8> %1, i32 1
2290 ; CHECK-NEXT: %7 = sitofp i8 %6 to float
2291 ; CHECK-NEXT: %8 = insertelement <4 x float> %5, float %7, i32 1
2292 ; CHECK-NEXT: %9 = extractelement <16 x i8> %1, i32 2
2293 ; CHECK-NEXT: %10 = sitofp i8 %9 to float
2294 ; CHECK-NEXT: %11 = insertelement <4 x float> %8, float %10, i32 2
2295 ; CHECK-NEXT: %12 = extractelement <16 x i8> %1, i32 3
2296 ; CHECK-NEXT: %13 = sitofp i8 %12 to float
2297 ; CHECK-NEXT: %14 = insertelement <4 x float> %11, float %13, i32 3
2298 ; CHECK-NEXT: %15 = extractelement <16 x i8> %1, i32 4
2299 ; CHECK-NEXT: %16 = sitofp i8 %15 to float
2300 ; CHECK-NEXT: %17 = insertelement <4 x float> undef, float %16, i32 0
2301 ; CHECK-NEXT: %18 = extractelement <16 x i8> %1, i32 5
2302 ; CHECK-NEXT: %19 = sitofp i8 %18 to float
2303 ; CHECK-NEXT: %20 = insertelement <4 x float> %17, float %19, i32 1
2304 ; CHECK-NEXT: %21 = extractelement <16 x i8> %1, i32 6
2305 ; CHECK-NEXT: %22 = sitofp i8 %21 to float
2306 ; CHECK-NEXT: %23 = insertelement <4 x float> %20, float %22, i32 2
2307 ; CHECK-NEXT: %24 = extractelement <16 x i8> %1, i32 7
2308 ; CHECK-NEXT: %25 = sitofp i8 %24 to float
2309 ; CHECK-NEXT: %26 = insertelement <4 x float> %23, float %25, i32 3
2310 ; CHECK-NEXT: store <4 x float> %26, <4 x float>* %0, align 16
2311 ; CHECK-NEXT: ret <4 x float> %14
2312
2313 define <8 x float> @sitofp_cast_8xi16_to_8xfloat(<8 x i16>) {
2314 %2 = sitofp <8 x i16> %0 to <8 x float>
2315 ret <8 x float> %2
2316 }
2317 ; CHECK-LABEL: define <4 x float> @sitofp_cast_8xi16_to_8xfloat(<4 x float>* noc apture nonnull dereferenceable(16), <8 x i16>)
2318 ; CHECK-NEXT: %3 = extractelement <8 x i16> %1, i32 0
2319 ; CHECK-NEXT: %4 = sitofp i16 %3 to float
2320 ; CHECK-NEXT: %5 = insertelement <4 x float> undef, float %4, i32 0
2321 ; CHECK-NEXT: %6 = extractelement <8 x i16> %1, i32 1
2322 ; CHECK-NEXT: %7 = sitofp i16 %6 to float
2323 ; CHECK-NEXT: %8 = insertelement <4 x float> %5, float %7, i32 1
2324 ; CHECK-NEXT: %9 = extractelement <8 x i16> %1, i32 2
2325 ; CHECK-NEXT: %10 = sitofp i16 %9 to float
2326 ; CHECK-NEXT: %11 = insertelement <4 x float> %8, float %10, i32 2
2327 ; CHECK-NEXT: %12 = extractelement <8 x i16> %1, i32 3
2328 ; CHECK-NEXT: %13 = sitofp i16 %12 to float
2329 ; CHECK-NEXT: %14 = insertelement <4 x float> %11, float %13, i32 3
2330 ; CHECK-NEXT: %15 = extractelement <8 x i16> %1, i32 4
2331 ; CHECK-NEXT: %16 = sitofp i16 %15 to float
2332 ; CHECK-NEXT: %17 = insertelement <4 x float> undef, float %16, i32 0
2333 ; CHECK-NEXT: %18 = extractelement <8 x i16> %1, i32 5
2334 ; CHECK-NEXT: %19 = sitofp i16 %18 to float
2335 ; CHECK-NEXT: %20 = insertelement <4 x float> %17, float %19, i32 1
2336 ; CHECK-NEXT: %21 = extractelement <8 x i16> %1, i32 6
2337 ; CHECK-NEXT: %22 = sitofp i16 %21 to float
2338 ; CHECK-NEXT: %23 = insertelement <4 x float> %20, float %22, i32 2
2339 ; CHECK-NEXT: %24 = extractelement <8 x i16> %1, i32 7
2340 ; CHECK-NEXT: %25 = sitofp i16 %24 to float
2341 ; CHECK-NEXT: %26 = insertelement <4 x float> %23, float %25, i32 3
2342 ; CHECK-NEXT: store <4 x float> %26, <4 x float>* %0, align 16
2343 ; CHECK-NEXT: ret <4 x float> %14
2344
2345 define <8 x float> @sitofp_cast_8xi32_to_8xfloat(<8 x i32>) {
2346 %2 = sitofp <8 x i32> %0 to <8 x float>
2347 ret <8 x float> %2
2348 }
2349 ; CHECK-LABEL: define <4 x float> @sitofp_cast_8xi32_to_8xfloat(<4 x float>* noc apture nonnull dereferenceable(16), <4 x i32>, <4 x i32>)
2350 ; CHECK-NEXT: %4 = sitofp <4 x i32> %1 to <4 x float>
2351 ; CHECK-NEXT: %5 = sitofp <4 x i32> %2 to <4 x float>
2352 ; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
2353 ; CHECK-NEXT: ret <4 x float> %4
2354
2355 define <8 x float> @sitofp_cast_8xi64_to_8xfloat(<8 x i64>) {
2356 %2 = sitofp <8 x i64> %0 to <8 x float>
2357 ret <8 x float> %2
2358 }
2359 ; CHECK-LABEL: define <4 x float> @sitofp_cast_8xi64_to_8xfloat(<4 x float>* noc apture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
2360 ; CHECK-NEXT: %6 = extractelement <2 x i64> %1, i32 0
2361 ; CHECK-NEXT: %7 = sitofp i64 %6 to float
2362 ; CHECK-NEXT: %8 = insertelement <4 x float> undef, float %7, i32 0
2363 ; CHECK-NEXT: %9 = extractelement <2 x i64> %1, i32 1
2364 ; CHECK-NEXT: %10 = sitofp i64 %9 to float
2365 ; CHECK-NEXT: %11 = insertelement <4 x float> %8, float %10, i32 1
2366 ; CHECK-NEXT: %12 = extractelement <2 x i64> %2, i32 0
2367 ; CHECK-NEXT: %13 = sitofp i64 %12 to float
2368 ; CHECK-NEXT: %14 = insertelement <4 x float> %11, float %13, i32 2
2369 ; CHECK-NEXT: %15 = extractelement <2 x i64> %2, i32 1
2370 ; CHECK-NEXT: %16 = sitofp i64 %15 to float
2371 ; CHECK-NEXT: %17 = insertelement <4 x float> %14, float %16, i32 3
2372 ; CHECK-NEXT: %18 = extractelement <2 x i64> %3, i32 0
2373 ; CHECK-NEXT: %19 = sitofp i64 %18 to float
2374 ; CHECK-NEXT: %20 = insertelement <4 x float> undef, float %19, i32 0
2375 ; CHECK-NEXT: %21 = extractelement <2 x i64> %3, i32 1
2376 ; CHECK-NEXT: %22 = sitofp i64 %21 to float
2377 ; CHECK-NEXT: %23 = insertelement <4 x float> %20, float %22, i32 1
2378 ; CHECK-NEXT: %24 = extractelement <2 x i64> %4, i32 0
2379 ; CHECK-NEXT: %25 = sitofp i64 %24 to float
2380 ; CHECK-NEXT: %26 = insertelement <4 x float> %23, float %25, i32 2
2381 ; CHECK-NEXT: %27 = extractelement <2 x i64> %4, i32 1
2382 ; CHECK-NEXT: %28 = sitofp i64 %27 to float
2383 ; CHECK-NEXT: %29 = insertelement <4 x float> %26, float %28, i32 3
2384 ; CHECK-NEXT: store <4 x float> %29, <4 x float>* %0, align 16
2385 ; CHECK-NEXT: ret <4 x float> %17
2386
2387 define <8 x double> @sitofp_cast_8xi8_to_8xdouble(<8 x i8>) {
2388 %2 = sitofp <8 x i8> %0 to <8 x double>
2389 ret <8 x double> %2
2390 }
2391 ; CHECK-LABEL: define <2 x double> @sitofp_cast_8xi8_to_8xdouble(<2 x double>* n ocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenc eable(16), <2 x double>* nocapture nonnull dereferenceable(16), <16 x i8>)
2392 ; CHECK-NEXT: %5 = extractelement <16 x i8> %3, i32 0
2393 ; CHECK-NEXT: %6 = sitofp i8 %5 to double
2394 ; CHECK-NEXT: %7 = insertelement <2 x double> undef, double %6, i32 0
2395 ; CHECK-NEXT: %8 = extractelement <16 x i8> %3, i32 1
2396 ; CHECK-NEXT: %9 = sitofp i8 %8 to double
2397 ; CHECK-NEXT: %10 = insertelement <2 x double> %7, double %9, i32 1
2398 ; CHECK-NEXT: %11 = extractelement <16 x i8> %3, i32 2
2399 ; CHECK-NEXT: %12 = sitofp i8 %11 to double
2400 ; CHECK-NEXT: %13 = insertelement <2 x double> undef, double %12, i32 0
2401 ; CHECK-NEXT: %14 = extractelement <16 x i8> %3, i32 3
2402 ; CHECK-NEXT: %15 = sitofp i8 %14 to double
2403 ; CHECK-NEXT: %16 = insertelement <2 x double> %13, double %15, i32 1
2404 ; CHECK-NEXT: %17 = extractelement <16 x i8> %3, i32 4
2405 ; CHECK-NEXT: %18 = sitofp i8 %17 to double
2406 ; CHECK-NEXT: %19 = insertelement <2 x double> undef, double %18, i32 0
2407 ; CHECK-NEXT: %20 = extractelement <16 x i8> %3, i32 5
2408 ; CHECK-NEXT: %21 = sitofp i8 %20 to double
2409 ; CHECK-NEXT: %22 = insertelement <2 x double> %19, double %21, i32 1
2410 ; CHECK-NEXT: %23 = extractelement <16 x i8> %3, i32 6
2411 ; CHECK-NEXT: %24 = sitofp i8 %23 to double
2412 ; CHECK-NEXT: %25 = insertelement <2 x double> undef, double %24, i32 0
2413 ; CHECK-NEXT: %26 = extractelement <16 x i8> %3, i32 7
2414 ; CHECK-NEXT: %27 = sitofp i8 %26 to double
2415 ; CHECK-NEXT: %28 = insertelement <2 x double> %25, double %27, i32 1
2416 ; CHECK-NEXT: store <2 x double> %16, <2 x double>* %0, align 16
2417 ; CHECK-NEXT: store <2 x double> %22, <2 x double>* %1, align 16
2418 ; CHECK-NEXT: store <2 x double> %28, <2 x double>* %2, align 16
2419 ; CHECK-NEXT: ret <2 x double> %10
2420
2421 define <8 x double> @sitofp_cast_8xi16_to_8xdouble(<8 x i16>) {
2422 %2 = sitofp <8 x i16> %0 to <8 x double>
2423 ret <8 x double> %2
2424 }
2425 ; CHECK-LABEL: define <2 x double> @sitofp_cast_8xi16_to_8xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <8 x i16>)
2426 ; CHECK-NEXT: %5 = extractelement <8 x i16> %3, i32 0
2427 ; CHECK-NEXT: %6 = sitofp i16 %5 to double
2428 ; CHECK-NEXT: %7 = insertelement <2 x double> undef, double %6, i32 0
2429 ; CHECK-NEXT: %8 = extractelement <8 x i16> %3, i32 1
2430 ; CHECK-NEXT: %9 = sitofp i16 %8 to double
2431 ; CHECK-NEXT: %10 = insertelement <2 x double> %7, double %9, i32 1
2432 ; CHECK-NEXT: %11 = extractelement <8 x i16> %3, i32 2
2433 ; CHECK-NEXT: %12 = sitofp i16 %11 to double
2434 ; CHECK-NEXT: %13 = insertelement <2 x double> undef, double %12, i32 0
2435 ; CHECK-NEXT: %14 = extractelement <8 x i16> %3, i32 3
2436 ; CHECK-NEXT: %15 = sitofp i16 %14 to double
2437 ; CHECK-NEXT: %16 = insertelement <2 x double> %13, double %15, i32 1
2438 ; CHECK-NEXT: %17 = extractelement <8 x i16> %3, i32 4
2439 ; CHECK-NEXT: %18 = sitofp i16 %17 to double
2440 ; CHECK-NEXT: %19 = insertelement <2 x double> undef, double %18, i32 0
2441 ; CHECK-NEXT: %20 = extractelement <8 x i16> %3, i32 5
2442 ; CHECK-NEXT: %21 = sitofp i16 %20 to double
2443 ; CHECK-NEXT: %22 = insertelement <2 x double> %19, double %21, i32 1
2444 ; CHECK-NEXT: %23 = extractelement <8 x i16> %3, i32 6
2445 ; CHECK-NEXT: %24 = sitofp i16 %23 to double
2446 ; CHECK-NEXT: %25 = insertelement <2 x double> undef, double %24, i32 0
2447 ; CHECK-NEXT: %26 = extractelement <8 x i16> %3, i32 7
2448 ; CHECK-NEXT: %27 = sitofp i16 %26 to double
2449 ; CHECK-NEXT: %28 = insertelement <2 x double> %25, double %27, i32 1
2450 ; CHECK-NEXT: store <2 x double> %16, <2 x double>* %0, align 16
2451 ; CHECK-NEXT: store <2 x double> %22, <2 x double>* %1, align 16
2452 ; CHECK-NEXT: store <2 x double> %28, <2 x double>* %2, align 16
2453 ; CHECK-NEXT: ret <2 x double> %10
2454
2455 define <8 x double> @sitofp_cast_8xi32_to_8xdouble(<8 x i32>) {
2456 %2 = sitofp <8 x i32> %0 to <8 x double>
2457 ret <8 x double> %2
2458 }
2459 ; CHECK-LABEL: define <2 x double> @sitofp_cast_8xi32_to_8xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>)
2460 ; CHECK-NEXT: %6 = extractelement <4 x i32> %3, i32 0
2461 ; CHECK-NEXT: %7 = sitofp i32 %6 to double
2462 ; CHECK-NEXT: %8 = insertelement <2 x double> undef, double %7, i32 0
2463 ; CHECK-NEXT: %9 = extractelement <4 x i32> %3, i32 1
2464 ; CHECK-NEXT: %10 = sitofp i32 %9 to double
2465 ; CHECK-NEXT: %11 = insertelement <2 x double> %8, double %10, i32 1
2466 ; CHECK-NEXT: %12 = extractelement <4 x i32> %3, i32 2
2467 ; CHECK-NEXT: %13 = sitofp i32 %12 to double
2468 ; CHECK-NEXT: %14 = insertelement <2 x double> undef, double %13, i32 0
2469 ; CHECK-NEXT: %15 = extractelement <4 x i32> %3, i32 3
2470 ; CHECK-NEXT: %16 = sitofp i32 %15 to double
2471 ; CHECK-NEXT: %17 = insertelement <2 x double> %14, double %16, i32 1
2472 ; CHECK-NEXT: %18 = extractelement <4 x i32> %4, i32 0
2473 ; CHECK-NEXT: %19 = sitofp i32 %18 to double
2474 ; CHECK-NEXT: %20 = insertelement <2 x double> undef, double %19, i32 0
2475 ; CHECK-NEXT: %21 = extractelement <4 x i32> %4, i32 1
2476 ; CHECK-NEXT: %22 = sitofp i32 %21 to double
2477 ; CHECK-NEXT: %23 = insertelement <2 x double> %20, double %22, i32 1
2478 ; CHECK-NEXT: %24 = extractelement <4 x i32> %4, i32 2
2479 ; CHECK-NEXT: %25 = sitofp i32 %24 to double
2480 ; CHECK-NEXT: %26 = insertelement <2 x double> undef, double %25, i32 0
2481 ; CHECK-NEXT: %27 = extractelement <4 x i32> %4, i32 3
2482 ; CHECK-NEXT: %28 = sitofp i32 %27 to double
2483 ; CHECK-NEXT: %29 = insertelement <2 x double> %26, double %28, i32 1
2484 ; CHECK-NEXT: store <2 x double> %17, <2 x double>* %0, align 16
2485 ; CHECK-NEXT: store <2 x double> %23, <2 x double>* %1, align 16
2486 ; CHECK-NEXT: store <2 x double> %29, <2 x double>* %2, align 16
2487 ; CHECK-NEXT: ret <2 x double> %11
2488
2489 define <8 x double> @sitofp_cast_8xi64_to_8xdouble(<8 x i64>) {
2490 %2 = sitofp <8 x i64> %0 to <8 x double>
2491 ret <8 x double> %2
2492 }
2493 ; CHECK-LABEL: define <2 x double> @sitofp_cast_8xi64_to_8xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
2494 ; CHECK-NEXT: %8 = sitofp <2 x i64> %3 to <2 x double>
2495 ; CHECK-NEXT: %9 = sitofp <2 x i64> %4 to <2 x double>
2496 ; CHECK-NEXT: %10 = sitofp <2 x i64> %5 to <2 x double>
2497 ; CHECK-NEXT: %11 = sitofp <2 x i64> %6 to <2 x double>
2498 ; CHECK-NEXT: store <2 x double> %9, <2 x double>* %0, align 16
2499 ; CHECK-NEXT: store <2 x double> %10, <2 x double>* %1, align 16
2500 ; CHECK-NEXT: store <2 x double> %11, <2 x double>* %2, align 16
2501 ; CHECK-NEXT: ret <2 x double> %8
2502
2503 define <12 x i8> @fptoui_cast_12xfloat_to_12xi8(<12 x float>) {
2504 %2 = fptoui <12 x float> %0 to <12 x i8>
2505 ret <12 x i8> %2
2506 }
2507 ; CHECK-LABEL: define <16 x i8> @fptoui_cast_12xfloat_to_12xi8(<4 x float>, <4 x float>, <4 x float>)
2508 ; CHECK-NEXT: %4 = extractelement <4 x float> %0, i32 0
2509 ; CHECK-NEXT: %5 = fptoui float %4 to i8
2510 ; CHECK-NEXT: %6 = insertelement <16 x i8> undef, i8 %5, i32 0
2511 ; CHECK-NEXT: %7 = extractelement <4 x float> %0, i32 1
2512 ; CHECK-NEXT: %8 = fptoui float %7 to i8
2513 ; CHECK-NEXT: %9 = insertelement <16 x i8> %6, i8 %8, i32 1
2514 ; CHECK-NEXT: %10 = extractelement <4 x float> %0, i32 2
2515 ; CHECK-NEXT: %11 = fptoui float %10 to i8
2516 ; CHECK-NEXT: %12 = insertelement <16 x i8> %9, i8 %11, i32 2
2517 ; CHECK-NEXT: %13 = extractelement <4 x float> %0, i32 3
2518 ; CHECK-NEXT: %14 = fptoui float %13 to i8
2519 ; CHECK-NEXT: %15 = insertelement <16 x i8> %12, i8 %14, i32 3
2520 ; CHECK-NEXT: %16 = extractelement <4 x float> %1, i32 0
2521 ; CHECK-NEXT: %17 = fptoui float %16 to i8
2522 ; CHECK-NEXT: %18 = insertelement <16 x i8> %15, i8 %17, i32 4
2523 ; CHECK-NEXT: %19 = extractelement <4 x float> %1, i32 1
2524 ; CHECK-NEXT: %20 = fptoui float %19 to i8
2525 ; CHECK-NEXT: %21 = insertelement <16 x i8> %18, i8 %20, i32 5
2526 ; CHECK-NEXT: %22 = extractelement <4 x float> %1, i32 2
2527 ; CHECK-NEXT: %23 = fptoui float %22 to i8
2528 ; CHECK-NEXT: %24 = insertelement <16 x i8> %21, i8 %23, i32 6
2529 ; CHECK-NEXT: %25 = extractelement <4 x float> %1, i32 3
2530 ; CHECK-NEXT: %26 = fptoui float %25 to i8
2531 ; CHECK-NEXT: %27 = insertelement <16 x i8> %24, i8 %26, i32 7
2532 ; CHECK-NEXT: %28 = extractelement <4 x float> %2, i32 0
2533 ; CHECK-NEXT: %29 = fptoui float %28 to i8
2534 ; CHECK-NEXT: %30 = insertelement <16 x i8> %27, i8 %29, i32 8
2535 ; CHECK-NEXT: %31 = extractelement <4 x float> %2, i32 1
2536 ; CHECK-NEXT: %32 = fptoui float %31 to i8
2537 ; CHECK-NEXT: %33 = insertelement <16 x i8> %30, i8 %32, i32 9
2538 ; CHECK-NEXT: %34 = extractelement <4 x float> %2, i32 2
2539 ; CHECK-NEXT: %35 = fptoui float %34 to i8
2540 ; CHECK-NEXT: %36 = insertelement <16 x i8> %33, i8 %35, i32 10
2541 ; CHECK-NEXT: %37 = extractelement <4 x float> %2, i32 3
2542 ; CHECK-NEXT: %38 = fptoui float %37 to i8
2543 ; CHECK-NEXT: %39 = insertelement <16 x i8> %36, i8 %38, i32 11
2544 ; CHECK-NEXT: ret <16 x i8> %39
2545
2546 define <12 x i16> @fptoui_cast_12xfloat_to_12xi16(<12 x float>) {
2547 %2 = fptoui <12 x float> %0 to <12 x i16>
2548 ret <12 x i16> %2
2549 }
2550 ; CHECK-LABEL: define <8 x i16> @fptoui_cast_12xfloat_to_12xi16(<8 x i16>* nocap ture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>)
2551 ; CHECK-NEXT: %5 = extractelement <4 x float> %1, i32 0
2552 ; CHECK-NEXT: %6 = fptoui float %5 to i16
2553 ; CHECK-NEXT: %7 = insertelement <8 x i16> undef, i16 %6, i32 0
2554 ; CHECK-NEXT: %8 = extractelement <4 x float> %1, i32 1
2555 ; CHECK-NEXT: %9 = fptoui float %8 to i16
2556 ; CHECK-NEXT: %10 = insertelement <8 x i16> %7, i16 %9, i32 1
2557 ; CHECK-NEXT: %11 = extractelement <4 x float> %1, i32 2
2558 ; CHECK-NEXT: %12 = fptoui float %11 to i16
2559 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 2
2560 ; CHECK-NEXT: %14 = extractelement <4 x float> %1, i32 3
2561 ; CHECK-NEXT: %15 = fptoui float %14 to i16
2562 ; CHECK-NEXT: %16 = insertelement <8 x i16> %13, i16 %15, i32 3
2563 ; CHECK-NEXT: %17 = extractelement <4 x float> %2, i32 0
2564 ; CHECK-NEXT: %18 = fptoui float %17 to i16
2565 ; CHECK-NEXT: %19 = insertelement <8 x i16> %16, i16 %18, i32 4
2566 ; CHECK-NEXT: %20 = extractelement <4 x float> %2, i32 1
2567 ; CHECK-NEXT: %21 = fptoui float %20 to i16
2568 ; CHECK-NEXT: %22 = insertelement <8 x i16> %19, i16 %21, i32 5
2569 ; CHECK-NEXT: %23 = extractelement <4 x float> %2, i32 2
2570 ; CHECK-NEXT: %24 = fptoui float %23 to i16
2571 ; CHECK-NEXT: %25 = insertelement <8 x i16> %22, i16 %24, i32 6
2572 ; CHECK-NEXT: %26 = extractelement <4 x float> %2, i32 3
2573 ; CHECK-NEXT: %27 = fptoui float %26 to i16
2574 ; CHECK-NEXT: %28 = insertelement <8 x i16> %25, i16 %27, i32 7
2575 ; CHECK-NEXT: %29 = extractelement <4 x float> %3, i32 0
2576 ; CHECK-NEXT: %30 = fptoui float %29 to i16
2577 ; CHECK-NEXT: %31 = insertelement <8 x i16> undef, i16 %30, i32 0
2578 ; CHECK-NEXT: %32 = extractelement <4 x float> %3, i32 1
2579 ; CHECK-NEXT: %33 = fptoui float %32 to i16
2580 ; CHECK-NEXT: %34 = insertelement <8 x i16> %31, i16 %33, i32 1
2581 ; CHECK-NEXT: %35 = extractelement <4 x float> %3, i32 2
2582 ; CHECK-NEXT: %36 = fptoui float %35 to i16
2583 ; CHECK-NEXT: %37 = insertelement <8 x i16> %34, i16 %36, i32 2
2584 ; CHECK-NEXT: %38 = extractelement <4 x float> %3, i32 3
2585 ; CHECK-NEXT: %39 = fptoui float %38 to i16
2586 ; CHECK-NEXT: %40 = insertelement <8 x i16> %37, i16 %39, i32 3
2587 ; CHECK-NEXT: store <8 x i16> %40, <8 x i16>* %0, align 16
2588 ; CHECK-NEXT: ret <8 x i16> %28
2589
2590 define <12 x i32> @fptoui_cast_12xfloat_to_12xi32(<12 x float>) {
2591 %2 = fptoui <12 x float> %0 to <12 x i32>
2592 ret <12 x i32> %2
2593 }
2594 ; CHECK-LABEL: define <4 x i32> @fptoui_cast_12xfloat_to_12xi32(<4 x i32>* nocap ture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(1 6), <4 x float>, <4 x float>, <4 x float>)
2595 ; CHECK-NEXT: %6 = fptoui <4 x float> %2 to <4 x i32>
2596 ; CHECK-NEXT: %7 = fptoui <4 x float> %3 to <4 x i32>
2597 ; CHECK-NEXT: %8 = fptoui <4 x float> %4 to <4 x i32>
2598 ; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %0, align 16
2599 ; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %1, align 16
2600 ; CHECK-NEXT: ret <4 x i32> %6
2601
2602 define <12 x i64> @fptoui_cast_12xfloat_to_12xi64(<12 x float>) {
2603 %2 = fptoui <12 x float> %0 to <12 x i64>
2604 ret <12 x i64> %2
2605 }
2606 ; CHECK-LABEL: define <2 x i64> @fptoui_cast_12xfloat_to_12xi64(<2 x i64>* nocap ture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(1 6), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnu ll dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <4 x f loat>, <4 x float>, <4 x float>)
2607 ; CHECK-NEXT: %9 = extractelement <4 x float> %5, i32 0
2608 ; CHECK-NEXT: %10 = fptoui float %9 to i64
2609 ; CHECK-NEXT: %11 = insertelement <2 x i64> undef, i64 %10, i32 0
2610 ; CHECK-NEXT: %12 = extractelement <4 x float> %5, i32 1
2611 ; CHECK-NEXT: %13 = fptoui float %12 to i64
2612 ; CHECK-NEXT: %14 = insertelement <2 x i64> %11, i64 %13, i32 1
2613 ; CHECK-NEXT: %15 = extractelement <4 x float> %5, i32 2
2614 ; CHECK-NEXT: %16 = fptoui float %15 to i64
2615 ; CHECK-NEXT: %17 = insertelement <2 x i64> undef, i64 %16, i32 0
2616 ; CHECK-NEXT: %18 = extractelement <4 x float> %5, i32 3
2617 ; CHECK-NEXT: %19 = fptoui float %18 to i64
2618 ; CHECK-NEXT: %20 = insertelement <2 x i64> %17, i64 %19, i32 1
2619 ; CHECK-NEXT: %21 = extractelement <4 x float> %6, i32 0
2620 ; CHECK-NEXT: %22 = fptoui float %21 to i64
2621 ; CHECK-NEXT: %23 = insertelement <2 x i64> undef, i64 %22, i32 0
2622 ; CHECK-NEXT: %24 = extractelement <4 x float> %6, i32 1
2623 ; CHECK-NEXT: %25 = fptoui float %24 to i64
2624 ; CHECK-NEXT: %26 = insertelement <2 x i64> %23, i64 %25, i32 1
2625 ; CHECK-NEXT: %27 = extractelement <4 x float> %6, i32 2
2626 ; CHECK-NEXT: %28 = fptoui float %27 to i64
2627 ; CHECK-NEXT: %29 = insertelement <2 x i64> undef, i64 %28, i32 0
2628 ; CHECK-NEXT: %30 = extractelement <4 x float> %6, i32 3
2629 ; CHECK-NEXT: %31 = fptoui float %30 to i64
2630 ; CHECK-NEXT: %32 = insertelement <2 x i64> %29, i64 %31, i32 1
2631 ; CHECK-NEXT: %33 = extractelement <4 x float> %7, i32 0
2632 ; CHECK-NEXT: %34 = fptoui float %33 to i64
2633 ; CHECK-NEXT: %35 = insertelement <2 x i64> undef, i64 %34, i32 0
2634 ; CHECK-NEXT: %36 = extractelement <4 x float> %7, i32 1
2635 ; CHECK-NEXT: %37 = fptoui float %36 to i64
2636 ; CHECK-NEXT: %38 = insertelement <2 x i64> %35, i64 %37, i32 1
2637 ; CHECK-NEXT: %39 = extractelement <4 x float> %7, i32 2
2638 ; CHECK-NEXT: %40 = fptoui float %39 to i64
2639 ; CHECK-NEXT: %41 = insertelement <2 x i64> undef, i64 %40, i32 0
2640 ; CHECK-NEXT: %42 = extractelement <4 x float> %7, i32 3
2641 ; CHECK-NEXT: %43 = fptoui float %42 to i64
2642 ; CHECK-NEXT: %44 = insertelement <2 x i64> %41, i64 %43, i32 1
2643 ; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %0, align 16
2644 ; CHECK-NEXT: store <2 x i64> %26, <2 x i64>* %1, align 16
2645 ; CHECK-NEXT: store <2 x i64> %32, <2 x i64>* %2, align 16
2646 ; CHECK-NEXT: store <2 x i64> %38, <2 x i64>* %3, align 16
2647 ; CHECK-NEXT: store <2 x i64> %44, <2 x i64>* %4, align 16
2648 ; CHECK-NEXT: ret <2 x i64> %14
2649
2650 define <12 x i8> @fptoui_cast_12xdouble_to_12xi8(<12 x double>) {
2651 %2 = fptoui <12 x double> %0 to <12 x i8>
2652 ret <12 x i8> %2
2653 }
2654 ; CHECK-LABEL: define <16 x i8> @fptoui_cast_12xdouble_to_12xi8(<2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>)
2655 ; CHECK-NEXT: %7 = extractelement <2 x double> %0, i32 0
2656 ; CHECK-NEXT: %8 = fptoui double %7 to i8
2657 ; CHECK-NEXT: %9 = insertelement <16 x i8> undef, i8 %8, i32 0
2658 ; CHECK-NEXT: %10 = extractelement <2 x double> %0, i32 1
2659 ; CHECK-NEXT: %11 = fptoui double %10 to i8
2660 ; CHECK-NEXT: %12 = insertelement <16 x i8> %9, i8 %11, i32 1
2661 ; CHECK-NEXT: %13 = extractelement <2 x double> %1, i32 0
2662 ; CHECK-NEXT: %14 = fptoui double %13 to i8
2663 ; CHECK-NEXT: %15 = insertelement <16 x i8> %12, i8 %14, i32 2
2664 ; CHECK-NEXT: %16 = extractelement <2 x double> %1, i32 1
2665 ; CHECK-NEXT: %17 = fptoui double %16 to i8
2666 ; CHECK-NEXT: %18 = insertelement <16 x i8> %15, i8 %17, i32 3
2667 ; CHECK-NEXT: %19 = extractelement <2 x double> %2, i32 0
2668 ; CHECK-NEXT: %20 = fptoui double %19 to i8
2669 ; CHECK-NEXT: %21 = insertelement <16 x i8> %18, i8 %20, i32 4
2670 ; CHECK-NEXT: %22 = extractelement <2 x double> %2, i32 1
2671 ; CHECK-NEXT: %23 = fptoui double %22 to i8
2672 ; CHECK-NEXT: %24 = insertelement <16 x i8> %21, i8 %23, i32 5
2673 ; CHECK-NEXT: %25 = extractelement <2 x double> %3, i32 0
2674 ; CHECK-NEXT: %26 = fptoui double %25 to i8
2675 ; CHECK-NEXT: %27 = insertelement <16 x i8> %24, i8 %26, i32 6
2676 ; CHECK-NEXT: %28 = extractelement <2 x double> %3, i32 1
2677 ; CHECK-NEXT: %29 = fptoui double %28 to i8
2678 ; CHECK-NEXT: %30 = insertelement <16 x i8> %27, i8 %29, i32 7
2679 ; CHECK-NEXT: %31 = extractelement <2 x double> %4, i32 0
2680 ; CHECK-NEXT: %32 = fptoui double %31 to i8
2681 ; CHECK-NEXT: %33 = insertelement <16 x i8> %30, i8 %32, i32 8
2682 ; CHECK-NEXT: %34 = extractelement <2 x double> %4, i32 1
2683 ; CHECK-NEXT: %35 = fptoui double %34 to i8
2684 ; CHECK-NEXT: %36 = insertelement <16 x i8> %33, i8 %35, i32 9
2685 ; CHECK-NEXT: %37 = extractelement <2 x double> %5, i32 0
2686 ; CHECK-NEXT: %38 = fptoui double %37 to i8
2687 ; CHECK-NEXT: %39 = insertelement <16 x i8> %36, i8 %38, i32 10
2688 ; CHECK-NEXT: %40 = extractelement <2 x double> %5, i32 1
2689 ; CHECK-NEXT: %41 = fptoui double %40 to i8
2690 ; CHECK-NEXT: %42 = insertelement <16 x i8> %39, i8 %41, i32 11
2691 ; CHECK-NEXT: ret <16 x i8> %42
2692
2693 define <12 x i16> @fptoui_cast_12xdouble_to_12xi16(<12 x double>) {
2694 %2 = fptoui <12 x double> %0 to <12 x i16>
2695 ret <12 x i16> %2
2696 }
2697 ; CHECK-LABEL: define <8 x i16> @fptoui_cast_12xdouble_to_12xi16(<8 x i16>* noca pture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>)
2698 ; CHECK-NEXT: %8 = extractelement <2 x double> %1, i32 0
2699 ; CHECK-NEXT: %9 = fptoui double %8 to i16
2700 ; CHECK-NEXT: %10 = insertelement <8 x i16> undef, i16 %9, i32 0
2701 ; CHECK-NEXT: %11 = extractelement <2 x double> %1, i32 1
2702 ; CHECK-NEXT: %12 = fptoui double %11 to i16
2703 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 1
2704 ; CHECK-NEXT: %14 = extractelement <2 x double> %2, i32 0
2705 ; CHECK-NEXT: %15 = fptoui double %14 to i16
2706 ; CHECK-NEXT: %16 = insertelement <8 x i16> %13, i16 %15, i32 2
2707 ; CHECK-NEXT: %17 = extractelement <2 x double> %2, i32 1
2708 ; CHECK-NEXT: %18 = fptoui double %17 to i16
2709 ; CHECK-NEXT: %19 = insertelement <8 x i16> %16, i16 %18, i32 3
2710 ; CHECK-NEXT: %20 = extractelement <2 x double> %3, i32 0
2711 ; CHECK-NEXT: %21 = fptoui double %20 to i16
2712 ; CHECK-NEXT: %22 = insertelement <8 x i16> %19, i16 %21, i32 4
2713 ; CHECK-NEXT: %23 = extractelement <2 x double> %3, i32 1
2714 ; CHECK-NEXT: %24 = fptoui double %23 to i16
2715 ; CHECK-NEXT: %25 = insertelement <8 x i16> %22, i16 %24, i32 5
2716 ; CHECK-NEXT: %26 = extractelement <2 x double> %4, i32 0
2717 ; CHECK-NEXT: %27 = fptoui double %26 to i16
2718 ; CHECK-NEXT: %28 = insertelement <8 x i16> %25, i16 %27, i32 6
2719 ; CHECK-NEXT: %29 = extractelement <2 x double> %4, i32 1
2720 ; CHECK-NEXT: %30 = fptoui double %29 to i16
2721 ; CHECK-NEXT: %31 = insertelement <8 x i16> %28, i16 %30, i32 7
2722 ; CHECK-NEXT: %32 = extractelement <2 x double> %5, i32 0
2723 ; CHECK-NEXT: %33 = fptoui double %32 to i16
2724 ; CHECK-NEXT: %34 = insertelement <8 x i16> undef, i16 %33, i32 0
2725 ; CHECK-NEXT: %35 = extractelement <2 x double> %5, i32 1
2726 ; CHECK-NEXT: %36 = fptoui double %35 to i16
2727 ; CHECK-NEXT: %37 = insertelement <8 x i16> %34, i16 %36, i32 1
2728 ; CHECK-NEXT: %38 = extractelement <2 x double> %6, i32 0
2729 ; CHECK-NEXT: %39 = fptoui double %38 to i16
2730 ; CHECK-NEXT: %40 = insertelement <8 x i16> %37, i16 %39, i32 2
2731 ; CHECK-NEXT: %41 = extractelement <2 x double> %6, i32 1
2732 ; CHECK-NEXT: %42 = fptoui double %41 to i16
2733 ; CHECK-NEXT: %43 = insertelement <8 x i16> %40, i16 %42, i32 3
2734 ; CHECK-NEXT: store <8 x i16> %43, <8 x i16>* %0, align 16
2735 ; CHECK-NEXT: ret <8 x i16> %31
2736
2737 define <12 x i32> @fptoui_cast_12xdouble_to_12xi32(<12 x double>) {
2738 %2 = fptoui <12 x double> %0 to <12 x i32>
2739 ret <12 x i32> %2
2740 }
2741 ; CHECK-LABEL: define <4 x i32> @fptoui_cast_12xdouble_to_12xi32(<4 x i32>* noca pture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable( 16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>)
2742 ; CHECK-NEXT: %9 = extractelement <2 x double> %2, i32 0
2743 ; CHECK-NEXT: %10 = fptoui double %9 to i32
2744 ; CHECK-NEXT: %11 = insertelement <4 x i32> undef, i32 %10, i32 0
2745 ; CHECK-NEXT: %12 = extractelement <2 x double> %2, i32 1
2746 ; CHECK-NEXT: %13 = fptoui double %12 to i32
2747 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 1
2748 ; CHECK-NEXT: %15 = extractelement <2 x double> %3, i32 0
2749 ; CHECK-NEXT: %16 = fptoui double %15 to i32
2750 ; CHECK-NEXT: %17 = insertelement <4 x i32> %14, i32 %16, i32 2
2751 ; CHECK-NEXT: %18 = extractelement <2 x double> %3, i32 1
2752 ; CHECK-NEXT: %19 = fptoui double %18 to i32
2753 ; CHECK-NEXT: %20 = insertelement <4 x i32> %17, i32 %19, i32 3
2754 ; CHECK-NEXT: %21 = extractelement <2 x double> %4, i32 0
2755 ; CHECK-NEXT: %22 = fptoui double %21 to i32
2756 ; CHECK-NEXT: %23 = insertelement <4 x i32> undef, i32 %22, i32 0
2757 ; CHECK-NEXT: %24 = extractelement <2 x double> %4, i32 1
2758 ; CHECK-NEXT: %25 = fptoui double %24 to i32
2759 ; CHECK-NEXT: %26 = insertelement <4 x i32> %23, i32 %25, i32 1
2760 ; CHECK-NEXT: %27 = extractelement <2 x double> %5, i32 0
2761 ; CHECK-NEXT: %28 = fptoui double %27 to i32
2762 ; CHECK-NEXT: %29 = insertelement <4 x i32> %26, i32 %28, i32 2
2763 ; CHECK-NEXT: %30 = extractelement <2 x double> %5, i32 1
2764 ; CHECK-NEXT: %31 = fptoui double %30 to i32
2765 ; CHECK-NEXT: %32 = insertelement <4 x i32> %29, i32 %31, i32 3
2766 ; CHECK-NEXT: %33 = extractelement <2 x double> %6, i32 0
2767 ; CHECK-NEXT: %34 = fptoui double %33 to i32
2768 ; CHECK-NEXT: %35 = insertelement <4 x i32> undef, i32 %34, i32 0
2769 ; CHECK-NEXT: %36 = extractelement <2 x double> %6, i32 1
2770 ; CHECK-NEXT: %37 = fptoui double %36 to i32
2771 ; CHECK-NEXT: %38 = insertelement <4 x i32> %35, i32 %37, i32 1
2772 ; CHECK-NEXT: %39 = extractelement <2 x double> %7, i32 0
2773 ; CHECK-NEXT: %40 = fptoui double %39 to i32
2774 ; CHECK-NEXT: %41 = insertelement <4 x i32> %38, i32 %40, i32 2
2775 ; CHECK-NEXT: %42 = extractelement <2 x double> %7, i32 1
2776 ; CHECK-NEXT: %43 = fptoui double %42 to i32
2777 ; CHECK-NEXT: %44 = insertelement <4 x i32> %41, i32 %43, i32 3
2778 ; CHECK-NEXT: store <4 x i32> %32, <4 x i32>* %0, align 16
2779 ; CHECK-NEXT: store <4 x i32> %44, <4 x i32>* %1, align 16
2780 ; CHECK-NEXT: ret <4 x i32> %20
2781
2782 define <12 x i64> @fptoui_cast_12xdouble_to_12xi64(<12 x double>) {
2783 %2 = fptoui <12 x double> %0 to <12 x i64>
2784 ret <12 x i64> %2
2785 }
2786 ; CHECK-LABEL: define <2 x i64> @fptoui_cast_12xdouble_to_12xi64(<2 x i64>* noca pture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable( 16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonn ull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>)
2787 ; CHECK-NEXT: %12 = fptoui <2 x double> %5 to <2 x i64>
2788 ; CHECK-NEXT: %13 = fptoui <2 x double> %6 to <2 x i64>
2789 ; CHECK-NEXT: %14 = fptoui <2 x double> %7 to <2 x i64>
2790 ; CHECK-NEXT: %15 = fptoui <2 x double> %8 to <2 x i64>
2791 ; CHECK-NEXT: %16 = fptoui <2 x double> %9 to <2 x i64>
2792 ; CHECK-NEXT: %17 = fptoui <2 x double> %10 to <2 x i64>
2793 ; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %0, align 16
2794 ; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %1, align 16
2795 ; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %2, align 16
2796 ; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %3, align 16
2797 ; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %4, align 16
2798 ; CHECK-NEXT: ret <2 x i64> %12
2799
2800 define <12 x i8> @fptosi_cast_12xfloat_to_12xi8(<12 x float>) {
2801 %2 = fptosi <12 x float> %0 to <12 x i8>
2802 ret <12 x i8> %2
2803 }
2804 ; CHECK-LABEL: define <16 x i8> @fptosi_cast_12xfloat_to_12xi8(<4 x float>, <4 x float>, <4 x float>)
2805 ; CHECK-NEXT: %4 = extractelement <4 x float> %0, i32 0
2806 ; CHECK-NEXT: %5 = fptosi float %4 to i8
2807 ; CHECK-NEXT: %6 = insertelement <16 x i8> undef, i8 %5, i32 0
2808 ; CHECK-NEXT: %7 = extractelement <4 x float> %0, i32 1
2809 ; CHECK-NEXT: %8 = fptosi float %7 to i8
2810 ; CHECK-NEXT: %9 = insertelement <16 x i8> %6, i8 %8, i32 1
2811 ; CHECK-NEXT: %10 = extractelement <4 x float> %0, i32 2
2812 ; CHECK-NEXT: %11 = fptosi float %10 to i8
2813 ; CHECK-NEXT: %12 = insertelement <16 x i8> %9, i8 %11, i32 2
2814 ; CHECK-NEXT: %13 = extractelement <4 x float> %0, i32 3
2815 ; CHECK-NEXT: %14 = fptosi float %13 to i8
2816 ; CHECK-NEXT: %15 = insertelement <16 x i8> %12, i8 %14, i32 3
2817 ; CHECK-NEXT: %16 = extractelement <4 x float> %1, i32 0
2818 ; CHECK-NEXT: %17 = fptosi float %16 to i8
2819 ; CHECK-NEXT: %18 = insertelement <16 x i8> %15, i8 %17, i32 4
2820 ; CHECK-NEXT: %19 = extractelement <4 x float> %1, i32 1
2821 ; CHECK-NEXT: %20 = fptosi float %19 to i8
2822 ; CHECK-NEXT: %21 = insertelement <16 x i8> %18, i8 %20, i32 5
2823 ; CHECK-NEXT: %22 = extractelement <4 x float> %1, i32 2
2824 ; CHECK-NEXT: %23 = fptosi float %22 to i8
2825 ; CHECK-NEXT: %24 = insertelement <16 x i8> %21, i8 %23, i32 6
2826 ; CHECK-NEXT: %25 = extractelement <4 x float> %1, i32 3
2827 ; CHECK-NEXT: %26 = fptosi float %25 to i8
2828 ; CHECK-NEXT: %27 = insertelement <16 x i8> %24, i8 %26, i32 7
2829 ; CHECK-NEXT: %28 = extractelement <4 x float> %2, i32 0
2830 ; CHECK-NEXT: %29 = fptosi float %28 to i8
2831 ; CHECK-NEXT: %30 = insertelement <16 x i8> %27, i8 %29, i32 8
2832 ; CHECK-NEXT: %31 = extractelement <4 x float> %2, i32 1
2833 ; CHECK-NEXT: %32 = fptosi float %31 to i8
2834 ; CHECK-NEXT: %33 = insertelement <16 x i8> %30, i8 %32, i32 9
2835 ; CHECK-NEXT: %34 = extractelement <4 x float> %2, i32 2
2836 ; CHECK-NEXT: %35 = fptosi float %34 to i8
2837 ; CHECK-NEXT: %36 = insertelement <16 x i8> %33, i8 %35, i32 10
2838 ; CHECK-NEXT: %37 = extractelement <4 x float> %2, i32 3
2839 ; CHECK-NEXT: %38 = fptosi float %37 to i8
2840 ; CHECK-NEXT: %39 = insertelement <16 x i8> %36, i8 %38, i32 11
2841 ; CHECK-NEXT: ret <16 x i8> %39
2842
2843 define <12 x i16> @fptosi_cast_12xfloat_to_12xi16(<12 x float>) {
2844 %2 = fptosi <12 x float> %0 to <12 x i16>
2845 ret <12 x i16> %2
2846 }
2847 ; CHECK-LABEL: define <8 x i16> @fptosi_cast_12xfloat_to_12xi16(<8 x i16>* nocap ture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>)
2848 ; CHECK-NEXT: %5 = extractelement <4 x float> %1, i32 0
2849 ; CHECK-NEXT: %6 = fptosi float %5 to i16
2850 ; CHECK-NEXT: %7 = insertelement <8 x i16> undef, i16 %6, i32 0
2851 ; CHECK-NEXT: %8 = extractelement <4 x float> %1, i32 1
2852 ; CHECK-NEXT: %9 = fptosi float %8 to i16
2853 ; CHECK-NEXT: %10 = insertelement <8 x i16> %7, i16 %9, i32 1
2854 ; CHECK-NEXT: %11 = extractelement <4 x float> %1, i32 2
2855 ; CHECK-NEXT: %12 = fptosi float %11 to i16
2856 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 2
2857 ; CHECK-NEXT: %14 = extractelement <4 x float> %1, i32 3
2858 ; CHECK-NEXT: %15 = fptosi float %14 to i16
2859 ; CHECK-NEXT: %16 = insertelement <8 x i16> %13, i16 %15, i32 3
2860 ; CHECK-NEXT: %17 = extractelement <4 x float> %2, i32 0
2861 ; CHECK-NEXT: %18 = fptosi float %17 to i16
2862 ; CHECK-NEXT: %19 = insertelement <8 x i16> %16, i16 %18, i32 4
2863 ; CHECK-NEXT: %20 = extractelement <4 x float> %2, i32 1
2864 ; CHECK-NEXT: %21 = fptosi float %20 to i16
2865 ; CHECK-NEXT: %22 = insertelement <8 x i16> %19, i16 %21, i32 5
2866 ; CHECK-NEXT: %23 = extractelement <4 x float> %2, i32 2
2867 ; CHECK-NEXT: %24 = fptosi float %23 to i16
2868 ; CHECK-NEXT: %25 = insertelement <8 x i16> %22, i16 %24, i32 6
2869 ; CHECK-NEXT: %26 = extractelement <4 x float> %2, i32 3
2870 ; CHECK-NEXT: %27 = fptosi float %26 to i16
2871 ; CHECK-NEXT: %28 = insertelement <8 x i16> %25, i16 %27, i32 7
2872 ; CHECK-NEXT: %29 = extractelement <4 x float> %3, i32 0
2873 ; CHECK-NEXT: %30 = fptosi float %29 to i16
2874 ; CHECK-NEXT: %31 = insertelement <8 x i16> undef, i16 %30, i32 0
2875 ; CHECK-NEXT: %32 = extractelement <4 x float> %3, i32 1
2876 ; CHECK-NEXT: %33 = fptosi float %32 to i16
2877 ; CHECK-NEXT: %34 = insertelement <8 x i16> %31, i16 %33, i32 1
2878 ; CHECK-NEXT: %35 = extractelement <4 x float> %3, i32 2
2879 ; CHECK-NEXT: %36 = fptosi float %35 to i16
2880 ; CHECK-NEXT: %37 = insertelement <8 x i16> %34, i16 %36, i32 2
2881 ; CHECK-NEXT: %38 = extractelement <4 x float> %3, i32 3
2882 ; CHECK-NEXT: %39 = fptosi float %38 to i16
2883 ; CHECK-NEXT: %40 = insertelement <8 x i16> %37, i16 %39, i32 3
2884 ; CHECK-NEXT: store <8 x i16> %40, <8 x i16>* %0, align 16
2885 ; CHECK-NEXT: ret <8 x i16> %28
2886
2887 define <12 x i32> @fptosi_cast_12xfloat_to_12xi32(<12 x float>) {
2888 %2 = fptosi <12 x float> %0 to <12 x i32>
2889 ret <12 x i32> %2
2890 }
2891 ; CHECK-LABEL: define <4 x i32> @fptosi_cast_12xfloat_to_12xi32(<4 x i32>* nocap ture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(1 6), <4 x float>, <4 x float>, <4 x float>)
2892 ; CHECK-NEXT: %6 = fptosi <4 x float> %2 to <4 x i32>
2893 ; CHECK-NEXT: %7 = fptosi <4 x float> %3 to <4 x i32>
2894 ; CHECK-NEXT: %8 = fptosi <4 x float> %4 to <4 x i32>
2895 ; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %0, align 16
2896 ; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %1, align 16
2897 ; CHECK-NEXT: ret <4 x i32> %6
2898
2899 define <12 x i64> @fptosi_cast_12xfloat_to_12xi64(<12 x float>) {
2900 %2 = fptosi <12 x float> %0 to <12 x i64>
2901 ret <12 x i64> %2
2902 }
2903 ; CHECK-LABEL: define <2 x i64> @fptosi_cast_12xfloat_to_12xi64(<2 x i64>* nocap ture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(1 6), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnu ll dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <4 x f loat>, <4 x float>, <4 x float>)
2904 ; CHECK-NEXT: %9 = extractelement <4 x float> %5, i32 0
2905 ; CHECK-NEXT: %10 = fptosi float %9 to i64
2906 ; CHECK-NEXT: %11 = insertelement <2 x i64> undef, i64 %10, i32 0
2907 ; CHECK-NEXT: %12 = extractelement <4 x float> %5, i32 1
2908 ; CHECK-NEXT: %13 = fptosi float %12 to i64
2909 ; CHECK-NEXT: %14 = insertelement <2 x i64> %11, i64 %13, i32 1
2910 ; CHECK-NEXT: %15 = extractelement <4 x float> %5, i32 2
2911 ; CHECK-NEXT: %16 = fptosi float %15 to i64
2912 ; CHECK-NEXT: %17 = insertelement <2 x i64> undef, i64 %16, i32 0
2913 ; CHECK-NEXT: %18 = extractelement <4 x float> %5, i32 3
2914 ; CHECK-NEXT: %19 = fptosi float %18 to i64
2915 ; CHECK-NEXT: %20 = insertelement <2 x i64> %17, i64 %19, i32 1
2916 ; CHECK-NEXT: %21 = extractelement <4 x float> %6, i32 0
2917 ; CHECK-NEXT: %22 = fptosi float %21 to i64
2918 ; CHECK-NEXT: %23 = insertelement <2 x i64> undef, i64 %22, i32 0
2919 ; CHECK-NEXT: %24 = extractelement <4 x float> %6, i32 1
2920 ; CHECK-NEXT: %25 = fptosi float %24 to i64
2921 ; CHECK-NEXT: %26 = insertelement <2 x i64> %23, i64 %25, i32 1
2922 ; CHECK-NEXT: %27 = extractelement <4 x float> %6, i32 2
2923 ; CHECK-NEXT: %28 = fptosi float %27 to i64
2924 ; CHECK-NEXT: %29 = insertelement <2 x i64> undef, i64 %28, i32 0
2925 ; CHECK-NEXT: %30 = extractelement <4 x float> %6, i32 3
2926 ; CHECK-NEXT: %31 = fptosi float %30 to i64
2927 ; CHECK-NEXT: %32 = insertelement <2 x i64> %29, i64 %31, i32 1
2928 ; CHECK-NEXT: %33 = extractelement <4 x float> %7, i32 0
2929 ; CHECK-NEXT: %34 = fptosi float %33 to i64
2930 ; CHECK-NEXT: %35 = insertelement <2 x i64> undef, i64 %34, i32 0
2931 ; CHECK-NEXT: %36 = extractelement <4 x float> %7, i32 1
2932 ; CHECK-NEXT: %37 = fptosi float %36 to i64
2933 ; CHECK-NEXT: %38 = insertelement <2 x i64> %35, i64 %37, i32 1
2934 ; CHECK-NEXT: %39 = extractelement <4 x float> %7, i32 2
2935 ; CHECK-NEXT: %40 = fptosi float %39 to i64
2936 ; CHECK-NEXT: %41 = insertelement <2 x i64> undef, i64 %40, i32 0
2937 ; CHECK-NEXT: %42 = extractelement <4 x float> %7, i32 3
2938 ; CHECK-NEXT: %43 = fptosi float %42 to i64
2939 ; CHECK-NEXT: %44 = insertelement <2 x i64> %41, i64 %43, i32 1
2940 ; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %0, align 16
2941 ; CHECK-NEXT: store <2 x i64> %26, <2 x i64>* %1, align 16
2942 ; CHECK-NEXT: store <2 x i64> %32, <2 x i64>* %2, align 16
2943 ; CHECK-NEXT: store <2 x i64> %38, <2 x i64>* %3, align 16
2944 ; CHECK-NEXT: store <2 x i64> %44, <2 x i64>* %4, align 16
2945 ; CHECK-NEXT: ret <2 x i64> %14
2946
2947 define <12 x i8> @fptosi_cast_12xdouble_to_12xi8(<12 x double>) {
2948 %2 = fptosi <12 x double> %0 to <12 x i8>
2949 ret <12 x i8> %2
2950 }
2951 ; CHECK-LABEL: define <16 x i8> @fptosi_cast_12xdouble_to_12xi8(<2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>)
2952 ; CHECK-NEXT: %7 = extractelement <2 x double> %0, i32 0
2953 ; CHECK-NEXT: %8 = fptosi double %7 to i8
2954 ; CHECK-NEXT: %9 = insertelement <16 x i8> undef, i8 %8, i32 0
2955 ; CHECK-NEXT: %10 = extractelement <2 x double> %0, i32 1
2956 ; CHECK-NEXT: %11 = fptosi double %10 to i8
2957 ; CHECK-NEXT: %12 = insertelement <16 x i8> %9, i8 %11, i32 1
2958 ; CHECK-NEXT: %13 = extractelement <2 x double> %1, i32 0
2959 ; CHECK-NEXT: %14 = fptosi double %13 to i8
2960 ; CHECK-NEXT: %15 = insertelement <16 x i8> %12, i8 %14, i32 2
2961 ; CHECK-NEXT: %16 = extractelement <2 x double> %1, i32 1
2962 ; CHECK-NEXT: %17 = fptosi double %16 to i8
2963 ; CHECK-NEXT: %18 = insertelement <16 x i8> %15, i8 %17, i32 3
2964 ; CHECK-NEXT: %19 = extractelement <2 x double> %2, i32 0
2965 ; CHECK-NEXT: %20 = fptosi double %19 to i8
2966 ; CHECK-NEXT: %21 = insertelement <16 x i8> %18, i8 %20, i32 4
2967 ; CHECK-NEXT: %22 = extractelement <2 x double> %2, i32 1
2968 ; CHECK-NEXT: %23 = fptosi double %22 to i8
2969 ; CHECK-NEXT: %24 = insertelement <16 x i8> %21, i8 %23, i32 5
2970 ; CHECK-NEXT: %25 = extractelement <2 x double> %3, i32 0
2971 ; CHECK-NEXT: %26 = fptosi double %25 to i8
2972 ; CHECK-NEXT: %27 = insertelement <16 x i8> %24, i8 %26, i32 6
2973 ; CHECK-NEXT: %28 = extractelement <2 x double> %3, i32 1
2974 ; CHECK-NEXT: %29 = fptosi double %28 to i8
2975 ; CHECK-NEXT: %30 = insertelement <16 x i8> %27, i8 %29, i32 7
2976 ; CHECK-NEXT: %31 = extractelement <2 x double> %4, i32 0
2977 ; CHECK-NEXT: %32 = fptosi double %31 to i8
2978 ; CHECK-NEXT: %33 = insertelement <16 x i8> %30, i8 %32, i32 8
2979 ; CHECK-NEXT: %34 = extractelement <2 x double> %4, i32 1
2980 ; CHECK-NEXT: %35 = fptosi double %34 to i8
2981 ; CHECK-NEXT: %36 = insertelement <16 x i8> %33, i8 %35, i32 9
2982 ; CHECK-NEXT: %37 = extractelement <2 x double> %5, i32 0
2983 ; CHECK-NEXT: %38 = fptosi double %37 to i8
2984 ; CHECK-NEXT: %39 = insertelement <16 x i8> %36, i8 %38, i32 10
2985 ; CHECK-NEXT: %40 = extractelement <2 x double> %5, i32 1
2986 ; CHECK-NEXT: %41 = fptosi double %40 to i8
2987 ; CHECK-NEXT: %42 = insertelement <16 x i8> %39, i8 %41, i32 11
2988 ; CHECK-NEXT: ret <16 x i8> %42
2989
2990 define <12 x i16> @fptosi_cast_12xdouble_to_12xi16(<12 x double>) {
2991 %2 = fptosi <12 x double> %0 to <12 x i16>
2992 ret <12 x i16> %2
2993 }
2994 ; CHECK-LABEL: define <8 x i16> @fptosi_cast_12xdouble_to_12xi16(<8 x i16>* noca pture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>)
2995 ; CHECK-NEXT: %8 = extractelement <2 x double> %1, i32 0
2996 ; CHECK-NEXT: %9 = fptosi double %8 to i16
2997 ; CHECK-NEXT: %10 = insertelement <8 x i16> undef, i16 %9, i32 0
2998 ; CHECK-NEXT: %11 = extractelement <2 x double> %1, i32 1
2999 ; CHECK-NEXT: %12 = fptosi double %11 to i16
3000 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 1
3001 ; CHECK-NEXT: %14 = extractelement <2 x double> %2, i32 0
3002 ; CHECK-NEXT: %15 = fptosi double %14 to i16
3003 ; CHECK-NEXT: %16 = insertelement <8 x i16> %13, i16 %15, i32 2
3004 ; CHECK-NEXT: %17 = extractelement <2 x double> %2, i32 1
3005 ; CHECK-NEXT: %18 = fptosi double %17 to i16
3006 ; CHECK-NEXT: %19 = insertelement <8 x i16> %16, i16 %18, i32 3
3007 ; CHECK-NEXT: %20 = extractelement <2 x double> %3, i32 0
3008 ; CHECK-NEXT: %21 = fptosi double %20 to i16
3009 ; CHECK-NEXT: %22 = insertelement <8 x i16> %19, i16 %21, i32 4
3010 ; CHECK-NEXT: %23 = extractelement <2 x double> %3, i32 1
3011 ; CHECK-NEXT: %24 = fptosi double %23 to i16
3012 ; CHECK-NEXT: %25 = insertelement <8 x i16> %22, i16 %24, i32 5
3013 ; CHECK-NEXT: %26 = extractelement <2 x double> %4, i32 0
3014 ; CHECK-NEXT: %27 = fptosi double %26 to i16
3015 ; CHECK-NEXT: %28 = insertelement <8 x i16> %25, i16 %27, i32 6
3016 ; CHECK-NEXT: %29 = extractelement <2 x double> %4, i32 1
3017 ; CHECK-NEXT: %30 = fptosi double %29 to i16
3018 ; CHECK-NEXT: %31 = insertelement <8 x i16> %28, i16 %30, i32 7
3019 ; CHECK-NEXT: %32 = extractelement <2 x double> %5, i32 0
3020 ; CHECK-NEXT: %33 = fptosi double %32 to i16
3021 ; CHECK-NEXT: %34 = insertelement <8 x i16> undef, i16 %33, i32 0
3022 ; CHECK-NEXT: %35 = extractelement <2 x double> %5, i32 1
3023 ; CHECK-NEXT: %36 = fptosi double %35 to i16
3024 ; CHECK-NEXT: %37 = insertelement <8 x i16> %34, i16 %36, i32 1
3025 ; CHECK-NEXT: %38 = extractelement <2 x double> %6, i32 0
3026 ; CHECK-NEXT: %39 = fptosi double %38 to i16
3027 ; CHECK-NEXT: %40 = insertelement <8 x i16> %37, i16 %39, i32 2
3028 ; CHECK-NEXT: %41 = extractelement <2 x double> %6, i32 1
3029 ; CHECK-NEXT: %42 = fptosi double %41 to i16
3030 ; CHECK-NEXT: %43 = insertelement <8 x i16> %40, i16 %42, i32 3
3031 ; CHECK-NEXT: store <8 x i16> %43, <8 x i16>* %0, align 16
3032 ; CHECK-NEXT: ret <8 x i16> %31
3033
3034 define <12 x i32> @fptosi_cast_12xdouble_to_12xi32(<12 x double>) {
3035 %2 = fptosi <12 x double> %0 to <12 x i32>
3036 ret <12 x i32> %2
3037 }
3038 ; CHECK-LABEL: define <4 x i32> @fptosi_cast_12xdouble_to_12xi32(<4 x i32>* noca pture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable( 16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>)
3039 ; CHECK-NEXT: %9 = extractelement <2 x double> %2, i32 0
3040 ; CHECK-NEXT: %10 = fptosi double %9 to i32
3041 ; CHECK-NEXT: %11 = insertelement <4 x i32> undef, i32 %10, i32 0
3042 ; CHECK-NEXT: %12 = extractelement <2 x double> %2, i32 1
3043 ; CHECK-NEXT: %13 = fptosi double %12 to i32
3044 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 1
3045 ; CHECK-NEXT: %15 = extractelement <2 x double> %3, i32 0
3046 ; CHECK-NEXT: %16 = fptosi double %15 to i32
3047 ; CHECK-NEXT: %17 = insertelement <4 x i32> %14, i32 %16, i32 2
3048 ; CHECK-NEXT: %18 = extractelement <2 x double> %3, i32 1
3049 ; CHECK-NEXT: %19 = fptosi double %18 to i32
3050 ; CHECK-NEXT: %20 = insertelement <4 x i32> %17, i32 %19, i32 3
3051 ; CHECK-NEXT: %21 = extractelement <2 x double> %4, i32 0
3052 ; CHECK-NEXT: %22 = fptosi double %21 to i32
3053 ; CHECK-NEXT: %23 = insertelement <4 x i32> undef, i32 %22, i32 0
3054 ; CHECK-NEXT: %24 = extractelement <2 x double> %4, i32 1
3055 ; CHECK-NEXT: %25 = fptosi double %24 to i32
3056 ; CHECK-NEXT: %26 = insertelement <4 x i32> %23, i32 %25, i32 1
3057 ; CHECK-NEXT: %27 = extractelement <2 x double> %5, i32 0
3058 ; CHECK-NEXT: %28 = fptosi double %27 to i32
3059 ; CHECK-NEXT: %29 = insertelement <4 x i32> %26, i32 %28, i32 2
3060 ; CHECK-NEXT: %30 = extractelement <2 x double> %5, i32 1
3061 ; CHECK-NEXT: %31 = fptosi double %30 to i32
3062 ; CHECK-NEXT: %32 = insertelement <4 x i32> %29, i32 %31, i32 3
3063 ; CHECK-NEXT: %33 = extractelement <2 x double> %6, i32 0
3064 ; CHECK-NEXT: %34 = fptosi double %33 to i32
3065 ; CHECK-NEXT: %35 = insertelement <4 x i32> undef, i32 %34, i32 0
3066 ; CHECK-NEXT: %36 = extractelement <2 x double> %6, i32 1
3067 ; CHECK-NEXT: %37 = fptosi double %36 to i32
3068 ; CHECK-NEXT: %38 = insertelement <4 x i32> %35, i32 %37, i32 1
3069 ; CHECK-NEXT: %39 = extractelement <2 x double> %7, i32 0
3070 ; CHECK-NEXT: %40 = fptosi double %39 to i32
3071 ; CHECK-NEXT: %41 = insertelement <4 x i32> %38, i32 %40, i32 2
3072 ; CHECK-NEXT: %42 = extractelement <2 x double> %7, i32 1
3073 ; CHECK-NEXT: %43 = fptosi double %42 to i32
3074 ; CHECK-NEXT: %44 = insertelement <4 x i32> %41, i32 %43, i32 3
3075 ; CHECK-NEXT: store <4 x i32> %32, <4 x i32>* %0, align 16
3076 ; CHECK-NEXT: store <4 x i32> %44, <4 x i32>* %1, align 16
3077 ; CHECK-NEXT: ret <4 x i32> %20
3078
3079 define <12 x i64> @fptosi_cast_12xdouble_to_12xi64(<12 x double>) {
3080 %2 = fptosi <12 x double> %0 to <12 x i64>
3081 ret <12 x i64> %2
3082 }
3083 ; CHECK-LABEL: define <2 x i64> @fptosi_cast_12xdouble_to_12xi64(<2 x i64>* noca pture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable( 16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonn ull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>)
3084 ; CHECK-NEXT: %12 = fptosi <2 x double> %5 to <2 x i64>
3085 ; CHECK-NEXT: %13 = fptosi <2 x double> %6 to <2 x i64>
3086 ; CHECK-NEXT: %14 = fptosi <2 x double> %7 to <2 x i64>
3087 ; CHECK-NEXT: %15 = fptosi <2 x double> %8 to <2 x i64>
3088 ; CHECK-NEXT: %16 = fptosi <2 x double> %9 to <2 x i64>
3089 ; CHECK-NEXT: %17 = fptosi <2 x double> %10 to <2 x i64>
3090 ; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %0, align 16
3091 ; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %1, align 16
3092 ; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %2, align 16
3093 ; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %3, align 16
3094 ; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %4, align 16
3095 ; CHECK-NEXT: ret <2 x i64> %12
3096
3097 define <12 x float> @uitofp_cast_12xi8_to_12xfloat(<12 x i8>) {
3098 %2 = uitofp <12 x i8> %0 to <12 x float>
3099 ret <12 x float> %2
3100 }
3101 ; CHECK-LABEL: define <4 x float> @uitofp_cast_12xi8_to_12xfloat(<4 x float>* no capture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferencea ble(16), <16 x i8>)
3102 ; CHECK-NEXT: %4 = extractelement <16 x i8> %2, i32 0
3103 ; CHECK-NEXT: %5 = uitofp i8 %4 to float
3104 ; CHECK-NEXT: %6 = insertelement <4 x float> undef, float %5, i32 0
3105 ; CHECK-NEXT: %7 = extractelement <16 x i8> %2, i32 1
3106 ; CHECK-NEXT: %8 = uitofp i8 %7 to float
3107 ; CHECK-NEXT: %9 = insertelement <4 x float> %6, float %8, i32 1
3108 ; CHECK-NEXT: %10 = extractelement <16 x i8> %2, i32 2
3109 ; CHECK-NEXT: %11 = uitofp i8 %10 to float
3110 ; CHECK-NEXT: %12 = insertelement <4 x float> %9, float %11, i32 2
3111 ; CHECK-NEXT: %13 = extractelement <16 x i8> %2, i32 3
3112 ; CHECK-NEXT: %14 = uitofp i8 %13 to float
3113 ; CHECK-NEXT: %15 = insertelement <4 x float> %12, float %14, i32 3
3114 ; CHECK-NEXT: %16 = extractelement <16 x i8> %2, i32 4
3115 ; CHECK-NEXT: %17 = uitofp i8 %16 to float
3116 ; CHECK-NEXT: %18 = insertelement <4 x float> undef, float %17, i32 0
3117 ; CHECK-NEXT: %19 = extractelement <16 x i8> %2, i32 5
3118 ; CHECK-NEXT: %20 = uitofp i8 %19 to float
3119 ; CHECK-NEXT: %21 = insertelement <4 x float> %18, float %20, i32 1
3120 ; CHECK-NEXT: %22 = extractelement <16 x i8> %2, i32 6
3121 ; CHECK-NEXT: %23 = uitofp i8 %22 to float
3122 ; CHECK-NEXT: %24 = insertelement <4 x float> %21, float %23, i32 2
3123 ; CHECK-NEXT: %25 = extractelement <16 x i8> %2, i32 7
3124 ; CHECK-NEXT: %26 = uitofp i8 %25 to float
3125 ; CHECK-NEXT: %27 = insertelement <4 x float> %24, float %26, i32 3
3126 ; CHECK-NEXT: %28 = extractelement <16 x i8> %2, i32 8
3127 ; CHECK-NEXT: %29 = uitofp i8 %28 to float
3128 ; CHECK-NEXT: %30 = insertelement <4 x float> undef, float %29, i32 0
3129 ; CHECK-NEXT: %31 = extractelement <16 x i8> %2, i32 9
3130 ; CHECK-NEXT: %32 = uitofp i8 %31 to float
3131 ; CHECK-NEXT: %33 = insertelement <4 x float> %30, float %32, i32 1
3132 ; CHECK-NEXT: %34 = extractelement <16 x i8> %2, i32 10
3133 ; CHECK-NEXT: %35 = uitofp i8 %34 to float
3134 ; CHECK-NEXT: %36 = insertelement <4 x float> %33, float %35, i32 2
3135 ; CHECK-NEXT: %37 = extractelement <16 x i8> %2, i32 11
3136 ; CHECK-NEXT: %38 = uitofp i8 %37 to float
3137 ; CHECK-NEXT: %39 = insertelement <4 x float> %36, float %38, i32 3
3138 ; CHECK-NEXT: store <4 x float> %27, <4 x float>* %0, align 16
3139 ; CHECK-NEXT: store <4 x float> %39, <4 x float>* %1, align 16
3140 ; CHECK-NEXT: ret <4 x float> %15
3141
3142 define <12 x float> @uitofp_cast_12xi16_to_12xfloat(<12 x i16>) {
3143 %2 = uitofp <12 x i16> %0 to <12 x float>
3144 ret <12 x float> %2
3145 }
3146 ; CHECK-LABEL: define <4 x float> @uitofp_cast_12xi16_to_12xfloat(<4 x float>* n ocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereference able(16), <8 x i16>, <8 x i16>)
3147 ; CHECK-NEXT: %5 = extractelement <8 x i16> %2, i32 0
3148 ; CHECK-NEXT: %6 = uitofp i16 %5 to float
3149 ; CHECK-NEXT: %7 = insertelement <4 x float> undef, float %6, i32 0
3150 ; CHECK-NEXT: %8 = extractelement <8 x i16> %2, i32 1
3151 ; CHECK-NEXT: %9 = uitofp i16 %8 to float
3152 ; CHECK-NEXT: %10 = insertelement <4 x float> %7, float %9, i32 1
3153 ; CHECK-NEXT: %11 = extractelement <8 x i16> %2, i32 2
3154 ; CHECK-NEXT: %12 = uitofp i16 %11 to float
3155 ; CHECK-NEXT: %13 = insertelement <4 x float> %10, float %12, i32 2
3156 ; CHECK-NEXT: %14 = extractelement <8 x i16> %2, i32 3
3157 ; CHECK-NEXT: %15 = uitofp i16 %14 to float
3158 ; CHECK-NEXT: %16 = insertelement <4 x float> %13, float %15, i32 3
3159 ; CHECK-NEXT: %17 = extractelement <8 x i16> %2, i32 4
3160 ; CHECK-NEXT: %18 = uitofp i16 %17 to float
3161 ; CHECK-NEXT: %19 = insertelement <4 x float> undef, float %18, i32 0
3162 ; CHECK-NEXT: %20 = extractelement <8 x i16> %2, i32 5
3163 ; CHECK-NEXT: %21 = uitofp i16 %20 to float
3164 ; CHECK-NEXT: %22 = insertelement <4 x float> %19, float %21, i32 1
3165 ; CHECK-NEXT: %23 = extractelement <8 x i16> %2, i32 6
3166 ; CHECK-NEXT: %24 = uitofp i16 %23 to float
3167 ; CHECK-NEXT: %25 = insertelement <4 x float> %22, float %24, i32 2
3168 ; CHECK-NEXT: %26 = extractelement <8 x i16> %2, i32 7
3169 ; CHECK-NEXT: %27 = uitofp i16 %26 to float
3170 ; CHECK-NEXT: %28 = insertelement <4 x float> %25, float %27, i32 3
3171 ; CHECK-NEXT: %29 = extractelement <8 x i16> %3, i32 0
3172 ; CHECK-NEXT: %30 = uitofp i16 %29 to float
3173 ; CHECK-NEXT: %31 = insertelement <4 x float> undef, float %30, i32 0
3174 ; CHECK-NEXT: %32 = extractelement <8 x i16> %3, i32 1
3175 ; CHECK-NEXT: %33 = uitofp i16 %32 to float
3176 ; CHECK-NEXT: %34 = insertelement <4 x float> %31, float %33, i32 1
3177 ; CHECK-NEXT: %35 = extractelement <8 x i16> %3, i32 2
3178 ; CHECK-NEXT: %36 = uitofp i16 %35 to float
3179 ; CHECK-NEXT: %37 = insertelement <4 x float> %34, float %36, i32 2
3180 ; CHECK-NEXT: %38 = extractelement <8 x i16> %3, i32 3
3181 ; CHECK-NEXT: %39 = uitofp i16 %38 to float
3182 ; CHECK-NEXT: %40 = insertelement <4 x float> %37, float %39, i32 3
3183 ; CHECK-NEXT: store <4 x float> %28, <4 x float>* %0, align 16
3184 ; CHECK-NEXT: store <4 x float> %40, <4 x float>* %1, align 16
3185 ; CHECK-NEXT: ret <4 x float> %16
3186
3187 define <12 x float> @uitofp_cast_12xi32_to_12xfloat(<12 x i32>) {
3188 %2 = uitofp <12 x i32> %0 to <12 x float>
3189 ret <12 x float> %2
3190 }
3191 ; CHECK-LABEL: define <4 x float> @uitofp_cast_12xi32_to_12xfloat(<4 x float>* n ocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereference able(16), <4 x i32>, <4 x i32>, <4 x i32>)
3192 ; CHECK-NEXT: %6 = uitofp <4 x i32> %2 to <4 x float>
3193 ; CHECK-NEXT: %7 = uitofp <4 x i32> %3 to <4 x float>
3194 ; CHECK-NEXT: %8 = uitofp <4 x i32> %4 to <4 x float>
3195 ; CHECK-NEXT: store <4 x float> %7, <4 x float>* %0, align 16
3196 ; CHECK-NEXT: store <4 x float> %8, <4 x float>* %1, align 16
3197 ; CHECK-NEXT: ret <4 x float> %6
3198
3199 define <12 x float> @uitofp_cast_12xi64_to_12xfloat(<12 x i64>) {
3200 %2 = uitofp <12 x i64> %0 to <12 x float>
3201 ret <12 x float> %2
3202 }
3203 ; CHECK-LABEL: define <4 x float> @uitofp_cast_12xi64_to_12xfloat(<4 x float>* n ocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereference able(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
3204 ; CHECK-NEXT: %9 = extractelement <2 x i64> %2, i32 0
3205 ; CHECK-NEXT: %10 = uitofp i64 %9 to float
3206 ; CHECK-NEXT: %11 = insertelement <4 x float> undef, float %10, i32 0
3207 ; CHECK-NEXT: %12 = extractelement <2 x i64> %2, i32 1
3208 ; CHECK-NEXT: %13 = uitofp i64 %12 to float
3209 ; CHECK-NEXT: %14 = insertelement <4 x float> %11, float %13, i32 1
3210 ; CHECK-NEXT: %15 = extractelement <2 x i64> %3, i32 0
3211 ; CHECK-NEXT: %16 = uitofp i64 %15 to float
3212 ; CHECK-NEXT: %17 = insertelement <4 x float> %14, float %16, i32 2
3213 ; CHECK-NEXT: %18 = extractelement <2 x i64> %3, i32 1
3214 ; CHECK-NEXT: %19 = uitofp i64 %18 to float
3215 ; CHECK-NEXT: %20 = insertelement <4 x float> %17, float %19, i32 3
3216 ; CHECK-NEXT: %21 = extractelement <2 x i64> %4, i32 0
3217 ; CHECK-NEXT: %22 = uitofp i64 %21 to float
3218 ; CHECK-NEXT: %23 = insertelement <4 x float> undef, float %22, i32 0
3219 ; CHECK-NEXT: %24 = extractelement <2 x i64> %4, i32 1
3220 ; CHECK-NEXT: %25 = uitofp i64 %24 to float
3221 ; CHECK-NEXT: %26 = insertelement <4 x float> %23, float %25, i32 1
3222 ; CHECK-NEXT: %27 = extractelement <2 x i64> %5, i32 0
3223 ; CHECK-NEXT: %28 = uitofp i64 %27 to float
3224 ; CHECK-NEXT: %29 = insertelement <4 x float> %26, float %28, i32 2
3225 ; CHECK-NEXT: %30 = extractelement <2 x i64> %5, i32 1
3226 ; CHECK-NEXT: %31 = uitofp i64 %30 to float
3227 ; CHECK-NEXT: %32 = insertelement <4 x float> %29, float %31, i32 3
3228 ; CHECK-NEXT: %33 = extractelement <2 x i64> %6, i32 0
3229 ; CHECK-NEXT: %34 = uitofp i64 %33 to float
3230 ; CHECK-NEXT: %35 = insertelement <4 x float> undef, float %34, i32 0
3231 ; CHECK-NEXT: %36 = extractelement <2 x i64> %6, i32 1
3232 ; CHECK-NEXT: %37 = uitofp i64 %36 to float
3233 ; CHECK-NEXT: %38 = insertelement <4 x float> %35, float %37, i32 1
3234 ; CHECK-NEXT: %39 = extractelement <2 x i64> %7, i32 0
3235 ; CHECK-NEXT: %40 = uitofp i64 %39 to float
3236 ; CHECK-NEXT: %41 = insertelement <4 x float> %38, float %40, i32 2
3237 ; CHECK-NEXT: %42 = extractelement <2 x i64> %7, i32 1
3238 ; CHECK-NEXT: %43 = uitofp i64 %42 to float
3239 ; CHECK-NEXT: %44 = insertelement <4 x float> %41, float %43, i32 3
3240 ; CHECK-NEXT: store <4 x float> %32, <4 x float>* %0, align 16
3241 ; CHECK-NEXT: store <4 x float> %44, <4 x float>* %1, align 16
3242 ; CHECK-NEXT: ret <4 x float> %20
3243
3244 define <12 x double> @uitofp_cast_12xi8_to_12xdouble(<12 x i8>) {
3245 %2 = uitofp <12 x i8> %0 to <12 x double>
3246 ret <12 x double> %2
3247 }
3248 ; CHECK-LABEL: define <2 x double> @uitofp_cast_12xi8_to_12xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <16 x i8>)
3249 ; CHECK-NEXT: %7 = extractelement <16 x i8> %5, i32 0
3250 ; CHECK-NEXT: %8 = uitofp i8 %7 to double
3251 ; CHECK-NEXT: %9 = insertelement <2 x double> undef, double %8, i32 0
3252 ; CHECK-NEXT: %10 = extractelement <16 x i8> %5, i32 1
3253 ; CHECK-NEXT: %11 = uitofp i8 %10 to double
3254 ; CHECK-NEXT: %12 = insertelement <2 x double> %9, double %11, i32 1
3255 ; CHECK-NEXT: %13 = extractelement <16 x i8> %5, i32 2
3256 ; CHECK-NEXT: %14 = uitofp i8 %13 to double
3257 ; CHECK-NEXT: %15 = insertelement <2 x double> undef, double %14, i32 0
3258 ; CHECK-NEXT: %16 = extractelement <16 x i8> %5, i32 3
3259 ; CHECK-NEXT: %17 = uitofp i8 %16 to double
3260 ; CHECK-NEXT: %18 = insertelement <2 x double> %15, double %17, i32 1
3261 ; CHECK-NEXT: %19 = extractelement <16 x i8> %5, i32 4
3262 ; CHECK-NEXT: %20 = uitofp i8 %19 to double
3263 ; CHECK-NEXT: %21 = insertelement <2 x double> undef, double %20, i32 0
3264 ; CHECK-NEXT: %22 = extractelement <16 x i8> %5, i32 5
3265 ; CHECK-NEXT: %23 = uitofp i8 %22 to double
3266 ; CHECK-NEXT: %24 = insertelement <2 x double> %21, double %23, i32 1
3267 ; CHECK-NEXT: %25 = extractelement <16 x i8> %5, i32 6
3268 ; CHECK-NEXT: %26 = uitofp i8 %25 to double
3269 ; CHECK-NEXT: %27 = insertelement <2 x double> undef, double %26, i32 0
3270 ; CHECK-NEXT: %28 = extractelement <16 x i8> %5, i32 7
3271 ; CHECK-NEXT: %29 = uitofp i8 %28 to double
3272 ; CHECK-NEXT: %30 = insertelement <2 x double> %27, double %29, i32 1
3273 ; CHECK-NEXT: %31 = extractelement <16 x i8> %5, i32 8
3274 ; CHECK-NEXT: %32 = uitofp i8 %31 to double
3275 ; CHECK-NEXT: %33 = insertelement <2 x double> undef, double %32, i32 0
3276 ; CHECK-NEXT: %34 = extractelement <16 x i8> %5, i32 9
3277 ; CHECK-NEXT: %35 = uitofp i8 %34 to double
3278 ; CHECK-NEXT: %36 = insertelement <2 x double> %33, double %35, i32 1
3279 ; CHECK-NEXT: %37 = extractelement <16 x i8> %5, i32 10
3280 ; CHECK-NEXT: %38 = uitofp i8 %37 to double
3281 ; CHECK-NEXT: %39 = insertelement <2 x double> undef, double %38, i32 0
3282 ; CHECK-NEXT: %40 = extractelement <16 x i8> %5, i32 11
3283 ; CHECK-NEXT: %41 = uitofp i8 %40 to double
3284 ; CHECK-NEXT: %42 = insertelement <2 x double> %39, double %41, i32 1
3285 ; CHECK-NEXT: store <2 x double> %18, <2 x double>* %0, align 16
3286 ; CHECK-NEXT: store <2 x double> %24, <2 x double>* %1, align 16
3287 ; CHECK-NEXT: store <2 x double> %30, <2 x double>* %2, align 16
3288 ; CHECK-NEXT: store <2 x double> %36, <2 x double>* %3, align 16
3289 ; CHECK-NEXT: store <2 x double> %42, <2 x double>* %4, align 16
3290 ; CHECK-NEXT: ret <2 x double> %12
3291
3292 define <12 x double> @uitofp_cast_12xi16_to_12xdouble(<12 x i16>) {
3293 %2 = uitofp <12 x i16> %0 to <12 x double>
3294 ret <12 x double> %2
3295 }
3296 ; CHECK-LABEL: define <2 x double> @uitofp_cast_12xi16_to_12xdouble(<2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <8 x i16>, <8 x i16>)
3297 ; CHECK-NEXT: %8 = extractelement <8 x i16> %5, i32 0
3298 ; CHECK-NEXT: %9 = uitofp i16 %8 to double
3299 ; CHECK-NEXT: %10 = insertelement <2 x double> undef, double %9, i32 0
3300 ; CHECK-NEXT: %11 = extractelement <8 x i16> %5, i32 1
3301 ; CHECK-NEXT: %12 = uitofp i16 %11 to double
3302 ; CHECK-NEXT: %13 = insertelement <2 x double> %10, double %12, i32 1
3303 ; CHECK-NEXT: %14 = extractelement <8 x i16> %5, i32 2
3304 ; CHECK-NEXT: %15 = uitofp i16 %14 to double
3305 ; CHECK-NEXT: %16 = insertelement <2 x double> undef, double %15, i32 0
3306 ; CHECK-NEXT: %17 = extractelement <8 x i16> %5, i32 3
3307 ; CHECK-NEXT: %18 = uitofp i16 %17 to double
3308 ; CHECK-NEXT: %19 = insertelement <2 x double> %16, double %18, i32 1
3309 ; CHECK-NEXT: %20 = extractelement <8 x i16> %5, i32 4
3310 ; CHECK-NEXT: %21 = uitofp i16 %20 to double
3311 ; CHECK-NEXT: %22 = insertelement <2 x double> undef, double %21, i32 0
3312 ; CHECK-NEXT: %23 = extractelement <8 x i16> %5, i32 5
3313 ; CHECK-NEXT: %24 = uitofp i16 %23 to double
3314 ; CHECK-NEXT: %25 = insertelement <2 x double> %22, double %24, i32 1
3315 ; CHECK-NEXT: %26 = extractelement <8 x i16> %5, i32 6
3316 ; CHECK-NEXT: %27 = uitofp i16 %26 to double
3317 ; CHECK-NEXT: %28 = insertelement <2 x double> undef, double %27, i32 0
3318 ; CHECK-NEXT: %29 = extractelement <8 x i16> %5, i32 7
3319 ; CHECK-NEXT: %30 = uitofp i16 %29 to double
3320 ; CHECK-NEXT: %31 = insertelement <2 x double> %28, double %30, i32 1
3321 ; CHECK-NEXT: %32 = extractelement <8 x i16> %6, i32 0
3322 ; CHECK-NEXT: %33 = uitofp i16 %32 to double
3323 ; CHECK-NEXT: %34 = insertelement <2 x double> undef, double %33, i32 0
3324 ; CHECK-NEXT: %35 = extractelement <8 x i16> %6, i32 1
3325 ; CHECK-NEXT: %36 = uitofp i16 %35 to double
3326 ; CHECK-NEXT: %37 = insertelement <2 x double> %34, double %36, i32 1
3327 ; CHECK-NEXT: %38 = extractelement <8 x i16> %6, i32 2
3328 ; CHECK-NEXT: %39 = uitofp i16 %38 to double
3329 ; CHECK-NEXT: %40 = insertelement <2 x double> undef, double %39, i32 0
3330 ; CHECK-NEXT: %41 = extractelement <8 x i16> %6, i32 3
3331 ; CHECK-NEXT: %42 = uitofp i16 %41 to double
3332 ; CHECK-NEXT: %43 = insertelement <2 x double> %40, double %42, i32 1
3333 ; CHECK-NEXT: store <2 x double> %19, <2 x double>* %0, align 16
3334 ; CHECK-NEXT: store <2 x double> %25, <2 x double>* %1, align 16
3335 ; CHECK-NEXT: store <2 x double> %31, <2 x double>* %2, align 16
3336 ; CHECK-NEXT: store <2 x double> %37, <2 x double>* %3, align 16
3337 ; CHECK-NEXT: store <2 x double> %43, <2 x double>* %4, align 16
3338 ; CHECK-NEXT: ret <2 x double> %13
3339
3340 define <12 x double> @uitofp_cast_12xi32_to_12xdouble(<12 x i32>) {
3341 %2 = uitofp <12 x i32> %0 to <12 x double>
3342 ret <12 x double> %2
3343 }
3344 ; CHECK-LABEL: define <2 x double> @uitofp_cast_12xi32_to_12xdouble(<2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <4 x i32>, <4 x i32>, <4 x i32>)
3345 ; CHECK-NEXT: %9 = extractelement <4 x i32> %5, i32 0
3346 ; CHECK-NEXT: %10 = uitofp i32 %9 to double
3347 ; CHECK-NEXT: %11 = insertelement <2 x double> undef, double %10, i32 0
3348 ; CHECK-NEXT: %12 = extractelement <4 x i32> %5, i32 1
3349 ; CHECK-NEXT: %13 = uitofp i32 %12 to double
3350 ; CHECK-NEXT: %14 = insertelement <2 x double> %11, double %13, i32 1
3351 ; CHECK-NEXT: %15 = extractelement <4 x i32> %5, i32 2
3352 ; CHECK-NEXT: %16 = uitofp i32 %15 to double
3353 ; CHECK-NEXT: %17 = insertelement <2 x double> undef, double %16, i32 0
3354 ; CHECK-NEXT: %18 = extractelement <4 x i32> %5, i32 3
3355 ; CHECK-NEXT: %19 = uitofp i32 %18 to double
3356 ; CHECK-NEXT: %20 = insertelement <2 x double> %17, double %19, i32 1
3357 ; CHECK-NEXT: %21 = extractelement <4 x i32> %6, i32 0
3358 ; CHECK-NEXT: %22 = uitofp i32 %21 to double
3359 ; CHECK-NEXT: %23 = insertelement <2 x double> undef, double %22, i32 0
3360 ; CHECK-NEXT: %24 = extractelement <4 x i32> %6, i32 1
3361 ; CHECK-NEXT: %25 = uitofp i32 %24 to double
3362 ; CHECK-NEXT: %26 = insertelement <2 x double> %23, double %25, i32 1
3363 ; CHECK-NEXT: %27 = extractelement <4 x i32> %6, i32 2
3364 ; CHECK-NEXT: %28 = uitofp i32 %27 to double
3365 ; CHECK-NEXT: %29 = insertelement <2 x double> undef, double %28, i32 0
3366 ; CHECK-NEXT: %30 = extractelement <4 x i32> %6, i32 3
3367 ; CHECK-NEXT: %31 = uitofp i32 %30 to double
3368 ; CHECK-NEXT: %32 = insertelement <2 x double> %29, double %31, i32 1
3369 ; CHECK-NEXT: %33 = extractelement <4 x i32> %7, i32 0
3370 ; CHECK-NEXT: %34 = uitofp i32 %33 to double
3371 ; CHECK-NEXT: %35 = insertelement <2 x double> undef, double %34, i32 0
3372 ; CHECK-NEXT: %36 = extractelement <4 x i32> %7, i32 1
3373 ; CHECK-NEXT: %37 = uitofp i32 %36 to double
3374 ; CHECK-NEXT: %38 = insertelement <2 x double> %35, double %37, i32 1
3375 ; CHECK-NEXT: %39 = extractelement <4 x i32> %7, i32 2
3376 ; CHECK-NEXT: %40 = uitofp i32 %39 to double
3377 ; CHECK-NEXT: %41 = insertelement <2 x double> undef, double %40, i32 0
3378 ; CHECK-NEXT: %42 = extractelement <4 x i32> %7, i32 3
3379 ; CHECK-NEXT: %43 = uitofp i32 %42 to double
3380 ; CHECK-NEXT: %44 = insertelement <2 x double> %41, double %43, i32 1
3381 ; CHECK-NEXT: store <2 x double> %20, <2 x double>* %0, align 16
3382 ; CHECK-NEXT: store <2 x double> %26, <2 x double>* %1, align 16
3383 ; CHECK-NEXT: store <2 x double> %32, <2 x double>* %2, align 16
3384 ; CHECK-NEXT: store <2 x double> %38, <2 x double>* %3, align 16
3385 ; CHECK-NEXT: store <2 x double> %44, <2 x double>* %4, align 16
3386 ; CHECK-NEXT: ret <2 x double> %14
3387
3388 define <12 x double> @uitofp_cast_12xi64_to_12xdouble(<12 x i64>) {
3389 %2 = uitofp <12 x i64> %0 to <12 x double>
3390 ret <12 x double> %2
3391 }
3392 ; CHECK-LABEL: define <2 x double> @uitofp_cast_12xi64_to_12xdouble(<2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
3393 ; CHECK-NEXT: %12 = uitofp <2 x i64> %5 to <2 x double>
3394 ; CHECK-NEXT: %13 = uitofp <2 x i64> %6 to <2 x double>
3395 ; CHECK-NEXT: %14 = uitofp <2 x i64> %7 to <2 x double>
3396 ; CHECK-NEXT: %15 = uitofp <2 x i64> %8 to <2 x double>
3397 ; CHECK-NEXT: %16 = uitofp <2 x i64> %9 to <2 x double>
3398 ; CHECK-NEXT: %17 = uitofp <2 x i64> %10 to <2 x double>
3399 ; CHECK-NEXT: store <2 x double> %13, <2 x double>* %0, align 16
3400 ; CHECK-NEXT: store <2 x double> %14, <2 x double>* %1, align 16
3401 ; CHECK-NEXT: store <2 x double> %15, <2 x double>* %2, align 16
3402 ; CHECK-NEXT: store <2 x double> %16, <2 x double>* %3, align 16
3403 ; CHECK-NEXT: store <2 x double> %17, <2 x double>* %4, align 16
3404 ; CHECK-NEXT: ret <2 x double> %12
3405
3406 define <12 x float> @sitofp_cast_12xi8_to_12xfloat(<12 x i8>) {
3407 %2 = sitofp <12 x i8> %0 to <12 x float>
3408 ret <12 x float> %2
3409 }
3410 ; CHECK-LABEL: define <4 x float> @sitofp_cast_12xi8_to_12xfloat(<4 x float>* no capture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferencea ble(16), <16 x i8>)
3411 ; CHECK-NEXT: %4 = extractelement <16 x i8> %2, i32 0
3412 ; CHECK-NEXT: %5 = sitofp i8 %4 to float
3413 ; CHECK-NEXT: %6 = insertelement <4 x float> undef, float %5, i32 0
3414 ; CHECK-NEXT: %7 = extractelement <16 x i8> %2, i32 1
3415 ; CHECK-NEXT: %8 = sitofp i8 %7 to float
3416 ; CHECK-NEXT: %9 = insertelement <4 x float> %6, float %8, i32 1
3417 ; CHECK-NEXT: %10 = extractelement <16 x i8> %2, i32 2
3418 ; CHECK-NEXT: %11 = sitofp i8 %10 to float
3419 ; CHECK-NEXT: %12 = insertelement <4 x float> %9, float %11, i32 2
3420 ; CHECK-NEXT: %13 = extractelement <16 x i8> %2, i32 3
3421 ; CHECK-NEXT: %14 = sitofp i8 %13 to float
3422 ; CHECK-NEXT: %15 = insertelement <4 x float> %12, float %14, i32 3
3423 ; CHECK-NEXT: %16 = extractelement <16 x i8> %2, i32 4
3424 ; CHECK-NEXT: %17 = sitofp i8 %16 to float
3425 ; CHECK-NEXT: %18 = insertelement <4 x float> undef, float %17, i32 0
3426 ; CHECK-NEXT: %19 = extractelement <16 x i8> %2, i32 5
3427 ; CHECK-NEXT: %20 = sitofp i8 %19 to float
3428 ; CHECK-NEXT: %21 = insertelement <4 x float> %18, float %20, i32 1
3429 ; CHECK-NEXT: %22 = extractelement <16 x i8> %2, i32 6
3430 ; CHECK-NEXT: %23 = sitofp i8 %22 to float
3431 ; CHECK-NEXT: %24 = insertelement <4 x float> %21, float %23, i32 2
3432 ; CHECK-NEXT: %25 = extractelement <16 x i8> %2, i32 7
3433 ; CHECK-NEXT: %26 = sitofp i8 %25 to float
3434 ; CHECK-NEXT: %27 = insertelement <4 x float> %24, float %26, i32 3
3435 ; CHECK-NEXT: %28 = extractelement <16 x i8> %2, i32 8
3436 ; CHECK-NEXT: %29 = sitofp i8 %28 to float
3437 ; CHECK-NEXT: %30 = insertelement <4 x float> undef, float %29, i32 0
3438 ; CHECK-NEXT: %31 = extractelement <16 x i8> %2, i32 9
3439 ; CHECK-NEXT: %32 = sitofp i8 %31 to float
3440 ; CHECK-NEXT: %33 = insertelement <4 x float> %30, float %32, i32 1
3441 ; CHECK-NEXT: %34 = extractelement <16 x i8> %2, i32 10
3442 ; CHECK-NEXT: %35 = sitofp i8 %34 to float
3443 ; CHECK-NEXT: %36 = insertelement <4 x float> %33, float %35, i32 2
3444 ; CHECK-NEXT: %37 = extractelement <16 x i8> %2, i32 11
3445 ; CHECK-NEXT: %38 = sitofp i8 %37 to float
3446 ; CHECK-NEXT: %39 = insertelement <4 x float> %36, float %38, i32 3
3447 ; CHECK-NEXT: store <4 x float> %27, <4 x float>* %0, align 16
3448 ; CHECK-NEXT: store <4 x float> %39, <4 x float>* %1, align 16
3449 ; CHECK-NEXT: ret <4 x float> %15
3450
3451 define <12 x float> @sitofp_cast_12xi16_to_12xfloat(<12 x i16>) {
3452 %2 = sitofp <12 x i16> %0 to <12 x float>
3453 ret <12 x float> %2
3454 }
3455 ; CHECK-LABEL: define <4 x float> @sitofp_cast_12xi16_to_12xfloat(<4 x float>* n ocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereference able(16), <8 x i16>, <8 x i16>)
3456 ; CHECK-NEXT: %5 = extractelement <8 x i16> %2, i32 0
3457 ; CHECK-NEXT: %6 = sitofp i16 %5 to float
3458 ; CHECK-NEXT: %7 = insertelement <4 x float> undef, float %6, i32 0
3459 ; CHECK-NEXT: %8 = extractelement <8 x i16> %2, i32 1
3460 ; CHECK-NEXT: %9 = sitofp i16 %8 to float
3461 ; CHECK-NEXT: %10 = insertelement <4 x float> %7, float %9, i32 1
3462 ; CHECK-NEXT: %11 = extractelement <8 x i16> %2, i32 2
3463 ; CHECK-NEXT: %12 = sitofp i16 %11 to float
3464 ; CHECK-NEXT: %13 = insertelement <4 x float> %10, float %12, i32 2
3465 ; CHECK-NEXT: %14 = extractelement <8 x i16> %2, i32 3
3466 ; CHECK-NEXT: %15 = sitofp i16 %14 to float
3467 ; CHECK-NEXT: %16 = insertelement <4 x float> %13, float %15, i32 3
3468 ; CHECK-NEXT: %17 = extractelement <8 x i16> %2, i32 4
3469 ; CHECK-NEXT: %18 = sitofp i16 %17 to float
3470 ; CHECK-NEXT: %19 = insertelement <4 x float> undef, float %18, i32 0
3471 ; CHECK-NEXT: %20 = extractelement <8 x i16> %2, i32 5
3472 ; CHECK-NEXT: %21 = sitofp i16 %20 to float
3473 ; CHECK-NEXT: %22 = insertelement <4 x float> %19, float %21, i32 1
3474 ; CHECK-NEXT: %23 = extractelement <8 x i16> %2, i32 6
3475 ; CHECK-NEXT: %24 = sitofp i16 %23 to float
3476 ; CHECK-NEXT: %25 = insertelement <4 x float> %22, float %24, i32 2
3477 ; CHECK-NEXT: %26 = extractelement <8 x i16> %2, i32 7
3478 ; CHECK-NEXT: %27 = sitofp i16 %26 to float
3479 ; CHECK-NEXT: %28 = insertelement <4 x float> %25, float %27, i32 3
3480 ; CHECK-NEXT: %29 = extractelement <8 x i16> %3, i32 0
3481 ; CHECK-NEXT: %30 = sitofp i16 %29 to float
3482 ; CHECK-NEXT: %31 = insertelement <4 x float> undef, float %30, i32 0
3483 ; CHECK-NEXT: %32 = extractelement <8 x i16> %3, i32 1
3484 ; CHECK-NEXT: %33 = sitofp i16 %32 to float
3485 ; CHECK-NEXT: %34 = insertelement <4 x float> %31, float %33, i32 1
3486 ; CHECK-NEXT: %35 = extractelement <8 x i16> %3, i32 2
3487 ; CHECK-NEXT: %36 = sitofp i16 %35 to float
3488 ; CHECK-NEXT: %37 = insertelement <4 x float> %34, float %36, i32 2
3489 ; CHECK-NEXT: %38 = extractelement <8 x i16> %3, i32 3
3490 ; CHECK-NEXT: %39 = sitofp i16 %38 to float
3491 ; CHECK-NEXT: %40 = insertelement <4 x float> %37, float %39, i32 3
3492 ; CHECK-NEXT: store <4 x float> %28, <4 x float>* %0, align 16
3493 ; CHECK-NEXT: store <4 x float> %40, <4 x float>* %1, align 16
3494 ; CHECK-NEXT: ret <4 x float> %16
3495
3496 define <12 x float> @sitofp_cast_12xi32_to_12xfloat(<12 x i32>) {
3497 %2 = sitofp <12 x i32> %0 to <12 x float>
3498 ret <12 x float> %2
3499 }
3500 ; CHECK-LABEL: define <4 x float> @sitofp_cast_12xi32_to_12xfloat(<4 x float>* n ocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereference able(16), <4 x i32>, <4 x i32>, <4 x i32>)
3501 ; CHECK-NEXT: %6 = sitofp <4 x i32> %2 to <4 x float>
3502 ; CHECK-NEXT: %7 = sitofp <4 x i32> %3 to <4 x float>
3503 ; CHECK-NEXT: %8 = sitofp <4 x i32> %4 to <4 x float>
3504 ; CHECK-NEXT: store <4 x float> %7, <4 x float>* %0, align 16
3505 ; CHECK-NEXT: store <4 x float> %8, <4 x float>* %1, align 16
3506 ; CHECK-NEXT: ret <4 x float> %6
3507
3508 define <12 x float> @sitofp_cast_12xi64_to_12xfloat(<12 x i64>) {
3509 %2 = sitofp <12 x i64> %0 to <12 x float>
3510 ret <12 x float> %2
3511 }
3512 ; CHECK-LABEL: define <4 x float> @sitofp_cast_12xi64_to_12xfloat(<4 x float>* n ocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereference able(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
3513 ; CHECK-NEXT: %9 = extractelement <2 x i64> %2, i32 0
3514 ; CHECK-NEXT: %10 = sitofp i64 %9 to float
3515 ; CHECK-NEXT: %11 = insertelement <4 x float> undef, float %10, i32 0
3516 ; CHECK-NEXT: %12 = extractelement <2 x i64> %2, i32 1
3517 ; CHECK-NEXT: %13 = sitofp i64 %12 to float
3518 ; CHECK-NEXT: %14 = insertelement <4 x float> %11, float %13, i32 1
3519 ; CHECK-NEXT: %15 = extractelement <2 x i64> %3, i32 0
3520 ; CHECK-NEXT: %16 = sitofp i64 %15 to float
3521 ; CHECK-NEXT: %17 = insertelement <4 x float> %14, float %16, i32 2
3522 ; CHECK-NEXT: %18 = extractelement <2 x i64> %3, i32 1
3523 ; CHECK-NEXT: %19 = sitofp i64 %18 to float
3524 ; CHECK-NEXT: %20 = insertelement <4 x float> %17, float %19, i32 3
3525 ; CHECK-NEXT: %21 = extractelement <2 x i64> %4, i32 0
3526 ; CHECK-NEXT: %22 = sitofp i64 %21 to float
3527 ; CHECK-NEXT: %23 = insertelement <4 x float> undef, float %22, i32 0
3528 ; CHECK-NEXT: %24 = extractelement <2 x i64> %4, i32 1
3529 ; CHECK-NEXT: %25 = sitofp i64 %24 to float
3530 ; CHECK-NEXT: %26 = insertelement <4 x float> %23, float %25, i32 1
3531 ; CHECK-NEXT: %27 = extractelement <2 x i64> %5, i32 0
3532 ; CHECK-NEXT: %28 = sitofp i64 %27 to float
3533 ; CHECK-NEXT: %29 = insertelement <4 x float> %26, float %28, i32 2
3534 ; CHECK-NEXT: %30 = extractelement <2 x i64> %5, i32 1
3535 ; CHECK-NEXT: %31 = sitofp i64 %30 to float
3536 ; CHECK-NEXT: %32 = insertelement <4 x float> %29, float %31, i32 3
3537 ; CHECK-NEXT: %33 = extractelement <2 x i64> %6, i32 0
3538 ; CHECK-NEXT: %34 = sitofp i64 %33 to float
3539 ; CHECK-NEXT: %35 = insertelement <4 x float> undef, float %34, i32 0
3540 ; CHECK-NEXT: %36 = extractelement <2 x i64> %6, i32 1
3541 ; CHECK-NEXT: %37 = sitofp i64 %36 to float
3542 ; CHECK-NEXT: %38 = insertelement <4 x float> %35, float %37, i32 1
3543 ; CHECK-NEXT: %39 = extractelement <2 x i64> %7, i32 0
3544 ; CHECK-NEXT: %40 = sitofp i64 %39 to float
3545 ; CHECK-NEXT: %41 = insertelement <4 x float> %38, float %40, i32 2
3546 ; CHECK-NEXT: %42 = extractelement <2 x i64> %7, i32 1
3547 ; CHECK-NEXT: %43 = sitofp i64 %42 to float
3548 ; CHECK-NEXT: %44 = insertelement <4 x float> %41, float %43, i32 3
3549 ; CHECK-NEXT: store <4 x float> %32, <4 x float>* %0, align 16
3550 ; CHECK-NEXT: store <4 x float> %44, <4 x float>* %1, align 16
3551 ; CHECK-NEXT: ret <4 x float> %20
3552
3553 define <12 x double> @sitofp_cast_12xi8_to_12xdouble(<12 x i8>) {
3554 %2 = sitofp <12 x i8> %0 to <12 x double>
3555 ret <12 x double> %2
3556 }
3557 ; CHECK-LABEL: define <2 x double> @sitofp_cast_12xi8_to_12xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <16 x i8>)
3558 ; CHECK-NEXT: %7 = extractelement <16 x i8> %5, i32 0
3559 ; CHECK-NEXT: %8 = sitofp i8 %7 to double
3560 ; CHECK-NEXT: %9 = insertelement <2 x double> undef, double %8, i32 0
3561 ; CHECK-NEXT: %10 = extractelement <16 x i8> %5, i32 1
3562 ; CHECK-NEXT: %11 = sitofp i8 %10 to double
3563 ; CHECK-NEXT: %12 = insertelement <2 x double> %9, double %11, i32 1
3564 ; CHECK-NEXT: %13 = extractelement <16 x i8> %5, i32 2
3565 ; CHECK-NEXT: %14 = sitofp i8 %13 to double
3566 ; CHECK-NEXT: %15 = insertelement <2 x double> undef, double %14, i32 0
3567 ; CHECK-NEXT: %16 = extractelement <16 x i8> %5, i32 3
3568 ; CHECK-NEXT: %17 = sitofp i8 %16 to double
3569 ; CHECK-NEXT: %18 = insertelement <2 x double> %15, double %17, i32 1
3570 ; CHECK-NEXT: %19 = extractelement <16 x i8> %5, i32 4
3571 ; CHECK-NEXT: %20 = sitofp i8 %19 to double
3572 ; CHECK-NEXT: %21 = insertelement <2 x double> undef, double %20, i32 0
3573 ; CHECK-NEXT: %22 = extractelement <16 x i8> %5, i32 5
3574 ; CHECK-NEXT: %23 = sitofp i8 %22 to double
3575 ; CHECK-NEXT: %24 = insertelement <2 x double> %21, double %23, i32 1
3576 ; CHECK-NEXT: %25 = extractelement <16 x i8> %5, i32 6
3577 ; CHECK-NEXT: %26 = sitofp i8 %25 to double
3578 ; CHECK-NEXT: %27 = insertelement <2 x double> undef, double %26, i32 0
3579 ; CHECK-NEXT: %28 = extractelement <16 x i8> %5, i32 7
3580 ; CHECK-NEXT: %29 = sitofp i8 %28 to double
3581 ; CHECK-NEXT: %30 = insertelement <2 x double> %27, double %29, i32 1
3582 ; CHECK-NEXT: %31 = extractelement <16 x i8> %5, i32 8
3583 ; CHECK-NEXT: %32 = sitofp i8 %31 to double
3584 ; CHECK-NEXT: %33 = insertelement <2 x double> undef, double %32, i32 0
3585 ; CHECK-NEXT: %34 = extractelement <16 x i8> %5, i32 9
3586 ; CHECK-NEXT: %35 = sitofp i8 %34 to double
3587 ; CHECK-NEXT: %36 = insertelement <2 x double> %33, double %35, i32 1
3588 ; CHECK-NEXT: %37 = extractelement <16 x i8> %5, i32 10
3589 ; CHECK-NEXT: %38 = sitofp i8 %37 to double
3590 ; CHECK-NEXT: %39 = insertelement <2 x double> undef, double %38, i32 0
3591 ; CHECK-NEXT: %40 = extractelement <16 x i8> %5, i32 11
3592 ; CHECK-NEXT: %41 = sitofp i8 %40 to double
3593 ; CHECK-NEXT: %42 = insertelement <2 x double> %39, double %41, i32 1
3594 ; CHECK-NEXT: store <2 x double> %18, <2 x double>* %0, align 16
3595 ; CHECK-NEXT: store <2 x double> %24, <2 x double>* %1, align 16
3596 ; CHECK-NEXT: store <2 x double> %30, <2 x double>* %2, align 16
3597 ; CHECK-NEXT: store <2 x double> %36, <2 x double>* %3, align 16
3598 ; CHECK-NEXT: store <2 x double> %42, <2 x double>* %4, align 16
3599 ; CHECK-NEXT: ret <2 x double> %12
3600
3601 define <12 x double> @sitofp_cast_12xi16_to_12xdouble(<12 x i16>) {
3602 %2 = sitofp <12 x i16> %0 to <12 x double>
3603 ret <12 x double> %2
3604 }
3605 ; CHECK-LABEL: define <2 x double> @sitofp_cast_12xi16_to_12xdouble(<2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <8 x i16>, <8 x i16>)
3606 ; CHECK-NEXT: %8 = extractelement <8 x i16> %5, i32 0
3607 ; CHECK-NEXT: %9 = sitofp i16 %8 to double
3608 ; CHECK-NEXT: %10 = insertelement <2 x double> undef, double %9, i32 0
3609 ; CHECK-NEXT: %11 = extractelement <8 x i16> %5, i32 1
3610 ; CHECK-NEXT: %12 = sitofp i16 %11 to double
3611 ; CHECK-NEXT: %13 = insertelement <2 x double> %10, double %12, i32 1
3612 ; CHECK-NEXT: %14 = extractelement <8 x i16> %5, i32 2
3613 ; CHECK-NEXT: %15 = sitofp i16 %14 to double
3614 ; CHECK-NEXT: %16 = insertelement <2 x double> undef, double %15, i32 0
3615 ; CHECK-NEXT: %17 = extractelement <8 x i16> %5, i32 3
3616 ; CHECK-NEXT: %18 = sitofp i16 %17 to double
3617 ; CHECK-NEXT: %19 = insertelement <2 x double> %16, double %18, i32 1
3618 ; CHECK-NEXT: %20 = extractelement <8 x i16> %5, i32 4
3619 ; CHECK-NEXT: %21 = sitofp i16 %20 to double
3620 ; CHECK-NEXT: %22 = insertelement <2 x double> undef, double %21, i32 0
3621 ; CHECK-NEXT: %23 = extractelement <8 x i16> %5, i32 5
3622 ; CHECK-NEXT: %24 = sitofp i16 %23 to double
3623 ; CHECK-NEXT: %25 = insertelement <2 x double> %22, double %24, i32 1
3624 ; CHECK-NEXT: %26 = extractelement <8 x i16> %5, i32 6
3625 ; CHECK-NEXT: %27 = sitofp i16 %26 to double
3626 ; CHECK-NEXT: %28 = insertelement <2 x double> undef, double %27, i32 0
3627 ; CHECK-NEXT: %29 = extractelement <8 x i16> %5, i32 7
3628 ; CHECK-NEXT: %30 = sitofp i16 %29 to double
3629 ; CHECK-NEXT: %31 = insertelement <2 x double> %28, double %30, i32 1
3630 ; CHECK-NEXT: %32 = extractelement <8 x i16> %6, i32 0
3631 ; CHECK-NEXT: %33 = sitofp i16 %32 to double
3632 ; CHECK-NEXT: %34 = insertelement <2 x double> undef, double %33, i32 0
3633 ; CHECK-NEXT: %35 = extractelement <8 x i16> %6, i32 1
3634 ; CHECK-NEXT: %36 = sitofp i16 %35 to double
3635 ; CHECK-NEXT: %37 = insertelement <2 x double> %34, double %36, i32 1
3636 ; CHECK-NEXT: %38 = extractelement <8 x i16> %6, i32 2
3637 ; CHECK-NEXT: %39 = sitofp i16 %38 to double
3638 ; CHECK-NEXT: %40 = insertelement <2 x double> undef, double %39, i32 0
3639 ; CHECK-NEXT: %41 = extractelement <8 x i16> %6, i32 3
3640 ; CHECK-NEXT: %42 = sitofp i16 %41 to double
3641 ; CHECK-NEXT: %43 = insertelement <2 x double> %40, double %42, i32 1
3642 ; CHECK-NEXT: store <2 x double> %19, <2 x double>* %0, align 16
3643 ; CHECK-NEXT: store <2 x double> %25, <2 x double>* %1, align 16
3644 ; CHECK-NEXT: store <2 x double> %31, <2 x double>* %2, align 16
3645 ; CHECK-NEXT: store <2 x double> %37, <2 x double>* %3, align 16
3646 ; CHECK-NEXT: store <2 x double> %43, <2 x double>* %4, align 16
3647 ; CHECK-NEXT: ret <2 x double> %13
3648
3649 define <12 x double> @sitofp_cast_12xi32_to_12xdouble(<12 x i32>) {
3650 %2 = sitofp <12 x i32> %0 to <12 x double>
3651 ret <12 x double> %2
3652 }
3653 ; CHECK-LABEL: define <2 x double> @sitofp_cast_12xi32_to_12xdouble(<2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <4 x i32>, <4 x i32>, <4 x i32>)
3654 ; CHECK-NEXT: %9 = extractelement <4 x i32> %5, i32 0
3655 ; CHECK-NEXT: %10 = sitofp i32 %9 to double
3656 ; CHECK-NEXT: %11 = insertelement <2 x double> undef, double %10, i32 0
3657 ; CHECK-NEXT: %12 = extractelement <4 x i32> %5, i32 1
3658 ; CHECK-NEXT: %13 = sitofp i32 %12 to double
3659 ; CHECK-NEXT: %14 = insertelement <2 x double> %11, double %13, i32 1
3660 ; CHECK-NEXT: %15 = extractelement <4 x i32> %5, i32 2
3661 ; CHECK-NEXT: %16 = sitofp i32 %15 to double
3662 ; CHECK-NEXT: %17 = insertelement <2 x double> undef, double %16, i32 0
3663 ; CHECK-NEXT: %18 = extractelement <4 x i32> %5, i32 3
3664 ; CHECK-NEXT: %19 = sitofp i32 %18 to double
3665 ; CHECK-NEXT: %20 = insertelement <2 x double> %17, double %19, i32 1
3666 ; CHECK-NEXT: %21 = extractelement <4 x i32> %6, i32 0
3667 ; CHECK-NEXT: %22 = sitofp i32 %21 to double
3668 ; CHECK-NEXT: %23 = insertelement <2 x double> undef, double %22, i32 0
3669 ; CHECK-NEXT: %24 = extractelement <4 x i32> %6, i32 1
3670 ; CHECK-NEXT: %25 = sitofp i32 %24 to double
3671 ; CHECK-NEXT: %26 = insertelement <2 x double> %23, double %25, i32 1
3672 ; CHECK-NEXT: %27 = extractelement <4 x i32> %6, i32 2
3673 ; CHECK-NEXT: %28 = sitofp i32 %27 to double
3674 ; CHECK-NEXT: %29 = insertelement <2 x double> undef, double %28, i32 0
3675 ; CHECK-NEXT: %30 = extractelement <4 x i32> %6, i32 3
3676 ; CHECK-NEXT: %31 = sitofp i32 %30 to double
3677 ; CHECK-NEXT: %32 = insertelement <2 x double> %29, double %31, i32 1
3678 ; CHECK-NEXT: %33 = extractelement <4 x i32> %7, i32 0
3679 ; CHECK-NEXT: %34 = sitofp i32 %33 to double
3680 ; CHECK-NEXT: %35 = insertelement <2 x double> undef, double %34, i32 0
3681 ; CHECK-NEXT: %36 = extractelement <4 x i32> %7, i32 1
3682 ; CHECK-NEXT: %37 = sitofp i32 %36 to double
3683 ; CHECK-NEXT: %38 = insertelement <2 x double> %35, double %37, i32 1
3684 ; CHECK-NEXT: %39 = extractelement <4 x i32> %7, i32 2
3685 ; CHECK-NEXT: %40 = sitofp i32 %39 to double
3686 ; CHECK-NEXT: %41 = insertelement <2 x double> undef, double %40, i32 0
3687 ; CHECK-NEXT: %42 = extractelement <4 x i32> %7, i32 3
3688 ; CHECK-NEXT: %43 = sitofp i32 %42 to double
3689 ; CHECK-NEXT: %44 = insertelement <2 x double> %41, double %43, i32 1
3690 ; CHECK-NEXT: store <2 x double> %20, <2 x double>* %0, align 16
3691 ; CHECK-NEXT: store <2 x double> %26, <2 x double>* %1, align 16
3692 ; CHECK-NEXT: store <2 x double> %32, <2 x double>* %2, align 16
3693 ; CHECK-NEXT: store <2 x double> %38, <2 x double>* %3, align 16
3694 ; CHECK-NEXT: store <2 x double> %44, <2 x double>* %4, align 16
3695 ; CHECK-NEXT: ret <2 x double> %14
3696
3697 define <12 x double> @sitofp_cast_12xi64_to_12xdouble(<12 x i64>) {
3698 %2 = sitofp <12 x i64> %0 to <12 x double>
3699 ret <12 x double> %2
3700 }
3701 ; CHECK-LABEL: define <2 x double> @sitofp_cast_12xi64_to_12xdouble(<2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
3702 ; CHECK-NEXT: %12 = sitofp <2 x i64> %5 to <2 x double>
3703 ; CHECK-NEXT: %13 = sitofp <2 x i64> %6 to <2 x double>
3704 ; CHECK-NEXT: %14 = sitofp <2 x i64> %7 to <2 x double>
3705 ; CHECK-NEXT: %15 = sitofp <2 x i64> %8 to <2 x double>
3706 ; CHECK-NEXT: %16 = sitofp <2 x i64> %9 to <2 x double>
3707 ; CHECK-NEXT: %17 = sitofp <2 x i64> %10 to <2 x double>
3708 ; CHECK-NEXT: store <2 x double> %13, <2 x double>* %0, align 16
3709 ; CHECK-NEXT: store <2 x double> %14, <2 x double>* %1, align 16
3710 ; CHECK-NEXT: store <2 x double> %15, <2 x double>* %2, align 16
3711 ; CHECK-NEXT: store <2 x double> %16, <2 x double>* %3, align 16
3712 ; CHECK-NEXT: store <2 x double> %17, <2 x double>* %4, align 16
3713 ; CHECK-NEXT: ret <2 x double> %12
3714
3715 define <16 x i8> @fptoui_cast_16xfloat_to_16xi8(<16 x float>) {
3716 %2 = fptoui <16 x float> %0 to <16 x i8>
3717 ret <16 x i8> %2
3718 }
3719 ; CHECK-LABEL: define <16 x i8> @fptoui_cast_16xfloat_to_16xi8(<4 x float>, <4 x float>, <4 x float>, <4 x float>)
3720 ; CHECK-NEXT: %5 = extractelement <4 x float> %0, i32 0
3721 ; CHECK-NEXT: %6 = fptoui float %5 to i8
3722 ; CHECK-NEXT: %7 = insertelement <16 x i8> undef, i8 %6, i32 0
3723 ; CHECK-NEXT: %8 = extractelement <4 x float> %0, i32 1
3724 ; CHECK-NEXT: %9 = fptoui float %8 to i8
3725 ; CHECK-NEXT: %10 = insertelement <16 x i8> %7, i8 %9, i32 1
3726 ; CHECK-NEXT: %11 = extractelement <4 x float> %0, i32 2
3727 ; CHECK-NEXT: %12 = fptoui float %11 to i8
3728 ; CHECK-NEXT: %13 = insertelement <16 x i8> %10, i8 %12, i32 2
3729 ; CHECK-NEXT: %14 = extractelement <4 x float> %0, i32 3
3730 ; CHECK-NEXT: %15 = fptoui float %14 to i8
3731 ; CHECK-NEXT: %16 = insertelement <16 x i8> %13, i8 %15, i32 3
3732 ; CHECK-NEXT: %17 = extractelement <4 x float> %1, i32 0
3733 ; CHECK-NEXT: %18 = fptoui float %17 to i8
3734 ; CHECK-NEXT: %19 = insertelement <16 x i8> %16, i8 %18, i32 4
3735 ; CHECK-NEXT: %20 = extractelement <4 x float> %1, i32 1
3736 ; CHECK-NEXT: %21 = fptoui float %20 to i8
3737 ; CHECK-NEXT: %22 = insertelement <16 x i8> %19, i8 %21, i32 5
3738 ; CHECK-NEXT: %23 = extractelement <4 x float> %1, i32 2
3739 ; CHECK-NEXT: %24 = fptoui float %23 to i8
3740 ; CHECK-NEXT: %25 = insertelement <16 x i8> %22, i8 %24, i32 6
3741 ; CHECK-NEXT: %26 = extractelement <4 x float> %1, i32 3
3742 ; CHECK-NEXT: %27 = fptoui float %26 to i8
3743 ; CHECK-NEXT: %28 = insertelement <16 x i8> %25, i8 %27, i32 7
3744 ; CHECK-NEXT: %29 = extractelement <4 x float> %2, i32 0
3745 ; CHECK-NEXT: %30 = fptoui float %29 to i8
3746 ; CHECK-NEXT: %31 = insertelement <16 x i8> %28, i8 %30, i32 8
3747 ; CHECK-NEXT: %32 = extractelement <4 x float> %2, i32 1
3748 ; CHECK-NEXT: %33 = fptoui float %32 to i8
3749 ; CHECK-NEXT: %34 = insertelement <16 x i8> %31, i8 %33, i32 9
3750 ; CHECK-NEXT: %35 = extractelement <4 x float> %2, i32 2
3751 ; CHECK-NEXT: %36 = fptoui float %35 to i8
3752 ; CHECK-NEXT: %37 = insertelement <16 x i8> %34, i8 %36, i32 10
3753 ; CHECK-NEXT: %38 = extractelement <4 x float> %2, i32 3
3754 ; CHECK-NEXT: %39 = fptoui float %38 to i8
3755 ; CHECK-NEXT: %40 = insertelement <16 x i8> %37, i8 %39, i32 11
3756 ; CHECK-NEXT: %41 = extractelement <4 x float> %3, i32 0
3757 ; CHECK-NEXT: %42 = fptoui float %41 to i8
3758 ; CHECK-NEXT: %43 = insertelement <16 x i8> %40, i8 %42, i32 12
3759 ; CHECK-NEXT: %44 = extractelement <4 x float> %3, i32 1
3760 ; CHECK-NEXT: %45 = fptoui float %44 to i8
3761 ; CHECK-NEXT: %46 = insertelement <16 x i8> %43, i8 %45, i32 13
3762 ; CHECK-NEXT: %47 = extractelement <4 x float> %3, i32 2
3763 ; CHECK-NEXT: %48 = fptoui float %47 to i8
3764 ; CHECK-NEXT: %49 = insertelement <16 x i8> %46, i8 %48, i32 14
3765 ; CHECK-NEXT: %50 = extractelement <4 x float> %3, i32 3
3766 ; CHECK-NEXT: %51 = fptoui float %50 to i8
3767 ; CHECK-NEXT: %52 = insertelement <16 x i8> %49, i8 %51, i32 15
3768 ; CHECK-NEXT: ret <16 x i8> %52
3769
3770 define <16 x i16> @fptoui_cast_16xfloat_to_16xi16(<16 x float>) {
3771 %2 = fptoui <16 x float> %0 to <16 x i16>
3772 ret <16 x i16> %2
3773 }
3774 ; CHECK-LABEL: define <8 x i16> @fptoui_cast_16xfloat_to_16xi16(<8 x i16>* nocap ture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x fl oat>)
3775 ; CHECK-NEXT: %6 = extractelement <4 x float> %1, i32 0
3776 ; CHECK-NEXT: %7 = fptoui float %6 to i16
3777 ; CHECK-NEXT: %8 = insertelement <8 x i16> undef, i16 %7, i32 0
3778 ; CHECK-NEXT: %9 = extractelement <4 x float> %1, i32 1
3779 ; CHECK-NEXT: %10 = fptoui float %9 to i16
3780 ; CHECK-NEXT: %11 = insertelement <8 x i16> %8, i16 %10, i32 1
3781 ; CHECK-NEXT: %12 = extractelement <4 x float> %1, i32 2
3782 ; CHECK-NEXT: %13 = fptoui float %12 to i16
3783 ; CHECK-NEXT: %14 = insertelement <8 x i16> %11, i16 %13, i32 2
3784 ; CHECK-NEXT: %15 = extractelement <4 x float> %1, i32 3
3785 ; CHECK-NEXT: %16 = fptoui float %15 to i16
3786 ; CHECK-NEXT: %17 = insertelement <8 x i16> %14, i16 %16, i32 3
3787 ; CHECK-NEXT: %18 = extractelement <4 x float> %2, i32 0
3788 ; CHECK-NEXT: %19 = fptoui float %18 to i16
3789 ; CHECK-NEXT: %20 = insertelement <8 x i16> %17, i16 %19, i32 4
3790 ; CHECK-NEXT: %21 = extractelement <4 x float> %2, i32 1
3791 ; CHECK-NEXT: %22 = fptoui float %21 to i16
3792 ; CHECK-NEXT: %23 = insertelement <8 x i16> %20, i16 %22, i32 5
3793 ; CHECK-NEXT: %24 = extractelement <4 x float> %2, i32 2
3794 ; CHECK-NEXT: %25 = fptoui float %24 to i16
3795 ; CHECK-NEXT: %26 = insertelement <8 x i16> %23, i16 %25, i32 6
3796 ; CHECK-NEXT: %27 = extractelement <4 x float> %2, i32 3
3797 ; CHECK-NEXT: %28 = fptoui float %27 to i16
3798 ; CHECK-NEXT: %29 = insertelement <8 x i16> %26, i16 %28, i32 7
3799 ; CHECK-NEXT: %30 = extractelement <4 x float> %3, i32 0
3800 ; CHECK-NEXT: %31 = fptoui float %30 to i16
3801 ; CHECK-NEXT: %32 = insertelement <8 x i16> undef, i16 %31, i32 0
3802 ; CHECK-NEXT: %33 = extractelement <4 x float> %3, i32 1
3803 ; CHECK-NEXT: %34 = fptoui float %33 to i16
3804 ; CHECK-NEXT: %35 = insertelement <8 x i16> %32, i16 %34, i32 1
3805 ; CHECK-NEXT: %36 = extractelement <4 x float> %3, i32 2
3806 ; CHECK-NEXT: %37 = fptoui float %36 to i16
3807 ; CHECK-NEXT: %38 = insertelement <8 x i16> %35, i16 %37, i32 2
3808 ; CHECK-NEXT: %39 = extractelement <4 x float> %3, i32 3
3809 ; CHECK-NEXT: %40 = fptoui float %39 to i16
3810 ; CHECK-NEXT: %41 = insertelement <8 x i16> %38, i16 %40, i32 3
3811 ; CHECK-NEXT: %42 = extractelement <4 x float> %4, i32 0
3812 ; CHECK-NEXT: %43 = fptoui float %42 to i16
3813 ; CHECK-NEXT: %44 = insertelement <8 x i16> %41, i16 %43, i32 4
3814 ; CHECK-NEXT: %45 = extractelement <4 x float> %4, i32 1
3815 ; CHECK-NEXT: %46 = fptoui float %45 to i16
3816 ; CHECK-NEXT: %47 = insertelement <8 x i16> %44, i16 %46, i32 5
3817 ; CHECK-NEXT: %48 = extractelement <4 x float> %4, i32 2
3818 ; CHECK-NEXT: %49 = fptoui float %48 to i16
3819 ; CHECK-NEXT: %50 = insertelement <8 x i16> %47, i16 %49, i32 6
3820 ; CHECK-NEXT: %51 = extractelement <4 x float> %4, i32 3
3821 ; CHECK-NEXT: %52 = fptoui float %51 to i16
3822 ; CHECK-NEXT: %53 = insertelement <8 x i16> %50, i16 %52, i32 7
3823 ; CHECK-NEXT: store <8 x i16> %53, <8 x i16>* %0, align 16
3824 ; CHECK-NEXT: ret <8 x i16> %29
3825
3826 define <16 x i32> @fptoui_cast_16xfloat_to_16xi32(<16 x float>) {
3827 %2 = fptoui <16 x float> %0 to <16 x i32>
3828 ret <16 x i32> %2
3829 }
3830 ; CHECK-LABEL: define <4 x i32> @fptoui_cast_16xfloat_to_16xi32(<4 x i32>* nocap ture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(1 6), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>)
3831 ; CHECK-NEXT: %8 = fptoui <4 x float> %3 to <4 x i32>
3832 ; CHECK-NEXT: %9 = fptoui <4 x float> %4 to <4 x i32>
3833 ; CHECK-NEXT: %10 = fptoui <4 x float> %5 to <4 x i32>
3834 ; CHECK-NEXT: %11 = fptoui <4 x float> %6 to <4 x i32>
3835 ; CHECK-NEXT: store <4 x i32> %9, <4 x i32>* %0, align 16
3836 ; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %1, align 16
3837 ; CHECK-NEXT: store <4 x i32> %11, <4 x i32>* %2, align 16
3838 ; CHECK-NEXT: ret <4 x i32> %8
3839
3840 define <16 x i64> @fptoui_cast_16xfloat_to_16xi64(<16 x float>) {
3841 %2 = fptoui <16 x float> %0 to <16 x i64>
3842 ret <16 x i64> %2
3843 }
3844 ; CHECK-LABEL: define <2 x i64> @fptoui_cast_16xfloat_to_16xi64(<2 x i64>* nocap ture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(1 6), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnu ll dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i 64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull derefer enceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>)
3845 ; CHECK-NEXT: %12 = extractelement <4 x float> %7, i32 0
3846 ; CHECK-NEXT: %13 = fptoui float %12 to i64
3847 ; CHECK-NEXT: %14 = insertelement <2 x i64> undef, i64 %13, i32 0
3848 ; CHECK-NEXT: %15 = extractelement <4 x float> %7, i32 1
3849 ; CHECK-NEXT: %16 = fptoui float %15 to i64
3850 ; CHECK-NEXT: %17 = insertelement <2 x i64> %14, i64 %16, i32 1
3851 ; CHECK-NEXT: %18 = extractelement <4 x float> %7, i32 2
3852 ; CHECK-NEXT: %19 = fptoui float %18 to i64
3853 ; CHECK-NEXT: %20 = insertelement <2 x i64> undef, i64 %19, i32 0
3854 ; CHECK-NEXT: %21 = extractelement <4 x float> %7, i32 3
3855 ; CHECK-NEXT: %22 = fptoui float %21 to i64
3856 ; CHECK-NEXT: %23 = insertelement <2 x i64> %20, i64 %22, i32 1
3857 ; CHECK-NEXT: %24 = extractelement <4 x float> %8, i32 0
3858 ; CHECK-NEXT: %25 = fptoui float %24 to i64
3859 ; CHECK-NEXT: %26 = insertelement <2 x i64> undef, i64 %25, i32 0
3860 ; CHECK-NEXT: %27 = extractelement <4 x float> %8, i32 1
3861 ; CHECK-NEXT: %28 = fptoui float %27 to i64
3862 ; CHECK-NEXT: %29 = insertelement <2 x i64> %26, i64 %28, i32 1
3863 ; CHECK-NEXT: %30 = extractelement <4 x float> %8, i32 2
3864 ; CHECK-NEXT: %31 = fptoui float %30 to i64
3865 ; CHECK-NEXT: %32 = insertelement <2 x i64> undef, i64 %31, i32 0
3866 ; CHECK-NEXT: %33 = extractelement <4 x float> %8, i32 3
3867 ; CHECK-NEXT: %34 = fptoui float %33 to i64
3868 ; CHECK-NEXT: %35 = insertelement <2 x i64> %32, i64 %34, i32 1
3869 ; CHECK-NEXT: %36 = extractelement <4 x float> %9, i32 0
3870 ; CHECK-NEXT: %37 = fptoui float %36 to i64
3871 ; CHECK-NEXT: %38 = insertelement <2 x i64> undef, i64 %37, i32 0
3872 ; CHECK-NEXT: %39 = extractelement <4 x float> %9, i32 1
3873 ; CHECK-NEXT: %40 = fptoui float %39 to i64
3874 ; CHECK-NEXT: %41 = insertelement <2 x i64> %38, i64 %40, i32 1
3875 ; CHECK-NEXT: %42 = extractelement <4 x float> %9, i32 2
3876 ; CHECK-NEXT: %43 = fptoui float %42 to i64
3877 ; CHECK-NEXT: %44 = insertelement <2 x i64> undef, i64 %43, i32 0
3878 ; CHECK-NEXT: %45 = extractelement <4 x float> %9, i32 3
3879 ; CHECK-NEXT: %46 = fptoui float %45 to i64
3880 ; CHECK-NEXT: %47 = insertelement <2 x i64> %44, i64 %46, i32 1
3881 ; CHECK-NEXT: %48 = extractelement <4 x float> %10, i32 0
3882 ; CHECK-NEXT: %49 = fptoui float %48 to i64
3883 ; CHECK-NEXT: %50 = insertelement <2 x i64> undef, i64 %49, i32 0
3884 ; CHECK-NEXT: %51 = extractelement <4 x float> %10, i32 1
3885 ; CHECK-NEXT: %52 = fptoui float %51 to i64
3886 ; CHECK-NEXT: %53 = insertelement <2 x i64> %50, i64 %52, i32 1
3887 ; CHECK-NEXT: %54 = extractelement <4 x float> %10, i32 2
3888 ; CHECK-NEXT: %55 = fptoui float %54 to i64
3889 ; CHECK-NEXT: %56 = insertelement <2 x i64> undef, i64 %55, i32 0
3890 ; CHECK-NEXT: %57 = extractelement <4 x float> %10, i32 3
3891 ; CHECK-NEXT: %58 = fptoui float %57 to i64
3892 ; CHECK-NEXT: %59 = insertelement <2 x i64> %56, i64 %58, i32 1
3893 ; CHECK-NEXT: store <2 x i64> %23, <2 x i64>* %0, align 16
3894 ; CHECK-NEXT: store <2 x i64> %29, <2 x i64>* %1, align 16
3895 ; CHECK-NEXT: store <2 x i64> %35, <2 x i64>* %2, align 16
3896 ; CHECK-NEXT: store <2 x i64> %41, <2 x i64>* %3, align 16
3897 ; CHECK-NEXT: store <2 x i64> %47, <2 x i64>* %4, align 16
3898 ; CHECK-NEXT: store <2 x i64> %53, <2 x i64>* %5, align 16
3899 ; CHECK-NEXT: store <2 x i64> %59, <2 x i64>* %6, align 16
3900 ; CHECK-NEXT: ret <2 x i64> %17
3901
3902 define <16 x i8> @fptoui_cast_16xdouble_to_16xi8(<16 x double>) {
3903 %2 = fptoui <16 x double> %0 to <16 x i8>
3904 ret <16 x i8> %2
3905 }
3906 ; CHECK-LABEL: define <16 x i8> @fptoui_cast_16xdouble_to_16xi8(<2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double> , <2 x double>)
3907 ; CHECK-NEXT: %9 = extractelement <2 x double> %0, i32 0
3908 ; CHECK-NEXT: %10 = fptoui double %9 to i8
3909 ; CHECK-NEXT: %11 = insertelement <16 x i8> undef, i8 %10, i32 0
3910 ; CHECK-NEXT: %12 = extractelement <2 x double> %0, i32 1
3911 ; CHECK-NEXT: %13 = fptoui double %12 to i8
3912 ; CHECK-NEXT: %14 = insertelement <16 x i8> %11, i8 %13, i32 1
3913 ; CHECK-NEXT: %15 = extractelement <2 x double> %1, i32 0
3914 ; CHECK-NEXT: %16 = fptoui double %15 to i8
3915 ; CHECK-NEXT: %17 = insertelement <16 x i8> %14, i8 %16, i32 2
3916 ; CHECK-NEXT: %18 = extractelement <2 x double> %1, i32 1
3917 ; CHECK-NEXT: %19 = fptoui double %18 to i8
3918 ; CHECK-NEXT: %20 = insertelement <16 x i8> %17, i8 %19, i32 3
3919 ; CHECK-NEXT: %21 = extractelement <2 x double> %2, i32 0
3920 ; CHECK-NEXT: %22 = fptoui double %21 to i8
3921 ; CHECK-NEXT: %23 = insertelement <16 x i8> %20, i8 %22, i32 4
3922 ; CHECK-NEXT: %24 = extractelement <2 x double> %2, i32 1
3923 ; CHECK-NEXT: %25 = fptoui double %24 to i8
3924 ; CHECK-NEXT: %26 = insertelement <16 x i8> %23, i8 %25, i32 5
3925 ; CHECK-NEXT: %27 = extractelement <2 x double> %3, i32 0
3926 ; CHECK-NEXT: %28 = fptoui double %27 to i8
3927 ; CHECK-NEXT: %29 = insertelement <16 x i8> %26, i8 %28, i32 6
3928 ; CHECK-NEXT: %30 = extractelement <2 x double> %3, i32 1
3929 ; CHECK-NEXT: %31 = fptoui double %30 to i8
3930 ; CHECK-NEXT: %32 = insertelement <16 x i8> %29, i8 %31, i32 7
3931 ; CHECK-NEXT: %33 = extractelement <2 x double> %4, i32 0
3932 ; CHECK-NEXT: %34 = fptoui double %33 to i8
3933 ; CHECK-NEXT: %35 = insertelement <16 x i8> %32, i8 %34, i32 8
3934 ; CHECK-NEXT: %36 = extractelement <2 x double> %4, i32 1
3935 ; CHECK-NEXT: %37 = fptoui double %36 to i8
3936 ; CHECK-NEXT: %38 = insertelement <16 x i8> %35, i8 %37, i32 9
3937 ; CHECK-NEXT: %39 = extractelement <2 x double> %5, i32 0
3938 ; CHECK-NEXT: %40 = fptoui double %39 to i8
3939 ; CHECK-NEXT: %41 = insertelement <16 x i8> %38, i8 %40, i32 10
3940 ; CHECK-NEXT: %42 = extractelement <2 x double> %5, i32 1
3941 ; CHECK-NEXT: %43 = fptoui double %42 to i8
3942 ; CHECK-NEXT: %44 = insertelement <16 x i8> %41, i8 %43, i32 11
3943 ; CHECK-NEXT: %45 = extractelement <2 x double> %6, i32 0
3944 ; CHECK-NEXT: %46 = fptoui double %45 to i8
3945 ; CHECK-NEXT: %47 = insertelement <16 x i8> %44, i8 %46, i32 12
3946 ; CHECK-NEXT: %48 = extractelement <2 x double> %6, i32 1
3947 ; CHECK-NEXT: %49 = fptoui double %48 to i8
3948 ; CHECK-NEXT: %50 = insertelement <16 x i8> %47, i8 %49, i32 13
3949 ; CHECK-NEXT: %51 = extractelement <2 x double> %7, i32 0
3950 ; CHECK-NEXT: %52 = fptoui double %51 to i8
3951 ; CHECK-NEXT: %53 = insertelement <16 x i8> %50, i8 %52, i32 14
3952 ; CHECK-NEXT: %54 = extractelement <2 x double> %7, i32 1
3953 ; CHECK-NEXT: %55 = fptoui double %54 to i8
3954 ; CHECK-NEXT: %56 = insertelement <16 x i8> %53, i8 %55, i32 15
3955 ; CHECK-NEXT: ret <16 x i8> %56
3956
3957 define <16 x i16> @fptoui_cast_16xdouble_to_16xi16(<16 x double>) {
3958 %2 = fptoui <16 x double> %0 to <16 x i16>
3959 ret <16 x i16> %2
3960 }
3961 ; CHECK-LABEL: define <8 x i16> @fptoui_cast_16xdouble_to_16xi16(<8 x i16>* noca pture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>)
3962 ; CHECK-NEXT: %10 = extractelement <2 x double> %1, i32 0
3963 ; CHECK-NEXT: %11 = fptoui double %10 to i16
3964 ; CHECK-NEXT: %12 = insertelement <8 x i16> undef, i16 %11, i32 0
3965 ; CHECK-NEXT: %13 = extractelement <2 x double> %1, i32 1
3966 ; CHECK-NEXT: %14 = fptoui double %13 to i16
3967 ; CHECK-NEXT: %15 = insertelement <8 x i16> %12, i16 %14, i32 1
3968 ; CHECK-NEXT: %16 = extractelement <2 x double> %2, i32 0
3969 ; CHECK-NEXT: %17 = fptoui double %16 to i16
3970 ; CHECK-NEXT: %18 = insertelement <8 x i16> %15, i16 %17, i32 2
3971 ; CHECK-NEXT: %19 = extractelement <2 x double> %2, i32 1
3972 ; CHECK-NEXT: %20 = fptoui double %19 to i16
3973 ; CHECK-NEXT: %21 = insertelement <8 x i16> %18, i16 %20, i32 3
3974 ; CHECK-NEXT: %22 = extractelement <2 x double> %3, i32 0
3975 ; CHECK-NEXT: %23 = fptoui double %22 to i16
3976 ; CHECK-NEXT: %24 = insertelement <8 x i16> %21, i16 %23, i32 4
3977 ; CHECK-NEXT: %25 = extractelement <2 x double> %3, i32 1
3978 ; CHECK-NEXT: %26 = fptoui double %25 to i16
3979 ; CHECK-NEXT: %27 = insertelement <8 x i16> %24, i16 %26, i32 5
3980 ; CHECK-NEXT: %28 = extractelement <2 x double> %4, i32 0
3981 ; CHECK-NEXT: %29 = fptoui double %28 to i16
3982 ; CHECK-NEXT: %30 = insertelement <8 x i16> %27, i16 %29, i32 6
3983 ; CHECK-NEXT: %31 = extractelement <2 x double> %4, i32 1
3984 ; CHECK-NEXT: %32 = fptoui double %31 to i16
3985 ; CHECK-NEXT: %33 = insertelement <8 x i16> %30, i16 %32, i32 7
3986 ; CHECK-NEXT: %34 = extractelement <2 x double> %5, i32 0
3987 ; CHECK-NEXT: %35 = fptoui double %34 to i16
3988 ; CHECK-NEXT: %36 = insertelement <8 x i16> undef, i16 %35, i32 0
3989 ; CHECK-NEXT: %37 = extractelement <2 x double> %5, i32 1
3990 ; CHECK-NEXT: %38 = fptoui double %37 to i16
3991 ; CHECK-NEXT: %39 = insertelement <8 x i16> %36, i16 %38, i32 1
3992 ; CHECK-NEXT: %40 = extractelement <2 x double> %6, i32 0
3993 ; CHECK-NEXT: %41 = fptoui double %40 to i16
3994 ; CHECK-NEXT: %42 = insertelement <8 x i16> %39, i16 %41, i32 2
3995 ; CHECK-NEXT: %43 = extractelement <2 x double> %6, i32 1
3996 ; CHECK-NEXT: %44 = fptoui double %43 to i16
3997 ; CHECK-NEXT: %45 = insertelement <8 x i16> %42, i16 %44, i32 3
3998 ; CHECK-NEXT: %46 = extractelement <2 x double> %7, i32 0
3999 ; CHECK-NEXT: %47 = fptoui double %46 to i16
4000 ; CHECK-NEXT: %48 = insertelement <8 x i16> %45, i16 %47, i32 4
4001 ; CHECK-NEXT: %49 = extractelement <2 x double> %7, i32 1
4002 ; CHECK-NEXT: %50 = fptoui double %49 to i16
4003 ; CHECK-NEXT: %51 = insertelement <8 x i16> %48, i16 %50, i32 5
4004 ; CHECK-NEXT: %52 = extractelement <2 x double> %8, i32 0
4005 ; CHECK-NEXT: %53 = fptoui double %52 to i16
4006 ; CHECK-NEXT: %54 = insertelement <8 x i16> %51, i16 %53, i32 6
4007 ; CHECK-NEXT: %55 = extractelement <2 x double> %8, i32 1
4008 ; CHECK-NEXT: %56 = fptoui double %55 to i16
4009 ; CHECK-NEXT: %57 = insertelement <8 x i16> %54, i16 %56, i32 7
4010 ; CHECK-NEXT: store <8 x i16> %57, <8 x i16>* %0, align 16
4011 ; CHECK-NEXT: ret <8 x i16> %33
4012
4013 define <16 x i32> @fptoui_cast_16xdouble_to_16xi32(<16 x double>) {
4014 %2 = fptoui <16 x double> %0 to <16 x i32>
4015 ret <16 x i32> %2
4016 }
4017 ; CHECK-LABEL: define <4 x i32> @fptoui_cast_16xdouble_to_16xi32(<4 x i32>* noca pture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable( 16), <4 x i32>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double >, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x do uble>)
4018 ; CHECK-NEXT: %12 = extractelement <2 x double> %3, i32 0
4019 ; CHECK-NEXT: %13 = fptoui double %12 to i32
4020 ; CHECK-NEXT: %14 = insertelement <4 x i32> undef, i32 %13, i32 0
4021 ; CHECK-NEXT: %15 = extractelement <2 x double> %3, i32 1
4022 ; CHECK-NEXT: %16 = fptoui double %15 to i32
4023 ; CHECK-NEXT: %17 = insertelement <4 x i32> %14, i32 %16, i32 1
4024 ; CHECK-NEXT: %18 = extractelement <2 x double> %4, i32 0
4025 ; CHECK-NEXT: %19 = fptoui double %18 to i32
4026 ; CHECK-NEXT: %20 = insertelement <4 x i32> %17, i32 %19, i32 2
4027 ; CHECK-NEXT: %21 = extractelement <2 x double> %4, i32 1
4028 ; CHECK-NEXT: %22 = fptoui double %21 to i32
4029 ; CHECK-NEXT: %23 = insertelement <4 x i32> %20, i32 %22, i32 3
4030 ; CHECK-NEXT: %24 = extractelement <2 x double> %5, i32 0
4031 ; CHECK-NEXT: %25 = fptoui double %24 to i32
4032 ; CHECK-NEXT: %26 = insertelement <4 x i32> undef, i32 %25, i32 0
4033 ; CHECK-NEXT: %27 = extractelement <2 x double> %5, i32 1
4034 ; CHECK-NEXT: %28 = fptoui double %27 to i32
4035 ; CHECK-NEXT: %29 = insertelement <4 x i32> %26, i32 %28, i32 1
4036 ; CHECK-NEXT: %30 = extractelement <2 x double> %6, i32 0
4037 ; CHECK-NEXT: %31 = fptoui double %30 to i32
4038 ; CHECK-NEXT: %32 = insertelement <4 x i32> %29, i32 %31, i32 2
4039 ; CHECK-NEXT: %33 = extractelement <2 x double> %6, i32 1
4040 ; CHECK-NEXT: %34 = fptoui double %33 to i32
4041 ; CHECK-NEXT: %35 = insertelement <4 x i32> %32, i32 %34, i32 3
4042 ; CHECK-NEXT: %36 = extractelement <2 x double> %7, i32 0
4043 ; CHECK-NEXT: %37 = fptoui double %36 to i32
4044 ; CHECK-NEXT: %38 = insertelement <4 x i32> undef, i32 %37, i32 0
4045 ; CHECK-NEXT: %39 = extractelement <2 x double> %7, i32 1
4046 ; CHECK-NEXT: %40 = fptoui double %39 to i32
4047 ; CHECK-NEXT: %41 = insertelement <4 x i32> %38, i32 %40, i32 1
4048 ; CHECK-NEXT: %42 = extractelement <2 x double> %8, i32 0
4049 ; CHECK-NEXT: %43 = fptoui double %42 to i32
4050 ; CHECK-NEXT: %44 = insertelement <4 x i32> %41, i32 %43, i32 2
4051 ; CHECK-NEXT: %45 = extractelement <2 x double> %8, i32 1
4052 ; CHECK-NEXT: %46 = fptoui double %45 to i32
4053 ; CHECK-NEXT: %47 = insertelement <4 x i32> %44, i32 %46, i32 3
4054 ; CHECK-NEXT: %48 = extractelement <2 x double> %9, i32 0
4055 ; CHECK-NEXT: %49 = fptoui double %48 to i32
4056 ; CHECK-NEXT: %50 = insertelement <4 x i32> undef, i32 %49, i32 0
4057 ; CHECK-NEXT: %51 = extractelement <2 x double> %9, i32 1
4058 ; CHECK-NEXT: %52 = fptoui double %51 to i32
4059 ; CHECK-NEXT: %53 = insertelement <4 x i32> %50, i32 %52, i32 1
4060 ; CHECK-NEXT: %54 = extractelement <2 x double> %10, i32 0
4061 ; CHECK-NEXT: %55 = fptoui double %54 to i32
4062 ; CHECK-NEXT: %56 = insertelement <4 x i32> %53, i32 %55, i32 2
4063 ; CHECK-NEXT: %57 = extractelement <2 x double> %10, i32 1
4064 ; CHECK-NEXT: %58 = fptoui double %57 to i32
4065 ; CHECK-NEXT: %59 = insertelement <4 x i32> %56, i32 %58, i32 3
4066 ; CHECK-NEXT: store <4 x i32> %35, <4 x i32>* %0, align 16
4067 ; CHECK-NEXT: store <4 x i32> %47, <4 x i32>* %1, align 16
4068 ; CHECK-NEXT: store <4 x i32> %59, <4 x i32>* %2, align 16
4069 ; CHECK-NEXT: ret <4 x i32> %23
4070
4071 define <16 x i64> @fptoui_cast_16xdouble_to_16xi64(<16 x double>) {
4072 %2 = fptoui <16 x double> %0 to <16 x i64>
4073 ret <16 x i64> %2
4074 }
4075 ; CHECK-LABEL: define <2 x i64> @fptoui_cast_16xdouble_to_16xi64(<2 x i64>* noca pture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable( 16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonn ull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull derefe renceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x doub le>, <2 x double>, <2 x double>, <2 x double>)
4076 ; CHECK-NEXT: %16 = fptoui <2 x double> %7 to <2 x i64>
4077 ; CHECK-NEXT: %17 = fptoui <2 x double> %8 to <2 x i64>
4078 ; CHECK-NEXT: %18 = fptoui <2 x double> %9 to <2 x i64>
4079 ; CHECK-NEXT: %19 = fptoui <2 x double> %10 to <2 x i64>
4080 ; CHECK-NEXT: %20 = fptoui <2 x double> %11 to <2 x i64>
4081 ; CHECK-NEXT: %21 = fptoui <2 x double> %12 to <2 x i64>
4082 ; CHECK-NEXT: %22 = fptoui <2 x double> %13 to <2 x i64>
4083 ; CHECK-NEXT: %23 = fptoui <2 x double> %14 to <2 x i64>
4084 ; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %0, align 16
4085 ; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %1, align 16
4086 ; CHECK-NEXT: store <2 x i64> %19, <2 x i64>* %2, align 16
4087 ; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %3, align 16
4088 ; CHECK-NEXT: store <2 x i64> %21, <2 x i64>* %4, align 16
4089 ; CHECK-NEXT: store <2 x i64> %22, <2 x i64>* %5, align 16
4090 ; CHECK-NEXT: store <2 x i64> %23, <2 x i64>* %6, align 16
4091 ; CHECK-NEXT: ret <2 x i64> %16
4092
4093 define <16 x i8> @fptosi_cast_16xfloat_to_16xi8(<16 x float>) {
4094 %2 = fptosi <16 x float> %0 to <16 x i8>
4095 ret <16 x i8> %2
4096 }
4097 ; CHECK-LABEL: define <16 x i8> @fptosi_cast_16xfloat_to_16xi8(<4 x float>, <4 x float>, <4 x float>, <4 x float>)
4098 ; CHECK-NEXT: %5 = extractelement <4 x float> %0, i32 0
4099 ; CHECK-NEXT: %6 = fptosi float %5 to i8
4100 ; CHECK-NEXT: %7 = insertelement <16 x i8> undef, i8 %6, i32 0
4101 ; CHECK-NEXT: %8 = extractelement <4 x float> %0, i32 1
4102 ; CHECK-NEXT: %9 = fptosi float %8 to i8
4103 ; CHECK-NEXT: %10 = insertelement <16 x i8> %7, i8 %9, i32 1
4104 ; CHECK-NEXT: %11 = extractelement <4 x float> %0, i32 2
4105 ; CHECK-NEXT: %12 = fptosi float %11 to i8
4106 ; CHECK-NEXT: %13 = insertelement <16 x i8> %10, i8 %12, i32 2
4107 ; CHECK-NEXT: %14 = extractelement <4 x float> %0, i32 3
4108 ; CHECK-NEXT: %15 = fptosi float %14 to i8
4109 ; CHECK-NEXT: %16 = insertelement <16 x i8> %13, i8 %15, i32 3
4110 ; CHECK-NEXT: %17 = extractelement <4 x float> %1, i32 0
4111 ; CHECK-NEXT: %18 = fptosi float %17 to i8
4112 ; CHECK-NEXT: %19 = insertelement <16 x i8> %16, i8 %18, i32 4
4113 ; CHECK-NEXT: %20 = extractelement <4 x float> %1, i32 1
4114 ; CHECK-NEXT: %21 = fptosi float %20 to i8
4115 ; CHECK-NEXT: %22 = insertelement <16 x i8> %19, i8 %21, i32 5
4116 ; CHECK-NEXT: %23 = extractelement <4 x float> %1, i32 2
4117 ; CHECK-NEXT: %24 = fptosi float %23 to i8
4118 ; CHECK-NEXT: %25 = insertelement <16 x i8> %22, i8 %24, i32 6
4119 ; CHECK-NEXT: %26 = extractelement <4 x float> %1, i32 3
4120 ; CHECK-NEXT: %27 = fptosi float %26 to i8
4121 ; CHECK-NEXT: %28 = insertelement <16 x i8> %25, i8 %27, i32 7
4122 ; CHECK-NEXT: %29 = extractelement <4 x float> %2, i32 0
4123 ; CHECK-NEXT: %30 = fptosi float %29 to i8
4124 ; CHECK-NEXT: %31 = insertelement <16 x i8> %28, i8 %30, i32 8
4125 ; CHECK-NEXT: %32 = extractelement <4 x float> %2, i32 1
4126 ; CHECK-NEXT: %33 = fptosi float %32 to i8
4127 ; CHECK-NEXT: %34 = insertelement <16 x i8> %31, i8 %33, i32 9
4128 ; CHECK-NEXT: %35 = extractelement <4 x float> %2, i32 2
4129 ; CHECK-NEXT: %36 = fptosi float %35 to i8
4130 ; CHECK-NEXT: %37 = insertelement <16 x i8> %34, i8 %36, i32 10
4131 ; CHECK-NEXT: %38 = extractelement <4 x float> %2, i32 3
4132 ; CHECK-NEXT: %39 = fptosi float %38 to i8
4133 ; CHECK-NEXT: %40 = insertelement <16 x i8> %37, i8 %39, i32 11
4134 ; CHECK-NEXT: %41 = extractelement <4 x float> %3, i32 0
4135 ; CHECK-NEXT: %42 = fptosi float %41 to i8
4136 ; CHECK-NEXT: %43 = insertelement <16 x i8> %40, i8 %42, i32 12
4137 ; CHECK-NEXT: %44 = extractelement <4 x float> %3, i32 1
4138 ; CHECK-NEXT: %45 = fptosi float %44 to i8
4139 ; CHECK-NEXT: %46 = insertelement <16 x i8> %43, i8 %45, i32 13
4140 ; CHECK-NEXT: %47 = extractelement <4 x float> %3, i32 2
4141 ; CHECK-NEXT: %48 = fptosi float %47 to i8
4142 ; CHECK-NEXT: %49 = insertelement <16 x i8> %46, i8 %48, i32 14
4143 ; CHECK-NEXT: %50 = extractelement <4 x float> %3, i32 3
4144 ; CHECK-NEXT: %51 = fptosi float %50 to i8
4145 ; CHECK-NEXT: %52 = insertelement <16 x i8> %49, i8 %51, i32 15
4146 ; CHECK-NEXT: ret <16 x i8> %52
4147
4148 define <16 x i16> @fptosi_cast_16xfloat_to_16xi16(<16 x float>) {
4149 %2 = fptosi <16 x float> %0 to <16 x i16>
4150 ret <16 x i16> %2
4151 }
4152 ; CHECK-LABEL: define <8 x i16> @fptosi_cast_16xfloat_to_16xi16(<8 x i16>* nocap ture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x fl oat>)
4153 ; CHECK-NEXT: %6 = extractelement <4 x float> %1, i32 0
4154 ; CHECK-NEXT: %7 = fptosi float %6 to i16
4155 ; CHECK-NEXT: %8 = insertelement <8 x i16> undef, i16 %7, i32 0
4156 ; CHECK-NEXT: %9 = extractelement <4 x float> %1, i32 1
4157 ; CHECK-NEXT: %10 = fptosi float %9 to i16
4158 ; CHECK-NEXT: %11 = insertelement <8 x i16> %8, i16 %10, i32 1
4159 ; CHECK-NEXT: %12 = extractelement <4 x float> %1, i32 2
4160 ; CHECK-NEXT: %13 = fptosi float %12 to i16
4161 ; CHECK-NEXT: %14 = insertelement <8 x i16> %11, i16 %13, i32 2
4162 ; CHECK-NEXT: %15 = extractelement <4 x float> %1, i32 3
4163 ; CHECK-NEXT: %16 = fptosi float %15 to i16
4164 ; CHECK-NEXT: %17 = insertelement <8 x i16> %14, i16 %16, i32 3
4165 ; CHECK-NEXT: %18 = extractelement <4 x float> %2, i32 0
4166 ; CHECK-NEXT: %19 = fptosi float %18 to i16
4167 ; CHECK-NEXT: %20 = insertelement <8 x i16> %17, i16 %19, i32 4
4168 ; CHECK-NEXT: %21 = extractelement <4 x float> %2, i32 1
4169 ; CHECK-NEXT: %22 = fptosi float %21 to i16
4170 ; CHECK-NEXT: %23 = insertelement <8 x i16> %20, i16 %22, i32 5
4171 ; CHECK-NEXT: %24 = extractelement <4 x float> %2, i32 2
4172 ; CHECK-NEXT: %25 = fptosi float %24 to i16
4173 ; CHECK-NEXT: %26 = insertelement <8 x i16> %23, i16 %25, i32 6
4174 ; CHECK-NEXT: %27 = extractelement <4 x float> %2, i32 3
4175 ; CHECK-NEXT: %28 = fptosi float %27 to i16
4176 ; CHECK-NEXT: %29 = insertelement <8 x i16> %26, i16 %28, i32 7
4177 ; CHECK-NEXT: %30 = extractelement <4 x float> %3, i32 0
4178 ; CHECK-NEXT: %31 = fptosi float %30 to i16
4179 ; CHECK-NEXT: %32 = insertelement <8 x i16> undef, i16 %31, i32 0
4180 ; CHECK-NEXT: %33 = extractelement <4 x float> %3, i32 1
4181 ; CHECK-NEXT: %34 = fptosi float %33 to i16
4182 ; CHECK-NEXT: %35 = insertelement <8 x i16> %32, i16 %34, i32 1
4183 ; CHECK-NEXT: %36 = extractelement <4 x float> %3, i32 2
4184 ; CHECK-NEXT: %37 = fptosi float %36 to i16
4185 ; CHECK-NEXT: %38 = insertelement <8 x i16> %35, i16 %37, i32 2
4186 ; CHECK-NEXT: %39 = extractelement <4 x float> %3, i32 3
4187 ; CHECK-NEXT: %40 = fptosi float %39 to i16
4188 ; CHECK-NEXT: %41 = insertelement <8 x i16> %38, i16 %40, i32 3
4189 ; CHECK-NEXT: %42 = extractelement <4 x float> %4, i32 0
4190 ; CHECK-NEXT: %43 = fptosi float %42 to i16
4191 ; CHECK-NEXT: %44 = insertelement <8 x i16> %41, i16 %43, i32 4
4192 ; CHECK-NEXT: %45 = extractelement <4 x float> %4, i32 1
4193 ; CHECK-NEXT: %46 = fptosi float %45 to i16
4194 ; CHECK-NEXT: %47 = insertelement <8 x i16> %44, i16 %46, i32 5
4195 ; CHECK-NEXT: %48 = extractelement <4 x float> %4, i32 2
4196 ; CHECK-NEXT: %49 = fptosi float %48 to i16
4197 ; CHECK-NEXT: %50 = insertelement <8 x i16> %47, i16 %49, i32 6
4198 ; CHECK-NEXT: %51 = extractelement <4 x float> %4, i32 3
4199 ; CHECK-NEXT: %52 = fptosi float %51 to i16
4200 ; CHECK-NEXT: %53 = insertelement <8 x i16> %50, i16 %52, i32 7
4201 ; CHECK-NEXT: store <8 x i16> %53, <8 x i16>* %0, align 16
4202 ; CHECK-NEXT: ret <8 x i16> %29
4203
4204 define <16 x i32> @fptosi_cast_16xfloat_to_16xi32(<16 x float>) {
4205 %2 = fptosi <16 x float> %0 to <16 x i32>
4206 ret <16 x i32> %2
4207 }
4208 ; CHECK-LABEL: define <4 x i32> @fptosi_cast_16xfloat_to_16xi32(<4 x i32>* nocap ture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(1 6), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>)
4209 ; CHECK-NEXT: %8 = fptosi <4 x float> %3 to <4 x i32>
4210 ; CHECK-NEXT: %9 = fptosi <4 x float> %4 to <4 x i32>
4211 ; CHECK-NEXT: %10 = fptosi <4 x float> %5 to <4 x i32>
4212 ; CHECK-NEXT: %11 = fptosi <4 x float> %6 to <4 x i32>
4213 ; CHECK-NEXT: store <4 x i32> %9, <4 x i32>* %0, align 16
4214 ; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %1, align 16
4215 ; CHECK-NEXT: store <4 x i32> %11, <4 x i32>* %2, align 16
4216 ; CHECK-NEXT: ret <4 x i32> %8
4217
4218 define <16 x i64> @fptosi_cast_16xfloat_to_16xi64(<16 x float>) {
4219 %2 = fptosi <16 x float> %0 to <16 x i64>
4220 ret <16 x i64> %2
4221 }
4222 ; CHECK-LABEL: define <2 x i64> @fptosi_cast_16xfloat_to_16xi64(<2 x i64>* nocap ture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(1 6), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnu ll dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i 64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull derefer enceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>)
4223 ; CHECK-NEXT: %12 = extractelement <4 x float> %7, i32 0
4224 ; CHECK-NEXT: %13 = fptosi float %12 to i64
4225 ; CHECK-NEXT: %14 = insertelement <2 x i64> undef, i64 %13, i32 0
4226 ; CHECK-NEXT: %15 = extractelement <4 x float> %7, i32 1
4227 ; CHECK-NEXT: %16 = fptosi float %15 to i64
4228 ; CHECK-NEXT: %17 = insertelement <2 x i64> %14, i64 %16, i32 1
4229 ; CHECK-NEXT: %18 = extractelement <4 x float> %7, i32 2
4230 ; CHECK-NEXT: %19 = fptosi float %18 to i64
4231 ; CHECK-NEXT: %20 = insertelement <2 x i64> undef, i64 %19, i32 0
4232 ; CHECK-NEXT: %21 = extractelement <4 x float> %7, i32 3
4233 ; CHECK-NEXT: %22 = fptosi float %21 to i64
4234 ; CHECK-NEXT: %23 = insertelement <2 x i64> %20, i64 %22, i32 1
4235 ; CHECK-NEXT: %24 = extractelement <4 x float> %8, i32 0
4236 ; CHECK-NEXT: %25 = fptosi float %24 to i64
4237 ; CHECK-NEXT: %26 = insertelement <2 x i64> undef, i64 %25, i32 0
4238 ; CHECK-NEXT: %27 = extractelement <4 x float> %8, i32 1
4239 ; CHECK-NEXT: %28 = fptosi float %27 to i64
4240 ; CHECK-NEXT: %29 = insertelement <2 x i64> %26, i64 %28, i32 1
4241 ; CHECK-NEXT: %30 = extractelement <4 x float> %8, i32 2
4242 ; CHECK-NEXT: %31 = fptosi float %30 to i64
4243 ; CHECK-NEXT: %32 = insertelement <2 x i64> undef, i64 %31, i32 0
4244 ; CHECK-NEXT: %33 = extractelement <4 x float> %8, i32 3
4245 ; CHECK-NEXT: %34 = fptosi float %33 to i64
4246 ; CHECK-NEXT: %35 = insertelement <2 x i64> %32, i64 %34, i32 1
4247 ; CHECK-NEXT: %36 = extractelement <4 x float> %9, i32 0
4248 ; CHECK-NEXT: %37 = fptosi float %36 to i64
4249 ; CHECK-NEXT: %38 = insertelement <2 x i64> undef, i64 %37, i32 0
4250 ; CHECK-NEXT: %39 = extractelement <4 x float> %9, i32 1
4251 ; CHECK-NEXT: %40 = fptosi float %39 to i64
4252 ; CHECK-NEXT: %41 = insertelement <2 x i64> %38, i64 %40, i32 1
4253 ; CHECK-NEXT: %42 = extractelement <4 x float> %9, i32 2
4254 ; CHECK-NEXT: %43 = fptosi float %42 to i64
4255 ; CHECK-NEXT: %44 = insertelement <2 x i64> undef, i64 %43, i32 0
4256 ; CHECK-NEXT: %45 = extractelement <4 x float> %9, i32 3
4257 ; CHECK-NEXT: %46 = fptosi float %45 to i64
4258 ; CHECK-NEXT: %47 = insertelement <2 x i64> %44, i64 %46, i32 1
4259 ; CHECK-NEXT: %48 = extractelement <4 x float> %10, i32 0
4260 ; CHECK-NEXT: %49 = fptosi float %48 to i64
4261 ; CHECK-NEXT: %50 = insertelement <2 x i64> undef, i64 %49, i32 0
4262 ; CHECK-NEXT: %51 = extractelement <4 x float> %10, i32 1
4263 ; CHECK-NEXT: %52 = fptosi float %51 to i64
4264 ; CHECK-NEXT: %53 = insertelement <2 x i64> %50, i64 %52, i32 1
4265 ; CHECK-NEXT: %54 = extractelement <4 x float> %10, i32 2
4266 ; CHECK-NEXT: %55 = fptosi float %54 to i64
4267 ; CHECK-NEXT: %56 = insertelement <2 x i64> undef, i64 %55, i32 0
4268 ; CHECK-NEXT: %57 = extractelement <4 x float> %10, i32 3
4269 ; CHECK-NEXT: %58 = fptosi float %57 to i64
4270 ; CHECK-NEXT: %59 = insertelement <2 x i64> %56, i64 %58, i32 1
4271 ; CHECK-NEXT: store <2 x i64> %23, <2 x i64>* %0, align 16
4272 ; CHECK-NEXT: store <2 x i64> %29, <2 x i64>* %1, align 16
4273 ; CHECK-NEXT: store <2 x i64> %35, <2 x i64>* %2, align 16
4274 ; CHECK-NEXT: store <2 x i64> %41, <2 x i64>* %3, align 16
4275 ; CHECK-NEXT: store <2 x i64> %47, <2 x i64>* %4, align 16
4276 ; CHECK-NEXT: store <2 x i64> %53, <2 x i64>* %5, align 16
4277 ; CHECK-NEXT: store <2 x i64> %59, <2 x i64>* %6, align 16
4278 ; CHECK-NEXT: ret <2 x i64> %17
4279
4280 define <16 x i8> @fptosi_cast_16xdouble_to_16xi8(<16 x double>) {
4281 %2 = fptosi <16 x double> %0 to <16 x i8>
4282 ret <16 x i8> %2
4283 }
4284 ; CHECK-LABEL: define <16 x i8> @fptosi_cast_16xdouble_to_16xi8(<2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double> , <2 x double>)
4285 ; CHECK-NEXT: %9 = extractelement <2 x double> %0, i32 0
4286 ; CHECK-NEXT: %10 = fptosi double %9 to i8
4287 ; CHECK-NEXT: %11 = insertelement <16 x i8> undef, i8 %10, i32 0
4288 ; CHECK-NEXT: %12 = extractelement <2 x double> %0, i32 1
4289 ; CHECK-NEXT: %13 = fptosi double %12 to i8
4290 ; CHECK-NEXT: %14 = insertelement <16 x i8> %11, i8 %13, i32 1
4291 ; CHECK-NEXT: %15 = extractelement <2 x double> %1, i32 0
4292 ; CHECK-NEXT: %16 = fptosi double %15 to i8
4293 ; CHECK-NEXT: %17 = insertelement <16 x i8> %14, i8 %16, i32 2
4294 ; CHECK-NEXT: %18 = extractelement <2 x double> %1, i32 1
4295 ; CHECK-NEXT: %19 = fptosi double %18 to i8
4296 ; CHECK-NEXT: %20 = insertelement <16 x i8> %17, i8 %19, i32 3
4297 ; CHECK-NEXT: %21 = extractelement <2 x double> %2, i32 0
4298 ; CHECK-NEXT: %22 = fptosi double %21 to i8
4299 ; CHECK-NEXT: %23 = insertelement <16 x i8> %20, i8 %22, i32 4
4300 ; CHECK-NEXT: %24 = extractelement <2 x double> %2, i32 1
4301 ; CHECK-NEXT: %25 = fptosi double %24 to i8
4302 ; CHECK-NEXT: %26 = insertelement <16 x i8> %23, i8 %25, i32 5
4303 ; CHECK-NEXT: %27 = extractelement <2 x double> %3, i32 0
4304 ; CHECK-NEXT: %28 = fptosi double %27 to i8
4305 ; CHECK-NEXT: %29 = insertelement <16 x i8> %26, i8 %28, i32 6
4306 ; CHECK-NEXT: %30 = extractelement <2 x double> %3, i32 1
4307 ; CHECK-NEXT: %31 = fptosi double %30 to i8
4308 ; CHECK-NEXT: %32 = insertelement <16 x i8> %29, i8 %31, i32 7
4309 ; CHECK-NEXT: %33 = extractelement <2 x double> %4, i32 0
4310 ; CHECK-NEXT: %34 = fptosi double %33 to i8
4311 ; CHECK-NEXT: %35 = insertelement <16 x i8> %32, i8 %34, i32 8
4312 ; CHECK-NEXT: %36 = extractelement <2 x double> %4, i32 1
4313 ; CHECK-NEXT: %37 = fptosi double %36 to i8
4314 ; CHECK-NEXT: %38 = insertelement <16 x i8> %35, i8 %37, i32 9
4315 ; CHECK-NEXT: %39 = extractelement <2 x double> %5, i32 0
4316 ; CHECK-NEXT: %40 = fptosi double %39 to i8
4317 ; CHECK-NEXT: %41 = insertelement <16 x i8> %38, i8 %40, i32 10
4318 ; CHECK-NEXT: %42 = extractelement <2 x double> %5, i32 1
4319 ; CHECK-NEXT: %43 = fptosi double %42 to i8
4320 ; CHECK-NEXT: %44 = insertelement <16 x i8> %41, i8 %43, i32 11
4321 ; CHECK-NEXT: %45 = extractelement <2 x double> %6, i32 0
4322 ; CHECK-NEXT: %46 = fptosi double %45 to i8
4323 ; CHECK-NEXT: %47 = insertelement <16 x i8> %44, i8 %46, i32 12
4324 ; CHECK-NEXT: %48 = extractelement <2 x double> %6, i32 1
4325 ; CHECK-NEXT: %49 = fptosi double %48 to i8
4326 ; CHECK-NEXT: %50 = insertelement <16 x i8> %47, i8 %49, i32 13
4327 ; CHECK-NEXT: %51 = extractelement <2 x double> %7, i32 0
4328 ; CHECK-NEXT: %52 = fptosi double %51 to i8
4329 ; CHECK-NEXT: %53 = insertelement <16 x i8> %50, i8 %52, i32 14
4330 ; CHECK-NEXT: %54 = extractelement <2 x double> %7, i32 1
4331 ; CHECK-NEXT: %55 = fptosi double %54 to i8
4332 ; CHECK-NEXT: %56 = insertelement <16 x i8> %53, i8 %55, i32 15
4333 ; CHECK-NEXT: ret <16 x i8> %56
4334
4335 define <16 x i16> @fptosi_cast_16xdouble_to_16xi16(<16 x double>) {
4336 %2 = fptosi <16 x double> %0 to <16 x i16>
4337 ret <16 x i16> %2
4338 }
4339 ; CHECK-LABEL: define <8 x i16> @fptosi_cast_16xdouble_to_16xi16(<8 x i16>* noca pture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>)
4340 ; CHECK-NEXT: %10 = extractelement <2 x double> %1, i32 0
4341 ; CHECK-NEXT: %11 = fptosi double %10 to i16
4342 ; CHECK-NEXT: %12 = insertelement <8 x i16> undef, i16 %11, i32 0
4343 ; CHECK-NEXT: %13 = extractelement <2 x double> %1, i32 1
4344 ; CHECK-NEXT: %14 = fptosi double %13 to i16
4345 ; CHECK-NEXT: %15 = insertelement <8 x i16> %12, i16 %14, i32 1
4346 ; CHECK-NEXT: %16 = extractelement <2 x double> %2, i32 0
4347 ; CHECK-NEXT: %17 = fptosi double %16 to i16
4348 ; CHECK-NEXT: %18 = insertelement <8 x i16> %15, i16 %17, i32 2
4349 ; CHECK-NEXT: %19 = extractelement <2 x double> %2, i32 1
4350 ; CHECK-NEXT: %20 = fptosi double %19 to i16
4351 ; CHECK-NEXT: %21 = insertelement <8 x i16> %18, i16 %20, i32 3
4352 ; CHECK-NEXT: %22 = extractelement <2 x double> %3, i32 0
4353 ; CHECK-NEXT: %23 = fptosi double %22 to i16
4354 ; CHECK-NEXT: %24 = insertelement <8 x i16> %21, i16 %23, i32 4
4355 ; CHECK-NEXT: %25 = extractelement <2 x double> %3, i32 1
4356 ; CHECK-NEXT: %26 = fptosi double %25 to i16
4357 ; CHECK-NEXT: %27 = insertelement <8 x i16> %24, i16 %26, i32 5
4358 ; CHECK-NEXT: %28 = extractelement <2 x double> %4, i32 0
4359 ; CHECK-NEXT: %29 = fptosi double %28 to i16
4360 ; CHECK-NEXT: %30 = insertelement <8 x i16> %27, i16 %29, i32 6
4361 ; CHECK-NEXT: %31 = extractelement <2 x double> %4, i32 1
4362 ; CHECK-NEXT: %32 = fptosi double %31 to i16
4363 ; CHECK-NEXT: %33 = insertelement <8 x i16> %30, i16 %32, i32 7
4364 ; CHECK-NEXT: %34 = extractelement <2 x double> %5, i32 0
4365 ; CHECK-NEXT: %35 = fptosi double %34 to i16
4366 ; CHECK-NEXT: %36 = insertelement <8 x i16> undef, i16 %35, i32 0
4367 ; CHECK-NEXT: %37 = extractelement <2 x double> %5, i32 1
4368 ; CHECK-NEXT: %38 = fptosi double %37 to i16
4369 ; CHECK-NEXT: %39 = insertelement <8 x i16> %36, i16 %38, i32 1
4370 ; CHECK-NEXT: %40 = extractelement <2 x double> %6, i32 0
4371 ; CHECK-NEXT: %41 = fptosi double %40 to i16
4372 ; CHECK-NEXT: %42 = insertelement <8 x i16> %39, i16 %41, i32 2
4373 ; CHECK-NEXT: %43 = extractelement <2 x double> %6, i32 1
4374 ; CHECK-NEXT: %44 = fptosi double %43 to i16
4375 ; CHECK-NEXT: %45 = insertelement <8 x i16> %42, i16 %44, i32 3
4376 ; CHECK-NEXT: %46 = extractelement <2 x double> %7, i32 0
4377 ; CHECK-NEXT: %47 = fptosi double %46 to i16
4378 ; CHECK-NEXT: %48 = insertelement <8 x i16> %45, i16 %47, i32 4
4379 ; CHECK-NEXT: %49 = extractelement <2 x double> %7, i32 1
4380 ; CHECK-NEXT: %50 = fptosi double %49 to i16
4381 ; CHECK-NEXT: %51 = insertelement <8 x i16> %48, i16 %50, i32 5
4382 ; CHECK-NEXT: %52 = extractelement <2 x double> %8, i32 0
4383 ; CHECK-NEXT: %53 = fptosi double %52 to i16
4384 ; CHECK-NEXT: %54 = insertelement <8 x i16> %51, i16 %53, i32 6
4385 ; CHECK-NEXT: %55 = extractelement <2 x double> %8, i32 1
4386 ; CHECK-NEXT: %56 = fptosi double %55 to i16
4387 ; CHECK-NEXT: %57 = insertelement <8 x i16> %54, i16 %56, i32 7
4388 ; CHECK-NEXT: store <8 x i16> %57, <8 x i16>* %0, align 16
4389 ; CHECK-NEXT: ret <8 x i16> %33
4390
4391 define <16 x i32> @fptosi_cast_16xdouble_to_16xi32(<16 x double>) {
4392 %2 = fptosi <16 x double> %0 to <16 x i32>
4393 ret <16 x i32> %2
4394 }
4395 ; CHECK-LABEL: define <4 x i32> @fptosi_cast_16xdouble_to_16xi32(<4 x i32>* noca pture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable( 16), <4 x i32>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double >, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x do uble>)
4396 ; CHECK-NEXT: %12 = extractelement <2 x double> %3, i32 0
4397 ; CHECK-NEXT: %13 = fptosi double %12 to i32
4398 ; CHECK-NEXT: %14 = insertelement <4 x i32> undef, i32 %13, i32 0
4399 ; CHECK-NEXT: %15 = extractelement <2 x double> %3, i32 1
4400 ; CHECK-NEXT: %16 = fptosi double %15 to i32
4401 ; CHECK-NEXT: %17 = insertelement <4 x i32> %14, i32 %16, i32 1
4402 ; CHECK-NEXT: %18 = extractelement <2 x double> %4, i32 0
4403 ; CHECK-NEXT: %19 = fptosi double %18 to i32
4404 ; CHECK-NEXT: %20 = insertelement <4 x i32> %17, i32 %19, i32 2
4405 ; CHECK-NEXT: %21 = extractelement <2 x double> %4, i32 1
4406 ; CHECK-NEXT: %22 = fptosi double %21 to i32
4407 ; CHECK-NEXT: %23 = insertelement <4 x i32> %20, i32 %22, i32 3
4408 ; CHECK-NEXT: %24 = extractelement <2 x double> %5, i32 0
4409 ; CHECK-NEXT: %25 = fptosi double %24 to i32
4410 ; CHECK-NEXT: %26 = insertelement <4 x i32> undef, i32 %25, i32 0
4411 ; CHECK-NEXT: %27 = extractelement <2 x double> %5, i32 1
4412 ; CHECK-NEXT: %28 = fptosi double %27 to i32
4413 ; CHECK-NEXT: %29 = insertelement <4 x i32> %26, i32 %28, i32 1
4414 ; CHECK-NEXT: %30 = extractelement <2 x double> %6, i32 0
4415 ; CHECK-NEXT: %31 = fptosi double %30 to i32
4416 ; CHECK-NEXT: %32 = insertelement <4 x i32> %29, i32 %31, i32 2
4417 ; CHECK-NEXT: %33 = extractelement <2 x double> %6, i32 1
4418 ; CHECK-NEXT: %34 = fptosi double %33 to i32
4419 ; CHECK-NEXT: %35 = insertelement <4 x i32> %32, i32 %34, i32 3
4420 ; CHECK-NEXT: %36 = extractelement <2 x double> %7, i32 0
4421 ; CHECK-NEXT: %37 = fptosi double %36 to i32
4422 ; CHECK-NEXT: %38 = insertelement <4 x i32> undef, i32 %37, i32 0
4423 ; CHECK-NEXT: %39 = extractelement <2 x double> %7, i32 1
4424 ; CHECK-NEXT: %40 = fptosi double %39 to i32
4425 ; CHECK-NEXT: %41 = insertelement <4 x i32> %38, i32 %40, i32 1
4426 ; CHECK-NEXT: %42 = extractelement <2 x double> %8, i32 0
4427 ; CHECK-NEXT: %43 = fptosi double %42 to i32
4428 ; CHECK-NEXT: %44 = insertelement <4 x i32> %41, i32 %43, i32 2
4429 ; CHECK-NEXT: %45 = extractelement <2 x double> %8, i32 1
4430 ; CHECK-NEXT: %46 = fptosi double %45 to i32
4431 ; CHECK-NEXT: %47 = insertelement <4 x i32> %44, i32 %46, i32 3
4432 ; CHECK-NEXT: %48 = extractelement <2 x double> %9, i32 0
4433 ; CHECK-NEXT: %49 = fptosi double %48 to i32
4434 ; CHECK-NEXT: %50 = insertelement <4 x i32> undef, i32 %49, i32 0
4435 ; CHECK-NEXT: %51 = extractelement <2 x double> %9, i32 1
4436 ; CHECK-NEXT: %52 = fptosi double %51 to i32
4437 ; CHECK-NEXT: %53 = insertelement <4 x i32> %50, i32 %52, i32 1
4438 ; CHECK-NEXT: %54 = extractelement <2 x double> %10, i32 0
4439 ; CHECK-NEXT: %55 = fptosi double %54 to i32
4440 ; CHECK-NEXT: %56 = insertelement <4 x i32> %53, i32 %55, i32 2
4441 ; CHECK-NEXT: %57 = extractelement <2 x double> %10, i32 1
4442 ; CHECK-NEXT: %58 = fptosi double %57 to i32
4443 ; CHECK-NEXT: %59 = insertelement <4 x i32> %56, i32 %58, i32 3
4444 ; CHECK-NEXT: store <4 x i32> %35, <4 x i32>* %0, align 16
4445 ; CHECK-NEXT: store <4 x i32> %47, <4 x i32>* %1, align 16
4446 ; CHECK-NEXT: store <4 x i32> %59, <4 x i32>* %2, align 16
4447 ; CHECK-NEXT: ret <4 x i32> %23
4448
4449 define <16 x i64> @fptosi_cast_16xdouble_to_16xi64(<16 x double>) {
4450 %2 = fptosi <16 x double> %0 to <16 x i64>
4451 ret <16 x i64> %2
4452 }
4453 ; CHECK-LABEL: define <2 x i64> @fptosi_cast_16xdouble_to_16xi64(<2 x i64>* noca pture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable( 16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonn ull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull derefe renceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x doub le>, <2 x double>, <2 x double>, <2 x double>)
4454 ; CHECK-NEXT: %16 = fptosi <2 x double> %7 to <2 x i64>
4455 ; CHECK-NEXT: %17 = fptosi <2 x double> %8 to <2 x i64>
4456 ; CHECK-NEXT: %18 = fptosi <2 x double> %9 to <2 x i64>
4457 ; CHECK-NEXT: %19 = fptosi <2 x double> %10 to <2 x i64>
4458 ; CHECK-NEXT: %20 = fptosi <2 x double> %11 to <2 x i64>
4459 ; CHECK-NEXT: %21 = fptosi <2 x double> %12 to <2 x i64>
4460 ; CHECK-NEXT: %22 = fptosi <2 x double> %13 to <2 x i64>
4461 ; CHECK-NEXT: %23 = fptosi <2 x double> %14 to <2 x i64>
4462 ; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %0, align 16
4463 ; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %1, align 16
4464 ; CHECK-NEXT: store <2 x i64> %19, <2 x i64>* %2, align 16
4465 ; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %3, align 16
4466 ; CHECK-NEXT: store <2 x i64> %21, <2 x i64>* %4, align 16
4467 ; CHECK-NEXT: store <2 x i64> %22, <2 x i64>* %5, align 16
4468 ; CHECK-NEXT: store <2 x i64> %23, <2 x i64>* %6, align 16
4469 ; CHECK-NEXT: ret <2 x i64> %16
4470
4471 define <16 x float> @uitofp_cast_16xi8_to_16xfloat(<16 x i8>) {
4472 %2 = uitofp <16 x i8> %0 to <16 x float>
4473 ret <16 x float> %2
4474 }
4475 ; CHECK-LABEL: define <4 x float> @uitofp_cast_16xi8_to_16xfloat(<4 x float>* no capture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferencea ble(16), <4 x float>* nocapture nonnull dereferenceable(16), <16 x i8>)
4476 ; CHECK-NEXT: %5 = extractelement <16 x i8> %3, i32 0
4477 ; CHECK-NEXT: %6 = uitofp i8 %5 to float
4478 ; CHECK-NEXT: %7 = insertelement <4 x float> undef, float %6, i32 0
4479 ; CHECK-NEXT: %8 = extractelement <16 x i8> %3, i32 1
4480 ; CHECK-NEXT: %9 = uitofp i8 %8 to float
4481 ; CHECK-NEXT: %10 = insertelement <4 x float> %7, float %9, i32 1
4482 ; CHECK-NEXT: %11 = extractelement <16 x i8> %3, i32 2
4483 ; CHECK-NEXT: %12 = uitofp i8 %11 to float
4484 ; CHECK-NEXT: %13 = insertelement <4 x float> %10, float %12, i32 2
4485 ; CHECK-NEXT: %14 = extractelement <16 x i8> %3, i32 3
4486 ; CHECK-NEXT: %15 = uitofp i8 %14 to float
4487 ; CHECK-NEXT: %16 = insertelement <4 x float> %13, float %15, i32 3
4488 ; CHECK-NEXT: %17 = extractelement <16 x i8> %3, i32 4
4489 ; CHECK-NEXT: %18 = uitofp i8 %17 to float
4490 ; CHECK-NEXT: %19 = insertelement <4 x float> undef, float %18, i32 0
4491 ; CHECK-NEXT: %20 = extractelement <16 x i8> %3, i32 5
4492 ; CHECK-NEXT: %21 = uitofp i8 %20 to float
4493 ; CHECK-NEXT: %22 = insertelement <4 x float> %19, float %21, i32 1
4494 ; CHECK-NEXT: %23 = extractelement <16 x i8> %3, i32 6
4495 ; CHECK-NEXT: %24 = uitofp i8 %23 to float
4496 ; CHECK-NEXT: %25 = insertelement <4 x float> %22, float %24, i32 2
4497 ; CHECK-NEXT: %26 = extractelement <16 x i8> %3, i32 7
4498 ; CHECK-NEXT: %27 = uitofp i8 %26 to float
4499 ; CHECK-NEXT: %28 = insertelement <4 x float> %25, float %27, i32 3
4500 ; CHECK-NEXT: %29 = extractelement <16 x i8> %3, i32 8
4501 ; CHECK-NEXT: %30 = uitofp i8 %29 to float
4502 ; CHECK-NEXT: %31 = insertelement <4 x float> undef, float %30, i32 0
4503 ; CHECK-NEXT: %32 = extractelement <16 x i8> %3, i32 9
4504 ; CHECK-NEXT: %33 = uitofp i8 %32 to float
4505 ; CHECK-NEXT: %34 = insertelement <4 x float> %31, float %33, i32 1
4506 ; CHECK-NEXT: %35 = extractelement <16 x i8> %3, i32 10
4507 ; CHECK-NEXT: %36 = uitofp i8 %35 to float
4508 ; CHECK-NEXT: %37 = insertelement <4 x float> %34, float %36, i32 2
4509 ; CHECK-NEXT: %38 = extractelement <16 x i8> %3, i32 11
4510 ; CHECK-NEXT: %39 = uitofp i8 %38 to float
4511 ; CHECK-NEXT: %40 = insertelement <4 x float> %37, float %39, i32 3
4512 ; CHECK-NEXT: %41 = extractelement <16 x i8> %3, i32 12
4513 ; CHECK-NEXT: %42 = uitofp i8 %41 to float
4514 ; CHECK-NEXT: %43 = insertelement <4 x float> undef, float %42, i32 0
4515 ; CHECK-NEXT: %44 = extractelement <16 x i8> %3, i32 13
4516 ; CHECK-NEXT: %45 = uitofp i8 %44 to float
4517 ; CHECK-NEXT: %46 = insertelement <4 x float> %43, float %45, i32 1
4518 ; CHECK-NEXT: %47 = extractelement <16 x i8> %3, i32 14
4519 ; CHECK-NEXT: %48 = uitofp i8 %47 to float
4520 ; CHECK-NEXT: %49 = insertelement <4 x float> %46, float %48, i32 2
4521 ; CHECK-NEXT: %50 = extractelement <16 x i8> %3, i32 15
4522 ; CHECK-NEXT: %51 = uitofp i8 %50 to float
4523 ; CHECK-NEXT: %52 = insertelement <4 x float> %49, float %51, i32 3
4524 ; CHECK-NEXT: store <4 x float> %28, <4 x float>* %0, align 16
4525 ; CHECK-NEXT: store <4 x float> %40, <4 x float>* %1, align 16
4526 ; CHECK-NEXT: store <4 x float> %52, <4 x float>* %2, align 16
4527 ; CHECK-NEXT: ret <4 x float> %16
4528
4529 define <16 x float> @uitofp_cast_16xi16_to_16xfloat(<16 x i16>) {
4530 %2 = uitofp <16 x i16> %0 to <16 x float>
4531 ret <16 x float> %2
4532 }
4533 ; CHECK-LABEL: define <4 x float> @uitofp_cast_16xi16_to_16xfloat(<4 x float>* n ocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereference able(16), <4 x float>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i1 6>)
4534 ; CHECK-NEXT: %6 = extractelement <8 x i16> %3, i32 0
4535 ; CHECK-NEXT: %7 = uitofp i16 %6 to float
4536 ; CHECK-NEXT: %8 = insertelement <4 x float> undef, float %7, i32 0
4537 ; CHECK-NEXT: %9 = extractelement <8 x i16> %3, i32 1
4538 ; CHECK-NEXT: %10 = uitofp i16 %9 to float
4539 ; CHECK-NEXT: %11 = insertelement <4 x float> %8, float %10, i32 1
4540 ; CHECK-NEXT: %12 = extractelement <8 x i16> %3, i32 2
4541 ; CHECK-NEXT: %13 = uitofp i16 %12 to float
4542 ; CHECK-NEXT: %14 = insertelement <4 x float> %11, float %13, i32 2
4543 ; CHECK-NEXT: %15 = extractelement <8 x i16> %3, i32 3
4544 ; CHECK-NEXT: %16 = uitofp i16 %15 to float
4545 ; CHECK-NEXT: %17 = insertelement <4 x float> %14, float %16, i32 3
4546 ; CHECK-NEXT: %18 = extractelement <8 x i16> %3, i32 4
4547 ; CHECK-NEXT: %19 = uitofp i16 %18 to float
4548 ; CHECK-NEXT: %20 = insertelement <4 x float> undef, float %19, i32 0
4549 ; CHECK-NEXT: %21 = extractelement <8 x i16> %3, i32 5
4550 ; CHECK-NEXT: %22 = uitofp i16 %21 to float
4551 ; CHECK-NEXT: %23 = insertelement <4 x float> %20, float %22, i32 1
4552 ; CHECK-NEXT: %24 = extractelement <8 x i16> %3, i32 6
4553 ; CHECK-NEXT: %25 = uitofp i16 %24 to float
4554 ; CHECK-NEXT: %26 = insertelement <4 x float> %23, float %25, i32 2
4555 ; CHECK-NEXT: %27 = extractelement <8 x i16> %3, i32 7
4556 ; CHECK-NEXT: %28 = uitofp i16 %27 to float
4557 ; CHECK-NEXT: %29 = insertelement <4 x float> %26, float %28, i32 3
4558 ; CHECK-NEXT: %30 = extractelement <8 x i16> %4, i32 0
4559 ; CHECK-NEXT: %31 = uitofp i16 %30 to float
4560 ; CHECK-NEXT: %32 = insertelement <4 x float> undef, float %31, i32 0
4561 ; CHECK-NEXT: %33 = extractelement <8 x i16> %4, i32 1
4562 ; CHECK-NEXT: %34 = uitofp i16 %33 to float
4563 ; CHECK-NEXT: %35 = insertelement <4 x float> %32, float %34, i32 1
4564 ; CHECK-NEXT: %36 = extractelement <8 x i16> %4, i32 2
4565 ; CHECK-NEXT: %37 = uitofp i16 %36 to float
4566 ; CHECK-NEXT: %38 = insertelement <4 x float> %35, float %37, i32 2
4567 ; CHECK-NEXT: %39 = extractelement <8 x i16> %4, i32 3
4568 ; CHECK-NEXT: %40 = uitofp i16 %39 to float
4569 ; CHECK-NEXT: %41 = insertelement <4 x float> %38, float %40, i32 3
4570 ; CHECK-NEXT: %42 = extractelement <8 x i16> %4, i32 4
4571 ; CHECK-NEXT: %43 = uitofp i16 %42 to float
4572 ; CHECK-NEXT: %44 = insertelement <4 x float> undef, float %43, i32 0
4573 ; CHECK-NEXT: %45 = extractelement <8 x i16> %4, i32 5
4574 ; CHECK-NEXT: %46 = uitofp i16 %45 to float
4575 ; CHECK-NEXT: %47 = insertelement <4 x float> %44, float %46, i32 1
4576 ; CHECK-NEXT: %48 = extractelement <8 x i16> %4, i32 6
4577 ; CHECK-NEXT: %49 = uitofp i16 %48 to float
4578 ; CHECK-NEXT: %50 = insertelement <4 x float> %47, float %49, i32 2
4579 ; CHECK-NEXT: %51 = extractelement <8 x i16> %4, i32 7
4580 ; CHECK-NEXT: %52 = uitofp i16 %51 to float
4581 ; CHECK-NEXT: %53 = insertelement <4 x float> %50, float %52, i32 3
4582 ; CHECK-NEXT: store <4 x float> %29, <4 x float>* %0, align 16
4583 ; CHECK-NEXT: store <4 x float> %41, <4 x float>* %1, align 16
4584 ; CHECK-NEXT: store <4 x float> %53, <4 x float>* %2, align 16
4585 ; CHECK-NEXT: ret <4 x float> %17
4586
4587 define <16 x float> @uitofp_cast_16xi32_to_16xfloat(<16 x i32>) {
4588 %2 = uitofp <16 x i32> %0 to <16 x float>
4589 ret <16 x float> %2
4590 }
4591 ; CHECK-LABEL: define <4 x float> @uitofp_cast_16xi32_to_16xfloat(<4 x float>* n ocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereference able(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i3 2>, <4 x i32>, <4 x i32>)
4592 ; CHECK-NEXT: %8 = uitofp <4 x i32> %3 to <4 x float>
4593 ; CHECK-NEXT: %9 = uitofp <4 x i32> %4 to <4 x float>
4594 ; CHECK-NEXT: %10 = uitofp <4 x i32> %5 to <4 x float>
4595 ; CHECK-NEXT: %11 = uitofp <4 x i32> %6 to <4 x float>
4596 ; CHECK-NEXT: store <4 x float> %9, <4 x float>* %0, align 16
4597 ; CHECK-NEXT: store <4 x float> %10, <4 x float>* %1, align 16
4598 ; CHECK-NEXT: store <4 x float> %11, <4 x float>* %2, align 16
4599 ; CHECK-NEXT: ret <4 x float> %8
4600
4601 define <16 x float> @uitofp_cast_16xi64_to_16xfloat(<16 x i64>) {
4602 %2 = uitofp <16 x i64> %0 to <16 x float>
4603 ret <16 x float> %2
4604 }
4605 ; CHECK-LABEL: define <4 x float> @uitofp_cast_16xi64_to_16xfloat(<4 x float>* n ocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereference able(16), <4 x float>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i6 4>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
4606 ; CHECK-NEXT: %12 = extractelement <2 x i64> %3, i32 0
4607 ; CHECK-NEXT: %13 = uitofp i64 %12 to float
4608 ; CHECK-NEXT: %14 = insertelement <4 x float> undef, float %13, i32 0
4609 ; CHECK-NEXT: %15 = extractelement <2 x i64> %3, i32 1
4610 ; CHECK-NEXT: %16 = uitofp i64 %15 to float
4611 ; CHECK-NEXT: %17 = insertelement <4 x float> %14, float %16, i32 1
4612 ; CHECK-NEXT: %18 = extractelement <2 x i64> %4, i32 0
4613 ; CHECK-NEXT: %19 = uitofp i64 %18 to float
4614 ; CHECK-NEXT: %20 = insertelement <4 x float> %17, float %19, i32 2
4615 ; CHECK-NEXT: %21 = extractelement <2 x i64> %4, i32 1
4616 ; CHECK-NEXT: %22 = uitofp i64 %21 to float
4617 ; CHECK-NEXT: %23 = insertelement <4 x float> %20, float %22, i32 3
4618 ; CHECK-NEXT: %24 = extractelement <2 x i64> %5, i32 0
4619 ; CHECK-NEXT: %25 = uitofp i64 %24 to float
4620 ; CHECK-NEXT: %26 = insertelement <4 x float> undef, float %25, i32 0
4621 ; CHECK-NEXT: %27 = extractelement <2 x i64> %5, i32 1
4622 ; CHECK-NEXT: %28 = uitofp i64 %27 to float
4623 ; CHECK-NEXT: %29 = insertelement <4 x float> %26, float %28, i32 1
4624 ; CHECK-NEXT: %30 = extractelement <2 x i64> %6, i32 0
4625 ; CHECK-NEXT: %31 = uitofp i64 %30 to float
4626 ; CHECK-NEXT: %32 = insertelement <4 x float> %29, float %31, i32 2
4627 ; CHECK-NEXT: %33 = extractelement <2 x i64> %6, i32 1
4628 ; CHECK-NEXT: %34 = uitofp i64 %33 to float
4629 ; CHECK-NEXT: %35 = insertelement <4 x float> %32, float %34, i32 3
4630 ; CHECK-NEXT: %36 = extractelement <2 x i64> %7, i32 0
4631 ; CHECK-NEXT: %37 = uitofp i64 %36 to float
4632 ; CHECK-NEXT: %38 = insertelement <4 x float> undef, float %37, i32 0
4633 ; CHECK-NEXT: %39 = extractelement <2 x i64> %7, i32 1
4634 ; CHECK-NEXT: %40 = uitofp i64 %39 to float
4635 ; CHECK-NEXT: %41 = insertelement <4 x float> %38, float %40, i32 1
4636 ; CHECK-NEXT: %42 = extractelement <2 x i64> %8, i32 0
4637 ; CHECK-NEXT: %43 = uitofp i64 %42 to float
4638 ; CHECK-NEXT: %44 = insertelement <4 x float> %41, float %43, i32 2
4639 ; CHECK-NEXT: %45 = extractelement <2 x i64> %8, i32 1
4640 ; CHECK-NEXT: %46 = uitofp i64 %45 to float
4641 ; CHECK-NEXT: %47 = insertelement <4 x float> %44, float %46, i32 3
4642 ; CHECK-NEXT: %48 = extractelement <2 x i64> %9, i32 0
4643 ; CHECK-NEXT: %49 = uitofp i64 %48 to float
4644 ; CHECK-NEXT: %50 = insertelement <4 x float> undef, float %49, i32 0
4645 ; CHECK-NEXT: %51 = extractelement <2 x i64> %9, i32 1
4646 ; CHECK-NEXT: %52 = uitofp i64 %51 to float
4647 ; CHECK-NEXT: %53 = insertelement <4 x float> %50, float %52, i32 1
4648 ; CHECK-NEXT: %54 = extractelement <2 x i64> %10, i32 0
4649 ; CHECK-NEXT: %55 = uitofp i64 %54 to float
4650 ; CHECK-NEXT: %56 = insertelement <4 x float> %53, float %55, i32 2
4651 ; CHECK-NEXT: %57 = extractelement <2 x i64> %10, i32 1
4652 ; CHECK-NEXT: %58 = uitofp i64 %57 to float
4653 ; CHECK-NEXT: %59 = insertelement <4 x float> %56, float %58, i32 3
4654 ; CHECK-NEXT: store <4 x float> %35, <4 x float>* %0, align 16
4655 ; CHECK-NEXT: store <4 x float> %47, <4 x float>* %1, align 16
4656 ; CHECK-NEXT: store <4 x float> %59, <4 x float>* %2, align 16
4657 ; CHECK-NEXT: ret <4 x float> %23
4658
4659 define <16 x double> @uitofp_cast_16xi8_to_16xdouble(<16 x i8>) {
4660 %2 = uitofp <16 x i8> %0 to <16 x double>
4661 ret <16 x double> %2
4662 }
4663 ; CHECK-LABEL: define <2 x double> @uitofp_cast_16xi8_to_16xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* n ocapture nonnull dereferenceable(16), <16 x i8>)
4664 ; CHECK-NEXT: %9 = extractelement <16 x i8> %7, i32 0
4665 ; CHECK-NEXT: %10 = uitofp i8 %9 to double
4666 ; CHECK-NEXT: %11 = insertelement <2 x double> undef, double %10, i32 0
4667 ; CHECK-NEXT: %12 = extractelement <16 x i8> %7, i32 1
4668 ; CHECK-NEXT: %13 = uitofp i8 %12 to double
4669 ; CHECK-NEXT: %14 = insertelement <2 x double> %11, double %13, i32 1
4670 ; CHECK-NEXT: %15 = extractelement <16 x i8> %7, i32 2
4671 ; CHECK-NEXT: %16 = uitofp i8 %15 to double
4672 ; CHECK-NEXT: %17 = insertelement <2 x double> undef, double %16, i32 0
4673 ; CHECK-NEXT: %18 = extractelement <16 x i8> %7, i32 3
4674 ; CHECK-NEXT: %19 = uitofp i8 %18 to double
4675 ; CHECK-NEXT: %20 = insertelement <2 x double> %17, double %19, i32 1
4676 ; CHECK-NEXT: %21 = extractelement <16 x i8> %7, i32 4
4677 ; CHECK-NEXT: %22 = uitofp i8 %21 to double
4678 ; CHECK-NEXT: %23 = insertelement <2 x double> undef, double %22, i32 0
4679 ; CHECK-NEXT: %24 = extractelement <16 x i8> %7, i32 5
4680 ; CHECK-NEXT: %25 = uitofp i8 %24 to double
4681 ; CHECK-NEXT: %26 = insertelement <2 x double> %23, double %25, i32 1
4682 ; CHECK-NEXT: %27 = extractelement <16 x i8> %7, i32 6
4683 ; CHECK-NEXT: %28 = uitofp i8 %27 to double
4684 ; CHECK-NEXT: %29 = insertelement <2 x double> undef, double %28, i32 0
4685 ; CHECK-NEXT: %30 = extractelement <16 x i8> %7, i32 7
4686 ; CHECK-NEXT: %31 = uitofp i8 %30 to double
4687 ; CHECK-NEXT: %32 = insertelement <2 x double> %29, double %31, i32 1
4688 ; CHECK-NEXT: %33 = extractelement <16 x i8> %7, i32 8
4689 ; CHECK-NEXT: %34 = uitofp i8 %33 to double
4690 ; CHECK-NEXT: %35 = insertelement <2 x double> undef, double %34, i32 0
4691 ; CHECK-NEXT: %36 = extractelement <16 x i8> %7, i32 9
4692 ; CHECK-NEXT: %37 = uitofp i8 %36 to double
4693 ; CHECK-NEXT: %38 = insertelement <2 x double> %35, double %37, i32 1
4694 ; CHECK-NEXT: %39 = extractelement <16 x i8> %7, i32 10
4695 ; CHECK-NEXT: %40 = uitofp i8 %39 to double
4696 ; CHECK-NEXT: %41 = insertelement <2 x double> undef, double %40, i32 0
4697 ; CHECK-NEXT: %42 = extractelement <16 x i8> %7, i32 11
4698 ; CHECK-NEXT: %43 = uitofp i8 %42 to double
4699 ; CHECK-NEXT: %44 = insertelement <2 x double> %41, double %43, i32 1
4700 ; CHECK-NEXT: %45 = extractelement <16 x i8> %7, i32 12
4701 ; CHECK-NEXT: %46 = uitofp i8 %45 to double
4702 ; CHECK-NEXT: %47 = insertelement <2 x double> undef, double %46, i32 0
4703 ; CHECK-NEXT: %48 = extractelement <16 x i8> %7, i32 13
4704 ; CHECK-NEXT: %49 = uitofp i8 %48 to double
4705 ; CHECK-NEXT: %50 = insertelement <2 x double> %47, double %49, i32 1
4706 ; CHECK-NEXT: %51 = extractelement <16 x i8> %7, i32 14
4707 ; CHECK-NEXT: %52 = uitofp i8 %51 to double
4708 ; CHECK-NEXT: %53 = insertelement <2 x double> undef, double %52, i32 0
4709 ; CHECK-NEXT: %54 = extractelement <16 x i8> %7, i32 15
4710 ; CHECK-NEXT: %55 = uitofp i8 %54 to double
4711 ; CHECK-NEXT: %56 = insertelement <2 x double> %53, double %55, i32 1
4712 ; CHECK-NEXT: store <2 x double> %20, <2 x double>* %0, align 16
4713 ; CHECK-NEXT: store <2 x double> %26, <2 x double>* %1, align 16
4714 ; CHECK-NEXT: store <2 x double> %32, <2 x double>* %2, align 16
4715 ; CHECK-NEXT: store <2 x double> %38, <2 x double>* %3, align 16
4716 ; CHECK-NEXT: store <2 x double> %44, <2 x double>* %4, align 16
4717 ; CHECK-NEXT: store <2 x double> %50, <2 x double>* %5, align 16
4718 ; CHECK-NEXT: store <2 x double> %56, <2 x double>* %6, align 16
4719 ; CHECK-NEXT: ret <2 x double> %14
4720
4721 define <16 x double> @uitofp_cast_16xi16_to_16xdouble(<16 x i16>) {
4722 %2 = uitofp <16 x i16> %0 to <16 x double>
4723 ret <16 x double> %2
4724 }
4725 ; CHECK-LABEL: define <2 x double> @uitofp_cast_16xi16_to_16xdouble(<2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>)
4726 ; CHECK-NEXT: %10 = extractelement <8 x i16> %7, i32 0
4727 ; CHECK-NEXT: %11 = uitofp i16 %10 to double
4728 ; CHECK-NEXT: %12 = insertelement <2 x double> undef, double %11, i32 0
4729 ; CHECK-NEXT: %13 = extractelement <8 x i16> %7, i32 1
4730 ; CHECK-NEXT: %14 = uitofp i16 %13 to double
4731 ; CHECK-NEXT: %15 = insertelement <2 x double> %12, double %14, i32 1
4732 ; CHECK-NEXT: %16 = extractelement <8 x i16> %7, i32 2
4733 ; CHECK-NEXT: %17 = uitofp i16 %16 to double
4734 ; CHECK-NEXT: %18 = insertelement <2 x double> undef, double %17, i32 0
4735 ; CHECK-NEXT: %19 = extractelement <8 x i16> %7, i32 3
4736 ; CHECK-NEXT: %20 = uitofp i16 %19 to double
4737 ; CHECK-NEXT: %21 = insertelement <2 x double> %18, double %20, i32 1
4738 ; CHECK-NEXT: %22 = extractelement <8 x i16> %7, i32 4
4739 ; CHECK-NEXT: %23 = uitofp i16 %22 to double
4740 ; CHECK-NEXT: %24 = insertelement <2 x double> undef, double %23, i32 0
4741 ; CHECK-NEXT: %25 = extractelement <8 x i16> %7, i32 5
4742 ; CHECK-NEXT: %26 = uitofp i16 %25 to double
4743 ; CHECK-NEXT: %27 = insertelement <2 x double> %24, double %26, i32 1
4744 ; CHECK-NEXT: %28 = extractelement <8 x i16> %7, i32 6
4745 ; CHECK-NEXT: %29 = uitofp i16 %28 to double
4746 ; CHECK-NEXT: %30 = insertelement <2 x double> undef, double %29, i32 0
4747 ; CHECK-NEXT: %31 = extractelement <8 x i16> %7, i32 7
4748 ; CHECK-NEXT: %32 = uitofp i16 %31 to double
4749 ; CHECK-NEXT: %33 = insertelement <2 x double> %30, double %32, i32 1
4750 ; CHECK-NEXT: %34 = extractelement <8 x i16> %8, i32 0
4751 ; CHECK-NEXT: %35 = uitofp i16 %34 to double
4752 ; CHECK-NEXT: %36 = insertelement <2 x double> undef, double %35, i32 0
4753 ; CHECK-NEXT: %37 = extractelement <8 x i16> %8, i32 1
4754 ; CHECK-NEXT: %38 = uitofp i16 %37 to double
4755 ; CHECK-NEXT: %39 = insertelement <2 x double> %36, double %38, i32 1
4756 ; CHECK-NEXT: %40 = extractelement <8 x i16> %8, i32 2
4757 ; CHECK-NEXT: %41 = uitofp i16 %40 to double
4758 ; CHECK-NEXT: %42 = insertelement <2 x double> undef, double %41, i32 0
4759 ; CHECK-NEXT: %43 = extractelement <8 x i16> %8, i32 3
4760 ; CHECK-NEXT: %44 = uitofp i16 %43 to double
4761 ; CHECK-NEXT: %45 = insertelement <2 x double> %42, double %44, i32 1
4762 ; CHECK-NEXT: %46 = extractelement <8 x i16> %8, i32 4
4763 ; CHECK-NEXT: %47 = uitofp i16 %46 to double
4764 ; CHECK-NEXT: %48 = insertelement <2 x double> undef, double %47, i32 0
4765 ; CHECK-NEXT: %49 = extractelement <8 x i16> %8, i32 5
4766 ; CHECK-NEXT: %50 = uitofp i16 %49 to double
4767 ; CHECK-NEXT: %51 = insertelement <2 x double> %48, double %50, i32 1
4768 ; CHECK-NEXT: %52 = extractelement <8 x i16> %8, i32 6
4769 ; CHECK-NEXT: %53 = uitofp i16 %52 to double
4770 ; CHECK-NEXT: %54 = insertelement <2 x double> undef, double %53, i32 0
4771 ; CHECK-NEXT: %55 = extractelement <8 x i16> %8, i32 7
4772 ; CHECK-NEXT: %56 = uitofp i16 %55 to double
4773 ; CHECK-NEXT: %57 = insertelement <2 x double> %54, double %56, i32 1
4774 ; CHECK-NEXT: store <2 x double> %21, <2 x double>* %0, align 16
4775 ; CHECK-NEXT: store <2 x double> %27, <2 x double>* %1, align 16
4776 ; CHECK-NEXT: store <2 x double> %33, <2 x double>* %2, align 16
4777 ; CHECK-NEXT: store <2 x double> %39, <2 x double>* %3, align 16
4778 ; CHECK-NEXT: store <2 x double> %45, <2 x double>* %4, align 16
4779 ; CHECK-NEXT: store <2 x double> %51, <2 x double>* %5, align 16
4780 ; CHECK-NEXT: store <2 x double> %57, <2 x double>* %6, align 16
4781 ; CHECK-NEXT: ret <2 x double> %15
4782
4783 define <16 x double> @uitofp_cast_16xi32_to_16xdouble(<16 x i32>) {
4784 %2 = uitofp <16 x i32> %0 to <16 x double>
4785 ret <16 x double> %2
4786 }
4787 ; CHECK-LABEL: define <2 x double> @uitofp_cast_16xi32_to_16xdouble(<2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32 >)
4788 ; CHECK-NEXT: %12 = extractelement <4 x i32> %7, i32 0
4789 ; CHECK-NEXT: %13 = uitofp i32 %12 to double
4790 ; CHECK-NEXT: %14 = insertelement <2 x double> undef, double %13, i32 0
4791 ; CHECK-NEXT: %15 = extractelement <4 x i32> %7, i32 1
4792 ; CHECK-NEXT: %16 = uitofp i32 %15 to double
4793 ; CHECK-NEXT: %17 = insertelement <2 x double> %14, double %16, i32 1
4794 ; CHECK-NEXT: %18 = extractelement <4 x i32> %7, i32 2
4795 ; CHECK-NEXT: %19 = uitofp i32 %18 to double
4796 ; CHECK-NEXT: %20 = insertelement <2 x double> undef, double %19, i32 0
4797 ; CHECK-NEXT: %21 = extractelement <4 x i32> %7, i32 3
4798 ; CHECK-NEXT: %22 = uitofp i32 %21 to double
4799 ; CHECK-NEXT: %23 = insertelement <2 x double> %20, double %22, i32 1
4800 ; CHECK-NEXT: %24 = extractelement <4 x i32> %8, i32 0
4801 ; CHECK-NEXT: %25 = uitofp i32 %24 to double
4802 ; CHECK-NEXT: %26 = insertelement <2 x double> undef, double %25, i32 0
4803 ; CHECK-NEXT: %27 = extractelement <4 x i32> %8, i32 1
4804 ; CHECK-NEXT: %28 = uitofp i32 %27 to double
4805 ; CHECK-NEXT: %29 = insertelement <2 x double> %26, double %28, i32 1
4806 ; CHECK-NEXT: %30 = extractelement <4 x i32> %8, i32 2
4807 ; CHECK-NEXT: %31 = uitofp i32 %30 to double
4808 ; CHECK-NEXT: %32 = insertelement <2 x double> undef, double %31, i32 0
4809 ; CHECK-NEXT: %33 = extractelement <4 x i32> %8, i32 3
4810 ; CHECK-NEXT: %34 = uitofp i32 %33 to double
4811 ; CHECK-NEXT: %35 = insertelement <2 x double> %32, double %34, i32 1
4812 ; CHECK-NEXT: %36 = extractelement <4 x i32> %9, i32 0
4813 ; CHECK-NEXT: %37 = uitofp i32 %36 to double
4814 ; CHECK-NEXT: %38 = insertelement <2 x double> undef, double %37, i32 0
4815 ; CHECK-NEXT: %39 = extractelement <4 x i32> %9, i32 1
4816 ; CHECK-NEXT: %40 = uitofp i32 %39 to double
4817 ; CHECK-NEXT: %41 = insertelement <2 x double> %38, double %40, i32 1
4818 ; CHECK-NEXT: %42 = extractelement <4 x i32> %9, i32 2
4819 ; CHECK-NEXT: %43 = uitofp i32 %42 to double
4820 ; CHECK-NEXT: %44 = insertelement <2 x double> undef, double %43, i32 0
4821 ; CHECK-NEXT: %45 = extractelement <4 x i32> %9, i32 3
4822 ; CHECK-NEXT: %46 = uitofp i32 %45 to double
4823 ; CHECK-NEXT: %47 = insertelement <2 x double> %44, double %46, i32 1
4824 ; CHECK-NEXT: %48 = extractelement <4 x i32> %10, i32 0
4825 ; CHECK-NEXT: %49 = uitofp i32 %48 to double
4826 ; CHECK-NEXT: %50 = insertelement <2 x double> undef, double %49, i32 0
4827 ; CHECK-NEXT: %51 = extractelement <4 x i32> %10, i32 1
4828 ; CHECK-NEXT: %52 = uitofp i32 %51 to double
4829 ; CHECK-NEXT: %53 = insertelement <2 x double> %50, double %52, i32 1
4830 ; CHECK-NEXT: %54 = extractelement <4 x i32> %10, i32 2
4831 ; CHECK-NEXT: %55 = uitofp i32 %54 to double
4832 ; CHECK-NEXT: %56 = insertelement <2 x double> undef, double %55, i32 0
4833 ; CHECK-NEXT: %57 = extractelement <4 x i32> %10, i32 3
4834 ; CHECK-NEXT: %58 = uitofp i32 %57 to double
4835 ; CHECK-NEXT: %59 = insertelement <2 x double> %56, double %58, i32 1
4836 ; CHECK-NEXT: store <2 x double> %23, <2 x double>* %0, align 16
4837 ; CHECK-NEXT: store <2 x double> %29, <2 x double>* %1, align 16
4838 ; CHECK-NEXT: store <2 x double> %35, <2 x double>* %2, align 16
4839 ; CHECK-NEXT: store <2 x double> %41, <2 x double>* %3, align 16
4840 ; CHECK-NEXT: store <2 x double> %47, <2 x double>* %4, align 16
4841 ; CHECK-NEXT: store <2 x double> %53, <2 x double>* %5, align 16
4842 ; CHECK-NEXT: store <2 x double> %59, <2 x double>* %6, align 16
4843 ; CHECK-NEXT: ret <2 x double> %17
4844
4845 define <16 x double> @uitofp_cast_16xi64_to_16xdouble(<16 x i64>) {
4846 %2 = uitofp <16 x i64> %0 to <16 x double>
4847 ret <16 x double> %2
4848 }
4849 ; CHECK-LABEL: define <2 x double> @uitofp_cast_16xi64_to_16xdouble(<2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64 >, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
4850 ; CHECK-NEXT: %16 = uitofp <2 x i64> %7 to <2 x double>
4851 ; CHECK-NEXT: %17 = uitofp <2 x i64> %8 to <2 x double>
4852 ; CHECK-NEXT: %18 = uitofp <2 x i64> %9 to <2 x double>
4853 ; CHECK-NEXT: %19 = uitofp <2 x i64> %10 to <2 x double>
4854 ; CHECK-NEXT: %20 = uitofp <2 x i64> %11 to <2 x double>
4855 ; CHECK-NEXT: %21 = uitofp <2 x i64> %12 to <2 x double>
4856 ; CHECK-NEXT: %22 = uitofp <2 x i64> %13 to <2 x double>
4857 ; CHECK-NEXT: %23 = uitofp <2 x i64> %14 to <2 x double>
4858 ; CHECK-NEXT: store <2 x double> %17, <2 x double>* %0, align 16
4859 ; CHECK-NEXT: store <2 x double> %18, <2 x double>* %1, align 16
4860 ; CHECK-NEXT: store <2 x double> %19, <2 x double>* %2, align 16
4861 ; CHECK-NEXT: store <2 x double> %20, <2 x double>* %3, align 16
4862 ; CHECK-NEXT: store <2 x double> %21, <2 x double>* %4, align 16
4863 ; CHECK-NEXT: store <2 x double> %22, <2 x double>* %5, align 16
4864 ; CHECK-NEXT: store <2 x double> %23, <2 x double>* %6, align 16
4865 ; CHECK-NEXT: ret <2 x double> %16
4866
4867 define <16 x float> @sitofp_cast_16xi8_to_16xfloat(<16 x i8>) {
4868 %2 = sitofp <16 x i8> %0 to <16 x float>
4869 ret <16 x float> %2
4870 }
4871 ; CHECK-LABEL: define <4 x float> @sitofp_cast_16xi8_to_16xfloat(<4 x float>* no capture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferencea ble(16), <4 x float>* nocapture nonnull dereferenceable(16), <16 x i8>)
4872 ; CHECK-NEXT: %5 = extractelement <16 x i8> %3, i32 0
4873 ; CHECK-NEXT: %6 = sitofp i8 %5 to float
4874 ; CHECK-NEXT: %7 = insertelement <4 x float> undef, float %6, i32 0
4875 ; CHECK-NEXT: %8 = extractelement <16 x i8> %3, i32 1
4876 ; CHECK-NEXT: %9 = sitofp i8 %8 to float
4877 ; CHECK-NEXT: %10 = insertelement <4 x float> %7, float %9, i32 1
4878 ; CHECK-NEXT: %11 = extractelement <16 x i8> %3, i32 2
4879 ; CHECK-NEXT: %12 = sitofp i8 %11 to float
4880 ; CHECK-NEXT: %13 = insertelement <4 x float> %10, float %12, i32 2
4881 ; CHECK-NEXT: %14 = extractelement <16 x i8> %3, i32 3
4882 ; CHECK-NEXT: %15 = sitofp i8 %14 to float
4883 ; CHECK-NEXT: %16 = insertelement <4 x float> %13, float %15, i32 3
4884 ; CHECK-NEXT: %17 = extractelement <16 x i8> %3, i32 4
4885 ; CHECK-NEXT: %18 = sitofp i8 %17 to float
4886 ; CHECK-NEXT: %19 = insertelement <4 x float> undef, float %18, i32 0
4887 ; CHECK-NEXT: %20 = extractelement <16 x i8> %3, i32 5
4888 ; CHECK-NEXT: %21 = sitofp i8 %20 to float
4889 ; CHECK-NEXT: %22 = insertelement <4 x float> %19, float %21, i32 1
4890 ; CHECK-NEXT: %23 = extractelement <16 x i8> %3, i32 6
4891 ; CHECK-NEXT: %24 = sitofp i8 %23 to float
4892 ; CHECK-NEXT: %25 = insertelement <4 x float> %22, float %24, i32 2
4893 ; CHECK-NEXT: %26 = extractelement <16 x i8> %3, i32 7
4894 ; CHECK-NEXT: %27 = sitofp i8 %26 to float
4895 ; CHECK-NEXT: %28 = insertelement <4 x float> %25, float %27, i32 3
4896 ; CHECK-NEXT: %29 = extractelement <16 x i8> %3, i32 8
4897 ; CHECK-NEXT: %30 = sitofp i8 %29 to float
4898 ; CHECK-NEXT: %31 = insertelement <4 x float> undef, float %30, i32 0
4899 ; CHECK-NEXT: %32 = extractelement <16 x i8> %3, i32 9
4900 ; CHECK-NEXT: %33 = sitofp i8 %32 to float
4901 ; CHECK-NEXT: %34 = insertelement <4 x float> %31, float %33, i32 1
4902 ; CHECK-NEXT: %35 = extractelement <16 x i8> %3, i32 10
4903 ; CHECK-NEXT: %36 = sitofp i8 %35 to float
4904 ; CHECK-NEXT: %37 = insertelement <4 x float> %34, float %36, i32 2
4905 ; CHECK-NEXT: %38 = extractelement <16 x i8> %3, i32 11
4906 ; CHECK-NEXT: %39 = sitofp i8 %38 to float
4907 ; CHECK-NEXT: %40 = insertelement <4 x float> %37, float %39, i32 3
4908 ; CHECK-NEXT: %41 = extractelement <16 x i8> %3, i32 12
4909 ; CHECK-NEXT: %42 = sitofp i8 %41 to float
4910 ; CHECK-NEXT: %43 = insertelement <4 x float> undef, float %42, i32 0
4911 ; CHECK-NEXT: %44 = extractelement <16 x i8> %3, i32 13
4912 ; CHECK-NEXT: %45 = sitofp i8 %44 to float
4913 ; CHECK-NEXT: %46 = insertelement <4 x float> %43, float %45, i32 1
4914 ; CHECK-NEXT: %47 = extractelement <16 x i8> %3, i32 14
4915 ; CHECK-NEXT: %48 = sitofp i8 %47 to float
4916 ; CHECK-NEXT: %49 = insertelement <4 x float> %46, float %48, i32 2
4917 ; CHECK-NEXT: %50 = extractelement <16 x i8> %3, i32 15
4918 ; CHECK-NEXT: %51 = sitofp i8 %50 to float
4919 ; CHECK-NEXT: %52 = insertelement <4 x float> %49, float %51, i32 3
4920 ; CHECK-NEXT: store <4 x float> %28, <4 x float>* %0, align 16
4921 ; CHECK-NEXT: store <4 x float> %40, <4 x float>* %1, align 16
4922 ; CHECK-NEXT: store <4 x float> %52, <4 x float>* %2, align 16
4923 ; CHECK-NEXT: ret <4 x float> %16
4924
4925 define <16 x float> @sitofp_cast_16xi16_to_16xfloat(<16 x i16>) {
4926 %2 = sitofp <16 x i16> %0 to <16 x float>
4927 ret <16 x float> %2
4928 }
4929 ; CHECK-LABEL: define <4 x float> @sitofp_cast_16xi16_to_16xfloat(<4 x float>* n ocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereference able(16), <4 x float>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i1 6>)
4930 ; CHECK-NEXT: %6 = extractelement <8 x i16> %3, i32 0
4931 ; CHECK-NEXT: %7 = sitofp i16 %6 to float
4932 ; CHECK-NEXT: %8 = insertelement <4 x float> undef, float %7, i32 0
4933 ; CHECK-NEXT: %9 = extractelement <8 x i16> %3, i32 1
4934 ; CHECK-NEXT: %10 = sitofp i16 %9 to float
4935 ; CHECK-NEXT: %11 = insertelement <4 x float> %8, float %10, i32 1
4936 ; CHECK-NEXT: %12 = extractelement <8 x i16> %3, i32 2
4937 ; CHECK-NEXT: %13 = sitofp i16 %12 to float
4938 ; CHECK-NEXT: %14 = insertelement <4 x float> %11, float %13, i32 2
4939 ; CHECK-NEXT: %15 = extractelement <8 x i16> %3, i32 3
4940 ; CHECK-NEXT: %16 = sitofp i16 %15 to float
4941 ; CHECK-NEXT: %17 = insertelement <4 x float> %14, float %16, i32 3
4942 ; CHECK-NEXT: %18 = extractelement <8 x i16> %3, i32 4
4943 ; CHECK-NEXT: %19 = sitofp i16 %18 to float
4944 ; CHECK-NEXT: %20 = insertelement <4 x float> undef, float %19, i32 0
4945 ; CHECK-NEXT: %21 = extractelement <8 x i16> %3, i32 5
4946 ; CHECK-NEXT: %22 = sitofp i16 %21 to float
4947 ; CHECK-NEXT: %23 = insertelement <4 x float> %20, float %22, i32 1
4948 ; CHECK-NEXT: %24 = extractelement <8 x i16> %3, i32 6
4949 ; CHECK-NEXT: %25 = sitofp i16 %24 to float
4950 ; CHECK-NEXT: %26 = insertelement <4 x float> %23, float %25, i32 2
4951 ; CHECK-NEXT: %27 = extractelement <8 x i16> %3, i32 7
4952 ; CHECK-NEXT: %28 = sitofp i16 %27 to float
4953 ; CHECK-NEXT: %29 = insertelement <4 x float> %26, float %28, i32 3
4954 ; CHECK-NEXT: %30 = extractelement <8 x i16> %4, i32 0
4955 ; CHECK-NEXT: %31 = sitofp i16 %30 to float
4956 ; CHECK-NEXT: %32 = insertelement <4 x float> undef, float %31, i32 0
4957 ; CHECK-NEXT: %33 = extractelement <8 x i16> %4, i32 1
4958 ; CHECK-NEXT: %34 = sitofp i16 %33 to float
4959 ; CHECK-NEXT: %35 = insertelement <4 x float> %32, float %34, i32 1
4960 ; CHECK-NEXT: %36 = extractelement <8 x i16> %4, i32 2
4961 ; CHECK-NEXT: %37 = sitofp i16 %36 to float
4962 ; CHECK-NEXT: %38 = insertelement <4 x float> %35, float %37, i32 2
4963 ; CHECK-NEXT: %39 = extractelement <8 x i16> %4, i32 3
4964 ; CHECK-NEXT: %40 = sitofp i16 %39 to float
4965 ; CHECK-NEXT: %41 = insertelement <4 x float> %38, float %40, i32 3
4966 ; CHECK-NEXT: %42 = extractelement <8 x i16> %4, i32 4
4967 ; CHECK-NEXT: %43 = sitofp i16 %42 to float
4968 ; CHECK-NEXT: %44 = insertelement <4 x float> undef, float %43, i32 0
4969 ; CHECK-NEXT: %45 = extractelement <8 x i16> %4, i32 5
4970 ; CHECK-NEXT: %46 = sitofp i16 %45 to float
4971 ; CHECK-NEXT: %47 = insertelement <4 x float> %44, float %46, i32 1
4972 ; CHECK-NEXT: %48 = extractelement <8 x i16> %4, i32 6
4973 ; CHECK-NEXT: %49 = sitofp i16 %48 to float
4974 ; CHECK-NEXT: %50 = insertelement <4 x float> %47, float %49, i32 2
4975 ; CHECK-NEXT: %51 = extractelement <8 x i16> %4, i32 7
4976 ; CHECK-NEXT: %52 = sitofp i16 %51 to float
4977 ; CHECK-NEXT: %53 = insertelement <4 x float> %50, float %52, i32 3
4978 ; CHECK-NEXT: store <4 x float> %29, <4 x float>* %0, align 16
4979 ; CHECK-NEXT: store <4 x float> %41, <4 x float>* %1, align 16
4980 ; CHECK-NEXT: store <4 x float> %53, <4 x float>* %2, align 16
4981 ; CHECK-NEXT: ret <4 x float> %17
4982
4983 define <16 x float> @sitofp_cast_16xi32_to_16xfloat(<16 x i32>) {
4984 %2 = sitofp <16 x i32> %0 to <16 x float>
4985 ret <16 x float> %2
4986 }
4987 ; CHECK-LABEL: define <4 x float> @sitofp_cast_16xi32_to_16xfloat(<4 x float>* n ocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereference able(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i3 2>, <4 x i32>, <4 x i32>)
4988 ; CHECK-NEXT: %8 = sitofp <4 x i32> %3 to <4 x float>
4989 ; CHECK-NEXT: %9 = sitofp <4 x i32> %4 to <4 x float>
4990 ; CHECK-NEXT: %10 = sitofp <4 x i32> %5 to <4 x float>
4991 ; CHECK-NEXT: %11 = sitofp <4 x i32> %6 to <4 x float>
4992 ; CHECK-NEXT: store <4 x float> %9, <4 x float>* %0, align 16
4993 ; CHECK-NEXT: store <4 x float> %10, <4 x float>* %1, align 16
4994 ; CHECK-NEXT: store <4 x float> %11, <4 x float>* %2, align 16
4995 ; CHECK-NEXT: ret <4 x float> %8
4996
4997 define <16 x float> @sitofp_cast_16xi64_to_16xfloat(<16 x i64>) {
4998 %2 = sitofp <16 x i64> %0 to <16 x float>
4999 ret <16 x float> %2
5000 }
5001 ; CHECK-LABEL: define <4 x float> @sitofp_cast_16xi64_to_16xfloat(<4 x float>* n ocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereference able(16), <4 x float>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i6 4>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
5002 ; CHECK-NEXT: %12 = extractelement <2 x i64> %3, i32 0
5003 ; CHECK-NEXT: %13 = sitofp i64 %12 to float
5004 ; CHECK-NEXT: %14 = insertelement <4 x float> undef, float %13, i32 0
5005 ; CHECK-NEXT: %15 = extractelement <2 x i64> %3, i32 1
5006 ; CHECK-NEXT: %16 = sitofp i64 %15 to float
5007 ; CHECK-NEXT: %17 = insertelement <4 x float> %14, float %16, i32 1
5008 ; CHECK-NEXT: %18 = extractelement <2 x i64> %4, i32 0
5009 ; CHECK-NEXT: %19 = sitofp i64 %18 to float
5010 ; CHECK-NEXT: %20 = insertelement <4 x float> %17, float %19, i32 2
5011 ; CHECK-NEXT: %21 = extractelement <2 x i64> %4, i32 1
5012 ; CHECK-NEXT: %22 = sitofp i64 %21 to float
5013 ; CHECK-NEXT: %23 = insertelement <4 x float> %20, float %22, i32 3
5014 ; CHECK-NEXT: %24 = extractelement <2 x i64> %5, i32 0
5015 ; CHECK-NEXT: %25 = sitofp i64 %24 to float
5016 ; CHECK-NEXT: %26 = insertelement <4 x float> undef, float %25, i32 0
5017 ; CHECK-NEXT: %27 = extractelement <2 x i64> %5, i32 1
5018 ; CHECK-NEXT: %28 = sitofp i64 %27 to float
5019 ; CHECK-NEXT: %29 = insertelement <4 x float> %26, float %28, i32 1
5020 ; CHECK-NEXT: %30 = extractelement <2 x i64> %6, i32 0
5021 ; CHECK-NEXT: %31 = sitofp i64 %30 to float
5022 ; CHECK-NEXT: %32 = insertelement <4 x float> %29, float %31, i32 2
5023 ; CHECK-NEXT: %33 = extractelement <2 x i64> %6, i32 1
5024 ; CHECK-NEXT: %34 = sitofp i64 %33 to float
5025 ; CHECK-NEXT: %35 = insertelement <4 x float> %32, float %34, i32 3
5026 ; CHECK-NEXT: %36 = extractelement <2 x i64> %7, i32 0
5027 ; CHECK-NEXT: %37 = sitofp i64 %36 to float
5028 ; CHECK-NEXT: %38 = insertelement <4 x float> undef, float %37, i32 0
5029 ; CHECK-NEXT: %39 = extractelement <2 x i64> %7, i32 1
5030 ; CHECK-NEXT: %40 = sitofp i64 %39 to float
5031 ; CHECK-NEXT: %41 = insertelement <4 x float> %38, float %40, i32 1
5032 ; CHECK-NEXT: %42 = extractelement <2 x i64> %8, i32 0
5033 ; CHECK-NEXT: %43 = sitofp i64 %42 to float
5034 ; CHECK-NEXT: %44 = insertelement <4 x float> %41, float %43, i32 2
5035 ; CHECK-NEXT: %45 = extractelement <2 x i64> %8, i32 1
5036 ; CHECK-NEXT: %46 = sitofp i64 %45 to float
5037 ; CHECK-NEXT: %47 = insertelement <4 x float> %44, float %46, i32 3
5038 ; CHECK-NEXT: %48 = extractelement <2 x i64> %9, i32 0
5039 ; CHECK-NEXT: %49 = sitofp i64 %48 to float
5040 ; CHECK-NEXT: %50 = insertelement <4 x float> undef, float %49, i32 0
5041 ; CHECK-NEXT: %51 = extractelement <2 x i64> %9, i32 1
5042 ; CHECK-NEXT: %52 = sitofp i64 %51 to float
5043 ; CHECK-NEXT: %53 = insertelement <4 x float> %50, float %52, i32 1
5044 ; CHECK-NEXT: %54 = extractelement <2 x i64> %10, i32 0
5045 ; CHECK-NEXT: %55 = sitofp i64 %54 to float
5046 ; CHECK-NEXT: %56 = insertelement <4 x float> %53, float %55, i32 2
5047 ; CHECK-NEXT: %57 = extractelement <2 x i64> %10, i32 1
5048 ; CHECK-NEXT: %58 = sitofp i64 %57 to float
5049 ; CHECK-NEXT: %59 = insertelement <4 x float> %56, float %58, i32 3
5050 ; CHECK-NEXT: store <4 x float> %35, <4 x float>* %0, align 16
5051 ; CHECK-NEXT: store <4 x float> %47, <4 x float>* %1, align 16
5052 ; CHECK-NEXT: store <4 x float> %59, <4 x float>* %2, align 16
5053 ; CHECK-NEXT: ret <4 x float> %23
5054
5055 define <16 x double> @sitofp_cast_16xi8_to_16xdouble(<16 x i8>) {
5056 %2 = sitofp <16 x i8> %0 to <16 x double>
5057 ret <16 x double> %2
5058 }
5059 ; CHECK-LABEL: define <2 x double> @sitofp_cast_16xi8_to_16xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* n ocapture nonnull dereferenceable(16), <16 x i8>)
5060 ; CHECK-NEXT: %9 = extractelement <16 x i8> %7, i32 0
5061 ; CHECK-NEXT: %10 = sitofp i8 %9 to double
5062 ; CHECK-NEXT: %11 = insertelement <2 x double> undef, double %10, i32 0
5063 ; CHECK-NEXT: %12 = extractelement <16 x i8> %7, i32 1
5064 ; CHECK-NEXT: %13 = sitofp i8 %12 to double
5065 ; CHECK-NEXT: %14 = insertelement <2 x double> %11, double %13, i32 1
5066 ; CHECK-NEXT: %15 = extractelement <16 x i8> %7, i32 2
5067 ; CHECK-NEXT: %16 = sitofp i8 %15 to double
5068 ; CHECK-NEXT: %17 = insertelement <2 x double> undef, double %16, i32 0
5069 ; CHECK-NEXT: %18 = extractelement <16 x i8> %7, i32 3
5070 ; CHECK-NEXT: %19 = sitofp i8 %18 to double
5071 ; CHECK-NEXT: %20 = insertelement <2 x double> %17, double %19, i32 1
5072 ; CHECK-NEXT: %21 = extractelement <16 x i8> %7, i32 4
5073 ; CHECK-NEXT: %22 = sitofp i8 %21 to double
5074 ; CHECK-NEXT: %23 = insertelement <2 x double> undef, double %22, i32 0
5075 ; CHECK-NEXT: %24 = extractelement <16 x i8> %7, i32 5
5076 ; CHECK-NEXT: %25 = sitofp i8 %24 to double
5077 ; CHECK-NEXT: %26 = insertelement <2 x double> %23, double %25, i32 1
5078 ; CHECK-NEXT: %27 = extractelement <16 x i8> %7, i32 6
5079 ; CHECK-NEXT: %28 = sitofp i8 %27 to double
5080 ; CHECK-NEXT: %29 = insertelement <2 x double> undef, double %28, i32 0
5081 ; CHECK-NEXT: %30 = extractelement <16 x i8> %7, i32 7
5082 ; CHECK-NEXT: %31 = sitofp i8 %30 to double
5083 ; CHECK-NEXT: %32 = insertelement <2 x double> %29, double %31, i32 1
5084 ; CHECK-NEXT: %33 = extractelement <16 x i8> %7, i32 8
5085 ; CHECK-NEXT: %34 = sitofp i8 %33 to double
5086 ; CHECK-NEXT: %35 = insertelement <2 x double> undef, double %34, i32 0
5087 ; CHECK-NEXT: %36 = extractelement <16 x i8> %7, i32 9
5088 ; CHECK-NEXT: %37 = sitofp i8 %36 to double
5089 ; CHECK-NEXT: %38 = insertelement <2 x double> %35, double %37, i32 1
5090 ; CHECK-NEXT: %39 = extractelement <16 x i8> %7, i32 10
5091 ; CHECK-NEXT: %40 = sitofp i8 %39 to double
5092 ; CHECK-NEXT: %41 = insertelement <2 x double> undef, double %40, i32 0
5093 ; CHECK-NEXT: %42 = extractelement <16 x i8> %7, i32 11
5094 ; CHECK-NEXT: %43 = sitofp i8 %42 to double
5095 ; CHECK-NEXT: %44 = insertelement <2 x double> %41, double %43, i32 1
5096 ; CHECK-NEXT: %45 = extractelement <16 x i8> %7, i32 12
5097 ; CHECK-NEXT: %46 = sitofp i8 %45 to double
5098 ; CHECK-NEXT: %47 = insertelement <2 x double> undef, double %46, i32 0
5099 ; CHECK-NEXT: %48 = extractelement <16 x i8> %7, i32 13
5100 ; CHECK-NEXT: %49 = sitofp i8 %48 to double
5101 ; CHECK-NEXT: %50 = insertelement <2 x double> %47, double %49, i32 1
5102 ; CHECK-NEXT: %51 = extractelement <16 x i8> %7, i32 14
5103 ; CHECK-NEXT: %52 = sitofp i8 %51 to double
5104 ; CHECK-NEXT: %53 = insertelement <2 x double> undef, double %52, i32 0
5105 ; CHECK-NEXT: %54 = extractelement <16 x i8> %7, i32 15
5106 ; CHECK-NEXT: %55 = sitofp i8 %54 to double
5107 ; CHECK-NEXT: %56 = insertelement <2 x double> %53, double %55, i32 1
5108 ; CHECK-NEXT: store <2 x double> %20, <2 x double>* %0, align 16
5109 ; CHECK-NEXT: store <2 x double> %26, <2 x double>* %1, align 16
5110 ; CHECK-NEXT: store <2 x double> %32, <2 x double>* %2, align 16
5111 ; CHECK-NEXT: store <2 x double> %38, <2 x double>* %3, align 16
5112 ; CHECK-NEXT: store <2 x double> %44, <2 x double>* %4, align 16
5113 ; CHECK-NEXT: store <2 x double> %50, <2 x double>* %5, align 16
5114 ; CHECK-NEXT: store <2 x double> %56, <2 x double>* %6, align 16
5115 ; CHECK-NEXT: ret <2 x double> %14
5116
5117 define <16 x double> @sitofp_cast_16xi16_to_16xdouble(<16 x i16>) {
5118 %2 = sitofp <16 x i16> %0 to <16 x double>
5119 ret <16 x double> %2
5120 }
5121 ; CHECK-LABEL: define <2 x double> @sitofp_cast_16xi16_to_16xdouble(<2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>)
5122 ; CHECK-NEXT: %10 = extractelement <8 x i16> %7, i32 0
5123 ; CHECK-NEXT: %11 = sitofp i16 %10 to double
5124 ; CHECK-NEXT: %12 = insertelement <2 x double> undef, double %11, i32 0
5125 ; CHECK-NEXT: %13 = extractelement <8 x i16> %7, i32 1
5126 ; CHECK-NEXT: %14 = sitofp i16 %13 to double
5127 ; CHECK-NEXT: %15 = insertelement <2 x double> %12, double %14, i32 1
5128 ; CHECK-NEXT: %16 = extractelement <8 x i16> %7, i32 2
5129 ; CHECK-NEXT: %17 = sitofp i16 %16 to double
5130 ; CHECK-NEXT: %18 = insertelement <2 x double> undef, double %17, i32 0
5131 ; CHECK-NEXT: %19 = extractelement <8 x i16> %7, i32 3
5132 ; CHECK-NEXT: %20 = sitofp i16 %19 to double
5133 ; CHECK-NEXT: %21 = insertelement <2 x double> %18, double %20, i32 1
5134 ; CHECK-NEXT: %22 = extractelement <8 x i16> %7, i32 4
5135 ; CHECK-NEXT: %23 = sitofp i16 %22 to double
5136 ; CHECK-NEXT: %24 = insertelement <2 x double> undef, double %23, i32 0
5137 ; CHECK-NEXT: %25 = extractelement <8 x i16> %7, i32 5
5138 ; CHECK-NEXT: %26 = sitofp i16 %25 to double
5139 ; CHECK-NEXT: %27 = insertelement <2 x double> %24, double %26, i32 1
5140 ; CHECK-NEXT: %28 = extractelement <8 x i16> %7, i32 6
5141 ; CHECK-NEXT: %29 = sitofp i16 %28 to double
5142 ; CHECK-NEXT: %30 = insertelement <2 x double> undef, double %29, i32 0
5143 ; CHECK-NEXT: %31 = extractelement <8 x i16> %7, i32 7
5144 ; CHECK-NEXT: %32 = sitofp i16 %31 to double
5145 ; CHECK-NEXT: %33 = insertelement <2 x double> %30, double %32, i32 1
5146 ; CHECK-NEXT: %34 = extractelement <8 x i16> %8, i32 0
5147 ; CHECK-NEXT: %35 = sitofp i16 %34 to double
5148 ; CHECK-NEXT: %36 = insertelement <2 x double> undef, double %35, i32 0
5149 ; CHECK-NEXT: %37 = extractelement <8 x i16> %8, i32 1
5150 ; CHECK-NEXT: %38 = sitofp i16 %37 to double
5151 ; CHECK-NEXT: %39 = insertelement <2 x double> %36, double %38, i32 1
5152 ; CHECK-NEXT: %40 = extractelement <8 x i16> %8, i32 2
5153 ; CHECK-NEXT: %41 = sitofp i16 %40 to double
5154 ; CHECK-NEXT: %42 = insertelement <2 x double> undef, double %41, i32 0
5155 ; CHECK-NEXT: %43 = extractelement <8 x i16> %8, i32 3
5156 ; CHECK-NEXT: %44 = sitofp i16 %43 to double
5157 ; CHECK-NEXT: %45 = insertelement <2 x double> %42, double %44, i32 1
5158 ; CHECK-NEXT: %46 = extractelement <8 x i16> %8, i32 4
5159 ; CHECK-NEXT: %47 = sitofp i16 %46 to double
5160 ; CHECK-NEXT: %48 = insertelement <2 x double> undef, double %47, i32 0
5161 ; CHECK-NEXT: %49 = extractelement <8 x i16> %8, i32 5
5162 ; CHECK-NEXT: %50 = sitofp i16 %49 to double
5163 ; CHECK-NEXT: %51 = insertelement <2 x double> %48, double %50, i32 1
5164 ; CHECK-NEXT: %52 = extractelement <8 x i16> %8, i32 6
5165 ; CHECK-NEXT: %53 = sitofp i16 %52 to double
5166 ; CHECK-NEXT: %54 = insertelement <2 x double> undef, double %53, i32 0
5167 ; CHECK-NEXT: %55 = extractelement <8 x i16> %8, i32 7
5168 ; CHECK-NEXT: %56 = sitofp i16 %55 to double
5169 ; CHECK-NEXT: %57 = insertelement <2 x double> %54, double %56, i32 1
5170 ; CHECK-NEXT: store <2 x double> %21, <2 x double>* %0, align 16
5171 ; CHECK-NEXT: store <2 x double> %27, <2 x double>* %1, align 16
5172 ; CHECK-NEXT: store <2 x double> %33, <2 x double>* %2, align 16
5173 ; CHECK-NEXT: store <2 x double> %39, <2 x double>* %3, align 16
5174 ; CHECK-NEXT: store <2 x double> %45, <2 x double>* %4, align 16
5175 ; CHECK-NEXT: store <2 x double> %51, <2 x double>* %5, align 16
5176 ; CHECK-NEXT: store <2 x double> %57, <2 x double>* %6, align 16
5177 ; CHECK-NEXT: ret <2 x double> %15
5178
5179 define <16 x double> @sitofp_cast_16xi32_to_16xdouble(<16 x i32>) {
5180 %2 = sitofp <16 x i32> %0 to <16 x double>
5181 ret <16 x double> %2
5182 }
5183 ; CHECK-LABEL: define <2 x double> @sitofp_cast_16xi32_to_16xdouble(<2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32 >)
5184 ; CHECK-NEXT: %12 = extractelement <4 x i32> %7, i32 0
5185 ; CHECK-NEXT: %13 = sitofp i32 %12 to double
5186 ; CHECK-NEXT: %14 = insertelement <2 x double> undef, double %13, i32 0
5187 ; CHECK-NEXT: %15 = extractelement <4 x i32> %7, i32 1
5188 ; CHECK-NEXT: %16 = sitofp i32 %15 to double
5189 ; CHECK-NEXT: %17 = insertelement <2 x double> %14, double %16, i32 1
5190 ; CHECK-NEXT: %18 = extractelement <4 x i32> %7, i32 2
5191 ; CHECK-NEXT: %19 = sitofp i32 %18 to double
5192 ; CHECK-NEXT: %20 = insertelement <2 x double> undef, double %19, i32 0
5193 ; CHECK-NEXT: %21 = extractelement <4 x i32> %7, i32 3
5194 ; CHECK-NEXT: %22 = sitofp i32 %21 to double
5195 ; CHECK-NEXT: %23 = insertelement <2 x double> %20, double %22, i32 1
5196 ; CHECK-NEXT: %24 = extractelement <4 x i32> %8, i32 0
5197 ; CHECK-NEXT: %25 = sitofp i32 %24 to double
5198 ; CHECK-NEXT: %26 = insertelement <2 x double> undef, double %25, i32 0
5199 ; CHECK-NEXT: %27 = extractelement <4 x i32> %8, i32 1
5200 ; CHECK-NEXT: %28 = sitofp i32 %27 to double
5201 ; CHECK-NEXT: %29 = insertelement <2 x double> %26, double %28, i32 1
5202 ; CHECK-NEXT: %30 = extractelement <4 x i32> %8, i32 2
5203 ; CHECK-NEXT: %31 = sitofp i32 %30 to double
5204 ; CHECK-NEXT: %32 = insertelement <2 x double> undef, double %31, i32 0
5205 ; CHECK-NEXT: %33 = extractelement <4 x i32> %8, i32 3
5206 ; CHECK-NEXT: %34 = sitofp i32 %33 to double
5207 ; CHECK-NEXT: %35 = insertelement <2 x double> %32, double %34, i32 1
5208 ; CHECK-NEXT: %36 = extractelement <4 x i32> %9, i32 0
5209 ; CHECK-NEXT: %37 = sitofp i32 %36 to double
5210 ; CHECK-NEXT: %38 = insertelement <2 x double> undef, double %37, i32 0
5211 ; CHECK-NEXT: %39 = extractelement <4 x i32> %9, i32 1
5212 ; CHECK-NEXT: %40 = sitofp i32 %39 to double
5213 ; CHECK-NEXT: %41 = insertelement <2 x double> %38, double %40, i32 1
5214 ; CHECK-NEXT: %42 = extractelement <4 x i32> %9, i32 2
5215 ; CHECK-NEXT: %43 = sitofp i32 %42 to double
5216 ; CHECK-NEXT: %44 = insertelement <2 x double> undef, double %43, i32 0
5217 ; CHECK-NEXT: %45 = extractelement <4 x i32> %9, i32 3
5218 ; CHECK-NEXT: %46 = sitofp i32 %45 to double
5219 ; CHECK-NEXT: %47 = insertelement <2 x double> %44, double %46, i32 1
5220 ; CHECK-NEXT: %48 = extractelement <4 x i32> %10, i32 0
5221 ; CHECK-NEXT: %49 = sitofp i32 %48 to double
5222 ; CHECK-NEXT: %50 = insertelement <2 x double> undef, double %49, i32 0
5223 ; CHECK-NEXT: %51 = extractelement <4 x i32> %10, i32 1
5224 ; CHECK-NEXT: %52 = sitofp i32 %51 to double
5225 ; CHECK-NEXT: %53 = insertelement <2 x double> %50, double %52, i32 1
5226 ; CHECK-NEXT: %54 = extractelement <4 x i32> %10, i32 2
5227 ; CHECK-NEXT: %55 = sitofp i32 %54 to double
5228 ; CHECK-NEXT: %56 = insertelement <2 x double> undef, double %55, i32 0
5229 ; CHECK-NEXT: %57 = extractelement <4 x i32> %10, i32 3
5230 ; CHECK-NEXT: %58 = sitofp i32 %57 to double
5231 ; CHECK-NEXT: %59 = insertelement <2 x double> %56, double %58, i32 1
5232 ; CHECK-NEXT: store <2 x double> %23, <2 x double>* %0, align 16
5233 ; CHECK-NEXT: store <2 x double> %29, <2 x double>* %1, align 16
5234 ; CHECK-NEXT: store <2 x double> %35, <2 x double>* %2, align 16
5235 ; CHECK-NEXT: store <2 x double> %41, <2 x double>* %3, align 16
5236 ; CHECK-NEXT: store <2 x double> %47, <2 x double>* %4, align 16
5237 ; CHECK-NEXT: store <2 x double> %53, <2 x double>* %5, align 16
5238 ; CHECK-NEXT: store <2 x double> %59, <2 x double>* %6, align 16
5239 ; CHECK-NEXT: ret <2 x double> %17
5240
5241 define <16 x double> @sitofp_cast_16xi64_to_16xdouble(<16 x i64>) {
5242 %2 = sitofp <16 x i64> %0 to <16 x double>
5243 ret <16 x double> %2
5244 }
5245 ; CHECK-LABEL: define <2 x double> @sitofp_cast_16xi64_to_16xdouble(<2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64 >, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
5246 ; CHECK-NEXT: %16 = sitofp <2 x i64> %7 to <2 x double>
5247 ; CHECK-NEXT: %17 = sitofp <2 x i64> %8 to <2 x double>
5248 ; CHECK-NEXT: %18 = sitofp <2 x i64> %9 to <2 x double>
5249 ; CHECK-NEXT: %19 = sitofp <2 x i64> %10 to <2 x double>
5250 ; CHECK-NEXT: %20 = sitofp <2 x i64> %11 to <2 x double>
5251 ; CHECK-NEXT: %21 = sitofp <2 x i64> %12 to <2 x double>
5252 ; CHECK-NEXT: %22 = sitofp <2 x i64> %13 to <2 x double>
5253 ; CHECK-NEXT: %23 = sitofp <2 x i64> %14 to <2 x double>
5254 ; CHECK-NEXT: store <2 x double> %17, <2 x double>* %0, align 16
5255 ; CHECK-NEXT: store <2 x double> %18, <2 x double>* %1, align 16
5256 ; CHECK-NEXT: store <2 x double> %19, <2 x double>* %2, align 16
5257 ; CHECK-NEXT: store <2 x double> %20, <2 x double>* %3, align 16
5258 ; CHECK-NEXT: store <2 x double> %21, <2 x double>* %4, align 16
5259 ; CHECK-NEXT: store <2 x double> %22, <2 x double>* %5, align 16
5260 ; CHECK-NEXT: store <2 x double> %23, <2 x double>* %6, align 16
5261 ; CHECK-NEXT: ret <2 x double> %16
5262
5263 define <20 x i8> @fptoui_cast_20xfloat_to_20xi8(<20 x float>) {
5264 %2 = fptoui <20 x float> %0 to <20 x i8>
5265 ret <20 x i8> %2
5266 }
5267 ; CHECK-LABEL: define <16 x i8> @fptoui_cast_20xfloat_to_20xi8(<16 x i8>* nocapt ure nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x flo at>, <4 x float>)
5268 ; CHECK-NEXT: %7 = extractelement <4 x float> %1, i32 0
5269 ; CHECK-NEXT: %8 = fptoui float %7 to i8
5270 ; CHECK-NEXT: %9 = insertelement <16 x i8> undef, i8 %8, i32 0
5271 ; CHECK-NEXT: %10 = extractelement <4 x float> %1, i32 1
5272 ; CHECK-NEXT: %11 = fptoui float %10 to i8
5273 ; CHECK-NEXT: %12 = insertelement <16 x i8> %9, i8 %11, i32 1
5274 ; CHECK-NEXT: %13 = extractelement <4 x float> %1, i32 2
5275 ; CHECK-NEXT: %14 = fptoui float %13 to i8
5276 ; CHECK-NEXT: %15 = insertelement <16 x i8> %12, i8 %14, i32 2
5277 ; CHECK-NEXT: %16 = extractelement <4 x float> %1, i32 3
5278 ; CHECK-NEXT: %17 = fptoui float %16 to i8
5279 ; CHECK-NEXT: %18 = insertelement <16 x i8> %15, i8 %17, i32 3
5280 ; CHECK-NEXT: %19 = extractelement <4 x float> %2, i32 0
5281 ; CHECK-NEXT: %20 = fptoui float %19 to i8
5282 ; CHECK-NEXT: %21 = insertelement <16 x i8> %18, i8 %20, i32 4
5283 ; CHECK-NEXT: %22 = extractelement <4 x float> %2, i32 1
5284 ; CHECK-NEXT: %23 = fptoui float %22 to i8
5285 ; CHECK-NEXT: %24 = insertelement <16 x i8> %21, i8 %23, i32 5
5286 ; CHECK-NEXT: %25 = extractelement <4 x float> %2, i32 2
5287 ; CHECK-NEXT: %26 = fptoui float %25 to i8
5288 ; CHECK-NEXT: %27 = insertelement <16 x i8> %24, i8 %26, i32 6
5289 ; CHECK-NEXT: %28 = extractelement <4 x float> %2, i32 3
5290 ; CHECK-NEXT: %29 = fptoui float %28 to i8
5291 ; CHECK-NEXT: %30 = insertelement <16 x i8> %27, i8 %29, i32 7
5292 ; CHECK-NEXT: %31 = extractelement <4 x float> %3, i32 0
5293 ; CHECK-NEXT: %32 = fptoui float %31 to i8
5294 ; CHECK-NEXT: %33 = insertelement <16 x i8> %30, i8 %32, i32 8
5295 ; CHECK-NEXT: %34 = extractelement <4 x float> %3, i32 1
5296 ; CHECK-NEXT: %35 = fptoui float %34 to i8
5297 ; CHECK-NEXT: %36 = insertelement <16 x i8> %33, i8 %35, i32 9
5298 ; CHECK-NEXT: %37 = extractelement <4 x float> %3, i32 2
5299 ; CHECK-NEXT: %38 = fptoui float %37 to i8
5300 ; CHECK-NEXT: %39 = insertelement <16 x i8> %36, i8 %38, i32 10
5301 ; CHECK-NEXT: %40 = extractelement <4 x float> %3, i32 3
5302 ; CHECK-NEXT: %41 = fptoui float %40 to i8
5303 ; CHECK-NEXT: %42 = insertelement <16 x i8> %39, i8 %41, i32 11
5304 ; CHECK-NEXT: %43 = extractelement <4 x float> %4, i32 0
5305 ; CHECK-NEXT: %44 = fptoui float %43 to i8
5306 ; CHECK-NEXT: %45 = insertelement <16 x i8> %42, i8 %44, i32 12
5307 ; CHECK-NEXT: %46 = extractelement <4 x float> %4, i32 1
5308 ; CHECK-NEXT: %47 = fptoui float %46 to i8
5309 ; CHECK-NEXT: %48 = insertelement <16 x i8> %45, i8 %47, i32 13
5310 ; CHECK-NEXT: %49 = extractelement <4 x float> %4, i32 2
5311 ; CHECK-NEXT: %50 = fptoui float %49 to i8
5312 ; CHECK-NEXT: %51 = insertelement <16 x i8> %48, i8 %50, i32 14
5313 ; CHECK-NEXT: %52 = extractelement <4 x float> %4, i32 3
5314 ; CHECK-NEXT: %53 = fptoui float %52 to i8
5315 ; CHECK-NEXT: %54 = insertelement <16 x i8> %51, i8 %53, i32 15
5316 ; CHECK-NEXT: %55 = extractelement <4 x float> %5, i32 0
5317 ; CHECK-NEXT: %56 = fptoui float %55 to i8
5318 ; CHECK-NEXT: %57 = insertelement <16 x i8> undef, i8 %56, i32 0
5319 ; CHECK-NEXT: %58 = extractelement <4 x float> %5, i32 1
5320 ; CHECK-NEXT: %59 = fptoui float %58 to i8
5321 ; CHECK-NEXT: %60 = insertelement <16 x i8> %57, i8 %59, i32 1
5322 ; CHECK-NEXT: %61 = extractelement <4 x float> %5, i32 2
5323 ; CHECK-NEXT: %62 = fptoui float %61 to i8
5324 ; CHECK-NEXT: %63 = insertelement <16 x i8> %60, i8 %62, i32 2
5325 ; CHECK-NEXT: %64 = extractelement <4 x float> %5, i32 3
5326 ; CHECK-NEXT: %65 = fptoui float %64 to i8
5327 ; CHECK-NEXT: %66 = insertelement <16 x i8> %63, i8 %65, i32 3
5328 ; CHECK-NEXT: store <16 x i8> %66, <16 x i8>* %0, align 16
5329 ; CHECK-NEXT: ret <16 x i8> %54
5330
5331 define <20 x i16> @fptoui_cast_20xfloat_to_20xi16(<20 x float>) {
5332 %2 = fptoui <20 x float> %0 to <20 x i16>
5333 ret <20 x i16> %2
5334 }
5335 ; CHECK-LABEL: define <8 x i16> @fptoui_cast_20xfloat_to_20xi16(<8 x i16>* nocap ture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(1 6), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>)
5336 ; CHECK-NEXT: %8 = extractelement <4 x float> %2, i32 0
5337 ; CHECK-NEXT: %9 = fptoui float %8 to i16
5338 ; CHECK-NEXT: %10 = insertelement <8 x i16> undef, i16 %9, i32 0
5339 ; CHECK-NEXT: %11 = extractelement <4 x float> %2, i32 1
5340 ; CHECK-NEXT: %12 = fptoui float %11 to i16
5341 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 1
5342 ; CHECK-NEXT: %14 = extractelement <4 x float> %2, i32 2
5343 ; CHECK-NEXT: %15 = fptoui float %14 to i16
5344 ; CHECK-NEXT: %16 = insertelement <8 x i16> %13, i16 %15, i32 2
5345 ; CHECK-NEXT: %17 = extractelement <4 x float> %2, i32 3
5346 ; CHECK-NEXT: %18 = fptoui float %17 to i16
5347 ; CHECK-NEXT: %19 = insertelement <8 x i16> %16, i16 %18, i32 3
5348 ; CHECK-NEXT: %20 = extractelement <4 x float> %3, i32 0
5349 ; CHECK-NEXT: %21 = fptoui float %20 to i16
5350 ; CHECK-NEXT: %22 = insertelement <8 x i16> %19, i16 %21, i32 4
5351 ; CHECK-NEXT: %23 = extractelement <4 x float> %3, i32 1
5352 ; CHECK-NEXT: %24 = fptoui float %23 to i16
5353 ; CHECK-NEXT: %25 = insertelement <8 x i16> %22, i16 %24, i32 5
5354 ; CHECK-NEXT: %26 = extractelement <4 x float> %3, i32 2
5355 ; CHECK-NEXT: %27 = fptoui float %26 to i16
5356 ; CHECK-NEXT: %28 = insertelement <8 x i16> %25, i16 %27, i32 6
5357 ; CHECK-NEXT: %29 = extractelement <4 x float> %3, i32 3
5358 ; CHECK-NEXT: %30 = fptoui float %29 to i16
5359 ; CHECK-NEXT: %31 = insertelement <8 x i16> %28, i16 %30, i32 7
5360 ; CHECK-NEXT: %32 = extractelement <4 x float> %4, i32 0
5361 ; CHECK-NEXT: %33 = fptoui float %32 to i16
5362 ; CHECK-NEXT: %34 = insertelement <8 x i16> undef, i16 %33, i32 0
5363 ; CHECK-NEXT: %35 = extractelement <4 x float> %4, i32 1
5364 ; CHECK-NEXT: %36 = fptoui float %35 to i16
5365 ; CHECK-NEXT: %37 = insertelement <8 x i16> %34, i16 %36, i32 1
5366 ; CHECK-NEXT: %38 = extractelement <4 x float> %4, i32 2
5367 ; CHECK-NEXT: %39 = fptoui float %38 to i16
5368 ; CHECK-NEXT: %40 = insertelement <8 x i16> %37, i16 %39, i32 2
5369 ; CHECK-NEXT: %41 = extractelement <4 x float> %4, i32 3
5370 ; CHECK-NEXT: %42 = fptoui float %41 to i16
5371 ; CHECK-NEXT: %43 = insertelement <8 x i16> %40, i16 %42, i32 3
5372 ; CHECK-NEXT: %44 = extractelement <4 x float> %5, i32 0
5373 ; CHECK-NEXT: %45 = fptoui float %44 to i16
5374 ; CHECK-NEXT: %46 = insertelement <8 x i16> %43, i16 %45, i32 4
5375 ; CHECK-NEXT: %47 = extractelement <4 x float> %5, i32 1
5376 ; CHECK-NEXT: %48 = fptoui float %47 to i16
5377 ; CHECK-NEXT: %49 = insertelement <8 x i16> %46, i16 %48, i32 5
5378 ; CHECK-NEXT: %50 = extractelement <4 x float> %5, i32 2
5379 ; CHECK-NEXT: %51 = fptoui float %50 to i16
5380 ; CHECK-NEXT: %52 = insertelement <8 x i16> %49, i16 %51, i32 6
5381 ; CHECK-NEXT: %53 = extractelement <4 x float> %5, i32 3
5382 ; CHECK-NEXT: %54 = fptoui float %53 to i16
5383 ; CHECK-NEXT: %55 = insertelement <8 x i16> %52, i16 %54, i32 7
5384 ; CHECK-NEXT: %56 = extractelement <4 x float> %6, i32 0
5385 ; CHECK-NEXT: %57 = fptoui float %56 to i16
5386 ; CHECK-NEXT: %58 = insertelement <8 x i16> undef, i16 %57, i32 0
5387 ; CHECK-NEXT: %59 = extractelement <4 x float> %6, i32 1
5388 ; CHECK-NEXT: %60 = fptoui float %59 to i16
5389 ; CHECK-NEXT: %61 = insertelement <8 x i16> %58, i16 %60, i32 1
5390 ; CHECK-NEXT: %62 = extractelement <4 x float> %6, i32 2
5391 ; CHECK-NEXT: %63 = fptoui float %62 to i16
5392 ; CHECK-NEXT: %64 = insertelement <8 x i16> %61, i16 %63, i32 2
5393 ; CHECK-NEXT: %65 = extractelement <4 x float> %6, i32 3
5394 ; CHECK-NEXT: %66 = fptoui float %65 to i16
5395 ; CHECK-NEXT: %67 = insertelement <8 x i16> %64, i16 %66, i32 3
5396 ; CHECK-NEXT: store <8 x i16> %55, <8 x i16>* %0, align 16
5397 ; CHECK-NEXT: store <8 x i16> %67, <8 x i16>* %1, align 16
5398 ; CHECK-NEXT: ret <8 x i16> %31
5399
5400 define <20 x i32> @fptoui_cast_20xfloat_to_20xi32(<20 x float>) {
5401 %2 = fptoui <20 x float> %0 to <20 x i32>
5402 ret <20 x i32> %2
5403 }
5404 ; CHECK-LABEL: define <4 x i32> @fptoui_cast_20xfloat_to_20xi32(<4 x i32>* nocap ture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(1 6), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnu ll dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>)
5405 ; CHECK-NEXT: %10 = fptoui <4 x float> %4 to <4 x i32>
5406 ; CHECK-NEXT: %11 = fptoui <4 x float> %5 to <4 x i32>
5407 ; CHECK-NEXT: %12 = fptoui <4 x float> %6 to <4 x i32>
5408 ; CHECK-NEXT: %13 = fptoui <4 x float> %7 to <4 x i32>
5409 ; CHECK-NEXT: %14 = fptoui <4 x float> %8 to <4 x i32>
5410 ; CHECK-NEXT: store <4 x i32> %11, <4 x i32>* %0, align 16
5411 ; CHECK-NEXT: store <4 x i32> %12, <4 x i32>* %1, align 16
5412 ; CHECK-NEXT: store <4 x i32> %13, <4 x i32>* %2, align 16
5413 ; CHECK-NEXT: store <4 x i32> %14, <4 x i32>* %3, align 16
5414 ; CHECK-NEXT: ret <4 x i32> %10
5415
5416 define <20 x i64> @fptoui_cast_20xfloat_to_20xi64(<20 x float>) {
5417 %2 = fptoui <20 x float> %0 to <20 x i64>
5418 ret <20 x i64> %2
5419 }
5420 ; CHECK-LABEL: define <2 x i64> @fptoui_cast_20xfloat_to_20xi64(<2 x i64>* nocap ture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(1 6), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnu ll dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i 64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull derefer enceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocap ture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x fl oat>, <4 x float>)
5421 ; CHECK-NEXT: %15 = extractelement <4 x float> %9, i32 0
5422 ; CHECK-NEXT: %16 = fptoui float %15 to i64
5423 ; CHECK-NEXT: %17 = insertelement <2 x i64> undef, i64 %16, i32 0
5424 ; CHECK-NEXT: %18 = extractelement <4 x float> %9, i32 1
5425 ; CHECK-NEXT: %19 = fptoui float %18 to i64
5426 ; CHECK-NEXT: %20 = insertelement <2 x i64> %17, i64 %19, i32 1
5427 ; CHECK-NEXT: %21 = extractelement <4 x float> %9, i32 2
5428 ; CHECK-NEXT: %22 = fptoui float %21 to i64
5429 ; CHECK-NEXT: %23 = insertelement <2 x i64> undef, i64 %22, i32 0
5430 ; CHECK-NEXT: %24 = extractelement <4 x float> %9, i32 3
5431 ; CHECK-NEXT: %25 = fptoui float %24 to i64
5432 ; CHECK-NEXT: %26 = insertelement <2 x i64> %23, i64 %25, i32 1
5433 ; CHECK-NEXT: %27 = extractelement <4 x float> %10, i32 0
5434 ; CHECK-NEXT: %28 = fptoui float %27 to i64
5435 ; CHECK-NEXT: %29 = insertelement <2 x i64> undef, i64 %28, i32 0
5436 ; CHECK-NEXT: %30 = extractelement <4 x float> %10, i32 1
5437 ; CHECK-NEXT: %31 = fptoui float %30 to i64
5438 ; CHECK-NEXT: %32 = insertelement <2 x i64> %29, i64 %31, i32 1
5439 ; CHECK-NEXT: %33 = extractelement <4 x float> %10, i32 2
5440 ; CHECK-NEXT: %34 = fptoui float %33 to i64
5441 ; CHECK-NEXT: %35 = insertelement <2 x i64> undef, i64 %34, i32 0
5442 ; CHECK-NEXT: %36 = extractelement <4 x float> %10, i32 3
5443 ; CHECK-NEXT: %37 = fptoui float %36 to i64
5444 ; CHECK-NEXT: %38 = insertelement <2 x i64> %35, i64 %37, i32 1
5445 ; CHECK-NEXT: %39 = extractelement <4 x float> %11, i32 0
5446 ; CHECK-NEXT: %40 = fptoui float %39 to i64
5447 ; CHECK-NEXT: %41 = insertelement <2 x i64> undef, i64 %40, i32 0
5448 ; CHECK-NEXT: %42 = extractelement <4 x float> %11, i32 1
5449 ; CHECK-NEXT: %43 = fptoui float %42 to i64
5450 ; CHECK-NEXT: %44 = insertelement <2 x i64> %41, i64 %43, i32 1
5451 ; CHECK-NEXT: %45 = extractelement <4 x float> %11, i32 2
5452 ; CHECK-NEXT: %46 = fptoui float %45 to i64
5453 ; CHECK-NEXT: %47 = insertelement <2 x i64> undef, i64 %46, i32 0
5454 ; CHECK-NEXT: %48 = extractelement <4 x float> %11, i32 3
5455 ; CHECK-NEXT: %49 = fptoui float %48 to i64
5456 ; CHECK-NEXT: %50 = insertelement <2 x i64> %47, i64 %49, i32 1
5457 ; CHECK-NEXT: %51 = extractelement <4 x float> %12, i32 0
5458 ; CHECK-NEXT: %52 = fptoui float %51 to i64
5459 ; CHECK-NEXT: %53 = insertelement <2 x i64> undef, i64 %52, i32 0
5460 ; CHECK-NEXT: %54 = extractelement <4 x float> %12, i32 1
5461 ; CHECK-NEXT: %55 = fptoui float %54 to i64
5462 ; CHECK-NEXT: %56 = insertelement <2 x i64> %53, i64 %55, i32 1
5463 ; CHECK-NEXT: %57 = extractelement <4 x float> %12, i32 2
5464 ; CHECK-NEXT: %58 = fptoui float %57 to i64
5465 ; CHECK-NEXT: %59 = insertelement <2 x i64> undef, i64 %58, i32 0
5466 ; CHECK-NEXT: %60 = extractelement <4 x float> %12, i32 3
5467 ; CHECK-NEXT: %61 = fptoui float %60 to i64
5468 ; CHECK-NEXT: %62 = insertelement <2 x i64> %59, i64 %61, i32 1
5469 ; CHECK-NEXT: %63 = extractelement <4 x float> %13, i32 0
5470 ; CHECK-NEXT: %64 = fptoui float %63 to i64
5471 ; CHECK-NEXT: %65 = insertelement <2 x i64> undef, i64 %64, i32 0
5472 ; CHECK-NEXT: %66 = extractelement <4 x float> %13, i32 1
5473 ; CHECK-NEXT: %67 = fptoui float %66 to i64
5474 ; CHECK-NEXT: %68 = insertelement <2 x i64> %65, i64 %67, i32 1
5475 ; CHECK-NEXT: %69 = extractelement <4 x float> %13, i32 2
5476 ; CHECK-NEXT: %70 = fptoui float %69 to i64
5477 ; CHECK-NEXT: %71 = insertelement <2 x i64> undef, i64 %70, i32 0
5478 ; CHECK-NEXT: %72 = extractelement <4 x float> %13, i32 3
5479 ; CHECK-NEXT: %73 = fptoui float %72 to i64
5480 ; CHECK-NEXT: %74 = insertelement <2 x i64> %71, i64 %73, i32 1
5481 ; CHECK-NEXT: store <2 x i64> %26, <2 x i64>* %0, align 16
5482 ; CHECK-NEXT: store <2 x i64> %32, <2 x i64>* %1, align 16
5483 ; CHECK-NEXT: store <2 x i64> %38, <2 x i64>* %2, align 16
5484 ; CHECK-NEXT: store <2 x i64> %44, <2 x i64>* %3, align 16
5485 ; CHECK-NEXT: store <2 x i64> %50, <2 x i64>* %4, align 16
5486 ; CHECK-NEXT: store <2 x i64> %56, <2 x i64>* %5, align 16
5487 ; CHECK-NEXT: store <2 x i64> %62, <2 x i64>* %6, align 16
5488 ; CHECK-NEXT: store <2 x i64> %68, <2 x i64>* %7, align 16
5489 ; CHECK-NEXT: store <2 x i64> %74, <2 x i64>* %8, align 16
5490 ; CHECK-NEXT: ret <2 x i64> %20
5491
5492 define <20 x i8> @fptoui_cast_20xdouble_to_20xi8(<20 x double>) {
5493 %2 = fptoui <20 x double> %0 to <20 x i8>
5494 ret <20 x i8> %2
5495 }
5496 ; CHECK-LABEL: define <16 x i8> @fptoui_cast_20xdouble_to_20xi8(<16 x i8>* nocap ture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>)
5497 ; CHECK-NEXT: %12 = extractelement <2 x double> %1, i32 0
5498 ; CHECK-NEXT: %13 = fptoui double %12 to i8
5499 ; CHECK-NEXT: %14 = insertelement <16 x i8> undef, i8 %13, i32 0
5500 ; CHECK-NEXT: %15 = extractelement <2 x double> %1, i32 1
5501 ; CHECK-NEXT: %16 = fptoui double %15 to i8
5502 ; CHECK-NEXT: %17 = insertelement <16 x i8> %14, i8 %16, i32 1
5503 ; CHECK-NEXT: %18 = extractelement <2 x double> %2, i32 0
5504 ; CHECK-NEXT: %19 = fptoui double %18 to i8
5505 ; CHECK-NEXT: %20 = insertelement <16 x i8> %17, i8 %19, i32 2
5506 ; CHECK-NEXT: %21 = extractelement <2 x double> %2, i32 1
5507 ; CHECK-NEXT: %22 = fptoui double %21 to i8
5508 ; CHECK-NEXT: %23 = insertelement <16 x i8> %20, i8 %22, i32 3
5509 ; CHECK-NEXT: %24 = extractelement <2 x double> %3, i32 0
5510 ; CHECK-NEXT: %25 = fptoui double %24 to i8
5511 ; CHECK-NEXT: %26 = insertelement <16 x i8> %23, i8 %25, i32 4
5512 ; CHECK-NEXT: %27 = extractelement <2 x double> %3, i32 1
5513 ; CHECK-NEXT: %28 = fptoui double %27 to i8
5514 ; CHECK-NEXT: %29 = insertelement <16 x i8> %26, i8 %28, i32 5
5515 ; CHECK-NEXT: %30 = extractelement <2 x double> %4, i32 0
5516 ; CHECK-NEXT: %31 = fptoui double %30 to i8
5517 ; CHECK-NEXT: %32 = insertelement <16 x i8> %29, i8 %31, i32 6
5518 ; CHECK-NEXT: %33 = extractelement <2 x double> %4, i32 1
5519 ; CHECK-NEXT: %34 = fptoui double %33 to i8
5520 ; CHECK-NEXT: %35 = insertelement <16 x i8> %32, i8 %34, i32 7
5521 ; CHECK-NEXT: %36 = extractelement <2 x double> %5, i32 0
5522 ; CHECK-NEXT: %37 = fptoui double %36 to i8
5523 ; CHECK-NEXT: %38 = insertelement <16 x i8> %35, i8 %37, i32 8
5524 ; CHECK-NEXT: %39 = extractelement <2 x double> %5, i32 1
5525 ; CHECK-NEXT: %40 = fptoui double %39 to i8
5526 ; CHECK-NEXT: %41 = insertelement <16 x i8> %38, i8 %40, i32 9
5527 ; CHECK-NEXT: %42 = extractelement <2 x double> %6, i32 0
5528 ; CHECK-NEXT: %43 = fptoui double %42 to i8
5529 ; CHECK-NEXT: %44 = insertelement <16 x i8> %41, i8 %43, i32 10
5530 ; CHECK-NEXT: %45 = extractelement <2 x double> %6, i32 1
5531 ; CHECK-NEXT: %46 = fptoui double %45 to i8
5532 ; CHECK-NEXT: %47 = insertelement <16 x i8> %44, i8 %46, i32 11
5533 ; CHECK-NEXT: %48 = extractelement <2 x double> %7, i32 0
5534 ; CHECK-NEXT: %49 = fptoui double %48 to i8
5535 ; CHECK-NEXT: %50 = insertelement <16 x i8> %47, i8 %49, i32 12
5536 ; CHECK-NEXT: %51 = extractelement <2 x double> %7, i32 1
5537 ; CHECK-NEXT: %52 = fptoui double %51 to i8
5538 ; CHECK-NEXT: %53 = insertelement <16 x i8> %50, i8 %52, i32 13
5539 ; CHECK-NEXT: %54 = extractelement <2 x double> %8, i32 0
5540 ; CHECK-NEXT: %55 = fptoui double %54 to i8
5541 ; CHECK-NEXT: %56 = insertelement <16 x i8> %53, i8 %55, i32 14
5542 ; CHECK-NEXT: %57 = extractelement <2 x double> %8, i32 1
5543 ; CHECK-NEXT: %58 = fptoui double %57 to i8
5544 ; CHECK-NEXT: %59 = insertelement <16 x i8> %56, i8 %58, i32 15
5545 ; CHECK-NEXT: %60 = extractelement <2 x double> %9, i32 0
5546 ; CHECK-NEXT: %61 = fptoui double %60 to i8
5547 ; CHECK-NEXT: %62 = insertelement <16 x i8> undef, i8 %61, i32 0
5548 ; CHECK-NEXT: %63 = extractelement <2 x double> %9, i32 1
5549 ; CHECK-NEXT: %64 = fptoui double %63 to i8
5550 ; CHECK-NEXT: %65 = insertelement <16 x i8> %62, i8 %64, i32 1
5551 ; CHECK-NEXT: %66 = extractelement <2 x double> %10, i32 0
5552 ; CHECK-NEXT: %67 = fptoui double %66 to i8
5553 ; CHECK-NEXT: %68 = insertelement <16 x i8> %65, i8 %67, i32 2
5554 ; CHECK-NEXT: %69 = extractelement <2 x double> %10, i32 1
5555 ; CHECK-NEXT: %70 = fptoui double %69 to i8
5556 ; CHECK-NEXT: %71 = insertelement <16 x i8> %68, i8 %70, i32 3
5557 ; CHECK-NEXT: store <16 x i8> %71, <16 x i8>* %0, align 16
5558 ; CHECK-NEXT: ret <16 x i8> %59
5559
5560 define <20 x i16> @fptoui_cast_20xdouble_to_20xi16(<20 x double>) {
5561 %2 = fptoui <20 x double> %0 to <20 x i16>
5562 ret <20 x i16> %2
5563 }
5564 ; CHECK-LABEL: define <8 x i16> @fptoui_cast_20xdouble_to_20xi16(<8 x i16>* noca pture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable( 16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>)
5565 ; CHECK-NEXT: %13 = extractelement <2 x double> %2, i32 0
5566 ; CHECK-NEXT: %14 = fptoui double %13 to i16
5567 ; CHECK-NEXT: %15 = insertelement <8 x i16> undef, i16 %14, i32 0
5568 ; CHECK-NEXT: %16 = extractelement <2 x double> %2, i32 1
5569 ; CHECK-NEXT: %17 = fptoui double %16 to i16
5570 ; CHECK-NEXT: %18 = insertelement <8 x i16> %15, i16 %17, i32 1
5571 ; CHECK-NEXT: %19 = extractelement <2 x double> %3, i32 0
5572 ; CHECK-NEXT: %20 = fptoui double %19 to i16
5573 ; CHECK-NEXT: %21 = insertelement <8 x i16> %18, i16 %20, i32 2
5574 ; CHECK-NEXT: %22 = extractelement <2 x double> %3, i32 1
5575 ; CHECK-NEXT: %23 = fptoui double %22 to i16
5576 ; CHECK-NEXT: %24 = insertelement <8 x i16> %21, i16 %23, i32 3
5577 ; CHECK-NEXT: %25 = extractelement <2 x double> %4, i32 0
5578 ; CHECK-NEXT: %26 = fptoui double %25 to i16
5579 ; CHECK-NEXT: %27 = insertelement <8 x i16> %24, i16 %26, i32 4
5580 ; CHECK-NEXT: %28 = extractelement <2 x double> %4, i32 1
5581 ; CHECK-NEXT: %29 = fptoui double %28 to i16
5582 ; CHECK-NEXT: %30 = insertelement <8 x i16> %27, i16 %29, i32 5
5583 ; CHECK-NEXT: %31 = extractelement <2 x double> %5, i32 0
5584 ; CHECK-NEXT: %32 = fptoui double %31 to i16
5585 ; CHECK-NEXT: %33 = insertelement <8 x i16> %30, i16 %32, i32 6
5586 ; CHECK-NEXT: %34 = extractelement <2 x double> %5, i32 1
5587 ; CHECK-NEXT: %35 = fptoui double %34 to i16
5588 ; CHECK-NEXT: %36 = insertelement <8 x i16> %33, i16 %35, i32 7
5589 ; CHECK-NEXT: %37 = extractelement <2 x double> %6, i32 0
5590 ; CHECK-NEXT: %38 = fptoui double %37 to i16
5591 ; CHECK-NEXT: %39 = insertelement <8 x i16> undef, i16 %38, i32 0
5592 ; CHECK-NEXT: %40 = extractelement <2 x double> %6, i32 1
5593 ; CHECK-NEXT: %41 = fptoui double %40 to i16
5594 ; CHECK-NEXT: %42 = insertelement <8 x i16> %39, i16 %41, i32 1
5595 ; CHECK-NEXT: %43 = extractelement <2 x double> %7, i32 0
5596 ; CHECK-NEXT: %44 = fptoui double %43 to i16
5597 ; CHECK-NEXT: %45 = insertelement <8 x i16> %42, i16 %44, i32 2
5598 ; CHECK-NEXT: %46 = extractelement <2 x double> %7, i32 1
5599 ; CHECK-NEXT: %47 = fptoui double %46 to i16
5600 ; CHECK-NEXT: %48 = insertelement <8 x i16> %45, i16 %47, i32 3
5601 ; CHECK-NEXT: %49 = extractelement <2 x double> %8, i32 0
5602 ; CHECK-NEXT: %50 = fptoui double %49 to i16
5603 ; CHECK-NEXT: %51 = insertelement <8 x i16> %48, i16 %50, i32 4
5604 ; CHECK-NEXT: %52 = extractelement <2 x double> %8, i32 1
5605 ; CHECK-NEXT: %53 = fptoui double %52 to i16
5606 ; CHECK-NEXT: %54 = insertelement <8 x i16> %51, i16 %53, i32 5
5607 ; CHECK-NEXT: %55 = extractelement <2 x double> %9, i32 0
5608 ; CHECK-NEXT: %56 = fptoui double %55 to i16
5609 ; CHECK-NEXT: %57 = insertelement <8 x i16> %54, i16 %56, i32 6
5610 ; CHECK-NEXT: %58 = extractelement <2 x double> %9, i32 1
5611 ; CHECK-NEXT: %59 = fptoui double %58 to i16
5612 ; CHECK-NEXT: %60 = insertelement <8 x i16> %57, i16 %59, i32 7
5613 ; CHECK-NEXT: %61 = extractelement <2 x double> %10, i32 0
5614 ; CHECK-NEXT: %62 = fptoui double %61 to i16
5615 ; CHECK-NEXT: %63 = insertelement <8 x i16> undef, i16 %62, i32 0
5616 ; CHECK-NEXT: %64 = extractelement <2 x double> %10, i32 1
5617 ; CHECK-NEXT: %65 = fptoui double %64 to i16
5618 ; CHECK-NEXT: %66 = insertelement <8 x i16> %63, i16 %65, i32 1
5619 ; CHECK-NEXT: %67 = extractelement <2 x double> %11, i32 0
5620 ; CHECK-NEXT: %68 = fptoui double %67 to i16
5621 ; CHECK-NEXT: %69 = insertelement <8 x i16> %66, i16 %68, i32 2
5622 ; CHECK-NEXT: %70 = extractelement <2 x double> %11, i32 1
5623 ; CHECK-NEXT: %71 = fptoui double %70 to i16
5624 ; CHECK-NEXT: %72 = insertelement <8 x i16> %69, i16 %71, i32 3
5625 ; CHECK-NEXT: store <8 x i16> %60, <8 x i16>* %0, align 16
5626 ; CHECK-NEXT: store <8 x i16> %72, <8 x i16>* %1, align 16
5627 ; CHECK-NEXT: ret <8 x i16> %36
5628
5629 define <20 x i32> @fptoui_cast_20xdouble_to_20xi32(<20 x double>) {
5630 %2 = fptoui <20 x double> %0 to <20 x i32>
5631 ret <20 x i32> %2
5632 }
5633 ; CHECK-LABEL: define <4 x i32> @fptoui_cast_20xdouble_to_20xi32(<4 x i32>* noca pture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable( 16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonn ull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x doub le>)
5634 ; CHECK-NEXT: %15 = extractelement <2 x double> %4, i32 0
5635 ; CHECK-NEXT: %16 = fptoui double %15 to i32
5636 ; CHECK-NEXT: %17 = insertelement <4 x i32> undef, i32 %16, i32 0
5637 ; CHECK-NEXT: %18 = extractelement <2 x double> %4, i32 1
5638 ; CHECK-NEXT: %19 = fptoui double %18 to i32
5639 ; CHECK-NEXT: %20 = insertelement <4 x i32> %17, i32 %19, i32 1
5640 ; CHECK-NEXT: %21 = extractelement <2 x double> %5, i32 0
5641 ; CHECK-NEXT: %22 = fptoui double %21 to i32
5642 ; CHECK-NEXT: %23 = insertelement <4 x i32> %20, i32 %22, i32 2
5643 ; CHECK-NEXT: %24 = extractelement <2 x double> %5, i32 1
5644 ; CHECK-NEXT: %25 = fptoui double %24 to i32
5645 ; CHECK-NEXT: %26 = insertelement <4 x i32> %23, i32 %25, i32 3
5646 ; CHECK-NEXT: %27 = extractelement <2 x double> %6, i32 0
5647 ; CHECK-NEXT: %28 = fptoui double %27 to i32
5648 ; CHECK-NEXT: %29 = insertelement <4 x i32> undef, i32 %28, i32 0
5649 ; CHECK-NEXT: %30 = extractelement <2 x double> %6, i32 1
5650 ; CHECK-NEXT: %31 = fptoui double %30 to i32
5651 ; CHECK-NEXT: %32 = insertelement <4 x i32> %29, i32 %31, i32 1
5652 ; CHECK-NEXT: %33 = extractelement <2 x double> %7, i32 0
5653 ; CHECK-NEXT: %34 = fptoui double %33 to i32
5654 ; CHECK-NEXT: %35 = insertelement <4 x i32> %32, i32 %34, i32 2
5655 ; CHECK-NEXT: %36 = extractelement <2 x double> %7, i32 1
5656 ; CHECK-NEXT: %37 = fptoui double %36 to i32
5657 ; CHECK-NEXT: %38 = insertelement <4 x i32> %35, i32 %37, i32 3
5658 ; CHECK-NEXT: %39 = extractelement <2 x double> %8, i32 0
5659 ; CHECK-NEXT: %40 = fptoui double %39 to i32
5660 ; CHECK-NEXT: %41 = insertelement <4 x i32> undef, i32 %40, i32 0
5661 ; CHECK-NEXT: %42 = extractelement <2 x double> %8, i32 1
5662 ; CHECK-NEXT: %43 = fptoui double %42 to i32
5663 ; CHECK-NEXT: %44 = insertelement <4 x i32> %41, i32 %43, i32 1
5664 ; CHECK-NEXT: %45 = extractelement <2 x double> %9, i32 0
5665 ; CHECK-NEXT: %46 = fptoui double %45 to i32
5666 ; CHECK-NEXT: %47 = insertelement <4 x i32> %44, i32 %46, i32 2
5667 ; CHECK-NEXT: %48 = extractelement <2 x double> %9, i32 1
5668 ; CHECK-NEXT: %49 = fptoui double %48 to i32
5669 ; CHECK-NEXT: %50 = insertelement <4 x i32> %47, i32 %49, i32 3
5670 ; CHECK-NEXT: %51 = extractelement <2 x double> %10, i32 0
5671 ; CHECK-NEXT: %52 = fptoui double %51 to i32
5672 ; CHECK-NEXT: %53 = insertelement <4 x i32> undef, i32 %52, i32 0
5673 ; CHECK-NEXT: %54 = extractelement <2 x double> %10, i32 1
5674 ; CHECK-NEXT: %55 = fptoui double %54 to i32
5675 ; CHECK-NEXT: %56 = insertelement <4 x i32> %53, i32 %55, i32 1
5676 ; CHECK-NEXT: %57 = extractelement <2 x double> %11, i32 0
5677 ; CHECK-NEXT: %58 = fptoui double %57 to i32
5678 ; CHECK-NEXT: %59 = insertelement <4 x i32> %56, i32 %58, i32 2
5679 ; CHECK-NEXT: %60 = extractelement <2 x double> %11, i32 1
5680 ; CHECK-NEXT: %61 = fptoui double %60 to i32
5681 ; CHECK-NEXT: %62 = insertelement <4 x i32> %59, i32 %61, i32 3
5682 ; CHECK-NEXT: %63 = extractelement <2 x double> %12, i32 0
5683 ; CHECK-NEXT: %64 = fptoui double %63 to i32
5684 ; CHECK-NEXT: %65 = insertelement <4 x i32> undef, i32 %64, i32 0
5685 ; CHECK-NEXT: %66 = extractelement <2 x double> %12, i32 1
5686 ; CHECK-NEXT: %67 = fptoui double %66 to i32
5687 ; CHECK-NEXT: %68 = insertelement <4 x i32> %65, i32 %67, i32 1
5688 ; CHECK-NEXT: %69 = extractelement <2 x double> %13, i32 0
5689 ; CHECK-NEXT: %70 = fptoui double %69 to i32
5690 ; CHECK-NEXT: %71 = insertelement <4 x i32> %68, i32 %70, i32 2
5691 ; CHECK-NEXT: %72 = extractelement <2 x double> %13, i32 1
5692 ; CHECK-NEXT: %73 = fptoui double %72 to i32
5693 ; CHECK-NEXT: %74 = insertelement <4 x i32> %71, i32 %73, i32 3
5694 ; CHECK-NEXT: store <4 x i32> %38, <4 x i32>* %0, align 16
5695 ; CHECK-NEXT: store <4 x i32> %50, <4 x i32>* %1, align 16
5696 ; CHECK-NEXT: store <4 x i32> %62, <4 x i32>* %2, align 16
5697 ; CHECK-NEXT: store <4 x i32> %74, <4 x i32>* %3, align 16
5698 ; CHECK-NEXT: ret <4 x i32> %26
5699
5700 define <20 x i64> @fptoui_cast_20xdouble_to_20xi64(<20 x double>) {
5701 %2 = fptoui <20 x double> %0 to <20 x i64>
5702 ret <20 x i64> %2
5703 }
5704 ; CHECK-LABEL: define <2 x i64> @fptoui_cast_20xdouble_to_20xi64(<2 x i64>* noca pture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable( 16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonn ull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull derefe renceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* noca pture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>)
5705 ; CHECK-NEXT: %20 = fptoui <2 x double> %9 to <2 x i64>
5706 ; CHECK-NEXT: %21 = fptoui <2 x double> %10 to <2 x i64>
5707 ; CHECK-NEXT: %22 = fptoui <2 x double> %11 to <2 x i64>
5708 ; CHECK-NEXT: %23 = fptoui <2 x double> %12 to <2 x i64>
5709 ; CHECK-NEXT: %24 = fptoui <2 x double> %13 to <2 x i64>
5710 ; CHECK-NEXT: %25 = fptoui <2 x double> %14 to <2 x i64>
5711 ; CHECK-NEXT: %26 = fptoui <2 x double> %15 to <2 x i64>
5712 ; CHECK-NEXT: %27 = fptoui <2 x double> %16 to <2 x i64>
5713 ; CHECK-NEXT: %28 = fptoui <2 x double> %17 to <2 x i64>
5714 ; CHECK-NEXT: %29 = fptoui <2 x double> %18 to <2 x i64>
5715 ; CHECK-NEXT: store <2 x i64> %21, <2 x i64>* %0, align 16
5716 ; CHECK-NEXT: store <2 x i64> %22, <2 x i64>* %1, align 16
5717 ; CHECK-NEXT: store <2 x i64> %23, <2 x i64>* %2, align 16
5718 ; CHECK-NEXT: store <2 x i64> %24, <2 x i64>* %3, align 16
5719 ; CHECK-NEXT: store <2 x i64> %25, <2 x i64>* %4, align 16
5720 ; CHECK-NEXT: store <2 x i64> %26, <2 x i64>* %5, align 16
5721 ; CHECK-NEXT: store <2 x i64> %27, <2 x i64>* %6, align 16
5722 ; CHECK-NEXT: store <2 x i64> %28, <2 x i64>* %7, align 16
5723 ; CHECK-NEXT: store <2 x i64> %29, <2 x i64>* %8, align 16
5724 ; CHECK-NEXT: ret <2 x i64> %20
5725
5726 define <20 x i8> @fptosi_cast_20xfloat_to_20xi8(<20 x float>) {
5727 %2 = fptosi <20 x float> %0 to <20 x i8>
5728 ret <20 x i8> %2
5729 }
5730 ; CHECK-LABEL: define <16 x i8> @fptosi_cast_20xfloat_to_20xi8(<16 x i8>* nocapt ure nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x flo at>, <4 x float>)
5731 ; CHECK-NEXT: %7 = extractelement <4 x float> %1, i32 0
5732 ; CHECK-NEXT: %8 = fptosi float %7 to i8
5733 ; CHECK-NEXT: %9 = insertelement <16 x i8> undef, i8 %8, i32 0
5734 ; CHECK-NEXT: %10 = extractelement <4 x float> %1, i32 1
5735 ; CHECK-NEXT: %11 = fptosi float %10 to i8
5736 ; CHECK-NEXT: %12 = insertelement <16 x i8> %9, i8 %11, i32 1
5737 ; CHECK-NEXT: %13 = extractelement <4 x float> %1, i32 2
5738 ; CHECK-NEXT: %14 = fptosi float %13 to i8
5739 ; CHECK-NEXT: %15 = insertelement <16 x i8> %12, i8 %14, i32 2
5740 ; CHECK-NEXT: %16 = extractelement <4 x float> %1, i32 3
5741 ; CHECK-NEXT: %17 = fptosi float %16 to i8
5742 ; CHECK-NEXT: %18 = insertelement <16 x i8> %15, i8 %17, i32 3
5743 ; CHECK-NEXT: %19 = extractelement <4 x float> %2, i32 0
5744 ; CHECK-NEXT: %20 = fptosi float %19 to i8
5745 ; CHECK-NEXT: %21 = insertelement <16 x i8> %18, i8 %20, i32 4
5746 ; CHECK-NEXT: %22 = extractelement <4 x float> %2, i32 1
5747 ; CHECK-NEXT: %23 = fptosi float %22 to i8
5748 ; CHECK-NEXT: %24 = insertelement <16 x i8> %21, i8 %23, i32 5
5749 ; CHECK-NEXT: %25 = extractelement <4 x float> %2, i32 2
5750 ; CHECK-NEXT: %26 = fptosi float %25 to i8
5751 ; CHECK-NEXT: %27 = insertelement <16 x i8> %24, i8 %26, i32 6
5752 ; CHECK-NEXT: %28 = extractelement <4 x float> %2, i32 3
5753 ; CHECK-NEXT: %29 = fptosi float %28 to i8
5754 ; CHECK-NEXT: %30 = insertelement <16 x i8> %27, i8 %29, i32 7
5755 ; CHECK-NEXT: %31 = extractelement <4 x float> %3, i32 0
5756 ; CHECK-NEXT: %32 = fptosi float %31 to i8
5757 ; CHECK-NEXT: %33 = insertelement <16 x i8> %30, i8 %32, i32 8
5758 ; CHECK-NEXT: %34 = extractelement <4 x float> %3, i32 1
5759 ; CHECK-NEXT: %35 = fptosi float %34 to i8
5760 ; CHECK-NEXT: %36 = insertelement <16 x i8> %33, i8 %35, i32 9
5761 ; CHECK-NEXT: %37 = extractelement <4 x float> %3, i32 2
5762 ; CHECK-NEXT: %38 = fptosi float %37 to i8
5763 ; CHECK-NEXT: %39 = insertelement <16 x i8> %36, i8 %38, i32 10
5764 ; CHECK-NEXT: %40 = extractelement <4 x float> %3, i32 3
5765 ; CHECK-NEXT: %41 = fptosi float %40 to i8
5766 ; CHECK-NEXT: %42 = insertelement <16 x i8> %39, i8 %41, i32 11
5767 ; CHECK-NEXT: %43 = extractelement <4 x float> %4, i32 0
5768 ; CHECK-NEXT: %44 = fptosi float %43 to i8
5769 ; CHECK-NEXT: %45 = insertelement <16 x i8> %42, i8 %44, i32 12
5770 ; CHECK-NEXT: %46 = extractelement <4 x float> %4, i32 1
5771 ; CHECK-NEXT: %47 = fptosi float %46 to i8
5772 ; CHECK-NEXT: %48 = insertelement <16 x i8> %45, i8 %47, i32 13
5773 ; CHECK-NEXT: %49 = extractelement <4 x float> %4, i32 2
5774 ; CHECK-NEXT: %50 = fptosi float %49 to i8
5775 ; CHECK-NEXT: %51 = insertelement <16 x i8> %48, i8 %50, i32 14
5776 ; CHECK-NEXT: %52 = extractelement <4 x float> %4, i32 3
5777 ; CHECK-NEXT: %53 = fptosi float %52 to i8
5778 ; CHECK-NEXT: %54 = insertelement <16 x i8> %51, i8 %53, i32 15
5779 ; CHECK-NEXT: %55 = extractelement <4 x float> %5, i32 0
5780 ; CHECK-NEXT: %56 = fptosi float %55 to i8
5781 ; CHECK-NEXT: %57 = insertelement <16 x i8> undef, i8 %56, i32 0
5782 ; CHECK-NEXT: %58 = extractelement <4 x float> %5, i32 1
5783 ; CHECK-NEXT: %59 = fptosi float %58 to i8
5784 ; CHECK-NEXT: %60 = insertelement <16 x i8> %57, i8 %59, i32 1
5785 ; CHECK-NEXT: %61 = extractelement <4 x float> %5, i32 2
5786 ; CHECK-NEXT: %62 = fptosi float %61 to i8
5787 ; CHECK-NEXT: %63 = insertelement <16 x i8> %60, i8 %62, i32 2
5788 ; CHECK-NEXT: %64 = extractelement <4 x float> %5, i32 3
5789 ; CHECK-NEXT: %65 = fptosi float %64 to i8
5790 ; CHECK-NEXT: %66 = insertelement <16 x i8> %63, i8 %65, i32 3
5791 ; CHECK-NEXT: store <16 x i8> %66, <16 x i8>* %0, align 16
5792 ; CHECK-NEXT: ret <16 x i8> %54
5793
5794 define <20 x i16> @fptosi_cast_20xfloat_to_20xi16(<20 x float>) {
5795 %2 = fptosi <20 x float> %0 to <20 x i16>
5796 ret <20 x i16> %2
5797 }
5798 ; CHECK-LABEL: define <8 x i16> @fptosi_cast_20xfloat_to_20xi16(<8 x i16>* nocap ture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(1 6), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>)
5799 ; CHECK-NEXT: %8 = extractelement <4 x float> %2, i32 0
5800 ; CHECK-NEXT: %9 = fptosi float %8 to i16
5801 ; CHECK-NEXT: %10 = insertelement <8 x i16> undef, i16 %9, i32 0
5802 ; CHECK-NEXT: %11 = extractelement <4 x float> %2, i32 1
5803 ; CHECK-NEXT: %12 = fptosi float %11 to i16
5804 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 1
5805 ; CHECK-NEXT: %14 = extractelement <4 x float> %2, i32 2
5806 ; CHECK-NEXT: %15 = fptosi float %14 to i16
5807 ; CHECK-NEXT: %16 = insertelement <8 x i16> %13, i16 %15, i32 2
5808 ; CHECK-NEXT: %17 = extractelement <4 x float> %2, i32 3
5809 ; CHECK-NEXT: %18 = fptosi float %17 to i16
5810 ; CHECK-NEXT: %19 = insertelement <8 x i16> %16, i16 %18, i32 3
5811 ; CHECK-NEXT: %20 = extractelement <4 x float> %3, i32 0
5812 ; CHECK-NEXT: %21 = fptosi float %20 to i16
5813 ; CHECK-NEXT: %22 = insertelement <8 x i16> %19, i16 %21, i32 4
5814 ; CHECK-NEXT: %23 = extractelement <4 x float> %3, i32 1
5815 ; CHECK-NEXT: %24 = fptosi float %23 to i16
5816 ; CHECK-NEXT: %25 = insertelement <8 x i16> %22, i16 %24, i32 5
5817 ; CHECK-NEXT: %26 = extractelement <4 x float> %3, i32 2
5818 ; CHECK-NEXT: %27 = fptosi float %26 to i16
5819 ; CHECK-NEXT: %28 = insertelement <8 x i16> %25, i16 %27, i32 6
5820 ; CHECK-NEXT: %29 = extractelement <4 x float> %3, i32 3
5821 ; CHECK-NEXT: %30 = fptosi float %29 to i16
5822 ; CHECK-NEXT: %31 = insertelement <8 x i16> %28, i16 %30, i32 7
5823 ; CHECK-NEXT: %32 = extractelement <4 x float> %4, i32 0
5824 ; CHECK-NEXT: %33 = fptosi float %32 to i16
5825 ; CHECK-NEXT: %34 = insertelement <8 x i16> undef, i16 %33, i32 0
5826 ; CHECK-NEXT: %35 = extractelement <4 x float> %4, i32 1
5827 ; CHECK-NEXT: %36 = fptosi float %35 to i16
5828 ; CHECK-NEXT: %37 = insertelement <8 x i16> %34, i16 %36, i32 1
5829 ; CHECK-NEXT: %38 = extractelement <4 x float> %4, i32 2
5830 ; CHECK-NEXT: %39 = fptosi float %38 to i16
5831 ; CHECK-NEXT: %40 = insertelement <8 x i16> %37, i16 %39, i32 2
5832 ; CHECK-NEXT: %41 = extractelement <4 x float> %4, i32 3
5833 ; CHECK-NEXT: %42 = fptosi float %41 to i16
5834 ; CHECK-NEXT: %43 = insertelement <8 x i16> %40, i16 %42, i32 3
5835 ; CHECK-NEXT: %44 = extractelement <4 x float> %5, i32 0
5836 ; CHECK-NEXT: %45 = fptosi float %44 to i16
5837 ; CHECK-NEXT: %46 = insertelement <8 x i16> %43, i16 %45, i32 4
5838 ; CHECK-NEXT: %47 = extractelement <4 x float> %5, i32 1
5839 ; CHECK-NEXT: %48 = fptosi float %47 to i16
5840 ; CHECK-NEXT: %49 = insertelement <8 x i16> %46, i16 %48, i32 5
5841 ; CHECK-NEXT: %50 = extractelement <4 x float> %5, i32 2
5842 ; CHECK-NEXT: %51 = fptosi float %50 to i16
5843 ; CHECK-NEXT: %52 = insertelement <8 x i16> %49, i16 %51, i32 6
5844 ; CHECK-NEXT: %53 = extractelement <4 x float> %5, i32 3
5845 ; CHECK-NEXT: %54 = fptosi float %53 to i16
5846 ; CHECK-NEXT: %55 = insertelement <8 x i16> %52, i16 %54, i32 7
5847 ; CHECK-NEXT: %56 = extractelement <4 x float> %6, i32 0
5848 ; CHECK-NEXT: %57 = fptosi float %56 to i16
5849 ; CHECK-NEXT: %58 = insertelement <8 x i16> undef, i16 %57, i32 0
5850 ; CHECK-NEXT: %59 = extractelement <4 x float> %6, i32 1
5851 ; CHECK-NEXT: %60 = fptosi float %59 to i16
5852 ; CHECK-NEXT: %61 = insertelement <8 x i16> %58, i16 %60, i32 1
5853 ; CHECK-NEXT: %62 = extractelement <4 x float> %6, i32 2
5854 ; CHECK-NEXT: %63 = fptosi float %62 to i16
5855 ; CHECK-NEXT: %64 = insertelement <8 x i16> %61, i16 %63, i32 2
5856 ; CHECK-NEXT: %65 = extractelement <4 x float> %6, i32 3
5857 ; CHECK-NEXT: %66 = fptosi float %65 to i16
5858 ; CHECK-NEXT: %67 = insertelement <8 x i16> %64, i16 %66, i32 3
5859 ; CHECK-NEXT: store <8 x i16> %55, <8 x i16>* %0, align 16
5860 ; CHECK-NEXT: store <8 x i16> %67, <8 x i16>* %1, align 16
5861 ; CHECK-NEXT: ret <8 x i16> %31
5862
5863 define <20 x i32> @fptosi_cast_20xfloat_to_20xi32(<20 x float>) {
5864 %2 = fptosi <20 x float> %0 to <20 x i32>
5865 ret <20 x i32> %2
5866 }
5867 ; CHECK-LABEL: define <4 x i32> @fptosi_cast_20xfloat_to_20xi32(<4 x i32>* nocap ture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(1 6), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnu ll dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>)
5868 ; CHECK-NEXT: %10 = fptosi <4 x float> %4 to <4 x i32>
5869 ; CHECK-NEXT: %11 = fptosi <4 x float> %5 to <4 x i32>
5870 ; CHECK-NEXT: %12 = fptosi <4 x float> %6 to <4 x i32>
5871 ; CHECK-NEXT: %13 = fptosi <4 x float> %7 to <4 x i32>
5872 ; CHECK-NEXT: %14 = fptosi <4 x float> %8 to <4 x i32>
5873 ; CHECK-NEXT: store <4 x i32> %11, <4 x i32>* %0, align 16
5874 ; CHECK-NEXT: store <4 x i32> %12, <4 x i32>* %1, align 16
5875 ; CHECK-NEXT: store <4 x i32> %13, <4 x i32>* %2, align 16
5876 ; CHECK-NEXT: store <4 x i32> %14, <4 x i32>* %3, align 16
5877 ; CHECK-NEXT: ret <4 x i32> %10
5878
5879 define <20 x i64> @fptosi_cast_20xfloat_to_20xi64(<20 x float>) {
5880 %2 = fptosi <20 x float> %0 to <20 x i64>
5881 ret <20 x i64> %2
5882 }
5883 ; CHECK-LABEL: define <2 x i64> @fptosi_cast_20xfloat_to_20xi64(<2 x i64>* nocap ture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(1 6), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnu ll dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i 64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull derefer enceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocap ture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x fl oat>, <4 x float>)
5884 ; CHECK-NEXT: %15 = extractelement <4 x float> %9, i32 0
5885 ; CHECK-NEXT: %16 = fptosi float %15 to i64
5886 ; CHECK-NEXT: %17 = insertelement <2 x i64> undef, i64 %16, i32 0
5887 ; CHECK-NEXT: %18 = extractelement <4 x float> %9, i32 1
5888 ; CHECK-NEXT: %19 = fptosi float %18 to i64
5889 ; CHECK-NEXT: %20 = insertelement <2 x i64> %17, i64 %19, i32 1
5890 ; CHECK-NEXT: %21 = extractelement <4 x float> %9, i32 2
5891 ; CHECK-NEXT: %22 = fptosi float %21 to i64
5892 ; CHECK-NEXT: %23 = insertelement <2 x i64> undef, i64 %22, i32 0
5893 ; CHECK-NEXT: %24 = extractelement <4 x float> %9, i32 3
5894 ; CHECK-NEXT: %25 = fptosi float %24 to i64
5895 ; CHECK-NEXT: %26 = insertelement <2 x i64> %23, i64 %25, i32 1
5896 ; CHECK-NEXT: %27 = extractelement <4 x float> %10, i32 0
5897 ; CHECK-NEXT: %28 = fptosi float %27 to i64
5898 ; CHECK-NEXT: %29 = insertelement <2 x i64> undef, i64 %28, i32 0
5899 ; CHECK-NEXT: %30 = extractelement <4 x float> %10, i32 1
5900 ; CHECK-NEXT: %31 = fptosi float %30 to i64
5901 ; CHECK-NEXT: %32 = insertelement <2 x i64> %29, i64 %31, i32 1
5902 ; CHECK-NEXT: %33 = extractelement <4 x float> %10, i32 2
5903 ; CHECK-NEXT: %34 = fptosi float %33 to i64
5904 ; CHECK-NEXT: %35 = insertelement <2 x i64> undef, i64 %34, i32 0
5905 ; CHECK-NEXT: %36 = extractelement <4 x float> %10, i32 3
5906 ; CHECK-NEXT: %37 = fptosi float %36 to i64
5907 ; CHECK-NEXT: %38 = insertelement <2 x i64> %35, i64 %37, i32 1
5908 ; CHECK-NEXT: %39 = extractelement <4 x float> %11, i32 0
5909 ; CHECK-NEXT: %40 = fptosi float %39 to i64
5910 ; CHECK-NEXT: %41 = insertelement <2 x i64> undef, i64 %40, i32 0
5911 ; CHECK-NEXT: %42 = extractelement <4 x float> %11, i32 1
5912 ; CHECK-NEXT: %43 = fptosi float %42 to i64
5913 ; CHECK-NEXT: %44 = insertelement <2 x i64> %41, i64 %43, i32 1
5914 ; CHECK-NEXT: %45 = extractelement <4 x float> %11, i32 2
5915 ; CHECK-NEXT: %46 = fptosi float %45 to i64
5916 ; CHECK-NEXT: %47 = insertelement <2 x i64> undef, i64 %46, i32 0
5917 ; CHECK-NEXT: %48 = extractelement <4 x float> %11, i32 3
5918 ; CHECK-NEXT: %49 = fptosi float %48 to i64
5919 ; CHECK-NEXT: %50 = insertelement <2 x i64> %47, i64 %49, i32 1
5920 ; CHECK-NEXT: %51 = extractelement <4 x float> %12, i32 0
5921 ; CHECK-NEXT: %52 = fptosi float %51 to i64
5922 ; CHECK-NEXT: %53 = insertelement <2 x i64> undef, i64 %52, i32 0
5923 ; CHECK-NEXT: %54 = extractelement <4 x float> %12, i32 1
5924 ; CHECK-NEXT: %55 = fptosi float %54 to i64
5925 ; CHECK-NEXT: %56 = insertelement <2 x i64> %53, i64 %55, i32 1
5926 ; CHECK-NEXT: %57 = extractelement <4 x float> %12, i32 2
5927 ; CHECK-NEXT: %58 = fptosi float %57 to i64
5928 ; CHECK-NEXT: %59 = insertelement <2 x i64> undef, i64 %58, i32 0
5929 ; CHECK-NEXT: %60 = extractelement <4 x float> %12, i32 3
5930 ; CHECK-NEXT: %61 = fptosi float %60 to i64
5931 ; CHECK-NEXT: %62 = insertelement <2 x i64> %59, i64 %61, i32 1
5932 ; CHECK-NEXT: %63 = extractelement <4 x float> %13, i32 0
5933 ; CHECK-NEXT: %64 = fptosi float %63 to i64
5934 ; CHECK-NEXT: %65 = insertelement <2 x i64> undef, i64 %64, i32 0
5935 ; CHECK-NEXT: %66 = extractelement <4 x float> %13, i32 1
5936 ; CHECK-NEXT: %67 = fptosi float %66 to i64
5937 ; CHECK-NEXT: %68 = insertelement <2 x i64> %65, i64 %67, i32 1
5938 ; CHECK-NEXT: %69 = extractelement <4 x float> %13, i32 2
5939 ; CHECK-NEXT: %70 = fptosi float %69 to i64
5940 ; CHECK-NEXT: %71 = insertelement <2 x i64> undef, i64 %70, i32 0
5941 ; CHECK-NEXT: %72 = extractelement <4 x float> %13, i32 3
5942 ; CHECK-NEXT: %73 = fptosi float %72 to i64
5943 ; CHECK-NEXT: %74 = insertelement <2 x i64> %71, i64 %73, i32 1
5944 ; CHECK-NEXT: store <2 x i64> %26, <2 x i64>* %0, align 16
5945 ; CHECK-NEXT: store <2 x i64> %32, <2 x i64>* %1, align 16
5946 ; CHECK-NEXT: store <2 x i64> %38, <2 x i64>* %2, align 16
5947 ; CHECK-NEXT: store <2 x i64> %44, <2 x i64>* %3, align 16
5948 ; CHECK-NEXT: store <2 x i64> %50, <2 x i64>* %4, align 16
5949 ; CHECK-NEXT: store <2 x i64> %56, <2 x i64>* %5, align 16
5950 ; CHECK-NEXT: store <2 x i64> %62, <2 x i64>* %6, align 16
5951 ; CHECK-NEXT: store <2 x i64> %68, <2 x i64>* %7, align 16
5952 ; CHECK-NEXT: store <2 x i64> %74, <2 x i64>* %8, align 16
5953 ; CHECK-NEXT: ret <2 x i64> %20
5954
5955 define <20 x i8> @fptosi_cast_20xdouble_to_20xi8(<20 x double>) {
5956 %2 = fptosi <20 x double> %0 to <20 x i8>
5957 ret <20 x i8> %2
5958 }
5959 ; CHECK-LABEL: define <16 x i8> @fptosi_cast_20xdouble_to_20xi8(<16 x i8>* nocap ture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>)
5960 ; CHECK-NEXT: %12 = extractelement <2 x double> %1, i32 0
5961 ; CHECK-NEXT: %13 = fptosi double %12 to i8
5962 ; CHECK-NEXT: %14 = insertelement <16 x i8> undef, i8 %13, i32 0
5963 ; CHECK-NEXT: %15 = extractelement <2 x double> %1, i32 1
5964 ; CHECK-NEXT: %16 = fptosi double %15 to i8
5965 ; CHECK-NEXT: %17 = insertelement <16 x i8> %14, i8 %16, i32 1
5966 ; CHECK-NEXT: %18 = extractelement <2 x double> %2, i32 0
5967 ; CHECK-NEXT: %19 = fptosi double %18 to i8
5968 ; CHECK-NEXT: %20 = insertelement <16 x i8> %17, i8 %19, i32 2
5969 ; CHECK-NEXT: %21 = extractelement <2 x double> %2, i32 1
5970 ; CHECK-NEXT: %22 = fptosi double %21 to i8
5971 ; CHECK-NEXT: %23 = insertelement <16 x i8> %20, i8 %22, i32 3
5972 ; CHECK-NEXT: %24 = extractelement <2 x double> %3, i32 0
5973 ; CHECK-NEXT: %25 = fptosi double %24 to i8
5974 ; CHECK-NEXT: %26 = insertelement <16 x i8> %23, i8 %25, i32 4
5975 ; CHECK-NEXT: %27 = extractelement <2 x double> %3, i32 1
5976 ; CHECK-NEXT: %28 = fptosi double %27 to i8
5977 ; CHECK-NEXT: %29 = insertelement <16 x i8> %26, i8 %28, i32 5
5978 ; CHECK-NEXT: %30 = extractelement <2 x double> %4, i32 0
5979 ; CHECK-NEXT: %31 = fptosi double %30 to i8
5980 ; CHECK-NEXT: %32 = insertelement <16 x i8> %29, i8 %31, i32 6
5981 ; CHECK-NEXT: %33 = extractelement <2 x double> %4, i32 1
5982 ; CHECK-NEXT: %34 = fptosi double %33 to i8
5983 ; CHECK-NEXT: %35 = insertelement <16 x i8> %32, i8 %34, i32 7
5984 ; CHECK-NEXT: %36 = extractelement <2 x double> %5, i32 0
5985 ; CHECK-NEXT: %37 = fptosi double %36 to i8
5986 ; CHECK-NEXT: %38 = insertelement <16 x i8> %35, i8 %37, i32 8
5987 ; CHECK-NEXT: %39 = extractelement <2 x double> %5, i32 1
5988 ; CHECK-NEXT: %40 = fptosi double %39 to i8
5989 ; CHECK-NEXT: %41 = insertelement <16 x i8> %38, i8 %40, i32 9
5990 ; CHECK-NEXT: %42 = extractelement <2 x double> %6, i32 0
5991 ; CHECK-NEXT: %43 = fptosi double %42 to i8
5992 ; CHECK-NEXT: %44 = insertelement <16 x i8> %41, i8 %43, i32 10
5993 ; CHECK-NEXT: %45 = extractelement <2 x double> %6, i32 1
5994 ; CHECK-NEXT: %46 = fptosi double %45 to i8
5995 ; CHECK-NEXT: %47 = insertelement <16 x i8> %44, i8 %46, i32 11
5996 ; CHECK-NEXT: %48 = extractelement <2 x double> %7, i32 0
5997 ; CHECK-NEXT: %49 = fptosi double %48 to i8
5998 ; CHECK-NEXT: %50 = insertelement <16 x i8> %47, i8 %49, i32 12
5999 ; CHECK-NEXT: %51 = extractelement <2 x double> %7, i32 1
6000 ; CHECK-NEXT: %52 = fptosi double %51 to i8
6001 ; CHECK-NEXT: %53 = insertelement <16 x i8> %50, i8 %52, i32 13
6002 ; CHECK-NEXT: %54 = extractelement <2 x double> %8, i32 0
6003 ; CHECK-NEXT: %55 = fptosi double %54 to i8
6004 ; CHECK-NEXT: %56 = insertelement <16 x i8> %53, i8 %55, i32 14
6005 ; CHECK-NEXT: %57 = extractelement <2 x double> %8, i32 1
6006 ; CHECK-NEXT: %58 = fptosi double %57 to i8
6007 ; CHECK-NEXT: %59 = insertelement <16 x i8> %56, i8 %58, i32 15
6008 ; CHECK-NEXT: %60 = extractelement <2 x double> %9, i32 0
6009 ; CHECK-NEXT: %61 = fptosi double %60 to i8
6010 ; CHECK-NEXT: %62 = insertelement <16 x i8> undef, i8 %61, i32 0
6011 ; CHECK-NEXT: %63 = extractelement <2 x double> %9, i32 1
6012 ; CHECK-NEXT: %64 = fptosi double %63 to i8
6013 ; CHECK-NEXT: %65 = insertelement <16 x i8> %62, i8 %64, i32 1
6014 ; CHECK-NEXT: %66 = extractelement <2 x double> %10, i32 0
6015 ; CHECK-NEXT: %67 = fptosi double %66 to i8
6016 ; CHECK-NEXT: %68 = insertelement <16 x i8> %65, i8 %67, i32 2
6017 ; CHECK-NEXT: %69 = extractelement <2 x double> %10, i32 1
6018 ; CHECK-NEXT: %70 = fptosi double %69 to i8
6019 ; CHECK-NEXT: %71 = insertelement <16 x i8> %68, i8 %70, i32 3
6020 ; CHECK-NEXT: store <16 x i8> %71, <16 x i8>* %0, align 16
6021 ; CHECK-NEXT: ret <16 x i8> %59
6022
6023 define <20 x i16> @fptosi_cast_20xdouble_to_20xi16(<20 x double>) {
6024 %2 = fptosi <20 x double> %0 to <20 x i16>
6025 ret <20 x i16> %2
6026 }
6027 ; CHECK-LABEL: define <8 x i16> @fptosi_cast_20xdouble_to_20xi16(<8 x i16>* noca pture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable( 16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>)
6028 ; CHECK-NEXT: %13 = extractelement <2 x double> %2, i32 0
6029 ; CHECK-NEXT: %14 = fptosi double %13 to i16
6030 ; CHECK-NEXT: %15 = insertelement <8 x i16> undef, i16 %14, i32 0
6031 ; CHECK-NEXT: %16 = extractelement <2 x double> %2, i32 1
6032 ; CHECK-NEXT: %17 = fptosi double %16 to i16
6033 ; CHECK-NEXT: %18 = insertelement <8 x i16> %15, i16 %17, i32 1
6034 ; CHECK-NEXT: %19 = extractelement <2 x double> %3, i32 0
6035 ; CHECK-NEXT: %20 = fptosi double %19 to i16
6036 ; CHECK-NEXT: %21 = insertelement <8 x i16> %18, i16 %20, i32 2
6037 ; CHECK-NEXT: %22 = extractelement <2 x double> %3, i32 1
6038 ; CHECK-NEXT: %23 = fptosi double %22 to i16
6039 ; CHECK-NEXT: %24 = insertelement <8 x i16> %21, i16 %23, i32 3
6040 ; CHECK-NEXT: %25 = extractelement <2 x double> %4, i32 0
6041 ; CHECK-NEXT: %26 = fptosi double %25 to i16
6042 ; CHECK-NEXT: %27 = insertelement <8 x i16> %24, i16 %26, i32 4
6043 ; CHECK-NEXT: %28 = extractelement <2 x double> %4, i32 1
6044 ; CHECK-NEXT: %29 = fptosi double %28 to i16
6045 ; CHECK-NEXT: %30 = insertelement <8 x i16> %27, i16 %29, i32 5
6046 ; CHECK-NEXT: %31 = extractelement <2 x double> %5, i32 0
6047 ; CHECK-NEXT: %32 = fptosi double %31 to i16
6048 ; CHECK-NEXT: %33 = insertelement <8 x i16> %30, i16 %32, i32 6
6049 ; CHECK-NEXT: %34 = extractelement <2 x double> %5, i32 1
6050 ; CHECK-NEXT: %35 = fptosi double %34 to i16
6051 ; CHECK-NEXT: %36 = insertelement <8 x i16> %33, i16 %35, i32 7
6052 ; CHECK-NEXT: %37 = extractelement <2 x double> %6, i32 0
6053 ; CHECK-NEXT: %38 = fptosi double %37 to i16
6054 ; CHECK-NEXT: %39 = insertelement <8 x i16> undef, i16 %38, i32 0
6055 ; CHECK-NEXT: %40 = extractelement <2 x double> %6, i32 1
6056 ; CHECK-NEXT: %41 = fptosi double %40 to i16
6057 ; CHECK-NEXT: %42 = insertelement <8 x i16> %39, i16 %41, i32 1
6058 ; CHECK-NEXT: %43 = extractelement <2 x double> %7, i32 0
6059 ; CHECK-NEXT: %44 = fptosi double %43 to i16
6060 ; CHECK-NEXT: %45 = insertelement <8 x i16> %42, i16 %44, i32 2
6061 ; CHECK-NEXT: %46 = extractelement <2 x double> %7, i32 1
6062 ; CHECK-NEXT: %47 = fptosi double %46 to i16
6063 ; CHECK-NEXT: %48 = insertelement <8 x i16> %45, i16 %47, i32 3
6064 ; CHECK-NEXT: %49 = extractelement <2 x double> %8, i32 0
6065 ; CHECK-NEXT: %50 = fptosi double %49 to i16
6066 ; CHECK-NEXT: %51 = insertelement <8 x i16> %48, i16 %50, i32 4
6067 ; CHECK-NEXT: %52 = extractelement <2 x double> %8, i32 1
6068 ; CHECK-NEXT: %53 = fptosi double %52 to i16
6069 ; CHECK-NEXT: %54 = insertelement <8 x i16> %51, i16 %53, i32 5
6070 ; CHECK-NEXT: %55 = extractelement <2 x double> %9, i32 0
6071 ; CHECK-NEXT: %56 = fptosi double %55 to i16
6072 ; CHECK-NEXT: %57 = insertelement <8 x i16> %54, i16 %56, i32 6
6073 ; CHECK-NEXT: %58 = extractelement <2 x double> %9, i32 1
6074 ; CHECK-NEXT: %59 = fptosi double %58 to i16
6075 ; CHECK-NEXT: %60 = insertelement <8 x i16> %57, i16 %59, i32 7
6076 ; CHECK-NEXT: %61 = extractelement <2 x double> %10, i32 0
6077 ; CHECK-NEXT: %62 = fptosi double %61 to i16
6078 ; CHECK-NEXT: %63 = insertelement <8 x i16> undef, i16 %62, i32 0
6079 ; CHECK-NEXT: %64 = extractelement <2 x double> %10, i32 1
6080 ; CHECK-NEXT: %65 = fptosi double %64 to i16
6081 ; CHECK-NEXT: %66 = insertelement <8 x i16> %63, i16 %65, i32 1
6082 ; CHECK-NEXT: %67 = extractelement <2 x double> %11, i32 0
6083 ; CHECK-NEXT: %68 = fptosi double %67 to i16
6084 ; CHECK-NEXT: %69 = insertelement <8 x i16> %66, i16 %68, i32 2
6085 ; CHECK-NEXT: %70 = extractelement <2 x double> %11, i32 1
6086 ; CHECK-NEXT: %71 = fptosi double %70 to i16
6087 ; CHECK-NEXT: %72 = insertelement <8 x i16> %69, i16 %71, i32 3
6088 ; CHECK-NEXT: store <8 x i16> %60, <8 x i16>* %0, align 16
6089 ; CHECK-NEXT: store <8 x i16> %72, <8 x i16>* %1, align 16
6090 ; CHECK-NEXT: ret <8 x i16> %36
6091
6092 define <20 x i32> @fptosi_cast_20xdouble_to_20xi32(<20 x double>) {
6093 %2 = fptosi <20 x double> %0 to <20 x i32>
6094 ret <20 x i32> %2
6095 }
6096 ; CHECK-LABEL: define <4 x i32> @fptosi_cast_20xdouble_to_20xi32(<4 x i32>* noca pture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable( 16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonn ull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x doub le>)
6097 ; CHECK-NEXT: %15 = extractelement <2 x double> %4, i32 0
6098 ; CHECK-NEXT: %16 = fptosi double %15 to i32
6099 ; CHECK-NEXT: %17 = insertelement <4 x i32> undef, i32 %16, i32 0
6100 ; CHECK-NEXT: %18 = extractelement <2 x double> %4, i32 1
6101 ; CHECK-NEXT: %19 = fptosi double %18 to i32
6102 ; CHECK-NEXT: %20 = insertelement <4 x i32> %17, i32 %19, i32 1
6103 ; CHECK-NEXT: %21 = extractelement <2 x double> %5, i32 0
6104 ; CHECK-NEXT: %22 = fptosi double %21 to i32
6105 ; CHECK-NEXT: %23 = insertelement <4 x i32> %20, i32 %22, i32 2
6106 ; CHECK-NEXT: %24 = extractelement <2 x double> %5, i32 1
6107 ; CHECK-NEXT: %25 = fptosi double %24 to i32
6108 ; CHECK-NEXT: %26 = insertelement <4 x i32> %23, i32 %25, i32 3
6109 ; CHECK-NEXT: %27 = extractelement <2 x double> %6, i32 0
6110 ; CHECK-NEXT: %28 = fptosi double %27 to i32
6111 ; CHECK-NEXT: %29 = insertelement <4 x i32> undef, i32 %28, i32 0
6112 ; CHECK-NEXT: %30 = extractelement <2 x double> %6, i32 1
6113 ; CHECK-NEXT: %31 = fptosi double %30 to i32
6114 ; CHECK-NEXT: %32 = insertelement <4 x i32> %29, i32 %31, i32 1
6115 ; CHECK-NEXT: %33 = extractelement <2 x double> %7, i32 0
6116 ; CHECK-NEXT: %34 = fptosi double %33 to i32
6117 ; CHECK-NEXT: %35 = insertelement <4 x i32> %32, i32 %34, i32 2
6118 ; CHECK-NEXT: %36 = extractelement <2 x double> %7, i32 1
6119 ; CHECK-NEXT: %37 = fptosi double %36 to i32
6120 ; CHECK-NEXT: %38 = insertelement <4 x i32> %35, i32 %37, i32 3
6121 ; CHECK-NEXT: %39 = extractelement <2 x double> %8, i32 0
6122 ; CHECK-NEXT: %40 = fptosi double %39 to i32
6123 ; CHECK-NEXT: %41 = insertelement <4 x i32> undef, i32 %40, i32 0
6124 ; CHECK-NEXT: %42 = extractelement <2 x double> %8, i32 1
6125 ; CHECK-NEXT: %43 = fptosi double %42 to i32
6126 ; CHECK-NEXT: %44 = insertelement <4 x i32> %41, i32 %43, i32 1
6127 ; CHECK-NEXT: %45 = extractelement <2 x double> %9, i32 0
6128 ; CHECK-NEXT: %46 = fptosi double %45 to i32
6129 ; CHECK-NEXT: %47 = insertelement <4 x i32> %44, i32 %46, i32 2
6130 ; CHECK-NEXT: %48 = extractelement <2 x double> %9, i32 1
6131 ; CHECK-NEXT: %49 = fptosi double %48 to i32
6132 ; CHECK-NEXT: %50 = insertelement <4 x i32> %47, i32 %49, i32 3
6133 ; CHECK-NEXT: %51 = extractelement <2 x double> %10, i32 0
6134 ; CHECK-NEXT: %52 = fptosi double %51 to i32
6135 ; CHECK-NEXT: %53 = insertelement <4 x i32> undef, i32 %52, i32 0
6136 ; CHECK-NEXT: %54 = extractelement <2 x double> %10, i32 1
6137 ; CHECK-NEXT: %55 = fptosi double %54 to i32
6138 ; CHECK-NEXT: %56 = insertelement <4 x i32> %53, i32 %55, i32 1
6139 ; CHECK-NEXT: %57 = extractelement <2 x double> %11, i32 0
6140 ; CHECK-NEXT: %58 = fptosi double %57 to i32
6141 ; CHECK-NEXT: %59 = insertelement <4 x i32> %56, i32 %58, i32 2
6142 ; CHECK-NEXT: %60 = extractelement <2 x double> %11, i32 1
6143 ; CHECK-NEXT: %61 = fptosi double %60 to i32
6144 ; CHECK-NEXT: %62 = insertelement <4 x i32> %59, i32 %61, i32 3
6145 ; CHECK-NEXT: %63 = extractelement <2 x double> %12, i32 0
6146 ; CHECK-NEXT: %64 = fptosi double %63 to i32
6147 ; CHECK-NEXT: %65 = insertelement <4 x i32> undef, i32 %64, i32 0
6148 ; CHECK-NEXT: %66 = extractelement <2 x double> %12, i32 1
6149 ; CHECK-NEXT: %67 = fptosi double %66 to i32
6150 ; CHECK-NEXT: %68 = insertelement <4 x i32> %65, i32 %67, i32 1
6151 ; CHECK-NEXT: %69 = extractelement <2 x double> %13, i32 0
6152 ; CHECK-NEXT: %70 = fptosi double %69 to i32
6153 ; CHECK-NEXT: %71 = insertelement <4 x i32> %68, i32 %70, i32 2
6154 ; CHECK-NEXT: %72 = extractelement <2 x double> %13, i32 1
6155 ; CHECK-NEXT: %73 = fptosi double %72 to i32
6156 ; CHECK-NEXT: %74 = insertelement <4 x i32> %71, i32 %73, i32 3
6157 ; CHECK-NEXT: store <4 x i32> %38, <4 x i32>* %0, align 16
6158 ; CHECK-NEXT: store <4 x i32> %50, <4 x i32>* %1, align 16
6159 ; CHECK-NEXT: store <4 x i32> %62, <4 x i32>* %2, align 16
6160 ; CHECK-NEXT: store <4 x i32> %74, <4 x i32>* %3, align 16
6161 ; CHECK-NEXT: ret <4 x i32> %26
6162
6163 define <20 x i64> @fptosi_cast_20xdouble_to_20xi64(<20 x double>) {
6164 %2 = fptosi <20 x double> %0 to <20 x i64>
6165 ret <20 x i64> %2
6166 }
6167 ; CHECK-LABEL: define <2 x i64> @fptosi_cast_20xdouble_to_20xi64(<2 x i64>* noca pture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable( 16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonn ull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull derefe renceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* noca pture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>)
6168 ; CHECK-NEXT: %20 = fptosi <2 x double> %9 to <2 x i64>
6169 ; CHECK-NEXT: %21 = fptosi <2 x double> %10 to <2 x i64>
6170 ; CHECK-NEXT: %22 = fptosi <2 x double> %11 to <2 x i64>
6171 ; CHECK-NEXT: %23 = fptosi <2 x double> %12 to <2 x i64>
6172 ; CHECK-NEXT: %24 = fptosi <2 x double> %13 to <2 x i64>
6173 ; CHECK-NEXT: %25 = fptosi <2 x double> %14 to <2 x i64>
6174 ; CHECK-NEXT: %26 = fptosi <2 x double> %15 to <2 x i64>
6175 ; CHECK-NEXT: %27 = fptosi <2 x double> %16 to <2 x i64>
6176 ; CHECK-NEXT: %28 = fptosi <2 x double> %17 to <2 x i64>
6177 ; CHECK-NEXT: %29 = fptosi <2 x double> %18 to <2 x i64>
6178 ; CHECK-NEXT: store <2 x i64> %21, <2 x i64>* %0, align 16
6179 ; CHECK-NEXT: store <2 x i64> %22, <2 x i64>* %1, align 16
6180 ; CHECK-NEXT: store <2 x i64> %23, <2 x i64>* %2, align 16
6181 ; CHECK-NEXT: store <2 x i64> %24, <2 x i64>* %3, align 16
6182 ; CHECK-NEXT: store <2 x i64> %25, <2 x i64>* %4, align 16
6183 ; CHECK-NEXT: store <2 x i64> %26, <2 x i64>* %5, align 16
6184 ; CHECK-NEXT: store <2 x i64> %27, <2 x i64>* %6, align 16
6185 ; CHECK-NEXT: store <2 x i64> %28, <2 x i64>* %7, align 16
6186 ; CHECK-NEXT: store <2 x i64> %29, <2 x i64>* %8, align 16
6187 ; CHECK-NEXT: ret <2 x i64> %20
6188
6189 define <20 x float> @uitofp_cast_20xi8_to_20xfloat(<20 x i8>) {
6190 %2 = uitofp <20 x i8> %0 to <20 x float>
6191 ret <20 x float> %2
6192 }
6193 ; CHECK-LABEL: define <4 x float> @uitofp_cast_20xi8_to_20xfloat(<4 x float>* no capture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferencea ble(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapt ure nonnull dereferenceable(16), <16 x i8>, <16 x i8>)
6194 ; CHECK-NEXT: %7 = extractelement <16 x i8> %4, i32 0
6195 ; CHECK-NEXT: %8 = uitofp i8 %7 to float
6196 ; CHECK-NEXT: %9 = insertelement <4 x float> undef, float %8, i32 0
6197 ; CHECK-NEXT: %10 = extractelement <16 x i8> %4, i32 1
6198 ; CHECK-NEXT: %11 = uitofp i8 %10 to float
6199 ; CHECK-NEXT: %12 = insertelement <4 x float> %9, float %11, i32 1
6200 ; CHECK-NEXT: %13 = extractelement <16 x i8> %4, i32 2
6201 ; CHECK-NEXT: %14 = uitofp i8 %13 to float
6202 ; CHECK-NEXT: %15 = insertelement <4 x float> %12, float %14, i32 2
6203 ; CHECK-NEXT: %16 = extractelement <16 x i8> %4, i32 3
6204 ; CHECK-NEXT: %17 = uitofp i8 %16 to float
6205 ; CHECK-NEXT: %18 = insertelement <4 x float> %15, float %17, i32 3
6206 ; CHECK-NEXT: %19 = extractelement <16 x i8> %4, i32 4
6207 ; CHECK-NEXT: %20 = uitofp i8 %19 to float
6208 ; CHECK-NEXT: %21 = insertelement <4 x float> undef, float %20, i32 0
6209 ; CHECK-NEXT: %22 = extractelement <16 x i8> %4, i32 5
6210 ; CHECK-NEXT: %23 = uitofp i8 %22 to float
6211 ; CHECK-NEXT: %24 = insertelement <4 x float> %21, float %23, i32 1
6212 ; CHECK-NEXT: %25 = extractelement <16 x i8> %4, i32 6
6213 ; CHECK-NEXT: %26 = uitofp i8 %25 to float
6214 ; CHECK-NEXT: %27 = insertelement <4 x float> %24, float %26, i32 2
6215 ; CHECK-NEXT: %28 = extractelement <16 x i8> %4, i32 7
6216 ; CHECK-NEXT: %29 = uitofp i8 %28 to float
6217 ; CHECK-NEXT: %30 = insertelement <4 x float> %27, float %29, i32 3
6218 ; CHECK-NEXT: %31 = extractelement <16 x i8> %4, i32 8
6219 ; CHECK-NEXT: %32 = uitofp i8 %31 to float
6220 ; CHECK-NEXT: %33 = insertelement <4 x float> undef, float %32, i32 0
6221 ; CHECK-NEXT: %34 = extractelement <16 x i8> %4, i32 9
6222 ; CHECK-NEXT: %35 = uitofp i8 %34 to float
6223 ; CHECK-NEXT: %36 = insertelement <4 x float> %33, float %35, i32 1
6224 ; CHECK-NEXT: %37 = extractelement <16 x i8> %4, i32 10
6225 ; CHECK-NEXT: %38 = uitofp i8 %37 to float
6226 ; CHECK-NEXT: %39 = insertelement <4 x float> %36, float %38, i32 2
6227 ; CHECK-NEXT: %40 = extractelement <16 x i8> %4, i32 11
6228 ; CHECK-NEXT: %41 = uitofp i8 %40 to float
6229 ; CHECK-NEXT: %42 = insertelement <4 x float> %39, float %41, i32 3
6230 ; CHECK-NEXT: %43 = extractelement <16 x i8> %4, i32 12
6231 ; CHECK-NEXT: %44 = uitofp i8 %43 to float
6232 ; CHECK-NEXT: %45 = insertelement <4 x float> undef, float %44, i32 0
6233 ; CHECK-NEXT: %46 = extractelement <16 x i8> %4, i32 13
6234 ; CHECK-NEXT: %47 = uitofp i8 %46 to float
6235 ; CHECK-NEXT: %48 = insertelement <4 x float> %45, float %47, i32 1
6236 ; CHECK-NEXT: %49 = extractelement <16 x i8> %4, i32 14
6237 ; CHECK-NEXT: %50 = uitofp i8 %49 to float
6238 ; CHECK-NEXT: %51 = insertelement <4 x float> %48, float %50, i32 2
6239 ; CHECK-NEXT: %52 = extractelement <16 x i8> %4, i32 15
6240 ; CHECK-NEXT: %53 = uitofp i8 %52 to float
6241 ; CHECK-NEXT: %54 = insertelement <4 x float> %51, float %53, i32 3
6242 ; CHECK-NEXT: %55 = extractelement <16 x i8> %5, i32 0
6243 ; CHECK-NEXT: %56 = uitofp i8 %55 to float
6244 ; CHECK-NEXT: %57 = insertelement <4 x float> undef, float %56, i32 0
6245 ; CHECK-NEXT: %58 = extractelement <16 x i8> %5, i32 1
6246 ; CHECK-NEXT: %59 = uitofp i8 %58 to float
6247 ; CHECK-NEXT: %60 = insertelement <4 x float> %57, float %59, i32 1
6248 ; CHECK-NEXT: %61 = extractelement <16 x i8> %5, i32 2
6249 ; CHECK-NEXT: %62 = uitofp i8 %61 to float
6250 ; CHECK-NEXT: %63 = insertelement <4 x float> %60, float %62, i32 2
6251 ; CHECK-NEXT: %64 = extractelement <16 x i8> %5, i32 3
6252 ; CHECK-NEXT: %65 = uitofp i8 %64 to float
6253 ; CHECK-NEXT: %66 = insertelement <4 x float> %63, float %65, i32 3
6254 ; CHECK-NEXT: store <4 x float> %30, <4 x float>* %0, align 16
6255 ; CHECK-NEXT: store <4 x float> %42, <4 x float>* %1, align 16
6256 ; CHECK-NEXT: store <4 x float> %54, <4 x float>* %2, align 16
6257 ; CHECK-NEXT: store <4 x float> %66, <4 x float>* %3, align 16
6258 ; CHECK-NEXT: ret <4 x float> %18
6259
6260 define <20 x float> @uitofp_cast_20xi16_to_20xfloat(<20 x i16>) {
6261 %2 = uitofp <20 x i16> %0 to <20 x float>
6262 ret <20 x float> %2
6263 }
6264 ; CHECK-LABEL: define <4 x float> @uitofp_cast_20xi16_to_20xfloat(<4 x float>* n ocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereference able(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocap ture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>)
6265 ; CHECK-NEXT: %8 = extractelement <8 x i16> %4, i32 0
6266 ; CHECK-NEXT: %9 = uitofp i16 %8 to float
6267 ; CHECK-NEXT: %10 = insertelement <4 x float> undef, float %9, i32 0
6268 ; CHECK-NEXT: %11 = extractelement <8 x i16> %4, i32 1
6269 ; CHECK-NEXT: %12 = uitofp i16 %11 to float
6270 ; CHECK-NEXT: %13 = insertelement <4 x float> %10, float %12, i32 1
6271 ; CHECK-NEXT: %14 = extractelement <8 x i16> %4, i32 2
6272 ; CHECK-NEXT: %15 = uitofp i16 %14 to float
6273 ; CHECK-NEXT: %16 = insertelement <4 x float> %13, float %15, i32 2
6274 ; CHECK-NEXT: %17 = extractelement <8 x i16> %4, i32 3
6275 ; CHECK-NEXT: %18 = uitofp i16 %17 to float
6276 ; CHECK-NEXT: %19 = insertelement <4 x float> %16, float %18, i32 3
6277 ; CHECK-NEXT: %20 = extractelement <8 x i16> %4, i32 4
6278 ; CHECK-NEXT: %21 = uitofp i16 %20 to float
6279 ; CHECK-NEXT: %22 = insertelement <4 x float> undef, float %21, i32 0
6280 ; CHECK-NEXT: %23 = extractelement <8 x i16> %4, i32 5
6281 ; CHECK-NEXT: %24 = uitofp i16 %23 to float
6282 ; CHECK-NEXT: %25 = insertelement <4 x float> %22, float %24, i32 1
6283 ; CHECK-NEXT: %26 = extractelement <8 x i16> %4, i32 6
6284 ; CHECK-NEXT: %27 = uitofp i16 %26 to float
6285 ; CHECK-NEXT: %28 = insertelement <4 x float> %25, float %27, i32 2
6286 ; CHECK-NEXT: %29 = extractelement <8 x i16> %4, i32 7
6287 ; CHECK-NEXT: %30 = uitofp i16 %29 to float
6288 ; CHECK-NEXT: %31 = insertelement <4 x float> %28, float %30, i32 3
6289 ; CHECK-NEXT: %32 = extractelement <8 x i16> %5, i32 0
6290 ; CHECK-NEXT: %33 = uitofp i16 %32 to float
6291 ; CHECK-NEXT: %34 = insertelement <4 x float> undef, float %33, i32 0
6292 ; CHECK-NEXT: %35 = extractelement <8 x i16> %5, i32 1
6293 ; CHECK-NEXT: %36 = uitofp i16 %35 to float
6294 ; CHECK-NEXT: %37 = insertelement <4 x float> %34, float %36, i32 1
6295 ; CHECK-NEXT: %38 = extractelement <8 x i16> %5, i32 2
6296 ; CHECK-NEXT: %39 = uitofp i16 %38 to float
6297 ; CHECK-NEXT: %40 = insertelement <4 x float> %37, float %39, i32 2
6298 ; CHECK-NEXT: %41 = extractelement <8 x i16> %5, i32 3
6299 ; CHECK-NEXT: %42 = uitofp i16 %41 to float
6300 ; CHECK-NEXT: %43 = insertelement <4 x float> %40, float %42, i32 3
6301 ; CHECK-NEXT: %44 = extractelement <8 x i16> %5, i32 4
6302 ; CHECK-NEXT: %45 = uitofp i16 %44 to float
6303 ; CHECK-NEXT: %46 = insertelement <4 x float> undef, float %45, i32 0
6304 ; CHECK-NEXT: %47 = extractelement <8 x i16> %5, i32 5
6305 ; CHECK-NEXT: %48 = uitofp i16 %47 to float
6306 ; CHECK-NEXT: %49 = insertelement <4 x float> %46, float %48, i32 1
6307 ; CHECK-NEXT: %50 = extractelement <8 x i16> %5, i32 6
6308 ; CHECK-NEXT: %51 = uitofp i16 %50 to float
6309 ; CHECK-NEXT: %52 = insertelement <4 x float> %49, float %51, i32 2
6310 ; CHECK-NEXT: %53 = extractelement <8 x i16> %5, i32 7
6311 ; CHECK-NEXT: %54 = uitofp i16 %53 to float
6312 ; CHECK-NEXT: %55 = insertelement <4 x float> %52, float %54, i32 3
6313 ; CHECK-NEXT: %56 = extractelement <8 x i16> %6, i32 0
6314 ; CHECK-NEXT: %57 = uitofp i16 %56 to float
6315 ; CHECK-NEXT: %58 = insertelement <4 x float> undef, float %57, i32 0
6316 ; CHECK-NEXT: %59 = extractelement <8 x i16> %6, i32 1
6317 ; CHECK-NEXT: %60 = uitofp i16 %59 to float
6318 ; CHECK-NEXT: %61 = insertelement <4 x float> %58, float %60, i32 1
6319 ; CHECK-NEXT: %62 = extractelement <8 x i16> %6, i32 2
6320 ; CHECK-NEXT: %63 = uitofp i16 %62 to float
6321 ; CHECK-NEXT: %64 = insertelement <4 x float> %61, float %63, i32 2
6322 ; CHECK-NEXT: %65 = extractelement <8 x i16> %6, i32 3
6323 ; CHECK-NEXT: %66 = uitofp i16 %65 to float
6324 ; CHECK-NEXT: %67 = insertelement <4 x float> %64, float %66, i32 3
6325 ; CHECK-NEXT: store <4 x float> %31, <4 x float>* %0, align 16
6326 ; CHECK-NEXT: store <4 x float> %43, <4 x float>* %1, align 16
6327 ; CHECK-NEXT: store <4 x float> %55, <4 x float>* %2, align 16
6328 ; CHECK-NEXT: store <4 x float> %67, <4 x float>* %3, align 16
6329 ; CHECK-NEXT: ret <4 x float> %19
6330
6331 define <20 x float> @uitofp_cast_20xi32_to_20xfloat(<20 x i32>) {
6332 %2 = uitofp <20 x i32> %0 to <20 x float>
6333 ret <20 x float> %2
6334 }
6335 ; CHECK-LABEL: define <4 x float> @uitofp_cast_20xi32_to_20xfloat(<4 x float>* n ocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereference able(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocap ture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>)
6336 ; CHECK-NEXT: %10 = uitofp <4 x i32> %4 to <4 x float>
6337 ; CHECK-NEXT: %11 = uitofp <4 x i32> %5 to <4 x float>
6338 ; CHECK-NEXT: %12 = uitofp <4 x i32> %6 to <4 x float>
6339 ; CHECK-NEXT: %13 = uitofp <4 x i32> %7 to <4 x float>
6340 ; CHECK-NEXT: %14 = uitofp <4 x i32> %8 to <4 x float>
6341 ; CHECK-NEXT: store <4 x float> %11, <4 x float>* %0, align 16
6342 ; CHECK-NEXT: store <4 x float> %12, <4 x float>* %1, align 16
6343 ; CHECK-NEXT: store <4 x float> %13, <4 x float>* %2, align 16
6344 ; CHECK-NEXT: store <4 x float> %14, <4 x float>* %3, align 16
6345 ; CHECK-NEXT: ret <4 x float> %10
6346
6347 define <20 x float> @uitofp_cast_20xi64_to_20xfloat(<20 x i64>) {
6348 %2 = uitofp <20 x i64> %0 to <20 x float>
6349 ret <20 x float> %2
6350 }
6351 ; CHECK-LABEL: define <4 x float> @uitofp_cast_20xi64_to_20xfloat(<4 x float>* n ocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereference able(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocap ture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
6352 ; CHECK-NEXT: %15 = extractelement <2 x i64> %4, i32 0
6353 ; CHECK-NEXT: %16 = uitofp i64 %15 to float
6354 ; CHECK-NEXT: %17 = insertelement <4 x float> undef, float %16, i32 0
6355 ; CHECK-NEXT: %18 = extractelement <2 x i64> %4, i32 1
6356 ; CHECK-NEXT: %19 = uitofp i64 %18 to float
6357 ; CHECK-NEXT: %20 = insertelement <4 x float> %17, float %19, i32 1
6358 ; CHECK-NEXT: %21 = extractelement <2 x i64> %5, i32 0
6359 ; CHECK-NEXT: %22 = uitofp i64 %21 to float
6360 ; CHECK-NEXT: %23 = insertelement <4 x float> %20, float %22, i32 2
6361 ; CHECK-NEXT: %24 = extractelement <2 x i64> %5, i32 1
6362 ; CHECK-NEXT: %25 = uitofp i64 %24 to float
6363 ; CHECK-NEXT: %26 = insertelement <4 x float> %23, float %25, i32 3
6364 ; CHECK-NEXT: %27 = extractelement <2 x i64> %6, i32 0
6365 ; CHECK-NEXT: %28 = uitofp i64 %27 to float
6366 ; CHECK-NEXT: %29 = insertelement <4 x float> undef, float %28, i32 0
6367 ; CHECK-NEXT: %30 = extractelement <2 x i64> %6, i32 1
6368 ; CHECK-NEXT: %31 = uitofp i64 %30 to float
6369 ; CHECK-NEXT: %32 = insertelement <4 x float> %29, float %31, i32 1
6370 ; CHECK-NEXT: %33 = extractelement <2 x i64> %7, i32 0
6371 ; CHECK-NEXT: %34 = uitofp i64 %33 to float
6372 ; CHECK-NEXT: %35 = insertelement <4 x float> %32, float %34, i32 2
6373 ; CHECK-NEXT: %36 = extractelement <2 x i64> %7, i32 1
6374 ; CHECK-NEXT: %37 = uitofp i64 %36 to float
6375 ; CHECK-NEXT: %38 = insertelement <4 x float> %35, float %37, i32 3
6376 ; CHECK-NEXT: %39 = extractelement <2 x i64> %8, i32 0
6377 ; CHECK-NEXT: %40 = uitofp i64 %39 to float
6378 ; CHECK-NEXT: %41 = insertelement <4 x float> undef, float %40, i32 0
6379 ; CHECK-NEXT: %42 = extractelement <2 x i64> %8, i32 1
6380 ; CHECK-NEXT: %43 = uitofp i64 %42 to float
6381 ; CHECK-NEXT: %44 = insertelement <4 x float> %41, float %43, i32 1
6382 ; CHECK-NEXT: %45 = extractelement <2 x i64> %9, i32 0
6383 ; CHECK-NEXT: %46 = uitofp i64 %45 to float
6384 ; CHECK-NEXT: %47 = insertelement <4 x float> %44, float %46, i32 2
6385 ; CHECK-NEXT: %48 = extractelement <2 x i64> %9, i32 1
6386 ; CHECK-NEXT: %49 = uitofp i64 %48 to float
6387 ; CHECK-NEXT: %50 = insertelement <4 x float> %47, float %49, i32 3
6388 ; CHECK-NEXT: %51 = extractelement <2 x i64> %10, i32 0
6389 ; CHECK-NEXT: %52 = uitofp i64 %51 to float
6390 ; CHECK-NEXT: %53 = insertelement <4 x float> undef, float %52, i32 0
6391 ; CHECK-NEXT: %54 = extractelement <2 x i64> %10, i32 1
6392 ; CHECK-NEXT: %55 = uitofp i64 %54 to float
6393 ; CHECK-NEXT: %56 = insertelement <4 x float> %53, float %55, i32 1
6394 ; CHECK-NEXT: %57 = extractelement <2 x i64> %11, i32 0
6395 ; CHECK-NEXT: %58 = uitofp i64 %57 to float
6396 ; CHECK-NEXT: %59 = insertelement <4 x float> %56, float %58, i32 2
6397 ; CHECK-NEXT: %60 = extractelement <2 x i64> %11, i32 1
6398 ; CHECK-NEXT: %61 = uitofp i64 %60 to float
6399 ; CHECK-NEXT: %62 = insertelement <4 x float> %59, float %61, i32 3
6400 ; CHECK-NEXT: %63 = extractelement <2 x i64> %12, i32 0
6401 ; CHECK-NEXT: %64 = uitofp i64 %63 to float
6402 ; CHECK-NEXT: %65 = insertelement <4 x float> undef, float %64, i32 0
6403 ; CHECK-NEXT: %66 = extractelement <2 x i64> %12, i32 1
6404 ; CHECK-NEXT: %67 = uitofp i64 %66 to float
6405 ; CHECK-NEXT: %68 = insertelement <4 x float> %65, float %67, i32 1
6406 ; CHECK-NEXT: %69 = extractelement <2 x i64> %13, i32 0
6407 ; CHECK-NEXT: %70 = uitofp i64 %69 to float
6408 ; CHECK-NEXT: %71 = insertelement <4 x float> %68, float %70, i32 2
6409 ; CHECK-NEXT: %72 = extractelement <2 x i64> %13, i32 1
6410 ; CHECK-NEXT: %73 = uitofp i64 %72 to float
6411 ; CHECK-NEXT: %74 = insertelement <4 x float> %71, float %73, i32 3
6412 ; CHECK-NEXT: store <4 x float> %38, <4 x float>* %0, align 16
6413 ; CHECK-NEXT: store <4 x float> %50, <4 x float>* %1, align 16
6414 ; CHECK-NEXT: store <4 x float> %62, <4 x float>* %2, align 16
6415 ; CHECK-NEXT: store <4 x float> %74, <4 x float>* %3, align 16
6416 ; CHECK-NEXT: ret <4 x float> %26
6417
6418 define <20 x double> @uitofp_cast_20xi8_to_20xdouble(<20 x i8>) {
6419 %2 = uitofp <20 x i8> %0 to <20 x double>
6420 ret <20 x double> %2
6421 }
6422 ; CHECK-LABEL: define <2 x double> @uitofp_cast_20xi8_to_20xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* n ocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenc eable(16), <2 x double>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>)
6423 ; CHECK-NEXT: %12 = extractelement <16 x i8> %9, i32 0
6424 ; CHECK-NEXT: %13 = uitofp i8 %12 to double
6425 ; CHECK-NEXT: %14 = insertelement <2 x double> undef, double %13, i32 0
6426 ; CHECK-NEXT: %15 = extractelement <16 x i8> %9, i32 1
6427 ; CHECK-NEXT: %16 = uitofp i8 %15 to double
6428 ; CHECK-NEXT: %17 = insertelement <2 x double> %14, double %16, i32 1
6429 ; CHECK-NEXT: %18 = extractelement <16 x i8> %9, i32 2
6430 ; CHECK-NEXT: %19 = uitofp i8 %18 to double
6431 ; CHECK-NEXT: %20 = insertelement <2 x double> undef, double %19, i32 0
6432 ; CHECK-NEXT: %21 = extractelement <16 x i8> %9, i32 3
6433 ; CHECK-NEXT: %22 = uitofp i8 %21 to double
6434 ; CHECK-NEXT: %23 = insertelement <2 x double> %20, double %22, i32 1
6435 ; CHECK-NEXT: %24 = extractelement <16 x i8> %9, i32 4
6436 ; CHECK-NEXT: %25 = uitofp i8 %24 to double
6437 ; CHECK-NEXT: %26 = insertelement <2 x double> undef, double %25, i32 0
6438 ; CHECK-NEXT: %27 = extractelement <16 x i8> %9, i32 5
6439 ; CHECK-NEXT: %28 = uitofp i8 %27 to double
6440 ; CHECK-NEXT: %29 = insertelement <2 x double> %26, double %28, i32 1
6441 ; CHECK-NEXT: %30 = extractelement <16 x i8> %9, i32 6
6442 ; CHECK-NEXT: %31 = uitofp i8 %30 to double
6443 ; CHECK-NEXT: %32 = insertelement <2 x double> undef, double %31, i32 0
6444 ; CHECK-NEXT: %33 = extractelement <16 x i8> %9, i32 7
6445 ; CHECK-NEXT: %34 = uitofp i8 %33 to double
6446 ; CHECK-NEXT: %35 = insertelement <2 x double> %32, double %34, i32 1
6447 ; CHECK-NEXT: %36 = extractelement <16 x i8> %9, i32 8
6448 ; CHECK-NEXT: %37 = uitofp i8 %36 to double
6449 ; CHECK-NEXT: %38 = insertelement <2 x double> undef, double %37, i32 0
6450 ; CHECK-NEXT: %39 = extractelement <16 x i8> %9, i32 9
6451 ; CHECK-NEXT: %40 = uitofp i8 %39 to double
6452 ; CHECK-NEXT: %41 = insertelement <2 x double> %38, double %40, i32 1
6453 ; CHECK-NEXT: %42 = extractelement <16 x i8> %9, i32 10
6454 ; CHECK-NEXT: %43 = uitofp i8 %42 to double
6455 ; CHECK-NEXT: %44 = insertelement <2 x double> undef, double %43, i32 0
6456 ; CHECK-NEXT: %45 = extractelement <16 x i8> %9, i32 11
6457 ; CHECK-NEXT: %46 = uitofp i8 %45 to double
6458 ; CHECK-NEXT: %47 = insertelement <2 x double> %44, double %46, i32 1
6459 ; CHECK-NEXT: %48 = extractelement <16 x i8> %9, i32 12
6460 ; CHECK-NEXT: %49 = uitofp i8 %48 to double
6461 ; CHECK-NEXT: %50 = insertelement <2 x double> undef, double %49, i32 0
6462 ; CHECK-NEXT: %51 = extractelement <16 x i8> %9, i32 13
6463 ; CHECK-NEXT: %52 = uitofp i8 %51 to double
6464 ; CHECK-NEXT: %53 = insertelement <2 x double> %50, double %52, i32 1
6465 ; CHECK-NEXT: %54 = extractelement <16 x i8> %9, i32 14
6466 ; CHECK-NEXT: %55 = uitofp i8 %54 to double
6467 ; CHECK-NEXT: %56 = insertelement <2 x double> undef, double %55, i32 0
6468 ; CHECK-NEXT: %57 = extractelement <16 x i8> %9, i32 15
6469 ; CHECK-NEXT: %58 = uitofp i8 %57 to double
6470 ; CHECK-NEXT: %59 = insertelement <2 x double> %56, double %58, i32 1
6471 ; CHECK-NEXT: %60 = extractelement <16 x i8> %10, i32 0
6472 ; CHECK-NEXT: %61 = uitofp i8 %60 to double
6473 ; CHECK-NEXT: %62 = insertelement <2 x double> undef, double %61, i32 0
6474 ; CHECK-NEXT: %63 = extractelement <16 x i8> %10, i32 1
6475 ; CHECK-NEXT: %64 = uitofp i8 %63 to double
6476 ; CHECK-NEXT: %65 = insertelement <2 x double> %62, double %64, i32 1
6477 ; CHECK-NEXT: %66 = extractelement <16 x i8> %10, i32 2
6478 ; CHECK-NEXT: %67 = uitofp i8 %66 to double
6479 ; CHECK-NEXT: %68 = insertelement <2 x double> undef, double %67, i32 0
6480 ; CHECK-NEXT: %69 = extractelement <16 x i8> %10, i32 3
6481 ; CHECK-NEXT: %70 = uitofp i8 %69 to double
6482 ; CHECK-NEXT: %71 = insertelement <2 x double> %68, double %70, i32 1
6483 ; CHECK-NEXT: store <2 x double> %23, <2 x double>* %0, align 16
6484 ; CHECK-NEXT: store <2 x double> %29, <2 x double>* %1, align 16
6485 ; CHECK-NEXT: store <2 x double> %35, <2 x double>* %2, align 16
6486 ; CHECK-NEXT: store <2 x double> %41, <2 x double>* %3, align 16
6487 ; CHECK-NEXT: store <2 x double> %47, <2 x double>* %4, align 16
6488 ; CHECK-NEXT: store <2 x double> %53, <2 x double>* %5, align 16
6489 ; CHECK-NEXT: store <2 x double> %59, <2 x double>* %6, align 16
6490 ; CHECK-NEXT: store <2 x double> %65, <2 x double>* %7, align 16
6491 ; CHECK-NEXT: store <2 x double> %71, <2 x double>* %8, align 16
6492 ; CHECK-NEXT: ret <2 x double> %17
6493
6494 define <20 x double> @uitofp_cast_20xi16_to_20xdouble(<20 x i16>) {
6495 %2 = uitofp <20 x i16> %0 to <20 x double>
6496 ret <20 x double> %2
6497 }
6498 ; CHECK-LABEL: define <2 x double> @uitofp_cast_20xi16_to_20xdouble(<2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>)
6499 ; CHECK-NEXT: %13 = extractelement <8 x i16> %9, i32 0
6500 ; CHECK-NEXT: %14 = uitofp i16 %13 to double
6501 ; CHECK-NEXT: %15 = insertelement <2 x double> undef, double %14, i32 0
6502 ; CHECK-NEXT: %16 = extractelement <8 x i16> %9, i32 1
6503 ; CHECK-NEXT: %17 = uitofp i16 %16 to double
6504 ; CHECK-NEXT: %18 = insertelement <2 x double> %15, double %17, i32 1
6505 ; CHECK-NEXT: %19 = extractelement <8 x i16> %9, i32 2
6506 ; CHECK-NEXT: %20 = uitofp i16 %19 to double
6507 ; CHECK-NEXT: %21 = insertelement <2 x double> undef, double %20, i32 0
6508 ; CHECK-NEXT: %22 = extractelement <8 x i16> %9, i32 3
6509 ; CHECK-NEXT: %23 = uitofp i16 %22 to double
6510 ; CHECK-NEXT: %24 = insertelement <2 x double> %21, double %23, i32 1
6511 ; CHECK-NEXT: %25 = extractelement <8 x i16> %9, i32 4
6512 ; CHECK-NEXT: %26 = uitofp i16 %25 to double
6513 ; CHECK-NEXT: %27 = insertelement <2 x double> undef, double %26, i32 0
6514 ; CHECK-NEXT: %28 = extractelement <8 x i16> %9, i32 5
6515 ; CHECK-NEXT: %29 = uitofp i16 %28 to double
6516 ; CHECK-NEXT: %30 = insertelement <2 x double> %27, double %29, i32 1
6517 ; CHECK-NEXT: %31 = extractelement <8 x i16> %9, i32 6
6518 ; CHECK-NEXT: %32 = uitofp i16 %31 to double
6519 ; CHECK-NEXT: %33 = insertelement <2 x double> undef, double %32, i32 0
6520 ; CHECK-NEXT: %34 = extractelement <8 x i16> %9, i32 7
6521 ; CHECK-NEXT: %35 = uitofp i16 %34 to double
6522 ; CHECK-NEXT: %36 = insertelement <2 x double> %33, double %35, i32 1
6523 ; CHECK-NEXT: %37 = extractelement <8 x i16> %10, i32 0
6524 ; CHECK-NEXT: %38 = uitofp i16 %37 to double
6525 ; CHECK-NEXT: %39 = insertelement <2 x double> undef, double %38, i32 0
6526 ; CHECK-NEXT: %40 = extractelement <8 x i16> %10, i32 1
6527 ; CHECK-NEXT: %41 = uitofp i16 %40 to double
6528 ; CHECK-NEXT: %42 = insertelement <2 x double> %39, double %41, i32 1
6529 ; CHECK-NEXT: %43 = extractelement <8 x i16> %10, i32 2
6530 ; CHECK-NEXT: %44 = uitofp i16 %43 to double
6531 ; CHECK-NEXT: %45 = insertelement <2 x double> undef, double %44, i32 0
6532 ; CHECK-NEXT: %46 = extractelement <8 x i16> %10, i32 3
6533 ; CHECK-NEXT: %47 = uitofp i16 %46 to double
6534 ; CHECK-NEXT: %48 = insertelement <2 x double> %45, double %47, i32 1
6535 ; CHECK-NEXT: %49 = extractelement <8 x i16> %10, i32 4
6536 ; CHECK-NEXT: %50 = uitofp i16 %49 to double
6537 ; CHECK-NEXT: %51 = insertelement <2 x double> undef, double %50, i32 0
6538 ; CHECK-NEXT: %52 = extractelement <8 x i16> %10, i32 5
6539 ; CHECK-NEXT: %53 = uitofp i16 %52 to double
6540 ; CHECK-NEXT: %54 = insertelement <2 x double> %51, double %53, i32 1
6541 ; CHECK-NEXT: %55 = extractelement <8 x i16> %10, i32 6
6542 ; CHECK-NEXT: %56 = uitofp i16 %55 to double
6543 ; CHECK-NEXT: %57 = insertelement <2 x double> undef, double %56, i32 0
6544 ; CHECK-NEXT: %58 = extractelement <8 x i16> %10, i32 7
6545 ; CHECK-NEXT: %59 = uitofp i16 %58 to double
6546 ; CHECK-NEXT: %60 = insertelement <2 x double> %57, double %59, i32 1
6547 ; CHECK-NEXT: %61 = extractelement <8 x i16> %11, i32 0
6548 ; CHECK-NEXT: %62 = uitofp i16 %61 to double
6549 ; CHECK-NEXT: %63 = insertelement <2 x double> undef, double %62, i32 0
6550 ; CHECK-NEXT: %64 = extractelement <8 x i16> %11, i32 1
6551 ; CHECK-NEXT: %65 = uitofp i16 %64 to double
6552 ; CHECK-NEXT: %66 = insertelement <2 x double> %63, double %65, i32 1
6553 ; CHECK-NEXT: %67 = extractelement <8 x i16> %11, i32 2
6554 ; CHECK-NEXT: %68 = uitofp i16 %67 to double
6555 ; CHECK-NEXT: %69 = insertelement <2 x double> undef, double %68, i32 0
6556 ; CHECK-NEXT: %70 = extractelement <8 x i16> %11, i32 3
6557 ; CHECK-NEXT: %71 = uitofp i16 %70 to double
6558 ; CHECK-NEXT: %72 = insertelement <2 x double> %69, double %71, i32 1
6559 ; CHECK-NEXT: store <2 x double> %24, <2 x double>* %0, align 16
6560 ; CHECK-NEXT: store <2 x double> %30, <2 x double>* %1, align 16
6561 ; CHECK-NEXT: store <2 x double> %36, <2 x double>* %2, align 16
6562 ; CHECK-NEXT: store <2 x double> %42, <2 x double>* %3, align 16
6563 ; CHECK-NEXT: store <2 x double> %48, <2 x double>* %4, align 16
6564 ; CHECK-NEXT: store <2 x double> %54, <2 x double>* %5, align 16
6565 ; CHECK-NEXT: store <2 x double> %60, <2 x double>* %6, align 16
6566 ; CHECK-NEXT: store <2 x double> %66, <2 x double>* %7, align 16
6567 ; CHECK-NEXT: store <2 x double> %72, <2 x double>* %8, align 16
6568 ; CHECK-NEXT: ret <2 x double> %18
6569
6570 define <20 x double> @uitofp_cast_20xi32_to_20xdouble(<20 x i32>) {
6571 %2 = uitofp <20 x i32> %0 to <20 x double>
6572 ret <20 x double> %2
6573 }
6574 ; CHECK-LABEL: define <2 x double> @uitofp_cast_20xi32_to_20xdouble(<2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>)
6575 ; CHECK-NEXT: %15 = extractelement <4 x i32> %9, i32 0
6576 ; CHECK-NEXT: %16 = uitofp i32 %15 to double
6577 ; CHECK-NEXT: %17 = insertelement <2 x double> undef, double %16, i32 0
6578 ; CHECK-NEXT: %18 = extractelement <4 x i32> %9, i32 1
6579 ; CHECK-NEXT: %19 = uitofp i32 %18 to double
6580 ; CHECK-NEXT: %20 = insertelement <2 x double> %17, double %19, i32 1
6581 ; CHECK-NEXT: %21 = extractelement <4 x i32> %9, i32 2
6582 ; CHECK-NEXT: %22 = uitofp i32 %21 to double
6583 ; CHECK-NEXT: %23 = insertelement <2 x double> undef, double %22, i32 0
6584 ; CHECK-NEXT: %24 = extractelement <4 x i32> %9, i32 3
6585 ; CHECK-NEXT: %25 = uitofp i32 %24 to double
6586 ; CHECK-NEXT: %26 = insertelement <2 x double> %23, double %25, i32 1
6587 ; CHECK-NEXT: %27 = extractelement <4 x i32> %10, i32 0
6588 ; CHECK-NEXT: %28 = uitofp i32 %27 to double
6589 ; CHECK-NEXT: %29 = insertelement <2 x double> undef, double %28, i32 0
6590 ; CHECK-NEXT: %30 = extractelement <4 x i32> %10, i32 1
6591 ; CHECK-NEXT: %31 = uitofp i32 %30 to double
6592 ; CHECK-NEXT: %32 = insertelement <2 x double> %29, double %31, i32 1
6593 ; CHECK-NEXT: %33 = extractelement <4 x i32> %10, i32 2
6594 ; CHECK-NEXT: %34 = uitofp i32 %33 to double
6595 ; CHECK-NEXT: %35 = insertelement <2 x double> undef, double %34, i32 0
6596 ; CHECK-NEXT: %36 = extractelement <4 x i32> %10, i32 3
6597 ; CHECK-NEXT: %37 = uitofp i32 %36 to double
6598 ; CHECK-NEXT: %38 = insertelement <2 x double> %35, double %37, i32 1
6599 ; CHECK-NEXT: %39 = extractelement <4 x i32> %11, i32 0
6600 ; CHECK-NEXT: %40 = uitofp i32 %39 to double
6601 ; CHECK-NEXT: %41 = insertelement <2 x double> undef, double %40, i32 0
6602 ; CHECK-NEXT: %42 = extractelement <4 x i32> %11, i32 1
6603 ; CHECK-NEXT: %43 = uitofp i32 %42 to double
6604 ; CHECK-NEXT: %44 = insertelement <2 x double> %41, double %43, i32 1
6605 ; CHECK-NEXT: %45 = extractelement <4 x i32> %11, i32 2
6606 ; CHECK-NEXT: %46 = uitofp i32 %45 to double
6607 ; CHECK-NEXT: %47 = insertelement <2 x double> undef, double %46, i32 0
6608 ; CHECK-NEXT: %48 = extractelement <4 x i32> %11, i32 3
6609 ; CHECK-NEXT: %49 = uitofp i32 %48 to double
6610 ; CHECK-NEXT: %50 = insertelement <2 x double> %47, double %49, i32 1
6611 ; CHECK-NEXT: %51 = extractelement <4 x i32> %12, i32 0
6612 ; CHECK-NEXT: %52 = uitofp i32 %51 to double
6613 ; CHECK-NEXT: %53 = insertelement <2 x double> undef, double %52, i32 0
6614 ; CHECK-NEXT: %54 = extractelement <4 x i32> %12, i32 1
6615 ; CHECK-NEXT: %55 = uitofp i32 %54 to double
6616 ; CHECK-NEXT: %56 = insertelement <2 x double> %53, double %55, i32 1
6617 ; CHECK-NEXT: %57 = extractelement <4 x i32> %12, i32 2
6618 ; CHECK-NEXT: %58 = uitofp i32 %57 to double
6619 ; CHECK-NEXT: %59 = insertelement <2 x double> undef, double %58, i32 0
6620 ; CHECK-NEXT: %60 = extractelement <4 x i32> %12, i32 3
6621 ; CHECK-NEXT: %61 = uitofp i32 %60 to double
6622 ; CHECK-NEXT: %62 = insertelement <2 x double> %59, double %61, i32 1
6623 ; CHECK-NEXT: %63 = extractelement <4 x i32> %13, i32 0
6624 ; CHECK-NEXT: %64 = uitofp i32 %63 to double
6625 ; CHECK-NEXT: %65 = insertelement <2 x double> undef, double %64, i32 0
6626 ; CHECK-NEXT: %66 = extractelement <4 x i32> %13, i32 1
6627 ; CHECK-NEXT: %67 = uitofp i32 %66 to double
6628 ; CHECK-NEXT: %68 = insertelement <2 x double> %65, double %67, i32 1
6629 ; CHECK-NEXT: %69 = extractelement <4 x i32> %13, i32 2
6630 ; CHECK-NEXT: %70 = uitofp i32 %69 to double
6631 ; CHECK-NEXT: %71 = insertelement <2 x double> undef, double %70, i32 0
6632 ; CHECK-NEXT: %72 = extractelement <4 x i32> %13, i32 3
6633 ; CHECK-NEXT: %73 = uitofp i32 %72 to double
6634 ; CHECK-NEXT: %74 = insertelement <2 x double> %71, double %73, i32 1
6635 ; CHECK-NEXT: store <2 x double> %26, <2 x double>* %0, align 16
6636 ; CHECK-NEXT: store <2 x double> %32, <2 x double>* %1, align 16
6637 ; CHECK-NEXT: store <2 x double> %38, <2 x double>* %2, align 16
6638 ; CHECK-NEXT: store <2 x double> %44, <2 x double>* %3, align 16
6639 ; CHECK-NEXT: store <2 x double> %50, <2 x double>* %4, align 16
6640 ; CHECK-NEXT: store <2 x double> %56, <2 x double>* %5, align 16
6641 ; CHECK-NEXT: store <2 x double> %62, <2 x double>* %6, align 16
6642 ; CHECK-NEXT: store <2 x double> %68, <2 x double>* %7, align 16
6643 ; CHECK-NEXT: store <2 x double> %74, <2 x double>* %8, align 16
6644 ; CHECK-NEXT: ret <2 x double> %20
6645
6646 define <20 x double> @uitofp_cast_20xi64_to_20xdouble(<20 x i64>) {
6647 %2 = uitofp <20 x i64> %0 to <20 x double>
6648 ret <20 x double> %2
6649 }
6650 ; CHECK-LABEL: define <2 x double> @uitofp_cast_20xi64_to_20xdouble(<2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i6 4>, <2 x i64>)
6651 ; CHECK-NEXT: %20 = uitofp <2 x i64> %9 to <2 x double>
6652 ; CHECK-NEXT: %21 = uitofp <2 x i64> %10 to <2 x double>
6653 ; CHECK-NEXT: %22 = uitofp <2 x i64> %11 to <2 x double>
6654 ; CHECK-NEXT: %23 = uitofp <2 x i64> %12 to <2 x double>
6655 ; CHECK-NEXT: %24 = uitofp <2 x i64> %13 to <2 x double>
6656 ; CHECK-NEXT: %25 = uitofp <2 x i64> %14 to <2 x double>
6657 ; CHECK-NEXT: %26 = uitofp <2 x i64> %15 to <2 x double>
6658 ; CHECK-NEXT: %27 = uitofp <2 x i64> %16 to <2 x double>
6659 ; CHECK-NEXT: %28 = uitofp <2 x i64> %17 to <2 x double>
6660 ; CHECK-NEXT: %29 = uitofp <2 x i64> %18 to <2 x double>
6661 ; CHECK-NEXT: store <2 x double> %21, <2 x double>* %0, align 16
6662 ; CHECK-NEXT: store <2 x double> %22, <2 x double>* %1, align 16
6663 ; CHECK-NEXT: store <2 x double> %23, <2 x double>* %2, align 16
6664 ; CHECK-NEXT: store <2 x double> %24, <2 x double>* %3, align 16
6665 ; CHECK-NEXT: store <2 x double> %25, <2 x double>* %4, align 16
6666 ; CHECK-NEXT: store <2 x double> %26, <2 x double>* %5, align 16
6667 ; CHECK-NEXT: store <2 x double> %27, <2 x double>* %6, align 16
6668 ; CHECK-NEXT: store <2 x double> %28, <2 x double>* %7, align 16
6669 ; CHECK-NEXT: store <2 x double> %29, <2 x double>* %8, align 16
6670 ; CHECK-NEXT: ret <2 x double> %20
6671
6672 define <20 x float> @sitofp_cast_20xi8_to_20xfloat(<20 x i8>) {
6673 %2 = sitofp <20 x i8> %0 to <20 x float>
6674 ret <20 x float> %2
6675 }
6676 ; CHECK-LABEL: define <4 x float> @sitofp_cast_20xi8_to_20xfloat(<4 x float>* no capture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferencea ble(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapt ure nonnull dereferenceable(16), <16 x i8>, <16 x i8>)
6677 ; CHECK-NEXT: %7 = extractelement <16 x i8> %4, i32 0
6678 ; CHECK-NEXT: %8 = sitofp i8 %7 to float
6679 ; CHECK-NEXT: %9 = insertelement <4 x float> undef, float %8, i32 0
6680 ; CHECK-NEXT: %10 = extractelement <16 x i8> %4, i32 1
6681 ; CHECK-NEXT: %11 = sitofp i8 %10 to float
6682 ; CHECK-NEXT: %12 = insertelement <4 x float> %9, float %11, i32 1
6683 ; CHECK-NEXT: %13 = extractelement <16 x i8> %4, i32 2
6684 ; CHECK-NEXT: %14 = sitofp i8 %13 to float
6685 ; CHECK-NEXT: %15 = insertelement <4 x float> %12, float %14, i32 2
6686 ; CHECK-NEXT: %16 = extractelement <16 x i8> %4, i32 3
6687 ; CHECK-NEXT: %17 = sitofp i8 %16 to float
6688 ; CHECK-NEXT: %18 = insertelement <4 x float> %15, float %17, i32 3
6689 ; CHECK-NEXT: %19 = extractelement <16 x i8> %4, i32 4
6690 ; CHECK-NEXT: %20 = sitofp i8 %19 to float
6691 ; CHECK-NEXT: %21 = insertelement <4 x float> undef, float %20, i32 0
6692 ; CHECK-NEXT: %22 = extractelement <16 x i8> %4, i32 5
6693 ; CHECK-NEXT: %23 = sitofp i8 %22 to float
6694 ; CHECK-NEXT: %24 = insertelement <4 x float> %21, float %23, i32 1
6695 ; CHECK-NEXT: %25 = extractelement <16 x i8> %4, i32 6
6696 ; CHECK-NEXT: %26 = sitofp i8 %25 to float
6697 ; CHECK-NEXT: %27 = insertelement <4 x float> %24, float %26, i32 2
6698 ; CHECK-NEXT: %28 = extractelement <16 x i8> %4, i32 7
6699 ; CHECK-NEXT: %29 = sitofp i8 %28 to float
6700 ; CHECK-NEXT: %30 = insertelement <4 x float> %27, float %29, i32 3
6701 ; CHECK-NEXT: %31 = extractelement <16 x i8> %4, i32 8
6702 ; CHECK-NEXT: %32 = sitofp i8 %31 to float
6703 ; CHECK-NEXT: %33 = insertelement <4 x float> undef, float %32, i32 0
6704 ; CHECK-NEXT: %34 = extractelement <16 x i8> %4, i32 9
6705 ; CHECK-NEXT: %35 = sitofp i8 %34 to float
6706 ; CHECK-NEXT: %36 = insertelement <4 x float> %33, float %35, i32 1
6707 ; CHECK-NEXT: %37 = extractelement <16 x i8> %4, i32 10
6708 ; CHECK-NEXT: %38 = sitofp i8 %37 to float
6709 ; CHECK-NEXT: %39 = insertelement <4 x float> %36, float %38, i32 2
6710 ; CHECK-NEXT: %40 = extractelement <16 x i8> %4, i32 11
6711 ; CHECK-NEXT: %41 = sitofp i8 %40 to float
6712 ; CHECK-NEXT: %42 = insertelement <4 x float> %39, float %41, i32 3
6713 ; CHECK-NEXT: %43 = extractelement <16 x i8> %4, i32 12
6714 ; CHECK-NEXT: %44 = sitofp i8 %43 to float
6715 ; CHECK-NEXT: %45 = insertelement <4 x float> undef, float %44, i32 0
6716 ; CHECK-NEXT: %46 = extractelement <16 x i8> %4, i32 13
6717 ; CHECK-NEXT: %47 = sitofp i8 %46 to float
6718 ; CHECK-NEXT: %48 = insertelement <4 x float> %45, float %47, i32 1
6719 ; CHECK-NEXT: %49 = extractelement <16 x i8> %4, i32 14
6720 ; CHECK-NEXT: %50 = sitofp i8 %49 to float
6721 ; CHECK-NEXT: %51 = insertelement <4 x float> %48, float %50, i32 2
6722 ; CHECK-NEXT: %52 = extractelement <16 x i8> %4, i32 15
6723 ; CHECK-NEXT: %53 = sitofp i8 %52 to float
6724 ; CHECK-NEXT: %54 = insertelement <4 x float> %51, float %53, i32 3
6725 ; CHECK-NEXT: %55 = extractelement <16 x i8> %5, i32 0
6726 ; CHECK-NEXT: %56 = sitofp i8 %55 to float
6727 ; CHECK-NEXT: %57 = insertelement <4 x float> undef, float %56, i32 0
6728 ; CHECK-NEXT: %58 = extractelement <16 x i8> %5, i32 1
6729 ; CHECK-NEXT: %59 = sitofp i8 %58 to float
6730 ; CHECK-NEXT: %60 = insertelement <4 x float> %57, float %59, i32 1
6731 ; CHECK-NEXT: %61 = extractelement <16 x i8> %5, i32 2
6732 ; CHECK-NEXT: %62 = sitofp i8 %61 to float
6733 ; CHECK-NEXT: %63 = insertelement <4 x float> %60, float %62, i32 2
6734 ; CHECK-NEXT: %64 = extractelement <16 x i8> %5, i32 3
6735 ; CHECK-NEXT: %65 = sitofp i8 %64 to float
6736 ; CHECK-NEXT: %66 = insertelement <4 x float> %63, float %65, i32 3
6737 ; CHECK-NEXT: store <4 x float> %30, <4 x float>* %0, align 16
6738 ; CHECK-NEXT: store <4 x float> %42, <4 x float>* %1, align 16
6739 ; CHECK-NEXT: store <4 x float> %54, <4 x float>* %2, align 16
6740 ; CHECK-NEXT: store <4 x float> %66, <4 x float>* %3, align 16
6741 ; CHECK-NEXT: ret <4 x float> %18
6742
6743 define <20 x float> @sitofp_cast_20xi16_to_20xfloat(<20 x i16>) {
6744 %2 = sitofp <20 x i16> %0 to <20 x float>
6745 ret <20 x float> %2
6746 }
6747 ; CHECK-LABEL: define <4 x float> @sitofp_cast_20xi16_to_20xfloat(<4 x float>* n ocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereference able(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocap ture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>)
6748 ; CHECK-NEXT: %8 = extractelement <8 x i16> %4, i32 0
6749 ; CHECK-NEXT: %9 = sitofp i16 %8 to float
6750 ; CHECK-NEXT: %10 = insertelement <4 x float> undef, float %9, i32 0
6751 ; CHECK-NEXT: %11 = extractelement <8 x i16> %4, i32 1
6752 ; CHECK-NEXT: %12 = sitofp i16 %11 to float
6753 ; CHECK-NEXT: %13 = insertelement <4 x float> %10, float %12, i32 1
6754 ; CHECK-NEXT: %14 = extractelement <8 x i16> %4, i32 2
6755 ; CHECK-NEXT: %15 = sitofp i16 %14 to float
6756 ; CHECK-NEXT: %16 = insertelement <4 x float> %13, float %15, i32 2
6757 ; CHECK-NEXT: %17 = extractelement <8 x i16> %4, i32 3
6758 ; CHECK-NEXT: %18 = sitofp i16 %17 to float
6759 ; CHECK-NEXT: %19 = insertelement <4 x float> %16, float %18, i32 3
6760 ; CHECK-NEXT: %20 = extractelement <8 x i16> %4, i32 4
6761 ; CHECK-NEXT: %21 = sitofp i16 %20 to float
6762 ; CHECK-NEXT: %22 = insertelement <4 x float> undef, float %21, i32 0
6763 ; CHECK-NEXT: %23 = extractelement <8 x i16> %4, i32 5
6764 ; CHECK-NEXT: %24 = sitofp i16 %23 to float
6765 ; CHECK-NEXT: %25 = insertelement <4 x float> %22, float %24, i32 1
6766 ; CHECK-NEXT: %26 = extractelement <8 x i16> %4, i32 6
6767 ; CHECK-NEXT: %27 = sitofp i16 %26 to float
6768 ; CHECK-NEXT: %28 = insertelement <4 x float> %25, float %27, i32 2
6769 ; CHECK-NEXT: %29 = extractelement <8 x i16> %4, i32 7
6770 ; CHECK-NEXT: %30 = sitofp i16 %29 to float
6771 ; CHECK-NEXT: %31 = insertelement <4 x float> %28, float %30, i32 3
6772 ; CHECK-NEXT: %32 = extractelement <8 x i16> %5, i32 0
6773 ; CHECK-NEXT: %33 = sitofp i16 %32 to float
6774 ; CHECK-NEXT: %34 = insertelement <4 x float> undef, float %33, i32 0
6775 ; CHECK-NEXT: %35 = extractelement <8 x i16> %5, i32 1
6776 ; CHECK-NEXT: %36 = sitofp i16 %35 to float
6777 ; CHECK-NEXT: %37 = insertelement <4 x float> %34, float %36, i32 1
6778 ; CHECK-NEXT: %38 = extractelement <8 x i16> %5, i32 2
6779 ; CHECK-NEXT: %39 = sitofp i16 %38 to float
6780 ; CHECK-NEXT: %40 = insertelement <4 x float> %37, float %39, i32 2
6781 ; CHECK-NEXT: %41 = extractelement <8 x i16> %5, i32 3
6782 ; CHECK-NEXT: %42 = sitofp i16 %41 to float
6783 ; CHECK-NEXT: %43 = insertelement <4 x float> %40, float %42, i32 3
6784 ; CHECK-NEXT: %44 = extractelement <8 x i16> %5, i32 4
6785 ; CHECK-NEXT: %45 = sitofp i16 %44 to float
6786 ; CHECK-NEXT: %46 = insertelement <4 x float> undef, float %45, i32 0
6787 ; CHECK-NEXT: %47 = extractelement <8 x i16> %5, i32 5
6788 ; CHECK-NEXT: %48 = sitofp i16 %47 to float
6789 ; CHECK-NEXT: %49 = insertelement <4 x float> %46, float %48, i32 1
6790 ; CHECK-NEXT: %50 = extractelement <8 x i16> %5, i32 6
6791 ; CHECK-NEXT: %51 = sitofp i16 %50 to float
6792 ; CHECK-NEXT: %52 = insertelement <4 x float> %49, float %51, i32 2
6793 ; CHECK-NEXT: %53 = extractelement <8 x i16> %5, i32 7
6794 ; CHECK-NEXT: %54 = sitofp i16 %53 to float
6795 ; CHECK-NEXT: %55 = insertelement <4 x float> %52, float %54, i32 3
6796 ; CHECK-NEXT: %56 = extractelement <8 x i16> %6, i32 0
6797 ; CHECK-NEXT: %57 = sitofp i16 %56 to float
6798 ; CHECK-NEXT: %58 = insertelement <4 x float> undef, float %57, i32 0
6799 ; CHECK-NEXT: %59 = extractelement <8 x i16> %6, i32 1
6800 ; CHECK-NEXT: %60 = sitofp i16 %59 to float
6801 ; CHECK-NEXT: %61 = insertelement <4 x float> %58, float %60, i32 1
6802 ; CHECK-NEXT: %62 = extractelement <8 x i16> %6, i32 2
6803 ; CHECK-NEXT: %63 = sitofp i16 %62 to float
6804 ; CHECK-NEXT: %64 = insertelement <4 x float> %61, float %63, i32 2
6805 ; CHECK-NEXT: %65 = extractelement <8 x i16> %6, i32 3
6806 ; CHECK-NEXT: %66 = sitofp i16 %65 to float
6807 ; CHECK-NEXT: %67 = insertelement <4 x float> %64, float %66, i32 3
6808 ; CHECK-NEXT: store <4 x float> %31, <4 x float>* %0, align 16
6809 ; CHECK-NEXT: store <4 x float> %43, <4 x float>* %1, align 16
6810 ; CHECK-NEXT: store <4 x float> %55, <4 x float>* %2, align 16
6811 ; CHECK-NEXT: store <4 x float> %67, <4 x float>* %3, align 16
6812 ; CHECK-NEXT: ret <4 x float> %19
6813
6814 define <20 x float> @sitofp_cast_20xi32_to_20xfloat(<20 x i32>) {
6815 %2 = sitofp <20 x i32> %0 to <20 x float>
6816 ret <20 x float> %2
6817 }
6818 ; CHECK-LABEL: define <4 x float> @sitofp_cast_20xi32_to_20xfloat(<4 x float>* n ocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereference able(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocap ture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>)
6819 ; CHECK-NEXT: %10 = sitofp <4 x i32> %4 to <4 x float>
6820 ; CHECK-NEXT: %11 = sitofp <4 x i32> %5 to <4 x float>
6821 ; CHECK-NEXT: %12 = sitofp <4 x i32> %6 to <4 x float>
6822 ; CHECK-NEXT: %13 = sitofp <4 x i32> %7 to <4 x float>
6823 ; CHECK-NEXT: %14 = sitofp <4 x i32> %8 to <4 x float>
6824 ; CHECK-NEXT: store <4 x float> %11, <4 x float>* %0, align 16
6825 ; CHECK-NEXT: store <4 x float> %12, <4 x float>* %1, align 16
6826 ; CHECK-NEXT: store <4 x float> %13, <4 x float>* %2, align 16
6827 ; CHECK-NEXT: store <4 x float> %14, <4 x float>* %3, align 16
6828 ; CHECK-NEXT: ret <4 x float> %10
6829
6830 define <20 x float> @sitofp_cast_20xi64_to_20xfloat(<20 x i64>) {
6831 %2 = sitofp <20 x i64> %0 to <20 x float>
6832 ret <20 x float> %2
6833 }
6834 ; CHECK-LABEL: define <4 x float> @sitofp_cast_20xi64_to_20xfloat(<4 x float>* n ocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereference able(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocap ture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
6835 ; CHECK-NEXT: %15 = extractelement <2 x i64> %4, i32 0
6836 ; CHECK-NEXT: %16 = sitofp i64 %15 to float
6837 ; CHECK-NEXT: %17 = insertelement <4 x float> undef, float %16, i32 0
6838 ; CHECK-NEXT: %18 = extractelement <2 x i64> %4, i32 1
6839 ; CHECK-NEXT: %19 = sitofp i64 %18 to float
6840 ; CHECK-NEXT: %20 = insertelement <4 x float> %17, float %19, i32 1
6841 ; CHECK-NEXT: %21 = extractelement <2 x i64> %5, i32 0
6842 ; CHECK-NEXT: %22 = sitofp i64 %21 to float
6843 ; CHECK-NEXT: %23 = insertelement <4 x float> %20, float %22, i32 2
6844 ; CHECK-NEXT: %24 = extractelement <2 x i64> %5, i32 1
6845 ; CHECK-NEXT: %25 = sitofp i64 %24 to float
6846 ; CHECK-NEXT: %26 = insertelement <4 x float> %23, float %25, i32 3
6847 ; CHECK-NEXT: %27 = extractelement <2 x i64> %6, i32 0
6848 ; CHECK-NEXT: %28 = sitofp i64 %27 to float
6849 ; CHECK-NEXT: %29 = insertelement <4 x float> undef, float %28, i32 0
6850 ; CHECK-NEXT: %30 = extractelement <2 x i64> %6, i32 1
6851 ; CHECK-NEXT: %31 = sitofp i64 %30 to float
6852 ; CHECK-NEXT: %32 = insertelement <4 x float> %29, float %31, i32 1
6853 ; CHECK-NEXT: %33 = extractelement <2 x i64> %7, i32 0
6854 ; CHECK-NEXT: %34 = sitofp i64 %33 to float
6855 ; CHECK-NEXT: %35 = insertelement <4 x float> %32, float %34, i32 2
6856 ; CHECK-NEXT: %36 = extractelement <2 x i64> %7, i32 1
6857 ; CHECK-NEXT: %37 = sitofp i64 %36 to float
6858 ; CHECK-NEXT: %38 = insertelement <4 x float> %35, float %37, i32 3
6859 ; CHECK-NEXT: %39 = extractelement <2 x i64> %8, i32 0
6860 ; CHECK-NEXT: %40 = sitofp i64 %39 to float
6861 ; CHECK-NEXT: %41 = insertelement <4 x float> undef, float %40, i32 0
6862 ; CHECK-NEXT: %42 = extractelement <2 x i64> %8, i32 1
6863 ; CHECK-NEXT: %43 = sitofp i64 %42 to float
6864 ; CHECK-NEXT: %44 = insertelement <4 x float> %41, float %43, i32 1
6865 ; CHECK-NEXT: %45 = extractelement <2 x i64> %9, i32 0
6866 ; CHECK-NEXT: %46 = sitofp i64 %45 to float
6867 ; CHECK-NEXT: %47 = insertelement <4 x float> %44, float %46, i32 2
6868 ; CHECK-NEXT: %48 = extractelement <2 x i64> %9, i32 1
6869 ; CHECK-NEXT: %49 = sitofp i64 %48 to float
6870 ; CHECK-NEXT: %50 = insertelement <4 x float> %47, float %49, i32 3
6871 ; CHECK-NEXT: %51 = extractelement <2 x i64> %10, i32 0
6872 ; CHECK-NEXT: %52 = sitofp i64 %51 to float
6873 ; CHECK-NEXT: %53 = insertelement <4 x float> undef, float %52, i32 0
6874 ; CHECK-NEXT: %54 = extractelement <2 x i64> %10, i32 1
6875 ; CHECK-NEXT: %55 = sitofp i64 %54 to float
6876 ; CHECK-NEXT: %56 = insertelement <4 x float> %53, float %55, i32 1
6877 ; CHECK-NEXT: %57 = extractelement <2 x i64> %11, i32 0
6878 ; CHECK-NEXT: %58 = sitofp i64 %57 to float
6879 ; CHECK-NEXT: %59 = insertelement <4 x float> %56, float %58, i32 2
6880 ; CHECK-NEXT: %60 = extractelement <2 x i64> %11, i32 1
6881 ; CHECK-NEXT: %61 = sitofp i64 %60 to float
6882 ; CHECK-NEXT: %62 = insertelement <4 x float> %59, float %61, i32 3
6883 ; CHECK-NEXT: %63 = extractelement <2 x i64> %12, i32 0
6884 ; CHECK-NEXT: %64 = sitofp i64 %63 to float
6885 ; CHECK-NEXT: %65 = insertelement <4 x float> undef, float %64, i32 0
6886 ; CHECK-NEXT: %66 = extractelement <2 x i64> %12, i32 1
6887 ; CHECK-NEXT: %67 = sitofp i64 %66 to float
6888 ; CHECK-NEXT: %68 = insertelement <4 x float> %65, float %67, i32 1
6889 ; CHECK-NEXT: %69 = extractelement <2 x i64> %13, i32 0
6890 ; CHECK-NEXT: %70 = sitofp i64 %69 to float
6891 ; CHECK-NEXT: %71 = insertelement <4 x float> %68, float %70, i32 2
6892 ; CHECK-NEXT: %72 = extractelement <2 x i64> %13, i32 1
6893 ; CHECK-NEXT: %73 = sitofp i64 %72 to float
6894 ; CHECK-NEXT: %74 = insertelement <4 x float> %71, float %73, i32 3
6895 ; CHECK-NEXT: store <4 x float> %38, <4 x float>* %0, align 16
6896 ; CHECK-NEXT: store <4 x float> %50, <4 x float>* %1, align 16
6897 ; CHECK-NEXT: store <4 x float> %62, <4 x float>* %2, align 16
6898 ; CHECK-NEXT: store <4 x float> %74, <4 x float>* %3, align 16
6899 ; CHECK-NEXT: ret <4 x float> %26
6900
6901 define <20 x double> @sitofp_cast_20xi8_to_20xdouble(<20 x i8>) {
6902 %2 = sitofp <20 x i8> %0 to <20 x double>
6903 ret <20 x double> %2
6904 }
6905 ; CHECK-LABEL: define <2 x double> @sitofp_cast_20xi8_to_20xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* n ocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenc eable(16), <2 x double>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>)
6906 ; CHECK-NEXT: %12 = extractelement <16 x i8> %9, i32 0
6907 ; CHECK-NEXT: %13 = sitofp i8 %12 to double
6908 ; CHECK-NEXT: %14 = insertelement <2 x double> undef, double %13, i32 0
6909 ; CHECK-NEXT: %15 = extractelement <16 x i8> %9, i32 1
6910 ; CHECK-NEXT: %16 = sitofp i8 %15 to double
6911 ; CHECK-NEXT: %17 = insertelement <2 x double> %14, double %16, i32 1
6912 ; CHECK-NEXT: %18 = extractelement <16 x i8> %9, i32 2
6913 ; CHECK-NEXT: %19 = sitofp i8 %18 to double
6914 ; CHECK-NEXT: %20 = insertelement <2 x double> undef, double %19, i32 0
6915 ; CHECK-NEXT: %21 = extractelement <16 x i8> %9, i32 3
6916 ; CHECK-NEXT: %22 = sitofp i8 %21 to double
6917 ; CHECK-NEXT: %23 = insertelement <2 x double> %20, double %22, i32 1
6918 ; CHECK-NEXT: %24 = extractelement <16 x i8> %9, i32 4
6919 ; CHECK-NEXT: %25 = sitofp i8 %24 to double
6920 ; CHECK-NEXT: %26 = insertelement <2 x double> undef, double %25, i32 0
6921 ; CHECK-NEXT: %27 = extractelement <16 x i8> %9, i32 5
6922 ; CHECK-NEXT: %28 = sitofp i8 %27 to double
6923 ; CHECK-NEXT: %29 = insertelement <2 x double> %26, double %28, i32 1
6924 ; CHECK-NEXT: %30 = extractelement <16 x i8> %9, i32 6
6925 ; CHECK-NEXT: %31 = sitofp i8 %30 to double
6926 ; CHECK-NEXT: %32 = insertelement <2 x double> undef, double %31, i32 0
6927 ; CHECK-NEXT: %33 = extractelement <16 x i8> %9, i32 7
6928 ; CHECK-NEXT: %34 = sitofp i8 %33 to double
6929 ; CHECK-NEXT: %35 = insertelement <2 x double> %32, double %34, i32 1
6930 ; CHECK-NEXT: %36 = extractelement <16 x i8> %9, i32 8
6931 ; CHECK-NEXT: %37 = sitofp i8 %36 to double
6932 ; CHECK-NEXT: %38 = insertelement <2 x double> undef, double %37, i32 0
6933 ; CHECK-NEXT: %39 = extractelement <16 x i8> %9, i32 9
6934 ; CHECK-NEXT: %40 = sitofp i8 %39 to double
6935 ; CHECK-NEXT: %41 = insertelement <2 x double> %38, double %40, i32 1
6936 ; CHECK-NEXT: %42 = extractelement <16 x i8> %9, i32 10
6937 ; CHECK-NEXT: %43 = sitofp i8 %42 to double
6938 ; CHECK-NEXT: %44 = insertelement <2 x double> undef, double %43, i32 0
6939 ; CHECK-NEXT: %45 = extractelement <16 x i8> %9, i32 11
6940 ; CHECK-NEXT: %46 = sitofp i8 %45 to double
6941 ; CHECK-NEXT: %47 = insertelement <2 x double> %44, double %46, i32 1
6942 ; CHECK-NEXT: %48 = extractelement <16 x i8> %9, i32 12
6943 ; CHECK-NEXT: %49 = sitofp i8 %48 to double
6944 ; CHECK-NEXT: %50 = insertelement <2 x double> undef, double %49, i32 0
6945 ; CHECK-NEXT: %51 = extractelement <16 x i8> %9, i32 13
6946 ; CHECK-NEXT: %52 = sitofp i8 %51 to double
6947 ; CHECK-NEXT: %53 = insertelement <2 x double> %50, double %52, i32 1
6948 ; CHECK-NEXT: %54 = extractelement <16 x i8> %9, i32 14
6949 ; CHECK-NEXT: %55 = sitofp i8 %54 to double
6950 ; CHECK-NEXT: %56 = insertelement <2 x double> undef, double %55, i32 0
6951 ; CHECK-NEXT: %57 = extractelement <16 x i8> %9, i32 15
6952 ; CHECK-NEXT: %58 = sitofp i8 %57 to double
6953 ; CHECK-NEXT: %59 = insertelement <2 x double> %56, double %58, i32 1
6954 ; CHECK-NEXT: %60 = extractelement <16 x i8> %10, i32 0
6955 ; CHECK-NEXT: %61 = sitofp i8 %60 to double
6956 ; CHECK-NEXT: %62 = insertelement <2 x double> undef, double %61, i32 0
6957 ; CHECK-NEXT: %63 = extractelement <16 x i8> %10, i32 1
6958 ; CHECK-NEXT: %64 = sitofp i8 %63 to double
6959 ; CHECK-NEXT: %65 = insertelement <2 x double> %62, double %64, i32 1
6960 ; CHECK-NEXT: %66 = extractelement <16 x i8> %10, i32 2
6961 ; CHECK-NEXT: %67 = sitofp i8 %66 to double
6962 ; CHECK-NEXT: %68 = insertelement <2 x double> undef, double %67, i32 0
6963 ; CHECK-NEXT: %69 = extractelement <16 x i8> %10, i32 3
6964 ; CHECK-NEXT: %70 = sitofp i8 %69 to double
6965 ; CHECK-NEXT: %71 = insertelement <2 x double> %68, double %70, i32 1
6966 ; CHECK-NEXT: store <2 x double> %23, <2 x double>* %0, align 16
6967 ; CHECK-NEXT: store <2 x double> %29, <2 x double>* %1, align 16
6968 ; CHECK-NEXT: store <2 x double> %35, <2 x double>* %2, align 16
6969 ; CHECK-NEXT: store <2 x double> %41, <2 x double>* %3, align 16
6970 ; CHECK-NEXT: store <2 x double> %47, <2 x double>* %4, align 16
6971 ; CHECK-NEXT: store <2 x double> %53, <2 x double>* %5, align 16
6972 ; CHECK-NEXT: store <2 x double> %59, <2 x double>* %6, align 16
6973 ; CHECK-NEXT: store <2 x double> %65, <2 x double>* %7, align 16
6974 ; CHECK-NEXT: store <2 x double> %71, <2 x double>* %8, align 16
6975 ; CHECK-NEXT: ret <2 x double> %17
6976
6977 define <20 x double> @sitofp_cast_20xi16_to_20xdouble(<20 x i16>) {
6978 %2 = sitofp <20 x i16> %0 to <20 x double>
6979 ret <20 x double> %2
6980 }
6981 ; CHECK-LABEL: define <2 x double> @sitofp_cast_20xi16_to_20xdouble(<2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>)
6982 ; CHECK-NEXT: %13 = extractelement <8 x i16> %9, i32 0
6983 ; CHECK-NEXT: %14 = sitofp i16 %13 to double
6984 ; CHECK-NEXT: %15 = insertelement <2 x double> undef, double %14, i32 0
6985 ; CHECK-NEXT: %16 = extractelement <8 x i16> %9, i32 1
6986 ; CHECK-NEXT: %17 = sitofp i16 %16 to double
6987 ; CHECK-NEXT: %18 = insertelement <2 x double> %15, double %17, i32 1
6988 ; CHECK-NEXT: %19 = extractelement <8 x i16> %9, i32 2
6989 ; CHECK-NEXT: %20 = sitofp i16 %19 to double
6990 ; CHECK-NEXT: %21 = insertelement <2 x double> undef, double %20, i32 0
6991 ; CHECK-NEXT: %22 = extractelement <8 x i16> %9, i32 3
6992 ; CHECK-NEXT: %23 = sitofp i16 %22 to double
6993 ; CHECK-NEXT: %24 = insertelement <2 x double> %21, double %23, i32 1
6994 ; CHECK-NEXT: %25 = extractelement <8 x i16> %9, i32 4
6995 ; CHECK-NEXT: %26 = sitofp i16 %25 to double
6996 ; CHECK-NEXT: %27 = insertelement <2 x double> undef, double %26, i32 0
6997 ; CHECK-NEXT: %28 = extractelement <8 x i16> %9, i32 5
6998 ; CHECK-NEXT: %29 = sitofp i16 %28 to double
6999 ; CHECK-NEXT: %30 = insertelement <2 x double> %27, double %29, i32 1
7000 ; CHECK-NEXT: %31 = extractelement <8 x i16> %9, i32 6
7001 ; CHECK-NEXT: %32 = sitofp i16 %31 to double
7002 ; CHECK-NEXT: %33 = insertelement <2 x double> undef, double %32, i32 0
7003 ; CHECK-NEXT: %34 = extractelement <8 x i16> %9, i32 7
7004 ; CHECK-NEXT: %35 = sitofp i16 %34 to double
7005 ; CHECK-NEXT: %36 = insertelement <2 x double> %33, double %35, i32 1
7006 ; CHECK-NEXT: %37 = extractelement <8 x i16> %10, i32 0
7007 ; CHECK-NEXT: %38 = sitofp i16 %37 to double
7008 ; CHECK-NEXT: %39 = insertelement <2 x double> undef, double %38, i32 0
7009 ; CHECK-NEXT: %40 = extractelement <8 x i16> %10, i32 1
7010 ; CHECK-NEXT: %41 = sitofp i16 %40 to double
7011 ; CHECK-NEXT: %42 = insertelement <2 x double> %39, double %41, i32 1
7012 ; CHECK-NEXT: %43 = extractelement <8 x i16> %10, i32 2
7013 ; CHECK-NEXT: %44 = sitofp i16 %43 to double
7014 ; CHECK-NEXT: %45 = insertelement <2 x double> undef, double %44, i32 0
7015 ; CHECK-NEXT: %46 = extractelement <8 x i16> %10, i32 3
7016 ; CHECK-NEXT: %47 = sitofp i16 %46 to double
7017 ; CHECK-NEXT: %48 = insertelement <2 x double> %45, double %47, i32 1
7018 ; CHECK-NEXT: %49 = extractelement <8 x i16> %10, i32 4
7019 ; CHECK-NEXT: %50 = sitofp i16 %49 to double
7020 ; CHECK-NEXT: %51 = insertelement <2 x double> undef, double %50, i32 0
7021 ; CHECK-NEXT: %52 = extractelement <8 x i16> %10, i32 5
7022 ; CHECK-NEXT: %53 = sitofp i16 %52 to double
7023 ; CHECK-NEXT: %54 = insertelement <2 x double> %51, double %53, i32 1
7024 ; CHECK-NEXT: %55 = extractelement <8 x i16> %10, i32 6
7025 ; CHECK-NEXT: %56 = sitofp i16 %55 to double
7026 ; CHECK-NEXT: %57 = insertelement <2 x double> undef, double %56, i32 0
7027 ; CHECK-NEXT: %58 = extractelement <8 x i16> %10, i32 7
7028 ; CHECK-NEXT: %59 = sitofp i16 %58 to double
7029 ; CHECK-NEXT: %60 = insertelement <2 x double> %57, double %59, i32 1
7030 ; CHECK-NEXT: %61 = extractelement <8 x i16> %11, i32 0
7031 ; CHECK-NEXT: %62 = sitofp i16 %61 to double
7032 ; CHECK-NEXT: %63 = insertelement <2 x double> undef, double %62, i32 0
7033 ; CHECK-NEXT: %64 = extractelement <8 x i16> %11, i32 1
7034 ; CHECK-NEXT: %65 = sitofp i16 %64 to double
7035 ; CHECK-NEXT: %66 = insertelement <2 x double> %63, double %65, i32 1
7036 ; CHECK-NEXT: %67 = extractelement <8 x i16> %11, i32 2
7037 ; CHECK-NEXT: %68 = sitofp i16 %67 to double
7038 ; CHECK-NEXT: %69 = insertelement <2 x double> undef, double %68, i32 0
7039 ; CHECK-NEXT: %70 = extractelement <8 x i16> %11, i32 3
7040 ; CHECK-NEXT: %71 = sitofp i16 %70 to double
7041 ; CHECK-NEXT: %72 = insertelement <2 x double> %69, double %71, i32 1
7042 ; CHECK-NEXT: store <2 x double> %24, <2 x double>* %0, align 16
7043 ; CHECK-NEXT: store <2 x double> %30, <2 x double>* %1, align 16
7044 ; CHECK-NEXT: store <2 x double> %36, <2 x double>* %2, align 16
7045 ; CHECK-NEXT: store <2 x double> %42, <2 x double>* %3, align 16
7046 ; CHECK-NEXT: store <2 x double> %48, <2 x double>* %4, align 16
7047 ; CHECK-NEXT: store <2 x double> %54, <2 x double>* %5, align 16
7048 ; CHECK-NEXT: store <2 x double> %60, <2 x double>* %6, align 16
7049 ; CHECK-NEXT: store <2 x double> %66, <2 x double>* %7, align 16
7050 ; CHECK-NEXT: store <2 x double> %72, <2 x double>* %8, align 16
7051 ; CHECK-NEXT: ret <2 x double> %18
7052
7053 define <20 x double> @sitofp_cast_20xi32_to_20xdouble(<20 x i32>) {
7054 %2 = sitofp <20 x i32> %0 to <20 x double>
7055 ret <20 x double> %2
7056 }
7057 ; CHECK-LABEL: define <2 x double> @sitofp_cast_20xi32_to_20xdouble(<2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>)
7058 ; CHECK-NEXT: %15 = extractelement <4 x i32> %9, i32 0
7059 ; CHECK-NEXT: %16 = sitofp i32 %15 to double
7060 ; CHECK-NEXT: %17 = insertelement <2 x double> undef, double %16, i32 0
7061 ; CHECK-NEXT: %18 = extractelement <4 x i32> %9, i32 1
7062 ; CHECK-NEXT: %19 = sitofp i32 %18 to double
7063 ; CHECK-NEXT: %20 = insertelement <2 x double> %17, double %19, i32 1
7064 ; CHECK-NEXT: %21 = extractelement <4 x i32> %9, i32 2
7065 ; CHECK-NEXT: %22 = sitofp i32 %21 to double
7066 ; CHECK-NEXT: %23 = insertelement <2 x double> undef, double %22, i32 0
7067 ; CHECK-NEXT: %24 = extractelement <4 x i32> %9, i32 3
7068 ; CHECK-NEXT: %25 = sitofp i32 %24 to double
7069 ; CHECK-NEXT: %26 = insertelement <2 x double> %23, double %25, i32 1
7070 ; CHECK-NEXT: %27 = extractelement <4 x i32> %10, i32 0
7071 ; CHECK-NEXT: %28 = sitofp i32 %27 to double
7072 ; CHECK-NEXT: %29 = insertelement <2 x double> undef, double %28, i32 0
7073 ; CHECK-NEXT: %30 = extractelement <4 x i32> %10, i32 1
7074 ; CHECK-NEXT: %31 = sitofp i32 %30 to double
7075 ; CHECK-NEXT: %32 = insertelement <2 x double> %29, double %31, i32 1
7076 ; CHECK-NEXT: %33 = extractelement <4 x i32> %10, i32 2
7077 ; CHECK-NEXT: %34 = sitofp i32 %33 to double
7078 ; CHECK-NEXT: %35 = insertelement <2 x double> undef, double %34, i32 0
7079 ; CHECK-NEXT: %36 = extractelement <4 x i32> %10, i32 3
7080 ; CHECK-NEXT: %37 = sitofp i32 %36 to double
7081 ; CHECK-NEXT: %38 = insertelement <2 x double> %35, double %37, i32 1
7082 ; CHECK-NEXT: %39 = extractelement <4 x i32> %11, i32 0
7083 ; CHECK-NEXT: %40 = sitofp i32 %39 to double
7084 ; CHECK-NEXT: %41 = insertelement <2 x double> undef, double %40, i32 0
7085 ; CHECK-NEXT: %42 = extractelement <4 x i32> %11, i32 1
7086 ; CHECK-NEXT: %43 = sitofp i32 %42 to double
7087 ; CHECK-NEXT: %44 = insertelement <2 x double> %41, double %43, i32 1
7088 ; CHECK-NEXT: %45 = extractelement <4 x i32> %11, i32 2
7089 ; CHECK-NEXT: %46 = sitofp i32 %45 to double
7090 ; CHECK-NEXT: %47 = insertelement <2 x double> undef, double %46, i32 0
7091 ; CHECK-NEXT: %48 = extractelement <4 x i32> %11, i32 3
7092 ; CHECK-NEXT: %49 = sitofp i32 %48 to double
7093 ; CHECK-NEXT: %50 = insertelement <2 x double> %47, double %49, i32 1
7094 ; CHECK-NEXT: %51 = extractelement <4 x i32> %12, i32 0
7095 ; CHECK-NEXT: %52 = sitofp i32 %51 to double
7096 ; CHECK-NEXT: %53 = insertelement <2 x double> undef, double %52, i32 0
7097 ; CHECK-NEXT: %54 = extractelement <4 x i32> %12, i32 1
7098 ; CHECK-NEXT: %55 = sitofp i32 %54 to double
7099 ; CHECK-NEXT: %56 = insertelement <2 x double> %53, double %55, i32 1
7100 ; CHECK-NEXT: %57 = extractelement <4 x i32> %12, i32 2
7101 ; CHECK-NEXT: %58 = sitofp i32 %57 to double
7102 ; CHECK-NEXT: %59 = insertelement <2 x double> undef, double %58, i32 0
7103 ; CHECK-NEXT: %60 = extractelement <4 x i32> %12, i32 3
7104 ; CHECK-NEXT: %61 = sitofp i32 %60 to double
7105 ; CHECK-NEXT: %62 = insertelement <2 x double> %59, double %61, i32 1
7106 ; CHECK-NEXT: %63 = extractelement <4 x i32> %13, i32 0
7107 ; CHECK-NEXT: %64 = sitofp i32 %63 to double
7108 ; CHECK-NEXT: %65 = insertelement <2 x double> undef, double %64, i32 0
7109 ; CHECK-NEXT: %66 = extractelement <4 x i32> %13, i32 1
7110 ; CHECK-NEXT: %67 = sitofp i32 %66 to double
7111 ; CHECK-NEXT: %68 = insertelement <2 x double> %65, double %67, i32 1
7112 ; CHECK-NEXT: %69 = extractelement <4 x i32> %13, i32 2
7113 ; CHECK-NEXT: %70 = sitofp i32 %69 to double
7114 ; CHECK-NEXT: %71 = insertelement <2 x double> undef, double %70, i32 0
7115 ; CHECK-NEXT: %72 = extractelement <4 x i32> %13, i32 3
7116 ; CHECK-NEXT: %73 = sitofp i32 %72 to double
7117 ; CHECK-NEXT: %74 = insertelement <2 x double> %71, double %73, i32 1
7118 ; CHECK-NEXT: store <2 x double> %26, <2 x double>* %0, align 16
7119 ; CHECK-NEXT: store <2 x double> %32, <2 x double>* %1, align 16
7120 ; CHECK-NEXT: store <2 x double> %38, <2 x double>* %2, align 16
7121 ; CHECK-NEXT: store <2 x double> %44, <2 x double>* %3, align 16
7122 ; CHECK-NEXT: store <2 x double> %50, <2 x double>* %4, align 16
7123 ; CHECK-NEXT: store <2 x double> %56, <2 x double>* %5, align 16
7124 ; CHECK-NEXT: store <2 x double> %62, <2 x double>* %6, align 16
7125 ; CHECK-NEXT: store <2 x double> %68, <2 x double>* %7, align 16
7126 ; CHECK-NEXT: store <2 x double> %74, <2 x double>* %8, align 16
7127 ; CHECK-NEXT: ret <2 x double> %20
7128
7129 define <20 x double> @sitofp_cast_20xi64_to_20xdouble(<20 x i64>) {
7130 %2 = sitofp <20 x i64> %0 to <20 x double>
7131 ret <20 x double> %2
7132 }
7133 ; CHECK-LABEL: define <2 x double> @sitofp_cast_20xi64_to_20xdouble(<2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferen ceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i6 4>, <2 x i64>)
7134 ; CHECK-NEXT: %20 = sitofp <2 x i64> %9 to <2 x double>
7135 ; CHECK-NEXT: %21 = sitofp <2 x i64> %10 to <2 x double>
7136 ; CHECK-NEXT: %22 = sitofp <2 x i64> %11 to <2 x double>
7137 ; CHECK-NEXT: %23 = sitofp <2 x i64> %12 to <2 x double>
7138 ; CHECK-NEXT: %24 = sitofp <2 x i64> %13 to <2 x double>
7139 ; CHECK-NEXT: %25 = sitofp <2 x i64> %14 to <2 x double>
7140 ; CHECK-NEXT: %26 = sitofp <2 x i64> %15 to <2 x double>
7141 ; CHECK-NEXT: %27 = sitofp <2 x i64> %16 to <2 x double>
7142 ; CHECK-NEXT: %28 = sitofp <2 x i64> %17 to <2 x double>
7143 ; CHECK-NEXT: %29 = sitofp <2 x i64> %18 to <2 x double>
7144 ; CHECK-NEXT: store <2 x double> %21, <2 x double>* %0, align 16
7145 ; CHECK-NEXT: store <2 x double> %22, <2 x double>* %1, align 16
7146 ; CHECK-NEXT: store <2 x double> %23, <2 x double>* %2, align 16
7147 ; CHECK-NEXT: store <2 x double> %24, <2 x double>* %3, align 16
7148 ; CHECK-NEXT: store <2 x double> %25, <2 x double>* %4, align 16
7149 ; CHECK-NEXT: store <2 x double> %26, <2 x double>* %5, align 16
7150 ; CHECK-NEXT: store <2 x double> %27, <2 x double>* %6, align 16
7151 ; CHECK-NEXT: store <2 x double> %28, <2 x double>* %7, align 16
7152 ; CHECK-NEXT: store <2 x double> %29, <2 x double>* %8, align 16
7153 ; CHECK-NEXT: ret <2 x double> %20
7154
7155 define <2 x i32> @ptrtoint_cast_2xi8ptr_to_2xi32(<2 x i8*>) {
7156 %2 = ptrtoint <2 x i8*> %0 to <2 x i32>
7157 ret <2 x i32> %2
7158 }
7159 ; CHECK-LABEL: define <4 x i32> @ptrtoint_cast_2xi8ptr_to_2xi32(<4 x i8*>)
7160 ; CHECK-NEXT: %2 = ptrtoint <4 x i8*> %0 to <4 x i32>
7161 ; CHECK-NEXT: ret <4 x i32> %2
7162
7163 define <2 x i8*> @inttoptr_cast_2xi32_to_2xi8ptr(<2 x i32>) {
7164 %2 = inttoptr <2 x i32> %0 to <2 x i8*>
7165 ret <2 x i8*> %2
7166 }
7167 ; CHECK-LABEL: define <4 x i8*> @inttoptr_cast_2xi32_to_2xi8ptr(<4 x i32>)
7168 ; CHECK-NEXT: %2 = inttoptr <4 x i32> %0 to <4 x i8*>
7169 ; CHECK-NEXT: ret <4 x i8*> %2
7170
7171 define <2 x float> @bitcast_cast_2xi32_to_2xfloat(<2 x i32>) {
7172 %2 = bitcast <2 x i32> %0 to <2 x float>
7173 ret <2 x float> %2
7174 }
7175 ; CHECK-LABEL: define <4 x float> @bitcast_cast_2xi32_to_2xfloat(<4 x i32>)
7176 ; CHECK-NEXT: %2 = bitcast <4 x i32> %0 to <4 x float>
7177 ; CHECK-NEXT: ret <4 x float> %2
7178
7179 define <2 x i32> @bitcast_cast_2xfloat_to_2xi32(<2 x float>) {
7180 %2 = bitcast <2 x float> %0 to <2 x i32>
7181 ret <2 x i32> %2
7182 }
7183 ; CHECK-LABEL: define <4 x i32> @bitcast_cast_2xfloat_to_2xi32(<4 x float>)
7184 ; CHECK-NEXT: %2 = bitcast <4 x float> %0 to <4 x i32>
7185 ; CHECK-NEXT: ret <4 x i32> %2
7186
7187 define <2 x double> @bitcast_cast_2xi64_to_2xdouble(<2 x i64>) {
7188 %2 = bitcast <2 x i64> %0 to <2 x double>
7189 ret <2 x double> %2
7190 }
7191 ; CHECK-LABEL: define <2 x double> @bitcast_cast_2xi64_to_2xdouble(<2 x i64>)
7192 ; CHECK-NEXT: %2 = bitcast <2 x i64> %0 to <2 x double>
7193 ; CHECK-NEXT: ret <2 x double> %2
7194
7195 define <2 x i64> @bitcast_cast_2xdouble_to_2xi64(<2 x double>) {
7196 %2 = bitcast <2 x double> %0 to <2 x i64>
7197 ret <2 x i64> %2
7198 }
7199 ; CHECK-LABEL: define <2 x i64> @bitcast_cast_2xdouble_to_2xi64(<2 x double>)
7200 ; CHECK-NEXT: %2 = bitcast <2 x double> %0 to <2 x i64>
7201 ; CHECK-NEXT: ret <2 x i64> %2
7202
7203 define <4 x i32> @ptrtoint_cast_4xi8ptr_to_4xi32(<4 x i8*>) {
7204 %2 = ptrtoint <4 x i8*> %0 to <4 x i32>
7205 ret <4 x i32> %2
7206 }
7207 ; CHECK-LABEL: define <4 x i32> @ptrtoint_cast_4xi8ptr_to_4xi32(<4 x i8*>)
7208 ; CHECK-NEXT: %2 = ptrtoint <4 x i8*> %0 to <4 x i32>
7209 ; CHECK-NEXT: ret <4 x i32> %2
7210
7211 define <4 x i8*> @inttoptr_cast_4xi32_to_4xi8ptr(<4 x i32>) {
7212 %2 = inttoptr <4 x i32> %0 to <4 x i8*>
7213 ret <4 x i8*> %2
7214 }
7215 ; CHECK-LABEL: define <4 x i8*> @inttoptr_cast_4xi32_to_4xi8ptr(<4 x i32>)
7216 ; CHECK-NEXT: %2 = inttoptr <4 x i32> %0 to <4 x i8*>
7217 ; CHECK-NEXT: ret <4 x i8*> %2
7218
7219 define <4 x float> @bitcast_cast_4xi32_to_4xfloat(<4 x i32>) {
7220 %2 = bitcast <4 x i32> %0 to <4 x float>
7221 ret <4 x float> %2
7222 }
7223 ; CHECK-LABEL: define <4 x float> @bitcast_cast_4xi32_to_4xfloat(<4 x i32>)
7224 ; CHECK-NEXT: %2 = bitcast <4 x i32> %0 to <4 x float>
7225 ; CHECK-NEXT: ret <4 x float> %2
7226
7227 define <4 x i32> @bitcast_cast_4xfloat_to_4xi32(<4 x float>) {
7228 %2 = bitcast <4 x float> %0 to <4 x i32>
7229 ret <4 x i32> %2
7230 }
7231 ; CHECK-LABEL: define <4 x i32> @bitcast_cast_4xfloat_to_4xi32(<4 x float>)
7232 ; CHECK-NEXT: %2 = bitcast <4 x float> %0 to <4 x i32>
7233 ; CHECK-NEXT: ret <4 x i32> %2
7234
7235 define <4 x double> @bitcast_cast_4xi64_to_4xdouble(<4 x i64>) {
7236 %2 = bitcast <4 x i64> %0 to <4 x double>
7237 ret <4 x double> %2
7238 }
7239 ; CHECK-LABEL: define <2 x double> @bitcast_cast_4xi64_to_4xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>)
7240 ; CHECK-NEXT: %4 = bitcast <2 x i64> %1 to <2 x double>
7241 ; CHECK-NEXT: %5 = bitcast <2 x i64> %2 to <2 x double>
7242 ; CHECK-NEXT: store <2 x double> %5, <2 x double>* %0, align 16
7243 ; CHECK-NEXT: ret <2 x double> %4
7244
7245 define <4 x i64> @bitcast_cast_4xdouble_to_4xi64(<4 x double>) {
7246 %2 = bitcast <4 x double> %0 to <4 x i64>
7247 ret <4 x i64> %2
7248 }
7249 ; CHECK-LABEL: define <2 x i64> @bitcast_cast_4xdouble_to_4xi64(<2 x i64>* nocap ture nonnull dereferenceable(16), <2 x double>, <2 x double>)
7250 ; CHECK-NEXT: %4 = bitcast <2 x double> %1 to <2 x i64>
7251 ; CHECK-NEXT: %5 = bitcast <2 x double> %2 to <2 x i64>
7252 ; CHECK-NEXT: store <2 x i64> %5, <2 x i64>* %0, align 16
7253 ; CHECK-NEXT: ret <2 x i64> %4
7254
7255 define <6 x i32> @ptrtoint_cast_6xi8ptr_to_6xi32(<6 x i8*>) {
7256 %2 = ptrtoint <6 x i8*> %0 to <6 x i32>
7257 ret <6 x i32> %2
7258 }
7259 ; CHECK-LABEL: define <4 x i32> @ptrtoint_cast_6xi8ptr_to_6xi32(<4 x i32>* nocap ture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>)
7260 ; CHECK-NEXT: %4 = ptrtoint <4 x i8*> %1 to <4 x i32>
7261 ; CHECK-NEXT: %5 = ptrtoint <4 x i8*> %2 to <4 x i32>
7262 ; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
7263 ; CHECK-NEXT: ret <4 x i32> %4
7264
7265 define <6 x i8*> @inttoptr_cast_6xi32_to_6xi8ptr(<6 x i32>) {
7266 %2 = inttoptr <6 x i32> %0 to <6 x i8*>
7267 ret <6 x i8*> %2
7268 }
7269 ; CHECK-LABEL: define <4 x i8*> @inttoptr_cast_6xi32_to_6xi8ptr(<4 x i8*>* nocap ture nonnull dereferenceable(16), <4 x i32>, <4 x i32>)
7270 ; CHECK-NEXT: %4 = inttoptr <4 x i32> %1 to <4 x i8*>
7271 ; CHECK-NEXT: %5 = inttoptr <4 x i32> %2 to <4 x i8*>
7272 ; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
7273 ; CHECK-NEXT: ret <4 x i8*> %4
7274
7275 define <6 x float> @bitcast_cast_6xi32_to_6xfloat(<6 x i32>) {
7276 %2 = bitcast <6 x i32> %0 to <6 x float>
7277 ret <6 x float> %2
7278 }
7279 ; CHECK-LABEL: define <4 x float> @bitcast_cast_6xi32_to_6xfloat(<4 x float>* no capture nonnull dereferenceable(16), <4 x i32>, <4 x i32>)
7280 ; CHECK-NEXT: %4 = bitcast <4 x i32> %1 to <4 x float>
7281 ; CHECK-NEXT: %5 = bitcast <4 x i32> %2 to <4 x float>
7282 ; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
7283 ; CHECK-NEXT: ret <4 x float> %4
7284
7285 define <6 x i32> @bitcast_cast_6xfloat_to_6xi32(<6 x float>) {
7286 %2 = bitcast <6 x float> %0 to <6 x i32>
7287 ret <6 x i32> %2
7288 }
7289 ; CHECK-LABEL: define <4 x i32> @bitcast_cast_6xfloat_to_6xi32(<4 x i32>* nocapt ure nonnull dereferenceable(16), <4 x float>, <4 x float>)
7290 ; CHECK-NEXT: %4 = bitcast <4 x float> %1 to <4 x i32>
7291 ; CHECK-NEXT: %5 = bitcast <4 x float> %2 to <4 x i32>
7292 ; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
7293 ; CHECK-NEXT: ret <4 x i32> %4
7294
7295 define <6 x double> @bitcast_cast_6xi64_to_6xdouble(<6 x i64>) {
7296 %2 = bitcast <6 x i64> %0 to <6 x double>
7297 ret <6 x double> %2
7298 }
7299 ; CHECK-LABEL: define <2 x double> @bitcast_cast_6xi64_to_6xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x i64>, <2 x i64>, <2 x i64>)
7300 ; CHECK-NEXT: %6 = bitcast <2 x i64> %2 to <2 x double>
7301 ; CHECK-NEXT: %7 = bitcast <2 x i64> %3 to <2 x double>
7302 ; CHECK-NEXT: %8 = bitcast <2 x i64> %4 to <2 x double>
7303 ; CHECK-NEXT: store <2 x double> %7, <2 x double>* %0, align 16
7304 ; CHECK-NEXT: store <2 x double> %8, <2 x double>* %1, align 16
7305 ; CHECK-NEXT: ret <2 x double> %6
7306
7307 define <6 x i64> @bitcast_cast_6xdouble_to_6xi64(<6 x double>) {
7308 %2 = bitcast <6 x double> %0 to <6 x i64>
7309 ret <6 x i64> %2
7310 }
7311 ; CHECK-LABEL: define <2 x i64> @bitcast_cast_6xdouble_to_6xi64(<2 x i64>* nocap ture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(1 6), <2 x double>, <2 x double>, <2 x double>)
7312 ; CHECK-NEXT: %6 = bitcast <2 x double> %2 to <2 x i64>
7313 ; CHECK-NEXT: %7 = bitcast <2 x double> %3 to <2 x i64>
7314 ; CHECK-NEXT: %8 = bitcast <2 x double> %4 to <2 x i64>
7315 ; CHECK-NEXT: store <2 x i64> %7, <2 x i64>* %0, align 16
7316 ; CHECK-NEXT: store <2 x i64> %8, <2 x i64>* %1, align 16
7317 ; CHECK-NEXT: ret <2 x i64> %6
7318
7319 define <8 x i32> @ptrtoint_cast_8xi8ptr_to_8xi32(<8 x i8*>) {
7320 %2 = ptrtoint <8 x i8*> %0 to <8 x i32>
7321 ret <8 x i32> %2
7322 }
7323 ; CHECK-LABEL: define <4 x i32> @ptrtoint_cast_8xi8ptr_to_8xi32(<4 x i32>* nocap ture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>)
7324 ; CHECK-NEXT: %4 = ptrtoint <4 x i8*> %1 to <4 x i32>
7325 ; CHECK-NEXT: %5 = ptrtoint <4 x i8*> %2 to <4 x i32>
7326 ; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
7327 ; CHECK-NEXT: ret <4 x i32> %4
7328
7329 define <8 x i8*> @inttoptr_cast_8xi32_to_8xi8ptr(<8 x i32>) {
7330 %2 = inttoptr <8 x i32> %0 to <8 x i8*>
7331 ret <8 x i8*> %2
7332 }
7333 ; CHECK-LABEL: define <4 x i8*> @inttoptr_cast_8xi32_to_8xi8ptr(<4 x i8*>* nocap ture nonnull dereferenceable(16), <4 x i32>, <4 x i32>)
7334 ; CHECK-NEXT: %4 = inttoptr <4 x i32> %1 to <4 x i8*>
7335 ; CHECK-NEXT: %5 = inttoptr <4 x i32> %2 to <4 x i8*>
7336 ; CHECK-NEXT: store <4 x i8*> %5, <4 x i8*>* %0, align 16
7337 ; CHECK-NEXT: ret <4 x i8*> %4
7338
7339 define <8 x float> @bitcast_cast_8xi32_to_8xfloat(<8 x i32>) {
7340 %2 = bitcast <8 x i32> %0 to <8 x float>
7341 ret <8 x float> %2
7342 }
7343 ; CHECK-LABEL: define <4 x float> @bitcast_cast_8xi32_to_8xfloat(<4 x float>* no capture nonnull dereferenceable(16), <4 x i32>, <4 x i32>)
7344 ; CHECK-NEXT: %4 = bitcast <4 x i32> %1 to <4 x float>
7345 ; CHECK-NEXT: %5 = bitcast <4 x i32> %2 to <4 x float>
7346 ; CHECK-NEXT: store <4 x float> %5, <4 x float>* %0, align 16
7347 ; CHECK-NEXT: ret <4 x float> %4
7348
7349 define <8 x i32> @bitcast_cast_8xfloat_to_8xi32(<8 x float>) {
7350 %2 = bitcast <8 x float> %0 to <8 x i32>
7351 ret <8 x i32> %2
7352 }
7353 ; CHECK-LABEL: define <4 x i32> @bitcast_cast_8xfloat_to_8xi32(<4 x i32>* nocapt ure nonnull dereferenceable(16), <4 x float>, <4 x float>)
7354 ; CHECK-NEXT: %4 = bitcast <4 x float> %1 to <4 x i32>
7355 ; CHECK-NEXT: %5 = bitcast <4 x float> %2 to <4 x i32>
7356 ; CHECK-NEXT: store <4 x i32> %5, <4 x i32>* %0, align 16
7357 ; CHECK-NEXT: ret <4 x i32> %4
7358
7359 define <8 x double> @bitcast_cast_8xi64_to_8xdouble(<8 x i64>) {
7360 %2 = bitcast <8 x i64> %0 to <8 x double>
7361 ret <8 x double> %2
7362 }
7363 ; CHECK-LABEL: define <2 x double> @bitcast_cast_8xi64_to_8xdouble(<2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
7364 ; CHECK-NEXT: %8 = bitcast <2 x i64> %3 to <2 x double>
7365 ; CHECK-NEXT: %9 = bitcast <2 x i64> %4 to <2 x double>
7366 ; CHECK-NEXT: %10 = bitcast <2 x i64> %5 to <2 x double>
7367 ; CHECK-NEXT: %11 = bitcast <2 x i64> %6 to <2 x double>
7368 ; CHECK-NEXT: store <2 x double> %9, <2 x double>* %0, align 16
7369 ; CHECK-NEXT: store <2 x double> %10, <2 x double>* %1, align 16
7370 ; CHECK-NEXT: store <2 x double> %11, <2 x double>* %2, align 16
7371 ; CHECK-NEXT: ret <2 x double> %8
7372
7373 define <8 x i64> @bitcast_cast_8xdouble_to_8xi64(<8 x double>) {
7374 %2 = bitcast <8 x double> %0 to <8 x i64>
7375 ret <8 x i64> %2
7376 }
7377 ; CHECK-LABEL: define <2 x i64> @bitcast_cast_8xdouble_to_8xi64(<2 x i64>* nocap ture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(1 6), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double> , <2 x double>, <2 x double>)
7378 ; CHECK-NEXT: %8 = bitcast <2 x double> %3 to <2 x i64>
7379 ; CHECK-NEXT: %9 = bitcast <2 x double> %4 to <2 x i64>
7380 ; CHECK-NEXT: %10 = bitcast <2 x double> %5 to <2 x i64>
7381 ; CHECK-NEXT: %11 = bitcast <2 x double> %6 to <2 x i64>
7382 ; CHECK-NEXT: store <2 x i64> %9, <2 x i64>* %0, align 16
7383 ; CHECK-NEXT: store <2 x i64> %10, <2 x i64>* %1, align 16
7384 ; CHECK-NEXT: store <2 x i64> %11, <2 x i64>* %2, align 16
7385 ; CHECK-NEXT: ret <2 x i64> %8
7386
7387 define <12 x i32> @ptrtoint_cast_12xi8ptr_to_12xi32(<12 x i8*>) {
7388 %2 = ptrtoint <12 x i8*> %0 to <12 x i32>
7389 ret <12 x i32> %2
7390 }
7391 ; CHECK-LABEL: define <4 x i32> @ptrtoint_cast_12xi8ptr_to_12xi32(<4 x i32>* noc apture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable (16), <4 x i8*>, <4 x i8*>, <4 x i8*>)
7392 ; CHECK-NEXT: %6 = ptrtoint <4 x i8*> %2 to <4 x i32>
7393 ; CHECK-NEXT: %7 = ptrtoint <4 x i8*> %3 to <4 x i32>
7394 ; CHECK-NEXT: %8 = ptrtoint <4 x i8*> %4 to <4 x i32>
7395 ; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %0, align 16
7396 ; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %1, align 16
7397 ; CHECK-NEXT: ret <4 x i32> %6
7398
7399 define <12 x i8*> @inttoptr_cast_12xi32_to_12xi8ptr(<12 x i32>) {
7400 %2 = inttoptr <12 x i32> %0 to <12 x i8*>
7401 ret <12 x i8*> %2
7402 }
7403 ; CHECK-LABEL: define <4 x i8*> @inttoptr_cast_12xi32_to_12xi8ptr(<4 x i8*>* noc apture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable (16), <4 x i32>, <4 x i32>, <4 x i32>)
7404 ; CHECK-NEXT: %6 = inttoptr <4 x i32> %2 to <4 x i8*>
7405 ; CHECK-NEXT: %7 = inttoptr <4 x i32> %3 to <4 x i8*>
7406 ; CHECK-NEXT: %8 = inttoptr <4 x i32> %4 to <4 x i8*>
7407 ; CHECK-NEXT: store <4 x i8*> %7, <4 x i8*>* %0, align 16
7408 ; CHECK-NEXT: store <4 x i8*> %8, <4 x i8*>* %1, align 16
7409 ; CHECK-NEXT: ret <4 x i8*> %6
7410
7411 define <12 x float> @bitcast_cast_12xi32_to_12xfloat(<12 x i32>) {
7412 %2 = bitcast <12 x i32> %0 to <12 x float>
7413 ret <12 x float> %2
7414 }
7415 ; CHECK-LABEL: define <4 x float> @bitcast_cast_12xi32_to_12xfloat(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenc eable(16), <4 x i32>, <4 x i32>, <4 x i32>)
7416 ; CHECK-NEXT: %6 = bitcast <4 x i32> %2 to <4 x float>
7417 ; CHECK-NEXT: %7 = bitcast <4 x i32> %3 to <4 x float>
7418 ; CHECK-NEXT: %8 = bitcast <4 x i32> %4 to <4 x float>
7419 ; CHECK-NEXT: store <4 x float> %7, <4 x float>* %0, align 16
7420 ; CHECK-NEXT: store <4 x float> %8, <4 x float>* %1, align 16
7421 ; CHECK-NEXT: ret <4 x float> %6
7422
7423 define <12 x i32> @bitcast_cast_12xfloat_to_12xi32(<12 x float>) {
7424 %2 = bitcast <12 x float> %0 to <12 x i32>
7425 ret <12 x i32> %2
7426 }
7427 ; CHECK-LABEL: define <4 x i32> @bitcast_cast_12xfloat_to_12xi32(<4 x i32>* noca pture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable( 16), <4 x float>, <4 x float>, <4 x float>)
7428 ; CHECK-NEXT: %6 = bitcast <4 x float> %2 to <4 x i32>
7429 ; CHECK-NEXT: %7 = bitcast <4 x float> %3 to <4 x i32>
7430 ; CHECK-NEXT: %8 = bitcast <4 x float> %4 to <4 x i32>
7431 ; CHECK-NEXT: store <4 x i32> %7, <4 x i32>* %0, align 16
7432 ; CHECK-NEXT: store <4 x i32> %8, <4 x i32>* %1, align 16
7433 ; CHECK-NEXT: ret <4 x i32> %6
7434
7435 define <12 x double> @bitcast_cast_12xi64_to_12xdouble(<12 x i64>) {
7436 %2 = bitcast <12 x i64> %0 to <12 x double>
7437 ret <12 x double> %2
7438 }
7439 ; CHECK-LABEL: define <2 x double> @bitcast_cast_12xi64_to_12xdouble(<2 x double >* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefe renceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
7440 ; CHECK-NEXT: %12 = bitcast <2 x i64> %5 to <2 x double>
7441 ; CHECK-NEXT: %13 = bitcast <2 x i64> %6 to <2 x double>
7442 ; CHECK-NEXT: %14 = bitcast <2 x i64> %7 to <2 x double>
7443 ; CHECK-NEXT: %15 = bitcast <2 x i64> %8 to <2 x double>
7444 ; CHECK-NEXT: %16 = bitcast <2 x i64> %9 to <2 x double>
7445 ; CHECK-NEXT: %17 = bitcast <2 x i64> %10 to <2 x double>
7446 ; CHECK-NEXT: store <2 x double> %13, <2 x double>* %0, align 16
7447 ; CHECK-NEXT: store <2 x double> %14, <2 x double>* %1, align 16
7448 ; CHECK-NEXT: store <2 x double> %15, <2 x double>* %2, align 16
7449 ; CHECK-NEXT: store <2 x double> %16, <2 x double>* %3, align 16
7450 ; CHECK-NEXT: store <2 x double> %17, <2 x double>* %4, align 16
7451 ; CHECK-NEXT: ret <2 x double> %12
7452
7453 define <12 x i64> @bitcast_cast_12xdouble_to_12xi64(<12 x double>) {
7454 %2 = bitcast <12 x double> %0 to <12 x i64>
7455 ret <12 x i64> %2
7456 }
7457 ; CHECK-LABEL: define <2 x i64> @bitcast_cast_12xdouble_to_12xi64(<2 x i64>* noc apture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable (16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture non null dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>)
7458 ; CHECK-NEXT: %12 = bitcast <2 x double> %5 to <2 x i64>
7459 ; CHECK-NEXT: %13 = bitcast <2 x double> %6 to <2 x i64>
7460 ; CHECK-NEXT: %14 = bitcast <2 x double> %7 to <2 x i64>
7461 ; CHECK-NEXT: %15 = bitcast <2 x double> %8 to <2 x i64>
7462 ; CHECK-NEXT: %16 = bitcast <2 x double> %9 to <2 x i64>
7463 ; CHECK-NEXT: %17 = bitcast <2 x double> %10 to <2 x i64>
7464 ; CHECK-NEXT: store <2 x i64> %13, <2 x i64>* %0, align 16
7465 ; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %1, align 16
7466 ; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %2, align 16
7467 ; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %3, align 16
7468 ; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %4, align 16
7469 ; CHECK-NEXT: ret <2 x i64> %12
7470
7471 define <16 x i32> @ptrtoint_cast_16xi8ptr_to_16xi32(<16 x i8*>) {
7472 %2 = ptrtoint <16 x i8*> %0 to <16 x i32>
7473 ret <16 x i32> %2
7474 }
7475 ; CHECK-LABEL: define <4 x i32> @ptrtoint_cast_16xi8ptr_to_16xi32(<4 x i32>* noc apture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable (16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>)
7476 ; CHECK-NEXT: %8 = ptrtoint <4 x i8*> %3 to <4 x i32>
7477 ; CHECK-NEXT: %9 = ptrtoint <4 x i8*> %4 to <4 x i32>
7478 ; CHECK-NEXT: %10 = ptrtoint <4 x i8*> %5 to <4 x i32>
7479 ; CHECK-NEXT: %11 = ptrtoint <4 x i8*> %6 to <4 x i32>
7480 ; CHECK-NEXT: store <4 x i32> %9, <4 x i32>* %0, align 16
7481 ; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %1, align 16
7482 ; CHECK-NEXT: store <4 x i32> %11, <4 x i32>* %2, align 16
7483 ; CHECK-NEXT: ret <4 x i32> %8
7484
7485 define <16 x i8*> @inttoptr_cast_16xi32_to_16xi8ptr(<16 x i32>) {
7486 %2 = inttoptr <16 x i32> %0 to <16 x i8*>
7487 ret <16 x i8*> %2
7488 }
7489 ; CHECK-LABEL: define <4 x i8*> @inttoptr_cast_16xi32_to_16xi8ptr(<4 x i8*>* noc apture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable (16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>)
7490 ; CHECK-NEXT: %8 = inttoptr <4 x i32> %3 to <4 x i8*>
7491 ; CHECK-NEXT: %9 = inttoptr <4 x i32> %4 to <4 x i8*>
7492 ; CHECK-NEXT: %10 = inttoptr <4 x i32> %5 to <4 x i8*>
7493 ; CHECK-NEXT: %11 = inttoptr <4 x i32> %6 to <4 x i8*>
7494 ; CHECK-NEXT: store <4 x i8*> %9, <4 x i8*>* %0, align 16
7495 ; CHECK-NEXT: store <4 x i8*> %10, <4 x i8*>* %1, align 16
7496 ; CHECK-NEXT: store <4 x i8*> %11, <4 x i8*>* %2, align 16
7497 ; CHECK-NEXT: ret <4 x i8*> %8
7498
7499 define <16 x float> @bitcast_cast_16xi32_to_16xfloat(<16 x i32>) {
7500 %2 = bitcast <16 x i32> %0 to <16 x float>
7501 ret <16 x float> %2
7502 }
7503 ; CHECK-LABEL: define <4 x float> @bitcast_cast_16xi32_to_16xfloat(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenc eable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i 32>, <4 x i32>, <4 x i32>)
7504 ; CHECK-NEXT: %8 = bitcast <4 x i32> %3 to <4 x float>
7505 ; CHECK-NEXT: %9 = bitcast <4 x i32> %4 to <4 x float>
7506 ; CHECK-NEXT: %10 = bitcast <4 x i32> %5 to <4 x float>
7507 ; CHECK-NEXT: %11 = bitcast <4 x i32> %6 to <4 x float>
7508 ; CHECK-NEXT: store <4 x float> %9, <4 x float>* %0, align 16
7509 ; CHECK-NEXT: store <4 x float> %10, <4 x float>* %1, align 16
7510 ; CHECK-NEXT: store <4 x float> %11, <4 x float>* %2, align 16
7511 ; CHECK-NEXT: ret <4 x float> %8
7512
7513 define <16 x i32> @bitcast_cast_16xfloat_to_16xi32(<16 x float>) {
7514 %2 = bitcast <16 x float> %0 to <16 x i32>
7515 ret <16 x i32> %2
7516 }
7517 ; CHECK-LABEL: define <4 x i32> @bitcast_cast_16xfloat_to_16xi32(<4 x i32>* noca pture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable( 16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>)
7518 ; CHECK-NEXT: %8 = bitcast <4 x float> %3 to <4 x i32>
7519 ; CHECK-NEXT: %9 = bitcast <4 x float> %4 to <4 x i32>
7520 ; CHECK-NEXT: %10 = bitcast <4 x float> %5 to <4 x i32>
7521 ; CHECK-NEXT: %11 = bitcast <4 x float> %6 to <4 x i32>
7522 ; CHECK-NEXT: store <4 x i32> %9, <4 x i32>* %0, align 16
7523 ; CHECK-NEXT: store <4 x i32> %10, <4 x i32>* %1, align 16
7524 ; CHECK-NEXT: store <4 x i32> %11, <4 x i32>* %2, align 16
7525 ; CHECK-NEXT: ret <4 x i32> %8
7526
7527 define <16 x double> @bitcast_cast_16xi64_to_16xdouble(<16 x i64>) {
7528 %2 = bitcast <16 x i64> %0 to <16 x double>
7529 ret <16 x double> %2
7530 }
7531 ; CHECK-LABEL: define <2 x double> @bitcast_cast_16xi64_to_16xdouble(<2 x double >* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefe renceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i6 4>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
7532 ; CHECK-NEXT: %16 = bitcast <2 x i64> %7 to <2 x double>
7533 ; CHECK-NEXT: %17 = bitcast <2 x i64> %8 to <2 x double>
7534 ; CHECK-NEXT: %18 = bitcast <2 x i64> %9 to <2 x double>
7535 ; CHECK-NEXT: %19 = bitcast <2 x i64> %10 to <2 x double>
7536 ; CHECK-NEXT: %20 = bitcast <2 x i64> %11 to <2 x double>
7537 ; CHECK-NEXT: %21 = bitcast <2 x i64> %12 to <2 x double>
7538 ; CHECK-NEXT: %22 = bitcast <2 x i64> %13 to <2 x double>
7539 ; CHECK-NEXT: %23 = bitcast <2 x i64> %14 to <2 x double>
7540 ; CHECK-NEXT: store <2 x double> %17, <2 x double>* %0, align 16
7541 ; CHECK-NEXT: store <2 x double> %18, <2 x double>* %1, align 16
7542 ; CHECK-NEXT: store <2 x double> %19, <2 x double>* %2, align 16
7543 ; CHECK-NEXT: store <2 x double> %20, <2 x double>* %3, align 16
7544 ; CHECK-NEXT: store <2 x double> %21, <2 x double>* %4, align 16
7545 ; CHECK-NEXT: store <2 x double> %22, <2 x double>* %5, align 16
7546 ; CHECK-NEXT: store <2 x double> %23, <2 x double>* %6, align 16
7547 ; CHECK-NEXT: ret <2 x double> %16
7548
7549 define <16 x i64> @bitcast_cast_16xdouble_to_16xi64(<16 x double>) {
7550 %2 = bitcast <16 x double> %0 to <16 x i64>
7551 ret <16 x i64> %2
7552 }
7553 ; CHECK-LABEL: define <2 x i64> @bitcast_cast_16xdouble_to_16xi64(<2 x i64>* noc apture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable (16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture non null dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull deref erenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x dou ble>, <2 x double>, <2 x double>, <2 x double>)
7554 ; CHECK-NEXT: %16 = bitcast <2 x double> %7 to <2 x i64>
7555 ; CHECK-NEXT: %17 = bitcast <2 x double> %8 to <2 x i64>
7556 ; CHECK-NEXT: %18 = bitcast <2 x double> %9 to <2 x i64>
7557 ; CHECK-NEXT: %19 = bitcast <2 x double> %10 to <2 x i64>
7558 ; CHECK-NEXT: %20 = bitcast <2 x double> %11 to <2 x i64>
7559 ; CHECK-NEXT: %21 = bitcast <2 x double> %12 to <2 x i64>
7560 ; CHECK-NEXT: %22 = bitcast <2 x double> %13 to <2 x i64>
7561 ; CHECK-NEXT: %23 = bitcast <2 x double> %14 to <2 x i64>
7562 ; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %0, align 16
7563 ; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %1, align 16
7564 ; CHECK-NEXT: store <2 x i64> %19, <2 x i64>* %2, align 16
7565 ; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %3, align 16
7566 ; CHECK-NEXT: store <2 x i64> %21, <2 x i64>* %4, align 16
7567 ; CHECK-NEXT: store <2 x i64> %22, <2 x i64>* %5, align 16
7568 ; CHECK-NEXT: store <2 x i64> %23, <2 x i64>* %6, align 16
7569 ; CHECK-NEXT: ret <2 x i64> %16
7570
7571 define <20 x i32> @ptrtoint_cast_20xi8ptr_to_20xi32(<20 x i8*>) {
7572 %2 = ptrtoint <20 x i8*> %0 to <20 x i32>
7573 ret <20 x i32> %2
7574 }
7575 ; CHECK-LABEL: define <4 x i32> @ptrtoint_cast_20xi8ptr_to_20xi32(<4 x i32>* noc apture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable (16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture non null dereferenceable(16), <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>, <4 x i8*>)
7576 ; CHECK-NEXT: %10 = ptrtoint <4 x i8*> %4 to <4 x i32>
7577 ; CHECK-NEXT: %11 = ptrtoint <4 x i8*> %5 to <4 x i32>
7578 ; CHECK-NEXT: %12 = ptrtoint <4 x i8*> %6 to <4 x i32>
7579 ; CHECK-NEXT: %13 = ptrtoint <4 x i8*> %7 to <4 x i32>
7580 ; CHECK-NEXT: %14 = ptrtoint <4 x i8*> %8 to <4 x i32>
7581 ; CHECK-NEXT: store <4 x i32> %11, <4 x i32>* %0, align 16
7582 ; CHECK-NEXT: store <4 x i32> %12, <4 x i32>* %1, align 16
7583 ; CHECK-NEXT: store <4 x i32> %13, <4 x i32>* %2, align 16
7584 ; CHECK-NEXT: store <4 x i32> %14, <4 x i32>* %3, align 16
7585 ; CHECK-NEXT: ret <4 x i32> %10
7586
7587 define <20 x i8*> @inttoptr_cast_20xi32_to_20xi8ptr(<20 x i32>) {
7588 %2 = inttoptr <20 x i32> %0 to <20 x i8*>
7589 ret <20 x i8*> %2
7590 }
7591 ; CHECK-LABEL: define <4 x i8*> @inttoptr_cast_20xi32_to_20xi8ptr(<4 x i8*>* noc apture nonnull dereferenceable(16), <4 x i8*>* nocapture nonnull dereferenceable (16), <4 x i8*>* nocapture nonnull dereferenceable(16), <4 x i8*>* nocapture non null dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>)
7592 ; CHECK-NEXT: %10 = inttoptr <4 x i32> %4 to <4 x i8*>
7593 ; CHECK-NEXT: %11 = inttoptr <4 x i32> %5 to <4 x i8*>
7594 ; CHECK-NEXT: %12 = inttoptr <4 x i32> %6 to <4 x i8*>
7595 ; CHECK-NEXT: %13 = inttoptr <4 x i32> %7 to <4 x i8*>
7596 ; CHECK-NEXT: %14 = inttoptr <4 x i32> %8 to <4 x i8*>
7597 ; CHECK-NEXT: store <4 x i8*> %11, <4 x i8*>* %0, align 16
7598 ; CHECK-NEXT: store <4 x i8*> %12, <4 x i8*>* %1, align 16
7599 ; CHECK-NEXT: store <4 x i8*> %13, <4 x i8*>* %2, align 16
7600 ; CHECK-NEXT: store <4 x i8*> %14, <4 x i8*>* %3, align 16
7601 ; CHECK-NEXT: ret <4 x i8*> %10
7602
7603 define <20 x float> @bitcast_cast_20xi32_to_20xfloat(<20 x i32>) {
7604 %2 = bitcast <20 x i32> %0 to <20 x float>
7605 ret <20 x float> %2
7606 }
7607 ; CHECK-LABEL: define <4 x float> @bitcast_cast_20xi32_to_20xfloat(<4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* nocapture nonnull dereferenc eable(16), <4 x float>* nocapture nonnull dereferenceable(16), <4 x float>* noca pture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, < 4 x i32>)
7608 ; CHECK-NEXT: %10 = bitcast <4 x i32> %4 to <4 x float>
7609 ; CHECK-NEXT: %11 = bitcast <4 x i32> %5 to <4 x float>
7610 ; CHECK-NEXT: %12 = bitcast <4 x i32> %6 to <4 x float>
7611 ; CHECK-NEXT: %13 = bitcast <4 x i32> %7 to <4 x float>
7612 ; CHECK-NEXT: %14 = bitcast <4 x i32> %8 to <4 x float>
7613 ; CHECK-NEXT: store <4 x float> %11, <4 x float>* %0, align 16
7614 ; CHECK-NEXT: store <4 x float> %12, <4 x float>* %1, align 16
7615 ; CHECK-NEXT: store <4 x float> %13, <4 x float>* %2, align 16
7616 ; CHECK-NEXT: store <4 x float> %14, <4 x float>* %3, align 16
7617 ; CHECK-NEXT: ret <4 x float> %10
7618
7619 define <20 x i32> @bitcast_cast_20xfloat_to_20xi32(<20 x float>) {
7620 %2 = bitcast <20 x float> %0 to <20 x i32>
7621 ret <20 x i32> %2
7622 }
7623 ; CHECK-LABEL: define <4 x i32> @bitcast_cast_20xfloat_to_20xi32(<4 x i32>* noca pture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable( 16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonn ull dereferenceable(16), <4 x float>, <4 x float>, <4 x float>, <4 x float>, <4 x float>)
7624 ; CHECK-NEXT: %10 = bitcast <4 x float> %4 to <4 x i32>
7625 ; CHECK-NEXT: %11 = bitcast <4 x float> %5 to <4 x i32>
7626 ; CHECK-NEXT: %12 = bitcast <4 x float> %6 to <4 x i32>
7627 ; CHECK-NEXT: %13 = bitcast <4 x float> %7 to <4 x i32>
7628 ; CHECK-NEXT: %14 = bitcast <4 x float> %8 to <4 x i32>
7629 ; CHECK-NEXT: store <4 x i32> %11, <4 x i32>* %0, align 16
7630 ; CHECK-NEXT: store <4 x i32> %12, <4 x i32>* %1, align 16
7631 ; CHECK-NEXT: store <4 x i32> %13, <4 x i32>* %2, align 16
7632 ; CHECK-NEXT: store <4 x i32> %14, <4 x i32>* %3, align 16
7633 ; CHECK-NEXT: ret <4 x i32> %10
7634
7635 define <20 x double> @bitcast_cast_20xi64_to_20xdouble(<20 x i64>) {
7636 %2 = bitcast <20 x i64> %0 to <20 x double>
7637 ret <20 x double> %2
7638 }
7639 ; CHECK-LABEL: define <2 x double> @bitcast_cast_20xi64_to_20xdouble(<2 x double >* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefe renceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double> * nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefer enceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x double>* nocapture nonnull derefere nceable(16), <2 x double>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i 64>, <2 x i64>)
7640 ; CHECK-NEXT: %20 = bitcast <2 x i64> %9 to <2 x double>
7641 ; CHECK-NEXT: %21 = bitcast <2 x i64> %10 to <2 x double>
7642 ; CHECK-NEXT: %22 = bitcast <2 x i64> %11 to <2 x double>
7643 ; CHECK-NEXT: %23 = bitcast <2 x i64> %12 to <2 x double>
7644 ; CHECK-NEXT: %24 = bitcast <2 x i64> %13 to <2 x double>
7645 ; CHECK-NEXT: %25 = bitcast <2 x i64> %14 to <2 x double>
7646 ; CHECK-NEXT: %26 = bitcast <2 x i64> %15 to <2 x double>
7647 ; CHECK-NEXT: %27 = bitcast <2 x i64> %16 to <2 x double>
7648 ; CHECK-NEXT: %28 = bitcast <2 x i64> %17 to <2 x double>
7649 ; CHECK-NEXT: %29 = bitcast <2 x i64> %18 to <2 x double>
7650 ; CHECK-NEXT: store <2 x double> %21, <2 x double>* %0, align 16
7651 ; CHECK-NEXT: store <2 x double> %22, <2 x double>* %1, align 16
7652 ; CHECK-NEXT: store <2 x double> %23, <2 x double>* %2, align 16
7653 ; CHECK-NEXT: store <2 x double> %24, <2 x double>* %3, align 16
7654 ; CHECK-NEXT: store <2 x double> %25, <2 x double>* %4, align 16
7655 ; CHECK-NEXT: store <2 x double> %26, <2 x double>* %5, align 16
7656 ; CHECK-NEXT: store <2 x double> %27, <2 x double>* %6, align 16
7657 ; CHECK-NEXT: store <2 x double> %28, <2 x double>* %7, align 16
7658 ; CHECK-NEXT: store <2 x double> %29, <2 x double>* %8, align 16
7659 ; CHECK-NEXT: ret <2 x double> %20
7660
7661 define <20 x i64> @bitcast_cast_20xdouble_to_20xi64(<20 x double>) {
7662 %2 = bitcast <20 x double> %0 to <20 x i64>
7663 ret <20 x i64> %2
7664 }
7665 ; CHECK-LABEL: define <2 x i64> @bitcast_cast_20xdouble_to_20xi64(<2 x i64>* noc apture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable (16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture non null dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull deref erenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* noc apture nonnull dereferenceable(16), <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double> , <2 x double>)
7666 ; CHECK-NEXT: %20 = bitcast <2 x double> %9 to <2 x i64>
7667 ; CHECK-NEXT: %21 = bitcast <2 x double> %10 to <2 x i64>
7668 ; CHECK-NEXT: %22 = bitcast <2 x double> %11 to <2 x i64>
7669 ; CHECK-NEXT: %23 = bitcast <2 x double> %12 to <2 x i64>
7670 ; CHECK-NEXT: %24 = bitcast <2 x double> %13 to <2 x i64>
7671 ; CHECK-NEXT: %25 = bitcast <2 x double> %14 to <2 x i64>
7672 ; CHECK-NEXT: %26 = bitcast <2 x double> %15 to <2 x i64>
7673 ; CHECK-NEXT: %27 = bitcast <2 x double> %16 to <2 x i64>
7674 ; CHECK-NEXT: %28 = bitcast <2 x double> %17 to <2 x i64>
7675 ; CHECK-NEXT: %29 = bitcast <2 x double> %18 to <2 x i64>
7676 ; CHECK-NEXT: store <2 x i64> %21, <2 x i64>* %0, align 16
7677 ; CHECK-NEXT: store <2 x i64> %22, <2 x i64>* %1, align 16
7678 ; CHECK-NEXT: store <2 x i64> %23, <2 x i64>* %2, align 16
7679 ; CHECK-NEXT: store <2 x i64> %24, <2 x i64>* %3, align 16
7680 ; CHECK-NEXT: store <2 x i64> %25, <2 x i64>* %4, align 16
7681 ; CHECK-NEXT: store <2 x i64> %26, <2 x i64>* %5, align 16
7682 ; CHECK-NEXT: store <2 x i64> %27, <2 x i64>* %6, align 16
7683 ; CHECK-NEXT: store <2 x i64> %28, <2 x i64>* %7, align 16
7684 ; CHECK-NEXT: store <2 x i64> %29, <2 x i64>* %8, align 16
7685 ; CHECK-NEXT: ret <2 x i64> %20
7686
7687 define <2 x i16> @zext_cast_2xi8_to_2xi16(<2 x i8>) {
7688 %2 = zext <2 x i8> %0 to <2 x i16>
7689 ret <2 x i16> %2
7690 }
7691 ; CHECK-LABEL: define <8 x i16> @zext_cast_2xi8_to_2xi16(<16 x i8>)
7692 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
7693 ; CHECK-NEXT: %3 = zext i8 %2 to i16
7694 ; CHECK-NEXT: %4 = insertelement <8 x i16> undef, i16 %3, i32 0
7695 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
7696 ; CHECK-NEXT: %6 = zext i8 %5 to i16
7697 ; CHECK-NEXT: %7 = insertelement <8 x i16> %4, i16 %6, i32 1
7698 ; CHECK-NEXT: ret <8 x i16> %7
7699
7700 define <2 x i32> @zext_cast_2xi8_to_2xi32(<2 x i8>) {
7701 %2 = zext <2 x i8> %0 to <2 x i32>
7702 ret <2 x i32> %2
7703 }
7704 ; CHECK-LABEL: define <4 x i32> @zext_cast_2xi8_to_2xi32(<16 x i8>)
7705 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
7706 ; CHECK-NEXT: %3 = zext i8 %2 to i32
7707 ; CHECK-NEXT: %4 = insertelement <4 x i32> undef, i32 %3, i32 0
7708 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
7709 ; CHECK-NEXT: %6 = zext i8 %5 to i32
7710 ; CHECK-NEXT: %7 = insertelement <4 x i32> %4, i32 %6, i32 1
7711 ; CHECK-NEXT: ret <4 x i32> %7
7712
7713 define <2 x i64> @zext_cast_2xi8_to_2xi64(<2 x i8>) {
7714 %2 = zext <2 x i8> %0 to <2 x i64>
7715 ret <2 x i64> %2
7716 }
7717 ; CHECK-LABEL: define <2 x i64> @zext_cast_2xi8_to_2xi64(<16 x i8>)
7718 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
7719 ; CHECK-NEXT: %3 = zext i8 %2 to i64
7720 ; CHECK-NEXT: %4 = insertelement <2 x i64> undef, i64 %3, i32 0
7721 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
7722 ; CHECK-NEXT: %6 = zext i8 %5 to i64
7723 ; CHECK-NEXT: %7 = insertelement <2 x i64> %4, i64 %6, i32 1
7724 ; CHECK-NEXT: ret <2 x i64> %7
7725
7726 define <2 x i32> @zext_cast_2xi16_to_2xi32(<2 x i16>) {
7727 %2 = zext <2 x i16> %0 to <2 x i32>
7728 ret <2 x i32> %2
7729 }
7730 ; CHECK-LABEL: define <4 x i32> @zext_cast_2xi16_to_2xi32(<8 x i16>)
7731 ; CHECK-NEXT: %2 = extractelement <8 x i16> %0, i32 0
7732 ; CHECK-NEXT: %3 = zext i16 %2 to i32
7733 ; CHECK-NEXT: %4 = insertelement <4 x i32> undef, i32 %3, i32 0
7734 ; CHECK-NEXT: %5 = extractelement <8 x i16> %0, i32 1
7735 ; CHECK-NEXT: %6 = zext i16 %5 to i32
7736 ; CHECK-NEXT: %7 = insertelement <4 x i32> %4, i32 %6, i32 1
7737 ; CHECK-NEXT: ret <4 x i32> %7
7738
7739 define <2 x i64> @zext_cast_2xi16_to_2xi64(<2 x i16>) {
7740 %2 = zext <2 x i16> %0 to <2 x i64>
7741 ret <2 x i64> %2
7742 }
7743 ; CHECK-LABEL: define <2 x i64> @zext_cast_2xi16_to_2xi64(<8 x i16>)
7744 ; CHECK-NEXT: %2 = extractelement <8 x i16> %0, i32 0
7745 ; CHECK-NEXT: %3 = zext i16 %2 to i64
7746 ; CHECK-NEXT: %4 = insertelement <2 x i64> undef, i64 %3, i32 0
7747 ; CHECK-NEXT: %5 = extractelement <8 x i16> %0, i32 1
7748 ; CHECK-NEXT: %6 = zext i16 %5 to i64
7749 ; CHECK-NEXT: %7 = insertelement <2 x i64> %4, i64 %6, i32 1
7750 ; CHECK-NEXT: ret <2 x i64> %7
7751
7752 define <2 x i64> @zext_cast_2xi32_to_2xi64(<2 x i32>) {
7753 %2 = zext <2 x i32> %0 to <2 x i64>
7754 ret <2 x i64> %2
7755 }
7756 ; CHECK-LABEL: define <2 x i64> @zext_cast_2xi32_to_2xi64(<4 x i32>)
7757 ; CHECK-NEXT: %2 = extractelement <4 x i32> %0, i32 0
7758 ; CHECK-NEXT: %3 = zext i32 %2 to i64
7759 ; CHECK-NEXT: %4 = insertelement <2 x i64> undef, i64 %3, i32 0
7760 ; CHECK-NEXT: %5 = extractelement <4 x i32> %0, i32 1
7761 ; CHECK-NEXT: %6 = zext i32 %5 to i64
7762 ; CHECK-NEXT: %7 = insertelement <2 x i64> %4, i64 %6, i32 1
7763 ; CHECK-NEXT: ret <2 x i64> %7
7764
7765 define <2 x i16> @sext_cast_2xi8_to_2xi16(<2 x i8>) {
7766 %2 = sext <2 x i8> %0 to <2 x i16>
7767 ret <2 x i16> %2
7768 }
7769 ; CHECK-LABEL: define <8 x i16> @sext_cast_2xi8_to_2xi16(<16 x i8>)
7770 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
7771 ; CHECK-NEXT: %3 = sext i8 %2 to i16
7772 ; CHECK-NEXT: %4 = insertelement <8 x i16> undef, i16 %3, i32 0
7773 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
7774 ; CHECK-NEXT: %6 = sext i8 %5 to i16
7775 ; CHECK-NEXT: %7 = insertelement <8 x i16> %4, i16 %6, i32 1
7776 ; CHECK-NEXT: ret <8 x i16> %7
7777
7778 define <2 x i32> @sext_cast_2xi8_to_2xi32(<2 x i8>) {
7779 %2 = sext <2 x i8> %0 to <2 x i32>
7780 ret <2 x i32> %2
7781 }
7782 ; CHECK-LABEL: define <4 x i32> @sext_cast_2xi8_to_2xi32(<16 x i8>)
7783 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
7784 ; CHECK-NEXT: %3 = sext i8 %2 to i32
7785 ; CHECK-NEXT: %4 = insertelement <4 x i32> undef, i32 %3, i32 0
7786 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
7787 ; CHECK-NEXT: %6 = sext i8 %5 to i32
7788 ; CHECK-NEXT: %7 = insertelement <4 x i32> %4, i32 %6, i32 1
7789 ; CHECK-NEXT: ret <4 x i32> %7
7790
7791 define <2 x i64> @sext_cast_2xi8_to_2xi64(<2 x i8>) {
7792 %2 = sext <2 x i8> %0 to <2 x i64>
7793 ret <2 x i64> %2
7794 }
7795 ; CHECK-LABEL: define <2 x i64> @sext_cast_2xi8_to_2xi64(<16 x i8>)
7796 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
7797 ; CHECK-NEXT: %3 = sext i8 %2 to i64
7798 ; CHECK-NEXT: %4 = insertelement <2 x i64> undef, i64 %3, i32 0
7799 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
7800 ; CHECK-NEXT: %6 = sext i8 %5 to i64
7801 ; CHECK-NEXT: %7 = insertelement <2 x i64> %4, i64 %6, i32 1
7802 ; CHECK-NEXT: ret <2 x i64> %7
7803
7804 define <2 x i32> @sext_cast_2xi16_to_2xi32(<2 x i16>) {
7805 %2 = sext <2 x i16> %0 to <2 x i32>
7806 ret <2 x i32> %2
7807 }
7808 ; CHECK-LABEL: define <4 x i32> @sext_cast_2xi16_to_2xi32(<8 x i16>)
7809 ; CHECK-NEXT: %2 = extractelement <8 x i16> %0, i32 0
7810 ; CHECK-NEXT: %3 = sext i16 %2 to i32
7811 ; CHECK-NEXT: %4 = insertelement <4 x i32> undef, i32 %3, i32 0
7812 ; CHECK-NEXT: %5 = extractelement <8 x i16> %0, i32 1
7813 ; CHECK-NEXT: %6 = sext i16 %5 to i32
7814 ; CHECK-NEXT: %7 = insertelement <4 x i32> %4, i32 %6, i32 1
7815 ; CHECK-NEXT: ret <4 x i32> %7
7816
7817 define <2 x i64> @sext_cast_2xi16_to_2xi64(<2 x i16>) {
7818 %2 = sext <2 x i16> %0 to <2 x i64>
7819 ret <2 x i64> %2
7820 }
7821 ; CHECK-LABEL: define <2 x i64> @sext_cast_2xi16_to_2xi64(<8 x i16>)
7822 ; CHECK-NEXT: %2 = extractelement <8 x i16> %0, i32 0
7823 ; CHECK-NEXT: %3 = sext i16 %2 to i64
7824 ; CHECK-NEXT: %4 = insertelement <2 x i64> undef, i64 %3, i32 0
7825 ; CHECK-NEXT: %5 = extractelement <8 x i16> %0, i32 1
7826 ; CHECK-NEXT: %6 = sext i16 %5 to i64
7827 ; CHECK-NEXT: %7 = insertelement <2 x i64> %4, i64 %6, i32 1
7828 ; CHECK-NEXT: ret <2 x i64> %7
7829
7830 define <2 x i64> @sext_cast_2xi32_to_2xi64(<2 x i32>) {
7831 %2 = sext <2 x i32> %0 to <2 x i64>
7832 ret <2 x i64> %2
7833 }
7834 ; CHECK-LABEL: define <2 x i64> @sext_cast_2xi32_to_2xi64(<4 x i32>)
7835 ; CHECK-NEXT: %2 = extractelement <4 x i32> %0, i32 0
7836 ; CHECK-NEXT: %3 = sext i32 %2 to i64
7837 ; CHECK-NEXT: %4 = insertelement <2 x i64> undef, i64 %3, i32 0
7838 ; CHECK-NEXT: %5 = extractelement <4 x i32> %0, i32 1
7839 ; CHECK-NEXT: %6 = sext i32 %5 to i64
7840 ; CHECK-NEXT: %7 = insertelement <2 x i64> %4, i64 %6, i32 1
7841 ; CHECK-NEXT: ret <2 x i64> %7
7842
7843 define <2 x i32> @trunc_cast_2xi64_to_2xi32(<2 x i64>) {
7844 %2 = trunc <2 x i64> %0 to <2 x i32>
7845 ret <2 x i32> %2
7846 }
7847 ; CHECK-LABEL: define <4 x i32> @trunc_cast_2xi64_to_2xi32(<2 x i64>)
7848 ; CHECK-NEXT: %2 = extractelement <2 x i64> %0, i32 0
7849 ; CHECK-NEXT: %3 = trunc i64 %2 to i32
7850 ; CHECK-NEXT: %4 = insertelement <4 x i32> undef, i32 %3, i32 0
7851 ; CHECK-NEXT: %5 = extractelement <2 x i64> %0, i32 1
7852 ; CHECK-NEXT: %6 = trunc i64 %5 to i32
7853 ; CHECK-NEXT: %7 = insertelement <4 x i32> %4, i32 %6, i32 1
7854 ; CHECK-NEXT: ret <4 x i32> %7
7855
7856 define <2 x i16> @trunc_cast_2xi64_to_2xi16(<2 x i64>) {
7857 %2 = trunc <2 x i64> %0 to <2 x i16>
7858 ret <2 x i16> %2
7859 }
7860 ; CHECK-LABEL: define <8 x i16> @trunc_cast_2xi64_to_2xi16(<2 x i64>)
7861 ; CHECK-NEXT: %2 = extractelement <2 x i64> %0, i32 0
7862 ; CHECK-NEXT: %3 = trunc i64 %2 to i16
7863 ; CHECK-NEXT: %4 = insertelement <8 x i16> undef, i16 %3, i32 0
7864 ; CHECK-NEXT: %5 = extractelement <2 x i64> %0, i32 1
7865 ; CHECK-NEXT: %6 = trunc i64 %5 to i16
7866 ; CHECK-NEXT: %7 = insertelement <8 x i16> %4, i16 %6, i32 1
7867 ; CHECK-NEXT: ret <8 x i16> %7
7868
7869 define <2 x i8> @trunc_cast_2xi64_to_2xi8(<2 x i64>) {
7870 %2 = trunc <2 x i64> %0 to <2 x i8>
7871 ret <2 x i8> %2
7872 }
7873 ; CHECK-LABEL: define <16 x i8> @trunc_cast_2xi64_to_2xi8(<2 x i64>)
7874 ; CHECK-NEXT: %2 = extractelement <2 x i64> %0, i32 0
7875 ; CHECK-NEXT: %3 = trunc i64 %2 to i8
7876 ; CHECK-NEXT: %4 = insertelement <16 x i8> undef, i8 %3, i32 0
7877 ; CHECK-NEXT: %5 = extractelement <2 x i64> %0, i32 1
7878 ; CHECK-NEXT: %6 = trunc i64 %5 to i8
7879 ; CHECK-NEXT: %7 = insertelement <16 x i8> %4, i8 %6, i32 1
7880 ; CHECK-NEXT: ret <16 x i8> %7
7881
7882 define <2 x i16> @trunc_cast_2xi32_to_2xi16(<2 x i32>) {
7883 %2 = trunc <2 x i32> %0 to <2 x i16>
7884 ret <2 x i16> %2
7885 }
7886 ; CHECK-LABEL: define <8 x i16> @trunc_cast_2xi32_to_2xi16(<4 x i32>)
7887 ; CHECK-NEXT: %2 = extractelement <4 x i32> %0, i32 0
7888 ; CHECK-NEXT: %3 = trunc i32 %2 to i16
7889 ; CHECK-NEXT: %4 = insertelement <8 x i16> undef, i16 %3, i32 0
7890 ; CHECK-NEXT: %5 = extractelement <4 x i32> %0, i32 1
7891 ; CHECK-NEXT: %6 = trunc i32 %5 to i16
7892 ; CHECK-NEXT: %7 = insertelement <8 x i16> %4, i16 %6, i32 1
7893 ; CHECK-NEXT: ret <8 x i16> %7
7894
7895 define <2 x i8> @trunc_cast_2xi32_to_2xi8(<2 x i32>) {
7896 %2 = trunc <2 x i32> %0 to <2 x i8>
7897 ret <2 x i8> %2
7898 }
7899 ; CHECK-LABEL: define <16 x i8> @trunc_cast_2xi32_to_2xi8(<4 x i32>)
7900 ; CHECK-NEXT: %2 = extractelement <4 x i32> %0, i32 0
7901 ; CHECK-NEXT: %3 = trunc i32 %2 to i8
7902 ; CHECK-NEXT: %4 = insertelement <16 x i8> undef, i8 %3, i32 0
7903 ; CHECK-NEXT: %5 = extractelement <4 x i32> %0, i32 1
7904 ; CHECK-NEXT: %6 = trunc i32 %5 to i8
7905 ; CHECK-NEXT: %7 = insertelement <16 x i8> %4, i8 %6, i32 1
7906 ; CHECK-NEXT: ret <16 x i8> %7
7907
7908 define <2 x i8> @trunc_cast_2xi16_to_2xi8(<2 x i16>) {
7909 %2 = trunc <2 x i16> %0 to <2 x i8>
7910 ret <2 x i8> %2
7911 }
7912 ; CHECK-LABEL: define <16 x i8> @trunc_cast_2xi16_to_2xi8(<8 x i16>)
7913 ; CHECK-NEXT: %2 = extractelement <8 x i16> %0, i32 0
7914 ; CHECK-NEXT: %3 = trunc i16 %2 to i8
7915 ; CHECK-NEXT: %4 = insertelement <16 x i8> undef, i8 %3, i32 0
7916 ; CHECK-NEXT: %5 = extractelement <8 x i16> %0, i32 1
7917 ; CHECK-NEXT: %6 = trunc i16 %5 to i8
7918 ; CHECK-NEXT: %7 = insertelement <16 x i8> %4, i8 %6, i32 1
7919 ; CHECK-NEXT: ret <16 x i8> %7
7920
7921 define <4 x i16> @zext_cast_4xi8_to_4xi16(<4 x i8>) {
7922 %2 = zext <4 x i8> %0 to <4 x i16>
7923 ret <4 x i16> %2
7924 }
7925 ; CHECK-LABEL: define <8 x i16> @zext_cast_4xi8_to_4xi16(<16 x i8>)
7926 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
7927 ; CHECK-NEXT: %3 = zext i8 %2 to i16
7928 ; CHECK-NEXT: %4 = insertelement <8 x i16> undef, i16 %3, i32 0
7929 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
7930 ; CHECK-NEXT: %6 = zext i8 %5 to i16
7931 ; CHECK-NEXT: %7 = insertelement <8 x i16> %4, i16 %6, i32 1
7932 ; CHECK-NEXT: %8 = extractelement <16 x i8> %0, i32 2
7933 ; CHECK-NEXT: %9 = zext i8 %8 to i16
7934 ; CHECK-NEXT: %10 = insertelement <8 x i16> %7, i16 %9, i32 2
7935 ; CHECK-NEXT: %11 = extractelement <16 x i8> %0, i32 3
7936 ; CHECK-NEXT: %12 = zext i8 %11 to i16
7937 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 3
7938 ; CHECK-NEXT: ret <8 x i16> %13
7939
7940 define <4 x i32> @zext_cast_4xi8_to_4xi32(<4 x i8>) {
7941 %2 = zext <4 x i8> %0 to <4 x i32>
7942 ret <4 x i32> %2
7943 }
7944 ; CHECK-LABEL: define <4 x i32> @zext_cast_4xi8_to_4xi32(<16 x i8>)
7945 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
7946 ; CHECK-NEXT: %3 = zext i8 %2 to i32
7947 ; CHECK-NEXT: %4 = insertelement <4 x i32> undef, i32 %3, i32 0
7948 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
7949 ; CHECK-NEXT: %6 = zext i8 %5 to i32
7950 ; CHECK-NEXT: %7 = insertelement <4 x i32> %4, i32 %6, i32 1
7951 ; CHECK-NEXT: %8 = extractelement <16 x i8> %0, i32 2
7952 ; CHECK-NEXT: %9 = zext i8 %8 to i32
7953 ; CHECK-NEXT: %10 = insertelement <4 x i32> %7, i32 %9, i32 2
7954 ; CHECK-NEXT: %11 = extractelement <16 x i8> %0, i32 3
7955 ; CHECK-NEXT: %12 = zext i8 %11 to i32
7956 ; CHECK-NEXT: %13 = insertelement <4 x i32> %10, i32 %12, i32 3
7957 ; CHECK-NEXT: ret <4 x i32> %13
7958
7959 define <4 x i64> @zext_cast_4xi8_to_4xi64(<4 x i8>) {
7960 %2 = zext <4 x i8> %0 to <4 x i64>
7961 ret <4 x i64> %2
7962 }
7963 ; CHECK-LABEL: define <2 x i64> @zext_cast_4xi8_to_4xi64(<2 x i64>* nocapture no nnull dereferenceable(16), <16 x i8>)
7964 ; CHECK-NEXT: %3 = extractelement <16 x i8> %1, i32 0
7965 ; CHECK-NEXT: %4 = zext i8 %3 to i64
7966 ; CHECK-NEXT: %5 = insertelement <2 x i64> undef, i64 %4, i32 0
7967 ; CHECK-NEXT: %6 = extractelement <16 x i8> %1, i32 1
7968 ; CHECK-NEXT: %7 = zext i8 %6 to i64
7969 ; CHECK-NEXT: %8 = insertelement <2 x i64> %5, i64 %7, i32 1
7970 ; CHECK-NEXT: %9 = extractelement <16 x i8> %1, i32 2
7971 ; CHECK-NEXT: %10 = zext i8 %9 to i64
7972 ; CHECK-NEXT: %11 = insertelement <2 x i64> undef, i64 %10, i32 0
7973 ; CHECK-NEXT: %12 = extractelement <16 x i8> %1, i32 3
7974 ; CHECK-NEXT: %13 = zext i8 %12 to i64
7975 ; CHECK-NEXT: %14 = insertelement <2 x i64> %11, i64 %13, i32 1
7976 ; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %0, align 16
7977 ; CHECK-NEXT: ret <2 x i64> %8
7978
7979 define <4 x i32> @zext_cast_4xi16_to_4xi32(<4 x i16>) {
7980 %2 = zext <4 x i16> %0 to <4 x i32>
7981 ret <4 x i32> %2
7982 }
7983 ; CHECK-LABEL: define <4 x i32> @zext_cast_4xi16_to_4xi32(<8 x i16>)
7984 ; CHECK-NEXT: %2 = extractelement <8 x i16> %0, i32 0
7985 ; CHECK-NEXT: %3 = zext i16 %2 to i32
7986 ; CHECK-NEXT: %4 = insertelement <4 x i32> undef, i32 %3, i32 0
7987 ; CHECK-NEXT: %5 = extractelement <8 x i16> %0, i32 1
7988 ; CHECK-NEXT: %6 = zext i16 %5 to i32
7989 ; CHECK-NEXT: %7 = insertelement <4 x i32> %4, i32 %6, i32 1
7990 ; CHECK-NEXT: %8 = extractelement <8 x i16> %0, i32 2
7991 ; CHECK-NEXT: %9 = zext i16 %8 to i32
7992 ; CHECK-NEXT: %10 = insertelement <4 x i32> %7, i32 %9, i32 2
7993 ; CHECK-NEXT: %11 = extractelement <8 x i16> %0, i32 3
7994 ; CHECK-NEXT: %12 = zext i16 %11 to i32
7995 ; CHECK-NEXT: %13 = insertelement <4 x i32> %10, i32 %12, i32 3
7996 ; CHECK-NEXT: ret <4 x i32> %13
7997
7998 define <4 x i64> @zext_cast_4xi16_to_4xi64(<4 x i16>) {
7999 %2 = zext <4 x i16> %0 to <4 x i64>
8000 ret <4 x i64> %2
8001 }
8002 ; CHECK-LABEL: define <2 x i64> @zext_cast_4xi16_to_4xi64(<2 x i64>* nocapture n onnull dereferenceable(16), <8 x i16>)
8003 ; CHECK-NEXT: %3 = extractelement <8 x i16> %1, i32 0
8004 ; CHECK-NEXT: %4 = zext i16 %3 to i64
8005 ; CHECK-NEXT: %5 = insertelement <2 x i64> undef, i64 %4, i32 0
8006 ; CHECK-NEXT: %6 = extractelement <8 x i16> %1, i32 1
8007 ; CHECK-NEXT: %7 = zext i16 %6 to i64
8008 ; CHECK-NEXT: %8 = insertelement <2 x i64> %5, i64 %7, i32 1
8009 ; CHECK-NEXT: %9 = extractelement <8 x i16> %1, i32 2
8010 ; CHECK-NEXT: %10 = zext i16 %9 to i64
8011 ; CHECK-NEXT: %11 = insertelement <2 x i64> undef, i64 %10, i32 0
8012 ; CHECK-NEXT: %12 = extractelement <8 x i16> %1, i32 3
8013 ; CHECK-NEXT: %13 = zext i16 %12 to i64
8014 ; CHECK-NEXT: %14 = insertelement <2 x i64> %11, i64 %13, i32 1
8015 ; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %0, align 16
8016 ; CHECK-NEXT: ret <2 x i64> %8
8017
8018 define <4 x i64> @zext_cast_4xi32_to_4xi64(<4 x i32>) {
8019 %2 = zext <4 x i32> %0 to <4 x i64>
8020 ret <4 x i64> %2
8021 }
8022 ; CHECK-LABEL: define <2 x i64> @zext_cast_4xi32_to_4xi64(<2 x i64>* nocapture n onnull dereferenceable(16), <4 x i32>)
8023 ; CHECK-NEXT: %3 = extractelement <4 x i32> %1, i32 0
8024 ; CHECK-NEXT: %4 = zext i32 %3 to i64
8025 ; CHECK-NEXT: %5 = insertelement <2 x i64> undef, i64 %4, i32 0
8026 ; CHECK-NEXT: %6 = extractelement <4 x i32> %1, i32 1
8027 ; CHECK-NEXT: %7 = zext i32 %6 to i64
8028 ; CHECK-NEXT: %8 = insertelement <2 x i64> %5, i64 %7, i32 1
8029 ; CHECK-NEXT: %9 = extractelement <4 x i32> %1, i32 2
8030 ; CHECK-NEXT: %10 = zext i32 %9 to i64
8031 ; CHECK-NEXT: %11 = insertelement <2 x i64> undef, i64 %10, i32 0
8032 ; CHECK-NEXT: %12 = extractelement <4 x i32> %1, i32 3
8033 ; CHECK-NEXT: %13 = zext i32 %12 to i64
8034 ; CHECK-NEXT: %14 = insertelement <2 x i64> %11, i64 %13, i32 1
8035 ; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %0, align 16
8036 ; CHECK-NEXT: ret <2 x i64> %8
8037
8038 define <4 x i16> @sext_cast_4xi8_to_4xi16(<4 x i8>) {
8039 %2 = sext <4 x i8> %0 to <4 x i16>
8040 ret <4 x i16> %2
8041 }
8042 ; CHECK-LABEL: define <8 x i16> @sext_cast_4xi8_to_4xi16(<16 x i8>)
8043 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
8044 ; CHECK-NEXT: %3 = sext i8 %2 to i16
8045 ; CHECK-NEXT: %4 = insertelement <8 x i16> undef, i16 %3, i32 0
8046 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
8047 ; CHECK-NEXT: %6 = sext i8 %5 to i16
8048 ; CHECK-NEXT: %7 = insertelement <8 x i16> %4, i16 %6, i32 1
8049 ; CHECK-NEXT: %8 = extractelement <16 x i8> %0, i32 2
8050 ; CHECK-NEXT: %9 = sext i8 %8 to i16
8051 ; CHECK-NEXT: %10 = insertelement <8 x i16> %7, i16 %9, i32 2
8052 ; CHECK-NEXT: %11 = extractelement <16 x i8> %0, i32 3
8053 ; CHECK-NEXT: %12 = sext i8 %11 to i16
8054 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 3
8055 ; CHECK-NEXT: ret <8 x i16> %13
8056
8057 define <4 x i32> @sext_cast_4xi8_to_4xi32(<4 x i8>) {
8058 %2 = sext <4 x i8> %0 to <4 x i32>
8059 ret <4 x i32> %2
8060 }
8061 ; CHECK-LABEL: define <4 x i32> @sext_cast_4xi8_to_4xi32(<16 x i8>)
8062 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
8063 ; CHECK-NEXT: %3 = sext i8 %2 to i32
8064 ; CHECK-NEXT: %4 = insertelement <4 x i32> undef, i32 %3, i32 0
8065 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
8066 ; CHECK-NEXT: %6 = sext i8 %5 to i32
8067 ; CHECK-NEXT: %7 = insertelement <4 x i32> %4, i32 %6, i32 1
8068 ; CHECK-NEXT: %8 = extractelement <16 x i8> %0, i32 2
8069 ; CHECK-NEXT: %9 = sext i8 %8 to i32
8070 ; CHECK-NEXT: %10 = insertelement <4 x i32> %7, i32 %9, i32 2
8071 ; CHECK-NEXT: %11 = extractelement <16 x i8> %0, i32 3
8072 ; CHECK-NEXT: %12 = sext i8 %11 to i32
8073 ; CHECK-NEXT: %13 = insertelement <4 x i32> %10, i32 %12, i32 3
8074 ; CHECK-NEXT: ret <4 x i32> %13
8075
8076 define <4 x i64> @sext_cast_4xi8_to_4xi64(<4 x i8>) {
8077 %2 = sext <4 x i8> %0 to <4 x i64>
8078 ret <4 x i64> %2
8079 }
8080 ; CHECK-LABEL: define <2 x i64> @sext_cast_4xi8_to_4xi64(<2 x i64>* nocapture no nnull dereferenceable(16), <16 x i8>)
8081 ; CHECK-NEXT: %3 = extractelement <16 x i8> %1, i32 0
8082 ; CHECK-NEXT: %4 = sext i8 %3 to i64
8083 ; CHECK-NEXT: %5 = insertelement <2 x i64> undef, i64 %4, i32 0
8084 ; CHECK-NEXT: %6 = extractelement <16 x i8> %1, i32 1
8085 ; CHECK-NEXT: %7 = sext i8 %6 to i64
8086 ; CHECK-NEXT: %8 = insertelement <2 x i64> %5, i64 %7, i32 1
8087 ; CHECK-NEXT: %9 = extractelement <16 x i8> %1, i32 2
8088 ; CHECK-NEXT: %10 = sext i8 %9 to i64
8089 ; CHECK-NEXT: %11 = insertelement <2 x i64> undef, i64 %10, i32 0
8090 ; CHECK-NEXT: %12 = extractelement <16 x i8> %1, i32 3
8091 ; CHECK-NEXT: %13 = sext i8 %12 to i64
8092 ; CHECK-NEXT: %14 = insertelement <2 x i64> %11, i64 %13, i32 1
8093 ; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %0, align 16
8094 ; CHECK-NEXT: ret <2 x i64> %8
8095
8096 define <4 x i32> @sext_cast_4xi16_to_4xi32(<4 x i16>) {
8097 %2 = sext <4 x i16> %0 to <4 x i32>
8098 ret <4 x i32> %2
8099 }
8100 ; CHECK-LABEL: define <4 x i32> @sext_cast_4xi16_to_4xi32(<8 x i16>)
8101 ; CHECK-NEXT: %2 = extractelement <8 x i16> %0, i32 0
8102 ; CHECK-NEXT: %3 = sext i16 %2 to i32
8103 ; CHECK-NEXT: %4 = insertelement <4 x i32> undef, i32 %3, i32 0
8104 ; CHECK-NEXT: %5 = extractelement <8 x i16> %0, i32 1
8105 ; CHECK-NEXT: %6 = sext i16 %5 to i32
8106 ; CHECK-NEXT: %7 = insertelement <4 x i32> %4, i32 %6, i32 1
8107 ; CHECK-NEXT: %8 = extractelement <8 x i16> %0, i32 2
8108 ; CHECK-NEXT: %9 = sext i16 %8 to i32
8109 ; CHECK-NEXT: %10 = insertelement <4 x i32> %7, i32 %9, i32 2
8110 ; CHECK-NEXT: %11 = extractelement <8 x i16> %0, i32 3
8111 ; CHECK-NEXT: %12 = sext i16 %11 to i32
8112 ; CHECK-NEXT: %13 = insertelement <4 x i32> %10, i32 %12, i32 3
8113 ; CHECK-NEXT: ret <4 x i32> %13
8114
8115 define <4 x i64> @sext_cast_4xi16_to_4xi64(<4 x i16>) {
8116 %2 = sext <4 x i16> %0 to <4 x i64>
8117 ret <4 x i64> %2
8118 }
8119 ; CHECK-LABEL: define <2 x i64> @sext_cast_4xi16_to_4xi64(<2 x i64>* nocapture n onnull dereferenceable(16), <8 x i16>)
8120 ; CHECK-NEXT: %3 = extractelement <8 x i16> %1, i32 0
8121 ; CHECK-NEXT: %4 = sext i16 %3 to i64
8122 ; CHECK-NEXT: %5 = insertelement <2 x i64> undef, i64 %4, i32 0
8123 ; CHECK-NEXT: %6 = extractelement <8 x i16> %1, i32 1
8124 ; CHECK-NEXT: %7 = sext i16 %6 to i64
8125 ; CHECK-NEXT: %8 = insertelement <2 x i64> %5, i64 %7, i32 1
8126 ; CHECK-NEXT: %9 = extractelement <8 x i16> %1, i32 2
8127 ; CHECK-NEXT: %10 = sext i16 %9 to i64
8128 ; CHECK-NEXT: %11 = insertelement <2 x i64> undef, i64 %10, i32 0
8129 ; CHECK-NEXT: %12 = extractelement <8 x i16> %1, i32 3
8130 ; CHECK-NEXT: %13 = sext i16 %12 to i64
8131 ; CHECK-NEXT: %14 = insertelement <2 x i64> %11, i64 %13, i32 1
8132 ; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %0, align 16
8133 ; CHECK-NEXT: ret <2 x i64> %8
8134
8135 define <4 x i64> @sext_cast_4xi32_to_4xi64(<4 x i32>) {
8136 %2 = sext <4 x i32> %0 to <4 x i64>
8137 ret <4 x i64> %2
8138 }
8139 ; CHECK-LABEL: define <2 x i64> @sext_cast_4xi32_to_4xi64(<2 x i64>* nocapture n onnull dereferenceable(16), <4 x i32>)
8140 ; CHECK-NEXT: %3 = extractelement <4 x i32> %1, i32 0
8141 ; CHECK-NEXT: %4 = sext i32 %3 to i64
8142 ; CHECK-NEXT: %5 = insertelement <2 x i64> undef, i64 %4, i32 0
8143 ; CHECK-NEXT: %6 = extractelement <4 x i32> %1, i32 1
8144 ; CHECK-NEXT: %7 = sext i32 %6 to i64
8145 ; CHECK-NEXT: %8 = insertelement <2 x i64> %5, i64 %7, i32 1
8146 ; CHECK-NEXT: %9 = extractelement <4 x i32> %1, i32 2
8147 ; CHECK-NEXT: %10 = sext i32 %9 to i64
8148 ; CHECK-NEXT: %11 = insertelement <2 x i64> undef, i64 %10, i32 0
8149 ; CHECK-NEXT: %12 = extractelement <4 x i32> %1, i32 3
8150 ; CHECK-NEXT: %13 = sext i32 %12 to i64
8151 ; CHECK-NEXT: %14 = insertelement <2 x i64> %11, i64 %13, i32 1
8152 ; CHECK-NEXT: store <2 x i64> %14, <2 x i64>* %0, align 16
8153 ; CHECK-NEXT: ret <2 x i64> %8
8154
8155 define <4 x i32> @trunc_cast_4xi64_to_4xi32(<4 x i64>) {
8156 %2 = trunc <4 x i64> %0 to <4 x i32>
8157 ret <4 x i32> %2
8158 }
8159 ; CHECK-LABEL: define <4 x i32> @trunc_cast_4xi64_to_4xi32(<2 x i64>, <2 x i64>)
8160 ; CHECK-NEXT: %3 = extractelement <2 x i64> %0, i32 0
8161 ; CHECK-NEXT: %4 = trunc i64 %3 to i32
8162 ; CHECK-NEXT: %5 = insertelement <4 x i32> undef, i32 %4, i32 0
8163 ; CHECK-NEXT: %6 = extractelement <2 x i64> %0, i32 1
8164 ; CHECK-NEXT: %7 = trunc i64 %6 to i32
8165 ; CHECK-NEXT: %8 = insertelement <4 x i32> %5, i32 %7, i32 1
8166 ; CHECK-NEXT: %9 = extractelement <2 x i64> %1, i32 0
8167 ; CHECK-NEXT: %10 = trunc i64 %9 to i32
8168 ; CHECK-NEXT: %11 = insertelement <4 x i32> %8, i32 %10, i32 2
8169 ; CHECK-NEXT: %12 = extractelement <2 x i64> %1, i32 1
8170 ; CHECK-NEXT: %13 = trunc i64 %12 to i32
8171 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 3
8172 ; CHECK-NEXT: ret <4 x i32> %14
8173
8174 define <4 x i16> @trunc_cast_4xi64_to_4xi16(<4 x i64>) {
8175 %2 = trunc <4 x i64> %0 to <4 x i16>
8176 ret <4 x i16> %2
8177 }
8178 ; CHECK-LABEL: define <8 x i16> @trunc_cast_4xi64_to_4xi16(<2 x i64>, <2 x i64>)
8179 ; CHECK-NEXT: %3 = extractelement <2 x i64> %0, i32 0
8180 ; CHECK-NEXT: %4 = trunc i64 %3 to i16
8181 ; CHECK-NEXT: %5 = insertelement <8 x i16> undef, i16 %4, i32 0
8182 ; CHECK-NEXT: %6 = extractelement <2 x i64> %0, i32 1
8183 ; CHECK-NEXT: %7 = trunc i64 %6 to i16
8184 ; CHECK-NEXT: %8 = insertelement <8 x i16> %5, i16 %7, i32 1
8185 ; CHECK-NEXT: %9 = extractelement <2 x i64> %1, i32 0
8186 ; CHECK-NEXT: %10 = trunc i64 %9 to i16
8187 ; CHECK-NEXT: %11 = insertelement <8 x i16> %8, i16 %10, i32 2
8188 ; CHECK-NEXT: %12 = extractelement <2 x i64> %1, i32 1
8189 ; CHECK-NEXT: %13 = trunc i64 %12 to i16
8190 ; CHECK-NEXT: %14 = insertelement <8 x i16> %11, i16 %13, i32 3
8191 ; CHECK-NEXT: ret <8 x i16> %14
8192
8193 define <4 x i8> @trunc_cast_4xi64_to_4xi8(<4 x i64>) {
8194 %2 = trunc <4 x i64> %0 to <4 x i8>
8195 ret <4 x i8> %2
8196 }
8197 ; CHECK-LABEL: define <16 x i8> @trunc_cast_4xi64_to_4xi8(<2 x i64>, <2 x i64>)
8198 ; CHECK-NEXT: %3 = extractelement <2 x i64> %0, i32 0
8199 ; CHECK-NEXT: %4 = trunc i64 %3 to i8
8200 ; CHECK-NEXT: %5 = insertelement <16 x i8> undef, i8 %4, i32 0
8201 ; CHECK-NEXT: %6 = extractelement <2 x i64> %0, i32 1
8202 ; CHECK-NEXT: %7 = trunc i64 %6 to i8
8203 ; CHECK-NEXT: %8 = insertelement <16 x i8> %5, i8 %7, i32 1
8204 ; CHECK-NEXT: %9 = extractelement <2 x i64> %1, i32 0
8205 ; CHECK-NEXT: %10 = trunc i64 %9 to i8
8206 ; CHECK-NEXT: %11 = insertelement <16 x i8> %8, i8 %10, i32 2
8207 ; CHECK-NEXT: %12 = extractelement <2 x i64> %1, i32 1
8208 ; CHECK-NEXT: %13 = trunc i64 %12 to i8
8209 ; CHECK-NEXT: %14 = insertelement <16 x i8> %11, i8 %13, i32 3
8210 ; CHECK-NEXT: ret <16 x i8> %14
8211
8212 define <4 x i16> @trunc_cast_4xi32_to_4xi16(<4 x i32>) {
8213 %2 = trunc <4 x i32> %0 to <4 x i16>
8214 ret <4 x i16> %2
8215 }
8216 ; CHECK-LABEL: define <8 x i16> @trunc_cast_4xi32_to_4xi16(<4 x i32>)
8217 ; CHECK-NEXT: %2 = extractelement <4 x i32> %0, i32 0
8218 ; CHECK-NEXT: %3 = trunc i32 %2 to i16
8219 ; CHECK-NEXT: %4 = insertelement <8 x i16> undef, i16 %3, i32 0
8220 ; CHECK-NEXT: %5 = extractelement <4 x i32> %0, i32 1
8221 ; CHECK-NEXT: %6 = trunc i32 %5 to i16
8222 ; CHECK-NEXT: %7 = insertelement <8 x i16> %4, i16 %6, i32 1
8223 ; CHECK-NEXT: %8 = extractelement <4 x i32> %0, i32 2
8224 ; CHECK-NEXT: %9 = trunc i32 %8 to i16
8225 ; CHECK-NEXT: %10 = insertelement <8 x i16> %7, i16 %9, i32 2
8226 ; CHECK-NEXT: %11 = extractelement <4 x i32> %0, i32 3
8227 ; CHECK-NEXT: %12 = trunc i32 %11 to i16
8228 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 3
8229 ; CHECK-NEXT: ret <8 x i16> %13
8230
8231 define <4 x i8> @trunc_cast_4xi32_to_4xi8(<4 x i32>) {
8232 %2 = trunc <4 x i32> %0 to <4 x i8>
8233 ret <4 x i8> %2
8234 }
8235 ; CHECK-LABEL: define <16 x i8> @trunc_cast_4xi32_to_4xi8(<4 x i32>)
8236 ; CHECK-NEXT: %2 = extractelement <4 x i32> %0, i32 0
8237 ; CHECK-NEXT: %3 = trunc i32 %2 to i8
8238 ; CHECK-NEXT: %4 = insertelement <16 x i8> undef, i8 %3, i32 0
8239 ; CHECK-NEXT: %5 = extractelement <4 x i32> %0, i32 1
8240 ; CHECK-NEXT: %6 = trunc i32 %5 to i8
8241 ; CHECK-NEXT: %7 = insertelement <16 x i8> %4, i8 %6, i32 1
8242 ; CHECK-NEXT: %8 = extractelement <4 x i32> %0, i32 2
8243 ; CHECK-NEXT: %9 = trunc i32 %8 to i8
8244 ; CHECK-NEXT: %10 = insertelement <16 x i8> %7, i8 %9, i32 2
8245 ; CHECK-NEXT: %11 = extractelement <4 x i32> %0, i32 3
8246 ; CHECK-NEXT: %12 = trunc i32 %11 to i8
8247 ; CHECK-NEXT: %13 = insertelement <16 x i8> %10, i8 %12, i32 3
8248 ; CHECK-NEXT: ret <16 x i8> %13
8249
8250 define <4 x i8> @trunc_cast_4xi16_to_4xi8(<4 x i16>) {
8251 %2 = trunc <4 x i16> %0 to <4 x i8>
8252 ret <4 x i8> %2
8253 }
8254 ; CHECK-LABEL: define <16 x i8> @trunc_cast_4xi16_to_4xi8(<8 x i16>)
8255 ; CHECK-NEXT: %2 = extractelement <8 x i16> %0, i32 0
8256 ; CHECK-NEXT: %3 = trunc i16 %2 to i8
8257 ; CHECK-NEXT: %4 = insertelement <16 x i8> undef, i8 %3, i32 0
8258 ; CHECK-NEXT: %5 = extractelement <8 x i16> %0, i32 1
8259 ; CHECK-NEXT: %6 = trunc i16 %5 to i8
8260 ; CHECK-NEXT: %7 = insertelement <16 x i8> %4, i8 %6, i32 1
8261 ; CHECK-NEXT: %8 = extractelement <8 x i16> %0, i32 2
8262 ; CHECK-NEXT: %9 = trunc i16 %8 to i8
8263 ; CHECK-NEXT: %10 = insertelement <16 x i8> %7, i8 %9, i32 2
8264 ; CHECK-NEXT: %11 = extractelement <8 x i16> %0, i32 3
8265 ; CHECK-NEXT: %12 = trunc i16 %11 to i8
8266 ; CHECK-NEXT: %13 = insertelement <16 x i8> %10, i8 %12, i32 3
8267 ; CHECK-NEXT: ret <16 x i8> %13
8268
8269 define <6 x i16> @zext_cast_6xi8_to_6xi16(<6 x i8>) {
8270 %2 = zext <6 x i8> %0 to <6 x i16>
8271 ret <6 x i16> %2
8272 }
8273 ; CHECK-LABEL: define <8 x i16> @zext_cast_6xi8_to_6xi16(<16 x i8>)
8274 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
8275 ; CHECK-NEXT: %3 = zext i8 %2 to i16
8276 ; CHECK-NEXT: %4 = insertelement <8 x i16> undef, i16 %3, i32 0
8277 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
8278 ; CHECK-NEXT: %6 = zext i8 %5 to i16
8279 ; CHECK-NEXT: %7 = insertelement <8 x i16> %4, i16 %6, i32 1
8280 ; CHECK-NEXT: %8 = extractelement <16 x i8> %0, i32 2
8281 ; CHECK-NEXT: %9 = zext i8 %8 to i16
8282 ; CHECK-NEXT: %10 = insertelement <8 x i16> %7, i16 %9, i32 2
8283 ; CHECK-NEXT: %11 = extractelement <16 x i8> %0, i32 3
8284 ; CHECK-NEXT: %12 = zext i8 %11 to i16
8285 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 3
8286 ; CHECK-NEXT: %14 = extractelement <16 x i8> %0, i32 4
8287 ; CHECK-NEXT: %15 = zext i8 %14 to i16
8288 ; CHECK-NEXT: %16 = insertelement <8 x i16> %13, i16 %15, i32 4
8289 ; CHECK-NEXT: %17 = extractelement <16 x i8> %0, i32 5
8290 ; CHECK-NEXT: %18 = zext i8 %17 to i16
8291 ; CHECK-NEXT: %19 = insertelement <8 x i16> %16, i16 %18, i32 5
8292 ; CHECK-NEXT: ret <8 x i16> %19
8293
8294 define <6 x i32> @zext_cast_6xi8_to_6xi32(<6 x i8>) {
8295 %2 = zext <6 x i8> %0 to <6 x i32>
8296 ret <6 x i32> %2
8297 }
8298 ; CHECK-LABEL: define <4 x i32> @zext_cast_6xi8_to_6xi32(<4 x i32>* nocapture no nnull dereferenceable(16), <16 x i8>)
8299 ; CHECK-NEXT: %3 = extractelement <16 x i8> %1, i32 0
8300 ; CHECK-NEXT: %4 = zext i8 %3 to i32
8301 ; CHECK-NEXT: %5 = insertelement <4 x i32> undef, i32 %4, i32 0
8302 ; CHECK-NEXT: %6 = extractelement <16 x i8> %1, i32 1
8303 ; CHECK-NEXT: %7 = zext i8 %6 to i32
8304 ; CHECK-NEXT: %8 = insertelement <4 x i32> %5, i32 %7, i32 1
8305 ; CHECK-NEXT: %9 = extractelement <16 x i8> %1, i32 2
8306 ; CHECK-NEXT: %10 = zext i8 %9 to i32
8307 ; CHECK-NEXT: %11 = insertelement <4 x i32> %8, i32 %10, i32 2
8308 ; CHECK-NEXT: %12 = extractelement <16 x i8> %1, i32 3
8309 ; CHECK-NEXT: %13 = zext i8 %12 to i32
8310 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 3
8311 ; CHECK-NEXT: %15 = extractelement <16 x i8> %1, i32 4
8312 ; CHECK-NEXT: %16 = zext i8 %15 to i32
8313 ; CHECK-NEXT: %17 = insertelement <4 x i32> undef, i32 %16, i32 0
8314 ; CHECK-NEXT: %18 = extractelement <16 x i8> %1, i32 5
8315 ; CHECK-NEXT: %19 = zext i8 %18 to i32
8316 ; CHECK-NEXT: %20 = insertelement <4 x i32> %17, i32 %19, i32 1
8317 ; CHECK-NEXT: store <4 x i32> %20, <4 x i32>* %0, align 16
8318 ; CHECK-NEXT: ret <4 x i32> %14
8319
8320 define <6 x i64> @zext_cast_6xi8_to_6xi64(<6 x i8>) {
8321 %2 = zext <6 x i8> %0 to <6 x i64>
8322 ret <6 x i64> %2
8323 }
8324 ; CHECK-LABEL: define <2 x i64> @zext_cast_6xi8_to_6xi64(<2 x i64>* nocapture no nnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <16 x i8>)
8325 ; CHECK-NEXT: %4 = extractelement <16 x i8> %2, i32 0
8326 ; CHECK-NEXT: %5 = zext i8 %4 to i64
8327 ; CHECK-NEXT: %6 = insertelement <2 x i64> undef, i64 %5, i32 0
8328 ; CHECK-NEXT: %7 = extractelement <16 x i8> %2, i32 1
8329 ; CHECK-NEXT: %8 = zext i8 %7 to i64
8330 ; CHECK-NEXT: %9 = insertelement <2 x i64> %6, i64 %8, i32 1
8331 ; CHECK-NEXT: %10 = extractelement <16 x i8> %2, i32 2
8332 ; CHECK-NEXT: %11 = zext i8 %10 to i64
8333 ; CHECK-NEXT: %12 = insertelement <2 x i64> undef, i64 %11, i32 0
8334 ; CHECK-NEXT: %13 = extractelement <16 x i8> %2, i32 3
8335 ; CHECK-NEXT: %14 = zext i8 %13 to i64
8336 ; CHECK-NEXT: %15 = insertelement <2 x i64> %12, i64 %14, i32 1
8337 ; CHECK-NEXT: %16 = extractelement <16 x i8> %2, i32 4
8338 ; CHECK-NEXT: %17 = zext i8 %16 to i64
8339 ; CHECK-NEXT: %18 = insertelement <2 x i64> undef, i64 %17, i32 0
8340 ; CHECK-NEXT: %19 = extractelement <16 x i8> %2, i32 5
8341 ; CHECK-NEXT: %20 = zext i8 %19 to i64
8342 ; CHECK-NEXT: %21 = insertelement <2 x i64> %18, i64 %20, i32 1
8343 ; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %0, align 16
8344 ; CHECK-NEXT: store <2 x i64> %21, <2 x i64>* %1, align 16
8345 ; CHECK-NEXT: ret <2 x i64> %9
8346
8347 define <6 x i32> @zext_cast_6xi16_to_6xi32(<6 x i16>) {
8348 %2 = zext <6 x i16> %0 to <6 x i32>
8349 ret <6 x i32> %2
8350 }
8351 ; CHECK-LABEL: define <4 x i32> @zext_cast_6xi16_to_6xi32(<4 x i32>* nocapture n onnull dereferenceable(16), <8 x i16>)
8352 ; CHECK-NEXT: %3 = extractelement <8 x i16> %1, i32 0
8353 ; CHECK-NEXT: %4 = zext i16 %3 to i32
8354 ; CHECK-NEXT: %5 = insertelement <4 x i32> undef, i32 %4, i32 0
8355 ; CHECK-NEXT: %6 = extractelement <8 x i16> %1, i32 1
8356 ; CHECK-NEXT: %7 = zext i16 %6 to i32
8357 ; CHECK-NEXT: %8 = insertelement <4 x i32> %5, i32 %7, i32 1
8358 ; CHECK-NEXT: %9 = extractelement <8 x i16> %1, i32 2
8359 ; CHECK-NEXT: %10 = zext i16 %9 to i32
8360 ; CHECK-NEXT: %11 = insertelement <4 x i32> %8, i32 %10, i32 2
8361 ; CHECK-NEXT: %12 = extractelement <8 x i16> %1, i32 3
8362 ; CHECK-NEXT: %13 = zext i16 %12 to i32
8363 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 3
8364 ; CHECK-NEXT: %15 = extractelement <8 x i16> %1, i32 4
8365 ; CHECK-NEXT: %16 = zext i16 %15 to i32
8366 ; CHECK-NEXT: %17 = insertelement <4 x i32> undef, i32 %16, i32 0
8367 ; CHECK-NEXT: %18 = extractelement <8 x i16> %1, i32 5
8368 ; CHECK-NEXT: %19 = zext i16 %18 to i32
8369 ; CHECK-NEXT: %20 = insertelement <4 x i32> %17, i32 %19, i32 1
8370 ; CHECK-NEXT: store <4 x i32> %20, <4 x i32>* %0, align 16
8371 ; CHECK-NEXT: ret <4 x i32> %14
8372
8373 define <6 x i64> @zext_cast_6xi16_to_6xi64(<6 x i16>) {
8374 %2 = zext <6 x i16> %0 to <6 x i64>
8375 ret <6 x i64> %2
8376 }
8377 ; CHECK-LABEL: define <2 x i64> @zext_cast_6xi16_to_6xi64(<2 x i64>* nocapture n onnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <8 x i16>)
8378 ; CHECK-NEXT: %4 = extractelement <8 x i16> %2, i32 0
8379 ; CHECK-NEXT: %5 = zext i16 %4 to i64
8380 ; CHECK-NEXT: %6 = insertelement <2 x i64> undef, i64 %5, i32 0
8381 ; CHECK-NEXT: %7 = extractelement <8 x i16> %2, i32 1
8382 ; CHECK-NEXT: %8 = zext i16 %7 to i64
8383 ; CHECK-NEXT: %9 = insertelement <2 x i64> %6, i64 %8, i32 1
8384 ; CHECK-NEXT: %10 = extractelement <8 x i16> %2, i32 2
8385 ; CHECK-NEXT: %11 = zext i16 %10 to i64
8386 ; CHECK-NEXT: %12 = insertelement <2 x i64> undef, i64 %11, i32 0
8387 ; CHECK-NEXT: %13 = extractelement <8 x i16> %2, i32 3
8388 ; CHECK-NEXT: %14 = zext i16 %13 to i64
8389 ; CHECK-NEXT: %15 = insertelement <2 x i64> %12, i64 %14, i32 1
8390 ; CHECK-NEXT: %16 = extractelement <8 x i16> %2, i32 4
8391 ; CHECK-NEXT: %17 = zext i16 %16 to i64
8392 ; CHECK-NEXT: %18 = insertelement <2 x i64> undef, i64 %17, i32 0
8393 ; CHECK-NEXT: %19 = extractelement <8 x i16> %2, i32 5
8394 ; CHECK-NEXT: %20 = zext i16 %19 to i64
8395 ; CHECK-NEXT: %21 = insertelement <2 x i64> %18, i64 %20, i32 1
8396 ; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %0, align 16
8397 ; CHECK-NEXT: store <2 x i64> %21, <2 x i64>* %1, align 16
8398 ; CHECK-NEXT: ret <2 x i64> %9
8399
8400 define <6 x i64> @zext_cast_6xi32_to_6xi64(<6 x i32>) {
8401 %2 = zext <6 x i32> %0 to <6 x i64>
8402 ret <6 x i64> %2
8403 }
8404 ; CHECK-LABEL: define <2 x i64> @zext_cast_6xi32_to_6xi64(<2 x i64>* nocapture n onnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>)
8405 ; CHECK-NEXT: %5 = extractelement <4 x i32> %2, i32 0
8406 ; CHECK-NEXT: %6 = zext i32 %5 to i64
8407 ; CHECK-NEXT: %7 = insertelement <2 x i64> undef, i64 %6, i32 0
8408 ; CHECK-NEXT: %8 = extractelement <4 x i32> %2, i32 1
8409 ; CHECK-NEXT: %9 = zext i32 %8 to i64
8410 ; CHECK-NEXT: %10 = insertelement <2 x i64> %7, i64 %9, i32 1
8411 ; CHECK-NEXT: %11 = extractelement <4 x i32> %2, i32 2
8412 ; CHECK-NEXT: %12 = zext i32 %11 to i64
8413 ; CHECK-NEXT: %13 = insertelement <2 x i64> undef, i64 %12, i32 0
8414 ; CHECK-NEXT: %14 = extractelement <4 x i32> %2, i32 3
8415 ; CHECK-NEXT: %15 = zext i32 %14 to i64
8416 ; CHECK-NEXT: %16 = insertelement <2 x i64> %13, i64 %15, i32 1
8417 ; CHECK-NEXT: %17 = extractelement <4 x i32> %3, i32 0
8418 ; CHECK-NEXT: %18 = zext i32 %17 to i64
8419 ; CHECK-NEXT: %19 = insertelement <2 x i64> undef, i64 %18, i32 0
8420 ; CHECK-NEXT: %20 = extractelement <4 x i32> %3, i32 1
8421 ; CHECK-NEXT: %21 = zext i32 %20 to i64
8422 ; CHECK-NEXT: %22 = insertelement <2 x i64> %19, i64 %21, i32 1
8423 ; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %0, align 16
8424 ; CHECK-NEXT: store <2 x i64> %22, <2 x i64>* %1, align 16
8425 ; CHECK-NEXT: ret <2 x i64> %10
8426
8427 define <6 x i16> @sext_cast_6xi8_to_6xi16(<6 x i8>) {
8428 %2 = sext <6 x i8> %0 to <6 x i16>
8429 ret <6 x i16> %2
8430 }
8431 ; CHECK-LABEL: define <8 x i16> @sext_cast_6xi8_to_6xi16(<16 x i8>)
8432 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
8433 ; CHECK-NEXT: %3 = sext i8 %2 to i16
8434 ; CHECK-NEXT: %4 = insertelement <8 x i16> undef, i16 %3, i32 0
8435 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
8436 ; CHECK-NEXT: %6 = sext i8 %5 to i16
8437 ; CHECK-NEXT: %7 = insertelement <8 x i16> %4, i16 %6, i32 1
8438 ; CHECK-NEXT: %8 = extractelement <16 x i8> %0, i32 2
8439 ; CHECK-NEXT: %9 = sext i8 %8 to i16
8440 ; CHECK-NEXT: %10 = insertelement <8 x i16> %7, i16 %9, i32 2
8441 ; CHECK-NEXT: %11 = extractelement <16 x i8> %0, i32 3
8442 ; CHECK-NEXT: %12 = sext i8 %11 to i16
8443 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 3
8444 ; CHECK-NEXT: %14 = extractelement <16 x i8> %0, i32 4
8445 ; CHECK-NEXT: %15 = sext i8 %14 to i16
8446 ; CHECK-NEXT: %16 = insertelement <8 x i16> %13, i16 %15, i32 4
8447 ; CHECK-NEXT: %17 = extractelement <16 x i8> %0, i32 5
8448 ; CHECK-NEXT: %18 = sext i8 %17 to i16
8449 ; CHECK-NEXT: %19 = insertelement <8 x i16> %16, i16 %18, i32 5
8450 ; CHECK-NEXT: ret <8 x i16> %19
8451
8452 define <6 x i32> @sext_cast_6xi8_to_6xi32(<6 x i8>) {
8453 %2 = sext <6 x i8> %0 to <6 x i32>
8454 ret <6 x i32> %2
8455 }
8456 ; CHECK-LABEL: define <4 x i32> @sext_cast_6xi8_to_6xi32(<4 x i32>* nocapture no nnull dereferenceable(16), <16 x i8>)
8457 ; CHECK-NEXT: %3 = extractelement <16 x i8> %1, i32 0
8458 ; CHECK-NEXT: %4 = sext i8 %3 to i32
8459 ; CHECK-NEXT: %5 = insertelement <4 x i32> undef, i32 %4, i32 0
8460 ; CHECK-NEXT: %6 = extractelement <16 x i8> %1, i32 1
8461 ; CHECK-NEXT: %7 = sext i8 %6 to i32
8462 ; CHECK-NEXT: %8 = insertelement <4 x i32> %5, i32 %7, i32 1
8463 ; CHECK-NEXT: %9 = extractelement <16 x i8> %1, i32 2
8464 ; CHECK-NEXT: %10 = sext i8 %9 to i32
8465 ; CHECK-NEXT: %11 = insertelement <4 x i32> %8, i32 %10, i32 2
8466 ; CHECK-NEXT: %12 = extractelement <16 x i8> %1, i32 3
8467 ; CHECK-NEXT: %13 = sext i8 %12 to i32
8468 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 3
8469 ; CHECK-NEXT: %15 = extractelement <16 x i8> %1, i32 4
8470 ; CHECK-NEXT: %16 = sext i8 %15 to i32
8471 ; CHECK-NEXT: %17 = insertelement <4 x i32> undef, i32 %16, i32 0
8472 ; CHECK-NEXT: %18 = extractelement <16 x i8> %1, i32 5
8473 ; CHECK-NEXT: %19 = sext i8 %18 to i32
8474 ; CHECK-NEXT: %20 = insertelement <4 x i32> %17, i32 %19, i32 1
8475 ; CHECK-NEXT: store <4 x i32> %20, <4 x i32>* %0, align 16
8476 ; CHECK-NEXT: ret <4 x i32> %14
8477
8478 define <6 x i64> @sext_cast_6xi8_to_6xi64(<6 x i8>) {
8479 %2 = sext <6 x i8> %0 to <6 x i64>
8480 ret <6 x i64> %2
8481 }
8482 ; CHECK-LABEL: define <2 x i64> @sext_cast_6xi8_to_6xi64(<2 x i64>* nocapture no nnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <16 x i8>)
8483 ; CHECK-NEXT: %4 = extractelement <16 x i8> %2, i32 0
8484 ; CHECK-NEXT: %5 = sext i8 %4 to i64
8485 ; CHECK-NEXT: %6 = insertelement <2 x i64> undef, i64 %5, i32 0
8486 ; CHECK-NEXT: %7 = extractelement <16 x i8> %2, i32 1
8487 ; CHECK-NEXT: %8 = sext i8 %7 to i64
8488 ; CHECK-NEXT: %9 = insertelement <2 x i64> %6, i64 %8, i32 1
8489 ; CHECK-NEXT: %10 = extractelement <16 x i8> %2, i32 2
8490 ; CHECK-NEXT: %11 = sext i8 %10 to i64
8491 ; CHECK-NEXT: %12 = insertelement <2 x i64> undef, i64 %11, i32 0
8492 ; CHECK-NEXT: %13 = extractelement <16 x i8> %2, i32 3
8493 ; CHECK-NEXT: %14 = sext i8 %13 to i64
8494 ; CHECK-NEXT: %15 = insertelement <2 x i64> %12, i64 %14, i32 1
8495 ; CHECK-NEXT: %16 = extractelement <16 x i8> %2, i32 4
8496 ; CHECK-NEXT: %17 = sext i8 %16 to i64
8497 ; CHECK-NEXT: %18 = insertelement <2 x i64> undef, i64 %17, i32 0
8498 ; CHECK-NEXT: %19 = extractelement <16 x i8> %2, i32 5
8499 ; CHECK-NEXT: %20 = sext i8 %19 to i64
8500 ; CHECK-NEXT: %21 = insertelement <2 x i64> %18, i64 %20, i32 1
8501 ; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %0, align 16
8502 ; CHECK-NEXT: store <2 x i64> %21, <2 x i64>* %1, align 16
8503 ; CHECK-NEXT: ret <2 x i64> %9
8504
8505 define <6 x i32> @sext_cast_6xi16_to_6xi32(<6 x i16>) {
8506 %2 = sext <6 x i16> %0 to <6 x i32>
8507 ret <6 x i32> %2
8508 }
8509 ; CHECK-LABEL: define <4 x i32> @sext_cast_6xi16_to_6xi32(<4 x i32>* nocapture n onnull dereferenceable(16), <8 x i16>)
8510 ; CHECK-NEXT: %3 = extractelement <8 x i16> %1, i32 0
8511 ; CHECK-NEXT: %4 = sext i16 %3 to i32
8512 ; CHECK-NEXT: %5 = insertelement <4 x i32> undef, i32 %4, i32 0
8513 ; CHECK-NEXT: %6 = extractelement <8 x i16> %1, i32 1
8514 ; CHECK-NEXT: %7 = sext i16 %6 to i32
8515 ; CHECK-NEXT: %8 = insertelement <4 x i32> %5, i32 %7, i32 1
8516 ; CHECK-NEXT: %9 = extractelement <8 x i16> %1, i32 2
8517 ; CHECK-NEXT: %10 = sext i16 %9 to i32
8518 ; CHECK-NEXT: %11 = insertelement <4 x i32> %8, i32 %10, i32 2
8519 ; CHECK-NEXT: %12 = extractelement <8 x i16> %1, i32 3
8520 ; CHECK-NEXT: %13 = sext i16 %12 to i32
8521 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 3
8522 ; CHECK-NEXT: %15 = extractelement <8 x i16> %1, i32 4
8523 ; CHECK-NEXT: %16 = sext i16 %15 to i32
8524 ; CHECK-NEXT: %17 = insertelement <4 x i32> undef, i32 %16, i32 0
8525 ; CHECK-NEXT: %18 = extractelement <8 x i16> %1, i32 5
8526 ; CHECK-NEXT: %19 = sext i16 %18 to i32
8527 ; CHECK-NEXT: %20 = insertelement <4 x i32> %17, i32 %19, i32 1
8528 ; CHECK-NEXT: store <4 x i32> %20, <4 x i32>* %0, align 16
8529 ; CHECK-NEXT: ret <4 x i32> %14
8530
8531 define <6 x i64> @sext_cast_6xi16_to_6xi64(<6 x i16>) {
8532 %2 = sext <6 x i16> %0 to <6 x i64>
8533 ret <6 x i64> %2
8534 }
8535 ; CHECK-LABEL: define <2 x i64> @sext_cast_6xi16_to_6xi64(<2 x i64>* nocapture n onnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <8 x i16>)
8536 ; CHECK-NEXT: %4 = extractelement <8 x i16> %2, i32 0
8537 ; CHECK-NEXT: %5 = sext i16 %4 to i64
8538 ; CHECK-NEXT: %6 = insertelement <2 x i64> undef, i64 %5, i32 0
8539 ; CHECK-NEXT: %7 = extractelement <8 x i16> %2, i32 1
8540 ; CHECK-NEXT: %8 = sext i16 %7 to i64
8541 ; CHECK-NEXT: %9 = insertelement <2 x i64> %6, i64 %8, i32 1
8542 ; CHECK-NEXT: %10 = extractelement <8 x i16> %2, i32 2
8543 ; CHECK-NEXT: %11 = sext i16 %10 to i64
8544 ; CHECK-NEXT: %12 = insertelement <2 x i64> undef, i64 %11, i32 0
8545 ; CHECK-NEXT: %13 = extractelement <8 x i16> %2, i32 3
8546 ; CHECK-NEXT: %14 = sext i16 %13 to i64
8547 ; CHECK-NEXT: %15 = insertelement <2 x i64> %12, i64 %14, i32 1
8548 ; CHECK-NEXT: %16 = extractelement <8 x i16> %2, i32 4
8549 ; CHECK-NEXT: %17 = sext i16 %16 to i64
8550 ; CHECK-NEXT: %18 = insertelement <2 x i64> undef, i64 %17, i32 0
8551 ; CHECK-NEXT: %19 = extractelement <8 x i16> %2, i32 5
8552 ; CHECK-NEXT: %20 = sext i16 %19 to i64
8553 ; CHECK-NEXT: %21 = insertelement <2 x i64> %18, i64 %20, i32 1
8554 ; CHECK-NEXT: store <2 x i64> %15, <2 x i64>* %0, align 16
8555 ; CHECK-NEXT: store <2 x i64> %21, <2 x i64>* %1, align 16
8556 ; CHECK-NEXT: ret <2 x i64> %9
8557
8558 define <6 x i64> @sext_cast_6xi32_to_6xi64(<6 x i32>) {
8559 %2 = sext <6 x i32> %0 to <6 x i64>
8560 ret <6 x i64> %2
8561 }
8562 ; CHECK-LABEL: define <2 x i64> @sext_cast_6xi32_to_6xi64(<2 x i64>* nocapture n onnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>)
8563 ; CHECK-NEXT: %5 = extractelement <4 x i32> %2, i32 0
8564 ; CHECK-NEXT: %6 = sext i32 %5 to i64
8565 ; CHECK-NEXT: %7 = insertelement <2 x i64> undef, i64 %6, i32 0
8566 ; CHECK-NEXT: %8 = extractelement <4 x i32> %2, i32 1
8567 ; CHECK-NEXT: %9 = sext i32 %8 to i64
8568 ; CHECK-NEXT: %10 = insertelement <2 x i64> %7, i64 %9, i32 1
8569 ; CHECK-NEXT: %11 = extractelement <4 x i32> %2, i32 2
8570 ; CHECK-NEXT: %12 = sext i32 %11 to i64
8571 ; CHECK-NEXT: %13 = insertelement <2 x i64> undef, i64 %12, i32 0
8572 ; CHECK-NEXT: %14 = extractelement <4 x i32> %2, i32 3
8573 ; CHECK-NEXT: %15 = sext i32 %14 to i64
8574 ; CHECK-NEXT: %16 = insertelement <2 x i64> %13, i64 %15, i32 1
8575 ; CHECK-NEXT: %17 = extractelement <4 x i32> %3, i32 0
8576 ; CHECK-NEXT: %18 = sext i32 %17 to i64
8577 ; CHECK-NEXT: %19 = insertelement <2 x i64> undef, i64 %18, i32 0
8578 ; CHECK-NEXT: %20 = extractelement <4 x i32> %3, i32 1
8579 ; CHECK-NEXT: %21 = sext i32 %20 to i64
8580 ; CHECK-NEXT: %22 = insertelement <2 x i64> %19, i64 %21, i32 1
8581 ; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %0, align 16
8582 ; CHECK-NEXT: store <2 x i64> %22, <2 x i64>* %1, align 16
8583 ; CHECK-NEXT: ret <2 x i64> %10
8584
8585 define <6 x i32> @trunc_cast_6xi64_to_6xi32(<6 x i64>) {
8586 %2 = trunc <6 x i64> %0 to <6 x i32>
8587 ret <6 x i32> %2
8588 }
8589 ; CHECK-LABEL: define <4 x i32> @trunc_cast_6xi64_to_6xi32(<4 x i32>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>)
8590 ; CHECK-NEXT: %5 = extractelement <2 x i64> %1, i32 0
8591 ; CHECK-NEXT: %6 = trunc i64 %5 to i32
8592 ; CHECK-NEXT: %7 = insertelement <4 x i32> undef, i32 %6, i32 0
8593 ; CHECK-NEXT: %8 = extractelement <2 x i64> %1, i32 1
8594 ; CHECK-NEXT: %9 = trunc i64 %8 to i32
8595 ; CHECK-NEXT: %10 = insertelement <4 x i32> %7, i32 %9, i32 1
8596 ; CHECK-NEXT: %11 = extractelement <2 x i64> %2, i32 0
8597 ; CHECK-NEXT: %12 = trunc i64 %11 to i32
8598 ; CHECK-NEXT: %13 = insertelement <4 x i32> %10, i32 %12, i32 2
8599 ; CHECK-NEXT: %14 = extractelement <2 x i64> %2, i32 1
8600 ; CHECK-NEXT: %15 = trunc i64 %14 to i32
8601 ; CHECK-NEXT: %16 = insertelement <4 x i32> %13, i32 %15, i32 3
8602 ; CHECK-NEXT: %17 = extractelement <2 x i64> %3, i32 0
8603 ; CHECK-NEXT: %18 = trunc i64 %17 to i32
8604 ; CHECK-NEXT: %19 = insertelement <4 x i32> undef, i32 %18, i32 0
8605 ; CHECK-NEXT: %20 = extractelement <2 x i64> %3, i32 1
8606 ; CHECK-NEXT: %21 = trunc i64 %20 to i32
8607 ; CHECK-NEXT: %22 = insertelement <4 x i32> %19, i32 %21, i32 1
8608 ; CHECK-NEXT: store <4 x i32> %22, <4 x i32>* %0, align 16
8609 ; CHECK-NEXT: ret <4 x i32> %16
8610
8611 define <6 x i16> @trunc_cast_6xi64_to_6xi16(<6 x i64>) {
8612 %2 = trunc <6 x i64> %0 to <6 x i16>
8613 ret <6 x i16> %2
8614 }
8615 ; CHECK-LABEL: define <8 x i16> @trunc_cast_6xi64_to_6xi16(<2 x i64>, <2 x i64>, <2 x i64>)
8616 ; CHECK-NEXT: %4 = extractelement <2 x i64> %0, i32 0
8617 ; CHECK-NEXT: %5 = trunc i64 %4 to i16
8618 ; CHECK-NEXT: %6 = insertelement <8 x i16> undef, i16 %5, i32 0
8619 ; CHECK-NEXT: %7 = extractelement <2 x i64> %0, i32 1
8620 ; CHECK-NEXT: %8 = trunc i64 %7 to i16
8621 ; CHECK-NEXT: %9 = insertelement <8 x i16> %6, i16 %8, i32 1
8622 ; CHECK-NEXT: %10 = extractelement <2 x i64> %1, i32 0
8623 ; CHECK-NEXT: %11 = trunc i64 %10 to i16
8624 ; CHECK-NEXT: %12 = insertelement <8 x i16> %9, i16 %11, i32 2
8625 ; CHECK-NEXT: %13 = extractelement <2 x i64> %1, i32 1
8626 ; CHECK-NEXT: %14 = trunc i64 %13 to i16
8627 ; CHECK-NEXT: %15 = insertelement <8 x i16> %12, i16 %14, i32 3
8628 ; CHECK-NEXT: %16 = extractelement <2 x i64> %2, i32 0
8629 ; CHECK-NEXT: %17 = trunc i64 %16 to i16
8630 ; CHECK-NEXT: %18 = insertelement <8 x i16> %15, i16 %17, i32 4
8631 ; CHECK-NEXT: %19 = extractelement <2 x i64> %2, i32 1
8632 ; CHECK-NEXT: %20 = trunc i64 %19 to i16
8633 ; CHECK-NEXT: %21 = insertelement <8 x i16> %18, i16 %20, i32 5
8634 ; CHECK-NEXT: ret <8 x i16> %21
8635
8636 define <6 x i8> @trunc_cast_6xi64_to_6xi8(<6 x i64>) {
8637 %2 = trunc <6 x i64> %0 to <6 x i8>
8638 ret <6 x i8> %2
8639 }
8640 ; CHECK-LABEL: define <16 x i8> @trunc_cast_6xi64_to_6xi8(<2 x i64>, <2 x i64>, <2 x i64>)
8641 ; CHECK-NEXT: %4 = extractelement <2 x i64> %0, i32 0
8642 ; CHECK-NEXT: %5 = trunc i64 %4 to i8
8643 ; CHECK-NEXT: %6 = insertelement <16 x i8> undef, i8 %5, i32 0
8644 ; CHECK-NEXT: %7 = extractelement <2 x i64> %0, i32 1
8645 ; CHECK-NEXT: %8 = trunc i64 %7 to i8
8646 ; CHECK-NEXT: %9 = insertelement <16 x i8> %6, i8 %8, i32 1
8647 ; CHECK-NEXT: %10 = extractelement <2 x i64> %1, i32 0
8648 ; CHECK-NEXT: %11 = trunc i64 %10 to i8
8649 ; CHECK-NEXT: %12 = insertelement <16 x i8> %9, i8 %11, i32 2
8650 ; CHECK-NEXT: %13 = extractelement <2 x i64> %1, i32 1
8651 ; CHECK-NEXT: %14 = trunc i64 %13 to i8
8652 ; CHECK-NEXT: %15 = insertelement <16 x i8> %12, i8 %14, i32 3
8653 ; CHECK-NEXT: %16 = extractelement <2 x i64> %2, i32 0
8654 ; CHECK-NEXT: %17 = trunc i64 %16 to i8
8655 ; CHECK-NEXT: %18 = insertelement <16 x i8> %15, i8 %17, i32 4
8656 ; CHECK-NEXT: %19 = extractelement <2 x i64> %2, i32 1
8657 ; CHECK-NEXT: %20 = trunc i64 %19 to i8
8658 ; CHECK-NEXT: %21 = insertelement <16 x i8> %18, i8 %20, i32 5
8659 ; CHECK-NEXT: ret <16 x i8> %21
8660
8661 define <6 x i16> @trunc_cast_6xi32_to_6xi16(<6 x i32>) {
8662 %2 = trunc <6 x i32> %0 to <6 x i16>
8663 ret <6 x i16> %2
8664 }
8665 ; CHECK-LABEL: define <8 x i16> @trunc_cast_6xi32_to_6xi16(<4 x i32>, <4 x i32>)
8666 ; CHECK-NEXT: %3 = extractelement <4 x i32> %0, i32 0
8667 ; CHECK-NEXT: %4 = trunc i32 %3 to i16
8668 ; CHECK-NEXT: %5 = insertelement <8 x i16> undef, i16 %4, i32 0
8669 ; CHECK-NEXT: %6 = extractelement <4 x i32> %0, i32 1
8670 ; CHECK-NEXT: %7 = trunc i32 %6 to i16
8671 ; CHECK-NEXT: %8 = insertelement <8 x i16> %5, i16 %7, i32 1
8672 ; CHECK-NEXT: %9 = extractelement <4 x i32> %0, i32 2
8673 ; CHECK-NEXT: %10 = trunc i32 %9 to i16
8674 ; CHECK-NEXT: %11 = insertelement <8 x i16> %8, i16 %10, i32 2
8675 ; CHECK-NEXT: %12 = extractelement <4 x i32> %0, i32 3
8676 ; CHECK-NEXT: %13 = trunc i32 %12 to i16
8677 ; CHECK-NEXT: %14 = insertelement <8 x i16> %11, i16 %13, i32 3
8678 ; CHECK-NEXT: %15 = extractelement <4 x i32> %1, i32 0
8679 ; CHECK-NEXT: %16 = trunc i32 %15 to i16
8680 ; CHECK-NEXT: %17 = insertelement <8 x i16> %14, i16 %16, i32 4
8681 ; CHECK-NEXT: %18 = extractelement <4 x i32> %1, i32 1
8682 ; CHECK-NEXT: %19 = trunc i32 %18 to i16
8683 ; CHECK-NEXT: %20 = insertelement <8 x i16> %17, i16 %19, i32 5
8684 ; CHECK-NEXT: ret <8 x i16> %20
8685
8686 define <6 x i8> @trunc_cast_6xi32_to_6xi8(<6 x i32>) {
8687 %2 = trunc <6 x i32> %0 to <6 x i8>
8688 ret <6 x i8> %2
8689 }
8690 ; CHECK-LABEL: define <16 x i8> @trunc_cast_6xi32_to_6xi8(<4 x i32>, <4 x i32>)
8691 ; CHECK-NEXT: %3 = extractelement <4 x i32> %0, i32 0
8692 ; CHECK-NEXT: %4 = trunc i32 %3 to i8
8693 ; CHECK-NEXT: %5 = insertelement <16 x i8> undef, i8 %4, i32 0
8694 ; CHECK-NEXT: %6 = extractelement <4 x i32> %0, i32 1
8695 ; CHECK-NEXT: %7 = trunc i32 %6 to i8
8696 ; CHECK-NEXT: %8 = insertelement <16 x i8> %5, i8 %7, i32 1
8697 ; CHECK-NEXT: %9 = extractelement <4 x i32> %0, i32 2
8698 ; CHECK-NEXT: %10 = trunc i32 %9 to i8
8699 ; CHECK-NEXT: %11 = insertelement <16 x i8> %8, i8 %10, i32 2
8700 ; CHECK-NEXT: %12 = extractelement <4 x i32> %0, i32 3
8701 ; CHECK-NEXT: %13 = trunc i32 %12 to i8
8702 ; CHECK-NEXT: %14 = insertelement <16 x i8> %11, i8 %13, i32 3
8703 ; CHECK-NEXT: %15 = extractelement <4 x i32> %1, i32 0
8704 ; CHECK-NEXT: %16 = trunc i32 %15 to i8
8705 ; CHECK-NEXT: %17 = insertelement <16 x i8> %14, i8 %16, i32 4
8706 ; CHECK-NEXT: %18 = extractelement <4 x i32> %1, i32 1
8707 ; CHECK-NEXT: %19 = trunc i32 %18 to i8
8708 ; CHECK-NEXT: %20 = insertelement <16 x i8> %17, i8 %19, i32 5
8709 ; CHECK-NEXT: ret <16 x i8> %20
8710
8711 define <6 x i8> @trunc_cast_6xi16_to_6xi8(<6 x i16>) {
8712 %2 = trunc <6 x i16> %0 to <6 x i8>
8713 ret <6 x i8> %2
8714 }
8715 ; CHECK-LABEL: define <16 x i8> @trunc_cast_6xi16_to_6xi8(<8 x i16>)
8716 ; CHECK-NEXT: %2 = extractelement <8 x i16> %0, i32 0
8717 ; CHECK-NEXT: %3 = trunc i16 %2 to i8
8718 ; CHECK-NEXT: %4 = insertelement <16 x i8> undef, i8 %3, i32 0
8719 ; CHECK-NEXT: %5 = extractelement <8 x i16> %0, i32 1
8720 ; CHECK-NEXT: %6 = trunc i16 %5 to i8
8721 ; CHECK-NEXT: %7 = insertelement <16 x i8> %4, i8 %6, i32 1
8722 ; CHECK-NEXT: %8 = extractelement <8 x i16> %0, i32 2
8723 ; CHECK-NEXT: %9 = trunc i16 %8 to i8
8724 ; CHECK-NEXT: %10 = insertelement <16 x i8> %7, i8 %9, i32 2
8725 ; CHECK-NEXT: %11 = extractelement <8 x i16> %0, i32 3
8726 ; CHECK-NEXT: %12 = trunc i16 %11 to i8
8727 ; CHECK-NEXT: %13 = insertelement <16 x i8> %10, i8 %12, i32 3
8728 ; CHECK-NEXT: %14 = extractelement <8 x i16> %0, i32 4
8729 ; CHECK-NEXT: %15 = trunc i16 %14 to i8
8730 ; CHECK-NEXT: %16 = insertelement <16 x i8> %13, i8 %15, i32 4
8731 ; CHECK-NEXT: %17 = extractelement <8 x i16> %0, i32 5
8732 ; CHECK-NEXT: %18 = trunc i16 %17 to i8
8733 ; CHECK-NEXT: %19 = insertelement <16 x i8> %16, i8 %18, i32 5
8734 ; CHECK-NEXT: ret <16 x i8> %19
8735
8736 define <8 x i16> @zext_cast_8xi8_to_8xi16(<8 x i8>) {
8737 %2 = zext <8 x i8> %0 to <8 x i16>
8738 ret <8 x i16> %2
8739 }
8740 ; CHECK-LABEL: define <8 x i16> @zext_cast_8xi8_to_8xi16(<16 x i8>)
8741 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
8742 ; CHECK-NEXT: %3 = zext i8 %2 to i16
8743 ; CHECK-NEXT: %4 = insertelement <8 x i16> undef, i16 %3, i32 0
8744 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
8745 ; CHECK-NEXT: %6 = zext i8 %5 to i16
8746 ; CHECK-NEXT: %7 = insertelement <8 x i16> %4, i16 %6, i32 1
8747 ; CHECK-NEXT: %8 = extractelement <16 x i8> %0, i32 2
8748 ; CHECK-NEXT: %9 = zext i8 %8 to i16
8749 ; CHECK-NEXT: %10 = insertelement <8 x i16> %7, i16 %9, i32 2
8750 ; CHECK-NEXT: %11 = extractelement <16 x i8> %0, i32 3
8751 ; CHECK-NEXT: %12 = zext i8 %11 to i16
8752 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 3
8753 ; CHECK-NEXT: %14 = extractelement <16 x i8> %0, i32 4
8754 ; CHECK-NEXT: %15 = zext i8 %14 to i16
8755 ; CHECK-NEXT: %16 = insertelement <8 x i16> %13, i16 %15, i32 4
8756 ; CHECK-NEXT: %17 = extractelement <16 x i8> %0, i32 5
8757 ; CHECK-NEXT: %18 = zext i8 %17 to i16
8758 ; CHECK-NEXT: %19 = insertelement <8 x i16> %16, i16 %18, i32 5
8759 ; CHECK-NEXT: %20 = extractelement <16 x i8> %0, i32 6
8760 ; CHECK-NEXT: %21 = zext i8 %20 to i16
8761 ; CHECK-NEXT: %22 = insertelement <8 x i16> %19, i16 %21, i32 6
8762 ; CHECK-NEXT: %23 = extractelement <16 x i8> %0, i32 7
8763 ; CHECK-NEXT: %24 = zext i8 %23 to i16
8764 ; CHECK-NEXT: %25 = insertelement <8 x i16> %22, i16 %24, i32 7
8765 ; CHECK-NEXT: ret <8 x i16> %25
8766
8767 define <8 x i32> @zext_cast_8xi8_to_8xi32(<8 x i8>) {
8768 %2 = zext <8 x i8> %0 to <8 x i32>
8769 ret <8 x i32> %2
8770 }
8771 ; CHECK-LABEL: define <4 x i32> @zext_cast_8xi8_to_8xi32(<4 x i32>* nocapture no nnull dereferenceable(16), <16 x i8>)
8772 ; CHECK-NEXT: %3 = extractelement <16 x i8> %1, i32 0
8773 ; CHECK-NEXT: %4 = zext i8 %3 to i32
8774 ; CHECK-NEXT: %5 = insertelement <4 x i32> undef, i32 %4, i32 0
8775 ; CHECK-NEXT: %6 = extractelement <16 x i8> %1, i32 1
8776 ; CHECK-NEXT: %7 = zext i8 %6 to i32
8777 ; CHECK-NEXT: %8 = insertelement <4 x i32> %5, i32 %7, i32 1
8778 ; CHECK-NEXT: %9 = extractelement <16 x i8> %1, i32 2
8779 ; CHECK-NEXT: %10 = zext i8 %9 to i32
8780 ; CHECK-NEXT: %11 = insertelement <4 x i32> %8, i32 %10, i32 2
8781 ; CHECK-NEXT: %12 = extractelement <16 x i8> %1, i32 3
8782 ; CHECK-NEXT: %13 = zext i8 %12 to i32
8783 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 3
8784 ; CHECK-NEXT: %15 = extractelement <16 x i8> %1, i32 4
8785 ; CHECK-NEXT: %16 = zext i8 %15 to i32
8786 ; CHECK-NEXT: %17 = insertelement <4 x i32> undef, i32 %16, i32 0
8787 ; CHECK-NEXT: %18 = extractelement <16 x i8> %1, i32 5
8788 ; CHECK-NEXT: %19 = zext i8 %18 to i32
8789 ; CHECK-NEXT: %20 = insertelement <4 x i32> %17, i32 %19, i32 1
8790 ; CHECK-NEXT: %21 = extractelement <16 x i8> %1, i32 6
8791 ; CHECK-NEXT: %22 = zext i8 %21 to i32
8792 ; CHECK-NEXT: %23 = insertelement <4 x i32> %20, i32 %22, i32 2
8793 ; CHECK-NEXT: %24 = extractelement <16 x i8> %1, i32 7
8794 ; CHECK-NEXT: %25 = zext i8 %24 to i32
8795 ; CHECK-NEXT: %26 = insertelement <4 x i32> %23, i32 %25, i32 3
8796 ; CHECK-NEXT: store <4 x i32> %26, <4 x i32>* %0, align 16
8797 ; CHECK-NEXT: ret <4 x i32> %14
8798
8799 define <8 x i64> @zext_cast_8xi8_to_8xi64(<8 x i8>) {
8800 %2 = zext <8 x i8> %0 to <8 x i64>
8801 ret <8 x i64> %2
8802 }
8803 ; CHECK-LABEL: define <2 x i64> @zext_cast_8xi8_to_8xi64(<2 x i64>* nocapture no nnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <16 x i8>)
8804 ; CHECK-NEXT: %5 = extractelement <16 x i8> %3, i32 0
8805 ; CHECK-NEXT: %6 = zext i8 %5 to i64
8806 ; CHECK-NEXT: %7 = insertelement <2 x i64> undef, i64 %6, i32 0
8807 ; CHECK-NEXT: %8 = extractelement <16 x i8> %3, i32 1
8808 ; CHECK-NEXT: %9 = zext i8 %8 to i64
8809 ; CHECK-NEXT: %10 = insertelement <2 x i64> %7, i64 %9, i32 1
8810 ; CHECK-NEXT: %11 = extractelement <16 x i8> %3, i32 2
8811 ; CHECK-NEXT: %12 = zext i8 %11 to i64
8812 ; CHECK-NEXT: %13 = insertelement <2 x i64> undef, i64 %12, i32 0
8813 ; CHECK-NEXT: %14 = extractelement <16 x i8> %3, i32 3
8814 ; CHECK-NEXT: %15 = zext i8 %14 to i64
8815 ; CHECK-NEXT: %16 = insertelement <2 x i64> %13, i64 %15, i32 1
8816 ; CHECK-NEXT: %17 = extractelement <16 x i8> %3, i32 4
8817 ; CHECK-NEXT: %18 = zext i8 %17 to i64
8818 ; CHECK-NEXT: %19 = insertelement <2 x i64> undef, i64 %18, i32 0
8819 ; CHECK-NEXT: %20 = extractelement <16 x i8> %3, i32 5
8820 ; CHECK-NEXT: %21 = zext i8 %20 to i64
8821 ; CHECK-NEXT: %22 = insertelement <2 x i64> %19, i64 %21, i32 1
8822 ; CHECK-NEXT: %23 = extractelement <16 x i8> %3, i32 6
8823 ; CHECK-NEXT: %24 = zext i8 %23 to i64
8824 ; CHECK-NEXT: %25 = insertelement <2 x i64> undef, i64 %24, i32 0
8825 ; CHECK-NEXT: %26 = extractelement <16 x i8> %3, i32 7
8826 ; CHECK-NEXT: %27 = zext i8 %26 to i64
8827 ; CHECK-NEXT: %28 = insertelement <2 x i64> %25, i64 %27, i32 1
8828 ; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %0, align 16
8829 ; CHECK-NEXT: store <2 x i64> %22, <2 x i64>* %1, align 16
8830 ; CHECK-NEXT: store <2 x i64> %28, <2 x i64>* %2, align 16
8831 ; CHECK-NEXT: ret <2 x i64> %10
8832
8833 define <8 x i32> @zext_cast_8xi16_to_8xi32(<8 x i16>) {
8834 %2 = zext <8 x i16> %0 to <8 x i32>
8835 ret <8 x i32> %2
8836 }
8837 ; CHECK-LABEL: define <4 x i32> @zext_cast_8xi16_to_8xi32(<4 x i32>* nocapture n onnull dereferenceable(16), <8 x i16>)
8838 ; CHECK-NEXT: %3 = extractelement <8 x i16> %1, i32 0
8839 ; CHECK-NEXT: %4 = zext i16 %3 to i32
8840 ; CHECK-NEXT: %5 = insertelement <4 x i32> undef, i32 %4, i32 0
8841 ; CHECK-NEXT: %6 = extractelement <8 x i16> %1, i32 1
8842 ; CHECK-NEXT: %7 = zext i16 %6 to i32
8843 ; CHECK-NEXT: %8 = insertelement <4 x i32> %5, i32 %7, i32 1
8844 ; CHECK-NEXT: %9 = extractelement <8 x i16> %1, i32 2
8845 ; CHECK-NEXT: %10 = zext i16 %9 to i32
8846 ; CHECK-NEXT: %11 = insertelement <4 x i32> %8, i32 %10, i32 2
8847 ; CHECK-NEXT: %12 = extractelement <8 x i16> %1, i32 3
8848 ; CHECK-NEXT: %13 = zext i16 %12 to i32
8849 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 3
8850 ; CHECK-NEXT: %15 = extractelement <8 x i16> %1, i32 4
8851 ; CHECK-NEXT: %16 = zext i16 %15 to i32
8852 ; CHECK-NEXT: %17 = insertelement <4 x i32> undef, i32 %16, i32 0
8853 ; CHECK-NEXT: %18 = extractelement <8 x i16> %1, i32 5
8854 ; CHECK-NEXT: %19 = zext i16 %18 to i32
8855 ; CHECK-NEXT: %20 = insertelement <4 x i32> %17, i32 %19, i32 1
8856 ; CHECK-NEXT: %21 = extractelement <8 x i16> %1, i32 6
8857 ; CHECK-NEXT: %22 = zext i16 %21 to i32
8858 ; CHECK-NEXT: %23 = insertelement <4 x i32> %20, i32 %22, i32 2
8859 ; CHECK-NEXT: %24 = extractelement <8 x i16> %1, i32 7
8860 ; CHECK-NEXT: %25 = zext i16 %24 to i32
8861 ; CHECK-NEXT: %26 = insertelement <4 x i32> %23, i32 %25, i32 3
8862 ; CHECK-NEXT: store <4 x i32> %26, <4 x i32>* %0, align 16
8863 ; CHECK-NEXT: ret <4 x i32> %14
8864
8865 define <8 x i64> @zext_cast_8xi16_to_8xi64(<8 x i16>) {
8866 %2 = zext <8 x i16> %0 to <8 x i64>
8867 ret <8 x i64> %2
8868 }
8869 ; CHECK-LABEL: define <2 x i64> @zext_cast_8xi16_to_8xi64(<2 x i64>* nocapture n onnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <8 x i16>)
8870 ; CHECK-NEXT: %5 = extractelement <8 x i16> %3, i32 0
8871 ; CHECK-NEXT: %6 = zext i16 %5 to i64
8872 ; CHECK-NEXT: %7 = insertelement <2 x i64> undef, i64 %6, i32 0
8873 ; CHECK-NEXT: %8 = extractelement <8 x i16> %3, i32 1
8874 ; CHECK-NEXT: %9 = zext i16 %8 to i64
8875 ; CHECK-NEXT: %10 = insertelement <2 x i64> %7, i64 %9, i32 1
8876 ; CHECK-NEXT: %11 = extractelement <8 x i16> %3, i32 2
8877 ; CHECK-NEXT: %12 = zext i16 %11 to i64
8878 ; CHECK-NEXT: %13 = insertelement <2 x i64> undef, i64 %12, i32 0
8879 ; CHECK-NEXT: %14 = extractelement <8 x i16> %3, i32 3
8880 ; CHECK-NEXT: %15 = zext i16 %14 to i64
8881 ; CHECK-NEXT: %16 = insertelement <2 x i64> %13, i64 %15, i32 1
8882 ; CHECK-NEXT: %17 = extractelement <8 x i16> %3, i32 4
8883 ; CHECK-NEXT: %18 = zext i16 %17 to i64
8884 ; CHECK-NEXT: %19 = insertelement <2 x i64> undef, i64 %18, i32 0
8885 ; CHECK-NEXT: %20 = extractelement <8 x i16> %3, i32 5
8886 ; CHECK-NEXT: %21 = zext i16 %20 to i64
8887 ; CHECK-NEXT: %22 = insertelement <2 x i64> %19, i64 %21, i32 1
8888 ; CHECK-NEXT: %23 = extractelement <8 x i16> %3, i32 6
8889 ; CHECK-NEXT: %24 = zext i16 %23 to i64
8890 ; CHECK-NEXT: %25 = insertelement <2 x i64> undef, i64 %24, i32 0
8891 ; CHECK-NEXT: %26 = extractelement <8 x i16> %3, i32 7
8892 ; CHECK-NEXT: %27 = zext i16 %26 to i64
8893 ; CHECK-NEXT: %28 = insertelement <2 x i64> %25, i64 %27, i32 1
8894 ; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %0, align 16
8895 ; CHECK-NEXT: store <2 x i64> %22, <2 x i64>* %1, align 16
8896 ; CHECK-NEXT: store <2 x i64> %28, <2 x i64>* %2, align 16
8897 ; CHECK-NEXT: ret <2 x i64> %10
8898
8899 define <8 x i64> @zext_cast_8xi32_to_8xi64(<8 x i32>) {
8900 %2 = zext <8 x i32> %0 to <8 x i64>
8901 ret <8 x i64> %2
8902 }
8903 ; CHECK-LABEL: define <2 x i64> @zext_cast_8xi32_to_8xi64(<2 x i64>* nocapture n onnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>)
8904 ; CHECK-NEXT: %6 = extractelement <4 x i32> %3, i32 0
8905 ; CHECK-NEXT: %7 = zext i32 %6 to i64
8906 ; CHECK-NEXT: %8 = insertelement <2 x i64> undef, i64 %7, i32 0
8907 ; CHECK-NEXT: %9 = extractelement <4 x i32> %3, i32 1
8908 ; CHECK-NEXT: %10 = zext i32 %9 to i64
8909 ; CHECK-NEXT: %11 = insertelement <2 x i64> %8, i64 %10, i32 1
8910 ; CHECK-NEXT: %12 = extractelement <4 x i32> %3, i32 2
8911 ; CHECK-NEXT: %13 = zext i32 %12 to i64
8912 ; CHECK-NEXT: %14 = insertelement <2 x i64> undef, i64 %13, i32 0
8913 ; CHECK-NEXT: %15 = extractelement <4 x i32> %3, i32 3
8914 ; CHECK-NEXT: %16 = zext i32 %15 to i64
8915 ; CHECK-NEXT: %17 = insertelement <2 x i64> %14, i64 %16, i32 1
8916 ; CHECK-NEXT: %18 = extractelement <4 x i32> %4, i32 0
8917 ; CHECK-NEXT: %19 = zext i32 %18 to i64
8918 ; CHECK-NEXT: %20 = insertelement <2 x i64> undef, i64 %19, i32 0
8919 ; CHECK-NEXT: %21 = extractelement <4 x i32> %4, i32 1
8920 ; CHECK-NEXT: %22 = zext i32 %21 to i64
8921 ; CHECK-NEXT: %23 = insertelement <2 x i64> %20, i64 %22, i32 1
8922 ; CHECK-NEXT: %24 = extractelement <4 x i32> %4, i32 2
8923 ; CHECK-NEXT: %25 = zext i32 %24 to i64
8924 ; CHECK-NEXT: %26 = insertelement <2 x i64> undef, i64 %25, i32 0
8925 ; CHECK-NEXT: %27 = extractelement <4 x i32> %4, i32 3
8926 ; CHECK-NEXT: %28 = zext i32 %27 to i64
8927 ; CHECK-NEXT: %29 = insertelement <2 x i64> %26, i64 %28, i32 1
8928 ; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %0, align 16
8929 ; CHECK-NEXT: store <2 x i64> %23, <2 x i64>* %1, align 16
8930 ; CHECK-NEXT: store <2 x i64> %29, <2 x i64>* %2, align 16
8931 ; CHECK-NEXT: ret <2 x i64> %11
8932
8933 define <8 x i16> @sext_cast_8xi8_to_8xi16(<8 x i8>) {
8934 %2 = sext <8 x i8> %0 to <8 x i16>
8935 ret <8 x i16> %2
8936 }
8937 ; CHECK-LABEL: define <8 x i16> @sext_cast_8xi8_to_8xi16(<16 x i8>)
8938 ; CHECK-NEXT: %2 = extractelement <16 x i8> %0, i32 0
8939 ; CHECK-NEXT: %3 = sext i8 %2 to i16
8940 ; CHECK-NEXT: %4 = insertelement <8 x i16> undef, i16 %3, i32 0
8941 ; CHECK-NEXT: %5 = extractelement <16 x i8> %0, i32 1
8942 ; CHECK-NEXT: %6 = sext i8 %5 to i16
8943 ; CHECK-NEXT: %7 = insertelement <8 x i16> %4, i16 %6, i32 1
8944 ; CHECK-NEXT: %8 = extractelement <16 x i8> %0, i32 2
8945 ; CHECK-NEXT: %9 = sext i8 %8 to i16
8946 ; CHECK-NEXT: %10 = insertelement <8 x i16> %7, i16 %9, i32 2
8947 ; CHECK-NEXT: %11 = extractelement <16 x i8> %0, i32 3
8948 ; CHECK-NEXT: %12 = sext i8 %11 to i16
8949 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 3
8950 ; CHECK-NEXT: %14 = extractelement <16 x i8> %0, i32 4
8951 ; CHECK-NEXT: %15 = sext i8 %14 to i16
8952 ; CHECK-NEXT: %16 = insertelement <8 x i16> %13, i16 %15, i32 4
8953 ; CHECK-NEXT: %17 = extractelement <16 x i8> %0, i32 5
8954 ; CHECK-NEXT: %18 = sext i8 %17 to i16
8955 ; CHECK-NEXT: %19 = insertelement <8 x i16> %16, i16 %18, i32 5
8956 ; CHECK-NEXT: %20 = extractelement <16 x i8> %0, i32 6
8957 ; CHECK-NEXT: %21 = sext i8 %20 to i16
8958 ; CHECK-NEXT: %22 = insertelement <8 x i16> %19, i16 %21, i32 6
8959 ; CHECK-NEXT: %23 = extractelement <16 x i8> %0, i32 7
8960 ; CHECK-NEXT: %24 = sext i8 %23 to i16
8961 ; CHECK-NEXT: %25 = insertelement <8 x i16> %22, i16 %24, i32 7
8962 ; CHECK-NEXT: ret <8 x i16> %25
8963
8964 define <8 x i32> @sext_cast_8xi8_to_8xi32(<8 x i8>) {
8965 %2 = sext <8 x i8> %0 to <8 x i32>
8966 ret <8 x i32> %2
8967 }
8968 ; CHECK-LABEL: define <4 x i32> @sext_cast_8xi8_to_8xi32(<4 x i32>* nocapture no nnull dereferenceable(16), <16 x i8>)
8969 ; CHECK-NEXT: %3 = extractelement <16 x i8> %1, i32 0
8970 ; CHECK-NEXT: %4 = sext i8 %3 to i32
8971 ; CHECK-NEXT: %5 = insertelement <4 x i32> undef, i32 %4, i32 0
8972 ; CHECK-NEXT: %6 = extractelement <16 x i8> %1, i32 1
8973 ; CHECK-NEXT: %7 = sext i8 %6 to i32
8974 ; CHECK-NEXT: %8 = insertelement <4 x i32> %5, i32 %7, i32 1
8975 ; CHECK-NEXT: %9 = extractelement <16 x i8> %1, i32 2
8976 ; CHECK-NEXT: %10 = sext i8 %9 to i32
8977 ; CHECK-NEXT: %11 = insertelement <4 x i32> %8, i32 %10, i32 2
8978 ; CHECK-NEXT: %12 = extractelement <16 x i8> %1, i32 3
8979 ; CHECK-NEXT: %13 = sext i8 %12 to i32
8980 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 3
8981 ; CHECK-NEXT: %15 = extractelement <16 x i8> %1, i32 4
8982 ; CHECK-NEXT: %16 = sext i8 %15 to i32
8983 ; CHECK-NEXT: %17 = insertelement <4 x i32> undef, i32 %16, i32 0
8984 ; CHECK-NEXT: %18 = extractelement <16 x i8> %1, i32 5
8985 ; CHECK-NEXT: %19 = sext i8 %18 to i32
8986 ; CHECK-NEXT: %20 = insertelement <4 x i32> %17, i32 %19, i32 1
8987 ; CHECK-NEXT: %21 = extractelement <16 x i8> %1, i32 6
8988 ; CHECK-NEXT: %22 = sext i8 %21 to i32
8989 ; CHECK-NEXT: %23 = insertelement <4 x i32> %20, i32 %22, i32 2
8990 ; CHECK-NEXT: %24 = extractelement <16 x i8> %1, i32 7
8991 ; CHECK-NEXT: %25 = sext i8 %24 to i32
8992 ; CHECK-NEXT: %26 = insertelement <4 x i32> %23, i32 %25, i32 3
8993 ; CHECK-NEXT: store <4 x i32> %26, <4 x i32>* %0, align 16
8994 ; CHECK-NEXT: ret <4 x i32> %14
8995
8996 define <8 x i64> @sext_cast_8xi8_to_8xi64(<8 x i8>) {
8997 %2 = sext <8 x i8> %0 to <8 x i64>
8998 ret <8 x i64> %2
8999 }
9000 ; CHECK-LABEL: define <2 x i64> @sext_cast_8xi8_to_8xi64(<2 x i64>* nocapture no nnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <16 x i8>)
9001 ; CHECK-NEXT: %5 = extractelement <16 x i8> %3, i32 0
9002 ; CHECK-NEXT: %6 = sext i8 %5 to i64
9003 ; CHECK-NEXT: %7 = insertelement <2 x i64> undef, i64 %6, i32 0
9004 ; CHECK-NEXT: %8 = extractelement <16 x i8> %3, i32 1
9005 ; CHECK-NEXT: %9 = sext i8 %8 to i64
9006 ; CHECK-NEXT: %10 = insertelement <2 x i64> %7, i64 %9, i32 1
9007 ; CHECK-NEXT: %11 = extractelement <16 x i8> %3, i32 2
9008 ; CHECK-NEXT: %12 = sext i8 %11 to i64
9009 ; CHECK-NEXT: %13 = insertelement <2 x i64> undef, i64 %12, i32 0
9010 ; CHECK-NEXT: %14 = extractelement <16 x i8> %3, i32 3
9011 ; CHECK-NEXT: %15 = sext i8 %14 to i64
9012 ; CHECK-NEXT: %16 = insertelement <2 x i64> %13, i64 %15, i32 1
9013 ; CHECK-NEXT: %17 = extractelement <16 x i8> %3, i32 4
9014 ; CHECK-NEXT: %18 = sext i8 %17 to i64
9015 ; CHECK-NEXT: %19 = insertelement <2 x i64> undef, i64 %18, i32 0
9016 ; CHECK-NEXT: %20 = extractelement <16 x i8> %3, i32 5
9017 ; CHECK-NEXT: %21 = sext i8 %20 to i64
9018 ; CHECK-NEXT: %22 = insertelement <2 x i64> %19, i64 %21, i32 1
9019 ; CHECK-NEXT: %23 = extractelement <16 x i8> %3, i32 6
9020 ; CHECK-NEXT: %24 = sext i8 %23 to i64
9021 ; CHECK-NEXT: %25 = insertelement <2 x i64> undef, i64 %24, i32 0
9022 ; CHECK-NEXT: %26 = extractelement <16 x i8> %3, i32 7
9023 ; CHECK-NEXT: %27 = sext i8 %26 to i64
9024 ; CHECK-NEXT: %28 = insertelement <2 x i64> %25, i64 %27, i32 1
9025 ; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %0, align 16
9026 ; CHECK-NEXT: store <2 x i64> %22, <2 x i64>* %1, align 16
9027 ; CHECK-NEXT: store <2 x i64> %28, <2 x i64>* %2, align 16
9028 ; CHECK-NEXT: ret <2 x i64> %10
9029
9030 define <8 x i32> @sext_cast_8xi16_to_8xi32(<8 x i16>) {
9031 %2 = sext <8 x i16> %0 to <8 x i32>
9032 ret <8 x i32> %2
9033 }
9034 ; CHECK-LABEL: define <4 x i32> @sext_cast_8xi16_to_8xi32(<4 x i32>* nocapture n onnull dereferenceable(16), <8 x i16>)
9035 ; CHECK-NEXT: %3 = extractelement <8 x i16> %1, i32 0
9036 ; CHECK-NEXT: %4 = sext i16 %3 to i32
9037 ; CHECK-NEXT: %5 = insertelement <4 x i32> undef, i32 %4, i32 0
9038 ; CHECK-NEXT: %6 = extractelement <8 x i16> %1, i32 1
9039 ; CHECK-NEXT: %7 = sext i16 %6 to i32
9040 ; CHECK-NEXT: %8 = insertelement <4 x i32> %5, i32 %7, i32 1
9041 ; CHECK-NEXT: %9 = extractelement <8 x i16> %1, i32 2
9042 ; CHECK-NEXT: %10 = sext i16 %9 to i32
9043 ; CHECK-NEXT: %11 = insertelement <4 x i32> %8, i32 %10, i32 2
9044 ; CHECK-NEXT: %12 = extractelement <8 x i16> %1, i32 3
9045 ; CHECK-NEXT: %13 = sext i16 %12 to i32
9046 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 3
9047 ; CHECK-NEXT: %15 = extractelement <8 x i16> %1, i32 4
9048 ; CHECK-NEXT: %16 = sext i16 %15 to i32
9049 ; CHECK-NEXT: %17 = insertelement <4 x i32> undef, i32 %16, i32 0
9050 ; CHECK-NEXT: %18 = extractelement <8 x i16> %1, i32 5
9051 ; CHECK-NEXT: %19 = sext i16 %18 to i32
9052 ; CHECK-NEXT: %20 = insertelement <4 x i32> %17, i32 %19, i32 1
9053 ; CHECK-NEXT: %21 = extractelement <8 x i16> %1, i32 6
9054 ; CHECK-NEXT: %22 = sext i16 %21 to i32
9055 ; CHECK-NEXT: %23 = insertelement <4 x i32> %20, i32 %22, i32 2
9056 ; CHECK-NEXT: %24 = extractelement <8 x i16> %1, i32 7
9057 ; CHECK-NEXT: %25 = sext i16 %24 to i32
9058 ; CHECK-NEXT: %26 = insertelement <4 x i32> %23, i32 %25, i32 3
9059 ; CHECK-NEXT: store <4 x i32> %26, <4 x i32>* %0, align 16
9060 ; CHECK-NEXT: ret <4 x i32> %14
9061
9062 define <8 x i64> @sext_cast_8xi16_to_8xi64(<8 x i16>) {
9063 %2 = sext <8 x i16> %0 to <8 x i64>
9064 ret <8 x i64> %2
9065 }
9066 ; CHECK-LABEL: define <2 x i64> @sext_cast_8xi16_to_8xi64(<2 x i64>* nocapture n onnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <8 x i16>)
9067 ; CHECK-NEXT: %5 = extractelement <8 x i16> %3, i32 0
9068 ; CHECK-NEXT: %6 = sext i16 %5 to i64
9069 ; CHECK-NEXT: %7 = insertelement <2 x i64> undef, i64 %6, i32 0
9070 ; CHECK-NEXT: %8 = extractelement <8 x i16> %3, i32 1
9071 ; CHECK-NEXT: %9 = sext i16 %8 to i64
9072 ; CHECK-NEXT: %10 = insertelement <2 x i64> %7, i64 %9, i32 1
9073 ; CHECK-NEXT: %11 = extractelement <8 x i16> %3, i32 2
9074 ; CHECK-NEXT: %12 = sext i16 %11 to i64
9075 ; CHECK-NEXT: %13 = insertelement <2 x i64> undef, i64 %12, i32 0
9076 ; CHECK-NEXT: %14 = extractelement <8 x i16> %3, i32 3
9077 ; CHECK-NEXT: %15 = sext i16 %14 to i64
9078 ; CHECK-NEXT: %16 = insertelement <2 x i64> %13, i64 %15, i32 1
9079 ; CHECK-NEXT: %17 = extractelement <8 x i16> %3, i32 4
9080 ; CHECK-NEXT: %18 = sext i16 %17 to i64
9081 ; CHECK-NEXT: %19 = insertelement <2 x i64> undef, i64 %18, i32 0
9082 ; CHECK-NEXT: %20 = extractelement <8 x i16> %3, i32 5
9083 ; CHECK-NEXT: %21 = sext i16 %20 to i64
9084 ; CHECK-NEXT: %22 = insertelement <2 x i64> %19, i64 %21, i32 1
9085 ; CHECK-NEXT: %23 = extractelement <8 x i16> %3, i32 6
9086 ; CHECK-NEXT: %24 = sext i16 %23 to i64
9087 ; CHECK-NEXT: %25 = insertelement <2 x i64> undef, i64 %24, i32 0
9088 ; CHECK-NEXT: %26 = extractelement <8 x i16> %3, i32 7
9089 ; CHECK-NEXT: %27 = sext i16 %26 to i64
9090 ; CHECK-NEXT: %28 = insertelement <2 x i64> %25, i64 %27, i32 1
9091 ; CHECK-NEXT: store <2 x i64> %16, <2 x i64>* %0, align 16
9092 ; CHECK-NEXT: store <2 x i64> %22, <2 x i64>* %1, align 16
9093 ; CHECK-NEXT: store <2 x i64> %28, <2 x i64>* %2, align 16
9094 ; CHECK-NEXT: ret <2 x i64> %10
9095
9096 define <8 x i64> @sext_cast_8xi32_to_8xi64(<8 x i32>) {
9097 %2 = sext <8 x i32> %0 to <8 x i64>
9098 ret <8 x i64> %2
9099 }
9100 ; CHECK-LABEL: define <2 x i64> @sext_cast_8xi32_to_8xi64(<2 x i64>* nocapture n onnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>)
9101 ; CHECK-NEXT: %6 = extractelement <4 x i32> %3, i32 0
9102 ; CHECK-NEXT: %7 = sext i32 %6 to i64
9103 ; CHECK-NEXT: %8 = insertelement <2 x i64> undef, i64 %7, i32 0
9104 ; CHECK-NEXT: %9 = extractelement <4 x i32> %3, i32 1
9105 ; CHECK-NEXT: %10 = sext i32 %9 to i64
9106 ; CHECK-NEXT: %11 = insertelement <2 x i64> %8, i64 %10, i32 1
9107 ; CHECK-NEXT: %12 = extractelement <4 x i32> %3, i32 2
9108 ; CHECK-NEXT: %13 = sext i32 %12 to i64
9109 ; CHECK-NEXT: %14 = insertelement <2 x i64> undef, i64 %13, i32 0
9110 ; CHECK-NEXT: %15 = extractelement <4 x i32> %3, i32 3
9111 ; CHECK-NEXT: %16 = sext i32 %15 to i64
9112 ; CHECK-NEXT: %17 = insertelement <2 x i64> %14, i64 %16, i32 1
9113 ; CHECK-NEXT: %18 = extractelement <4 x i32> %4, i32 0
9114 ; CHECK-NEXT: %19 = sext i32 %18 to i64
9115 ; CHECK-NEXT: %20 = insertelement <2 x i64> undef, i64 %19, i32 0
9116 ; CHECK-NEXT: %21 = extractelement <4 x i32> %4, i32 1
9117 ; CHECK-NEXT: %22 = sext i32 %21 to i64
9118 ; CHECK-NEXT: %23 = insertelement <2 x i64> %20, i64 %22, i32 1
9119 ; CHECK-NEXT: %24 = extractelement <4 x i32> %4, i32 2
9120 ; CHECK-NEXT: %25 = sext i32 %24 to i64
9121 ; CHECK-NEXT: %26 = insertelement <2 x i64> undef, i64 %25, i32 0
9122 ; CHECK-NEXT: %27 = extractelement <4 x i32> %4, i32 3
9123 ; CHECK-NEXT: %28 = sext i32 %27 to i64
9124 ; CHECK-NEXT: %29 = insertelement <2 x i64> %26, i64 %28, i32 1
9125 ; CHECK-NEXT: store <2 x i64> %17, <2 x i64>* %0, align 16
9126 ; CHECK-NEXT: store <2 x i64> %23, <2 x i64>* %1, align 16
9127 ; CHECK-NEXT: store <2 x i64> %29, <2 x i64>* %2, align 16
9128 ; CHECK-NEXT: ret <2 x i64> %11
9129
9130 define <8 x i32> @trunc_cast_8xi64_to_8xi32(<8 x i64>) {
9131 %2 = trunc <8 x i64> %0 to <8 x i32>
9132 ret <8 x i32> %2
9133 }
9134 ; CHECK-LABEL: define <4 x i32> @trunc_cast_8xi64_to_8xi32(<4 x i32>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
9135 ; CHECK-NEXT: %6 = extractelement <2 x i64> %1, i32 0
9136 ; CHECK-NEXT: %7 = trunc i64 %6 to i32
9137 ; CHECK-NEXT: %8 = insertelement <4 x i32> undef, i32 %7, i32 0
9138 ; CHECK-NEXT: %9 = extractelement <2 x i64> %1, i32 1
9139 ; CHECK-NEXT: %10 = trunc i64 %9 to i32
9140 ; CHECK-NEXT: %11 = insertelement <4 x i32> %8, i32 %10, i32 1
9141 ; CHECK-NEXT: %12 = extractelement <2 x i64> %2, i32 0
9142 ; CHECK-NEXT: %13 = trunc i64 %12 to i32
9143 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 2
9144 ; CHECK-NEXT: %15 = extractelement <2 x i64> %2, i32 1
9145 ; CHECK-NEXT: %16 = trunc i64 %15 to i32
9146 ; CHECK-NEXT: %17 = insertelement <4 x i32> %14, i32 %16, i32 3
9147 ; CHECK-NEXT: %18 = extractelement <2 x i64> %3, i32 0
9148 ; CHECK-NEXT: %19 = trunc i64 %18 to i32
9149 ; CHECK-NEXT: %20 = insertelement <4 x i32> undef, i32 %19, i32 0
9150 ; CHECK-NEXT: %21 = extractelement <2 x i64> %3, i32 1
9151 ; CHECK-NEXT: %22 = trunc i64 %21 to i32
9152 ; CHECK-NEXT: %23 = insertelement <4 x i32> %20, i32 %22, i32 1
9153 ; CHECK-NEXT: %24 = extractelement <2 x i64> %4, i32 0
9154 ; CHECK-NEXT: %25 = trunc i64 %24 to i32
9155 ; CHECK-NEXT: %26 = insertelement <4 x i32> %23, i32 %25, i32 2
9156 ; CHECK-NEXT: %27 = extractelement <2 x i64> %4, i32 1
9157 ; CHECK-NEXT: %28 = trunc i64 %27 to i32
9158 ; CHECK-NEXT: %29 = insertelement <4 x i32> %26, i32 %28, i32 3
9159 ; CHECK-NEXT: store <4 x i32> %29, <4 x i32>* %0, align 16
9160 ; CHECK-NEXT: ret <4 x i32> %17
9161
9162 define <8 x i16> @trunc_cast_8xi64_to_8xi16(<8 x i64>) {
9163 %2 = trunc <8 x i64> %0 to <8 x i16>
9164 ret <8 x i16> %2
9165 }
9166 ; CHECK-LABEL: define <8 x i16> @trunc_cast_8xi64_to_8xi16(<2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
9167 ; CHECK-NEXT: %5 = extractelement <2 x i64> %0, i32 0
9168 ; CHECK-NEXT: %6 = trunc i64 %5 to i16
9169 ; CHECK-NEXT: %7 = insertelement <8 x i16> undef, i16 %6, i32 0
9170 ; CHECK-NEXT: %8 = extractelement <2 x i64> %0, i32 1
9171 ; CHECK-NEXT: %9 = trunc i64 %8 to i16
9172 ; CHECK-NEXT: %10 = insertelement <8 x i16> %7, i16 %9, i32 1
9173 ; CHECK-NEXT: %11 = extractelement <2 x i64> %1, i32 0
9174 ; CHECK-NEXT: %12 = trunc i64 %11 to i16
9175 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 2
9176 ; CHECK-NEXT: %14 = extractelement <2 x i64> %1, i32 1
9177 ; CHECK-NEXT: %15 = trunc i64 %14 to i16
9178 ; CHECK-NEXT: %16 = insertelement <8 x i16> %13, i16 %15, i32 3
9179 ; CHECK-NEXT: %17 = extractelement <2 x i64> %2, i32 0
9180 ; CHECK-NEXT: %18 = trunc i64 %17 to i16
9181 ; CHECK-NEXT: %19 = insertelement <8 x i16> %16, i16 %18, i32 4
9182 ; CHECK-NEXT: %20 = extractelement <2 x i64> %2, i32 1
9183 ; CHECK-NEXT: %21 = trunc i64 %20 to i16
9184 ; CHECK-NEXT: %22 = insertelement <8 x i16> %19, i16 %21, i32 5
9185 ; CHECK-NEXT: %23 = extractelement <2 x i64> %3, i32 0
9186 ; CHECK-NEXT: %24 = trunc i64 %23 to i16
9187 ; CHECK-NEXT: %25 = insertelement <8 x i16> %22, i16 %24, i32 6
9188 ; CHECK-NEXT: %26 = extractelement <2 x i64> %3, i32 1
9189 ; CHECK-NEXT: %27 = trunc i64 %26 to i16
9190 ; CHECK-NEXT: %28 = insertelement <8 x i16> %25, i16 %27, i32 7
9191 ; CHECK-NEXT: ret <8 x i16> %28
9192
9193 define <8 x i8> @trunc_cast_8xi64_to_8xi8(<8 x i64>) {
9194 %2 = trunc <8 x i64> %0 to <8 x i8>
9195 ret <8 x i8> %2
9196 }
9197 ; CHECK-LABEL: define <16 x i8> @trunc_cast_8xi64_to_8xi8(<2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
9198 ; CHECK-NEXT: %5 = extractelement <2 x i64> %0, i32 0
9199 ; CHECK-NEXT: %6 = trunc i64 %5 to i8
9200 ; CHECK-NEXT: %7 = insertelement <16 x i8> undef, i8 %6, i32 0
9201 ; CHECK-NEXT: %8 = extractelement <2 x i64> %0, i32 1
9202 ; CHECK-NEXT: %9 = trunc i64 %8 to i8
9203 ; CHECK-NEXT: %10 = insertelement <16 x i8> %7, i8 %9, i32 1
9204 ; CHECK-NEXT: %11 = extractelement <2 x i64> %1, i32 0
9205 ; CHECK-NEXT: %12 = trunc i64 %11 to i8
9206 ; CHECK-NEXT: %13 = insertelement <16 x i8> %10, i8 %12, i32 2
9207 ; CHECK-NEXT: %14 = extractelement <2 x i64> %1, i32 1
9208 ; CHECK-NEXT: %15 = trunc i64 %14 to i8
9209 ; CHECK-NEXT: %16 = insertelement <16 x i8> %13, i8 %15, i32 3
9210 ; CHECK-NEXT: %17 = extractelement <2 x i64> %2, i32 0
9211 ; CHECK-NEXT: %18 = trunc i64 %17 to i8
9212 ; CHECK-NEXT: %19 = insertelement <16 x i8> %16, i8 %18, i32 4
9213 ; CHECK-NEXT: %20 = extractelement <2 x i64> %2, i32 1
9214 ; CHECK-NEXT: %21 = trunc i64 %20 to i8
9215 ; CHECK-NEXT: %22 = insertelement <16 x i8> %19, i8 %21, i32 5
9216 ; CHECK-NEXT: %23 = extractelement <2 x i64> %3, i32 0
9217 ; CHECK-NEXT: %24 = trunc i64 %23 to i8
9218 ; CHECK-NEXT: %25 = insertelement <16 x i8> %22, i8 %24, i32 6
9219 ; CHECK-NEXT: %26 = extractelement <2 x i64> %3, i32 1
9220 ; CHECK-NEXT: %27 = trunc i64 %26 to i8
9221 ; CHECK-NEXT: %28 = insertelement <16 x i8> %25, i8 %27, i32 7
9222 ; CHECK-NEXT: ret <16 x i8> %28
9223
9224 define <8 x i16> @trunc_cast_8xi32_to_8xi16(<8 x i32>) {
9225 %2 = trunc <8 x i32> %0 to <8 x i16>
9226 ret <8 x i16> %2
9227 }
9228 ; CHECK-LABEL: define <8 x i16> @trunc_cast_8xi32_to_8xi16(<4 x i32>, <4 x i32>)
9229 ; CHECK-NEXT: %3 = extractelement <4 x i32> %0, i32 0
9230 ; CHECK-NEXT: %4 = trunc i32 %3 to i16
9231 ; CHECK-NEXT: %5 = insertelement <8 x i16> undef, i16 %4, i32 0
9232 ; CHECK-NEXT: %6 = extractelement <4 x i32> %0, i32 1
9233 ; CHECK-NEXT: %7 = trunc i32 %6 to i16
9234 ; CHECK-NEXT: %8 = insertelement <8 x i16> %5, i16 %7, i32 1
9235 ; CHECK-NEXT: %9 = extractelement <4 x i32> %0, i32 2
9236 ; CHECK-NEXT: %10 = trunc i32 %9 to i16
9237 ; CHECK-NEXT: %11 = insertelement <8 x i16> %8, i16 %10, i32 2
9238 ; CHECK-NEXT: %12 = extractelement <4 x i32> %0, i32 3
9239 ; CHECK-NEXT: %13 = trunc i32 %12 to i16
9240 ; CHECK-NEXT: %14 = insertelement <8 x i16> %11, i16 %13, i32 3
9241 ; CHECK-NEXT: %15 = extractelement <4 x i32> %1, i32 0
9242 ; CHECK-NEXT: %16 = trunc i32 %15 to i16
9243 ; CHECK-NEXT: %17 = insertelement <8 x i16> %14, i16 %16, i32 4
9244 ; CHECK-NEXT: %18 = extractelement <4 x i32> %1, i32 1
9245 ; CHECK-NEXT: %19 = trunc i32 %18 to i16
9246 ; CHECK-NEXT: %20 = insertelement <8 x i16> %17, i16 %19, i32 5
9247 ; CHECK-NEXT: %21 = extractelement <4 x i32> %1, i32 2
9248 ; CHECK-NEXT: %22 = trunc i32 %21 to i16
9249 ; CHECK-NEXT: %23 = insertelement <8 x i16> %20, i16 %22, i32 6
9250 ; CHECK-NEXT: %24 = extractelement <4 x i32> %1, i32 3
9251 ; CHECK-NEXT: %25 = trunc i32 %24 to i16
9252 ; CHECK-NEXT: %26 = insertelement <8 x i16> %23, i16 %25, i32 7
9253 ; CHECK-NEXT: ret <8 x i16> %26
9254
9255 define <8 x i8> @trunc_cast_8xi32_to_8xi8(<8 x i32>) {
9256 %2 = trunc <8 x i32> %0 to <8 x i8>
9257 ret <8 x i8> %2
9258 }
9259 ; CHECK-LABEL: define <16 x i8> @trunc_cast_8xi32_to_8xi8(<4 x i32>, <4 x i32>)
9260 ; CHECK-NEXT: %3 = extractelement <4 x i32> %0, i32 0
9261 ; CHECK-NEXT: %4 = trunc i32 %3 to i8
9262 ; CHECK-NEXT: %5 = insertelement <16 x i8> undef, i8 %4, i32 0
9263 ; CHECK-NEXT: %6 = extractelement <4 x i32> %0, i32 1
9264 ; CHECK-NEXT: %7 = trunc i32 %6 to i8
9265 ; CHECK-NEXT: %8 = insertelement <16 x i8> %5, i8 %7, i32 1
9266 ; CHECK-NEXT: %9 = extractelement <4 x i32> %0, i32 2
9267 ; CHECK-NEXT: %10 = trunc i32 %9 to i8
9268 ; CHECK-NEXT: %11 = insertelement <16 x i8> %8, i8 %10, i32 2
9269 ; CHECK-NEXT: %12 = extractelement <4 x i32> %0, i32 3
9270 ; CHECK-NEXT: %13 = trunc i32 %12 to i8
9271 ; CHECK-NEXT: %14 = insertelement <16 x i8> %11, i8 %13, i32 3
9272 ; CHECK-NEXT: %15 = extractelement <4 x i32> %1, i32 0
9273 ; CHECK-NEXT: %16 = trunc i32 %15 to i8
9274 ; CHECK-NEXT: %17 = insertelement <16 x i8> %14, i8 %16, i32 4
9275 ; CHECK-NEXT: %18 = extractelement <4 x i32> %1, i32 1
9276 ; CHECK-NEXT: %19 = trunc i32 %18 to i8
9277 ; CHECK-NEXT: %20 = insertelement <16 x i8> %17, i8 %19, i32 5
9278 ; CHECK-NEXT: %21 = extractelement <4 x i32> %1, i32 2
9279 ; CHECK-NEXT: %22 = trunc i32 %21 to i8
9280 ; CHECK-NEXT: %23 = insertelement <16 x i8> %20, i8 %22, i32 6
9281 ; CHECK-NEXT: %24 = extractelement <4 x i32> %1, i32 3
9282 ; CHECK-NEXT: %25 = trunc i32 %24 to i8
9283 ; CHECK-NEXT: %26 = insertelement <16 x i8> %23, i8 %25, i32 7
9284 ; CHECK-NEXT: ret <16 x i8> %26
9285
9286 define <8 x i8> @trunc_cast_8xi16_to_8xi8(<8 x i16>) {
9287 %2 = trunc <8 x i16> %0 to <8 x i8>
9288 ret <8 x i8> %2
9289 }
9290 ; CHECK-LABEL: define <16 x i8> @trunc_cast_8xi16_to_8xi8(<8 x i16>)
9291 ; CHECK-NEXT: %2 = extractelement <8 x i16> %0, i32 0
9292 ; CHECK-NEXT: %3 = trunc i16 %2 to i8
9293 ; CHECK-NEXT: %4 = insertelement <16 x i8> undef, i8 %3, i32 0
9294 ; CHECK-NEXT: %5 = extractelement <8 x i16> %0, i32 1
9295 ; CHECK-NEXT: %6 = trunc i16 %5 to i8
9296 ; CHECK-NEXT: %7 = insertelement <16 x i8> %4, i8 %6, i32 1
9297 ; CHECK-NEXT: %8 = extractelement <8 x i16> %0, i32 2
9298 ; CHECK-NEXT: %9 = trunc i16 %8 to i8
9299 ; CHECK-NEXT: %10 = insertelement <16 x i8> %7, i8 %9, i32 2
9300 ; CHECK-NEXT: %11 = extractelement <8 x i16> %0, i32 3
9301 ; CHECK-NEXT: %12 = trunc i16 %11 to i8
9302 ; CHECK-NEXT: %13 = insertelement <16 x i8> %10, i8 %12, i32 3
9303 ; CHECK-NEXT: %14 = extractelement <8 x i16> %0, i32 4
9304 ; CHECK-NEXT: %15 = trunc i16 %14 to i8
9305 ; CHECK-NEXT: %16 = insertelement <16 x i8> %13, i8 %15, i32 4
9306 ; CHECK-NEXT: %17 = extractelement <8 x i16> %0, i32 5
9307 ; CHECK-NEXT: %18 = trunc i16 %17 to i8
9308 ; CHECK-NEXT: %19 = insertelement <16 x i8> %16, i8 %18, i32 5
9309 ; CHECK-NEXT: %20 = extractelement <8 x i16> %0, i32 6
9310 ; CHECK-NEXT: %21 = trunc i16 %20 to i8
9311 ; CHECK-NEXT: %22 = insertelement <16 x i8> %19, i8 %21, i32 6
9312 ; CHECK-NEXT: %23 = extractelement <8 x i16> %0, i32 7
9313 ; CHECK-NEXT: %24 = trunc i16 %23 to i8
9314 ; CHECK-NEXT: %25 = insertelement <16 x i8> %22, i8 %24, i32 7
9315 ; CHECK-NEXT: ret <16 x i8> %25
9316
9317 define <12 x i16> @zext_cast_12xi8_to_12xi16(<12 x i8>) {
9318 %2 = zext <12 x i8> %0 to <12 x i16>
9319 ret <12 x i16> %2
9320 }
9321 ; CHECK-LABEL: define <8 x i16> @zext_cast_12xi8_to_12xi16(<8 x i16>* nocapture nonnull dereferenceable(16), <16 x i8>)
9322 ; CHECK-NEXT: %3 = extractelement <16 x i8> %1, i32 0
9323 ; CHECK-NEXT: %4 = zext i8 %3 to i16
9324 ; CHECK-NEXT: %5 = insertelement <8 x i16> undef, i16 %4, i32 0
9325 ; CHECK-NEXT: %6 = extractelement <16 x i8> %1, i32 1
9326 ; CHECK-NEXT: %7 = zext i8 %6 to i16
9327 ; CHECK-NEXT: %8 = insertelement <8 x i16> %5, i16 %7, i32 1
9328 ; CHECK-NEXT: %9 = extractelement <16 x i8> %1, i32 2
9329 ; CHECK-NEXT: %10 = zext i8 %9 to i16
9330 ; CHECK-NEXT: %11 = insertelement <8 x i16> %8, i16 %10, i32 2
9331 ; CHECK-NEXT: %12 = extractelement <16 x i8> %1, i32 3
9332 ; CHECK-NEXT: %13 = zext i8 %12 to i16
9333 ; CHECK-NEXT: %14 = insertelement <8 x i16> %11, i16 %13, i32 3
9334 ; CHECK-NEXT: %15 = extractelement <16 x i8> %1, i32 4
9335 ; CHECK-NEXT: %16 = zext i8 %15 to i16
9336 ; CHECK-NEXT: %17 = insertelement <8 x i16> %14, i16 %16, i32 4
9337 ; CHECK-NEXT: %18 = extractelement <16 x i8> %1, i32 5
9338 ; CHECK-NEXT: %19 = zext i8 %18 to i16
9339 ; CHECK-NEXT: %20 = insertelement <8 x i16> %17, i16 %19, i32 5
9340 ; CHECK-NEXT: %21 = extractelement <16 x i8> %1, i32 6
9341 ; CHECK-NEXT: %22 = zext i8 %21 to i16
9342 ; CHECK-NEXT: %23 = insertelement <8 x i16> %20, i16 %22, i32 6
9343 ; CHECK-NEXT: %24 = extractelement <16 x i8> %1, i32 7
9344 ; CHECK-NEXT: %25 = zext i8 %24 to i16
9345 ; CHECK-NEXT: %26 = insertelement <8 x i16> %23, i16 %25, i32 7
9346 ; CHECK-NEXT: %27 = extractelement <16 x i8> %1, i32 8
9347 ; CHECK-NEXT: %28 = zext i8 %27 to i16
9348 ; CHECK-NEXT: %29 = insertelement <8 x i16> undef, i16 %28, i32 0
9349 ; CHECK-NEXT: %30 = extractelement <16 x i8> %1, i32 9
9350 ; CHECK-NEXT: %31 = zext i8 %30 to i16
9351 ; CHECK-NEXT: %32 = insertelement <8 x i16> %29, i16 %31, i32 1
9352 ; CHECK-NEXT: %33 = extractelement <16 x i8> %1, i32 10
9353 ; CHECK-NEXT: %34 = zext i8 %33 to i16
9354 ; CHECK-NEXT: %35 = insertelement <8 x i16> %32, i16 %34, i32 2
9355 ; CHECK-NEXT: %36 = extractelement <16 x i8> %1, i32 11
9356 ; CHECK-NEXT: %37 = zext i8 %36 to i16
9357 ; CHECK-NEXT: %38 = insertelement <8 x i16> %35, i16 %37, i32 3
9358 ; CHECK-NEXT: store <8 x i16> %38, <8 x i16>* %0, align 16
9359 ; CHECK-NEXT: ret <8 x i16> %26
9360
9361 define <12 x i32> @zext_cast_12xi8_to_12xi32(<12 x i8>) {
9362 %2 = zext <12 x i8> %0 to <12 x i32>
9363 ret <12 x i32> %2
9364 }
9365 ; CHECK-LABEL: define <4 x i32> @zext_cast_12xi8_to_12xi32(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), < 16 x i8>)
9366 ; CHECK-NEXT: %4 = extractelement <16 x i8> %2, i32 0
9367 ; CHECK-NEXT: %5 = zext i8 %4 to i32
9368 ; CHECK-NEXT: %6 = insertelement <4 x i32> undef, i32 %5, i32 0
9369 ; CHECK-NEXT: %7 = extractelement <16 x i8> %2, i32 1
9370 ; CHECK-NEXT: %8 = zext i8 %7 to i32
9371 ; CHECK-NEXT: %9 = insertelement <4 x i32> %6, i32 %8, i32 1
9372 ; CHECK-NEXT: %10 = extractelement <16 x i8> %2, i32 2
9373 ; CHECK-NEXT: %11 = zext i8 %10 to i32
9374 ; CHECK-NEXT: %12 = insertelement <4 x i32> %9, i32 %11, i32 2
9375 ; CHECK-NEXT: %13 = extractelement <16 x i8> %2, i32 3
9376 ; CHECK-NEXT: %14 = zext i8 %13 to i32
9377 ; CHECK-NEXT: %15 = insertelement <4 x i32> %12, i32 %14, i32 3
9378 ; CHECK-NEXT: %16 = extractelement <16 x i8> %2, i32 4
9379 ; CHECK-NEXT: %17 = zext i8 %16 to i32
9380 ; CHECK-NEXT: %18 = insertelement <4 x i32> undef, i32 %17, i32 0
9381 ; CHECK-NEXT: %19 = extractelement <16 x i8> %2, i32 5
9382 ; CHECK-NEXT: %20 = zext i8 %19 to i32
9383 ; CHECK-NEXT: %21 = insertelement <4 x i32> %18, i32 %20, i32 1
9384 ; CHECK-NEXT: %22 = extractelement <16 x i8> %2, i32 6
9385 ; CHECK-NEXT: %23 = zext i8 %22 to i32
9386 ; CHECK-NEXT: %24 = insertelement <4 x i32> %21, i32 %23, i32 2
9387 ; CHECK-NEXT: %25 = extractelement <16 x i8> %2, i32 7
9388 ; CHECK-NEXT: %26 = zext i8 %25 to i32
9389 ; CHECK-NEXT: %27 = insertelement <4 x i32> %24, i32 %26, i32 3
9390 ; CHECK-NEXT: %28 = extractelement <16 x i8> %2, i32 8
9391 ; CHECK-NEXT: %29 = zext i8 %28 to i32
9392 ; CHECK-NEXT: %30 = insertelement <4 x i32> undef, i32 %29, i32 0
9393 ; CHECK-NEXT: %31 = extractelement <16 x i8> %2, i32 9
9394 ; CHECK-NEXT: %32 = zext i8 %31 to i32
9395 ; CHECK-NEXT: %33 = insertelement <4 x i32> %30, i32 %32, i32 1
9396 ; CHECK-NEXT: %34 = extractelement <16 x i8> %2, i32 10
9397 ; CHECK-NEXT: %35 = zext i8 %34 to i32
9398 ; CHECK-NEXT: %36 = insertelement <4 x i32> %33, i32 %35, i32 2
9399 ; CHECK-NEXT: %37 = extractelement <16 x i8> %2, i32 11
9400 ; CHECK-NEXT: %38 = zext i8 %37 to i32
9401 ; CHECK-NEXT: %39 = insertelement <4 x i32> %36, i32 %38, i32 3
9402 ; CHECK-NEXT: store <4 x i32> %27, <4 x i32>* %0, align 16
9403 ; CHECK-NEXT: store <4 x i32> %39, <4 x i32>* %1, align 16
9404 ; CHECK-NEXT: ret <4 x i32> %15
9405
9406 define <12 x i64> @zext_cast_12xi8_to_12xi64(<12 x i8>) {
9407 %2 = zext <12 x i8> %0 to <12 x i64>
9408 ret <12 x i64> %2
9409 }
9410 ; CHECK-LABEL: define <2 x i64> @zext_cast_12xi8_to_12xi64(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), < 2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull de referenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <16 x i8>)
9411 ; CHECK-NEXT: %7 = extractelement <16 x i8> %5, i32 0
9412 ; CHECK-NEXT: %8 = zext i8 %7 to i64
9413 ; CHECK-NEXT: %9 = insertelement <2 x i64> undef, i64 %8, i32 0
9414 ; CHECK-NEXT: %10 = extractelement <16 x i8> %5, i32 1
9415 ; CHECK-NEXT: %11 = zext i8 %10 to i64
9416 ; CHECK-NEXT: %12 = insertelement <2 x i64> %9, i64 %11, i32 1
9417 ; CHECK-NEXT: %13 = extractelement <16 x i8> %5, i32 2
9418 ; CHECK-NEXT: %14 = zext i8 %13 to i64
9419 ; CHECK-NEXT: %15 = insertelement <2 x i64> undef, i64 %14, i32 0
9420 ; CHECK-NEXT: %16 = extractelement <16 x i8> %5, i32 3
9421 ; CHECK-NEXT: %17 = zext i8 %16 to i64
9422 ; CHECK-NEXT: %18 = insertelement <2 x i64> %15, i64 %17, i32 1
9423 ; CHECK-NEXT: %19 = extractelement <16 x i8> %5, i32 4
9424 ; CHECK-NEXT: %20 = zext i8 %19 to i64
9425 ; CHECK-NEXT: %21 = insertelement <2 x i64> undef, i64 %20, i32 0
9426 ; CHECK-NEXT: %22 = extractelement <16 x i8> %5, i32 5
9427 ; CHECK-NEXT: %23 = zext i8 %22 to i64
9428 ; CHECK-NEXT: %24 = insertelement <2 x i64> %21, i64 %23, i32 1
9429 ; CHECK-NEXT: %25 = extractelement <16 x i8> %5, i32 6
9430 ; CHECK-NEXT: %26 = zext i8 %25 to i64
9431 ; CHECK-NEXT: %27 = insertelement <2 x i64> undef, i64 %26, i32 0
9432 ; CHECK-NEXT: %28 = extractelement <16 x i8> %5, i32 7
9433 ; CHECK-NEXT: %29 = zext i8 %28 to i64
9434 ; CHECK-NEXT: %30 = insertelement <2 x i64> %27, i64 %29, i32 1
9435 ; CHECK-NEXT: %31 = extractelement <16 x i8> %5, i32 8
9436 ; CHECK-NEXT: %32 = zext i8 %31 to i64
9437 ; CHECK-NEXT: %33 = insertelement <2 x i64> undef, i64 %32, i32 0
9438 ; CHECK-NEXT: %34 = extractelement <16 x i8> %5, i32 9
9439 ; CHECK-NEXT: %35 = zext i8 %34 to i64
9440 ; CHECK-NEXT: %36 = insertelement <2 x i64> %33, i64 %35, i32 1
9441 ; CHECK-NEXT: %37 = extractelement <16 x i8> %5, i32 10
9442 ; CHECK-NEXT: %38 = zext i8 %37 to i64
9443 ; CHECK-NEXT: %39 = insertelement <2 x i64> undef, i64 %38, i32 0
9444 ; CHECK-NEXT: %40 = extractelement <16 x i8> %5, i32 11
9445 ; CHECK-NEXT: %41 = zext i8 %40 to i64
9446 ; CHECK-NEXT: %42 = insertelement <2 x i64> %39, i64 %41, i32 1
9447 ; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %0, align 16
9448 ; CHECK-NEXT: store <2 x i64> %24, <2 x i64>* %1, align 16
9449 ; CHECK-NEXT: store <2 x i64> %30, <2 x i64>* %2, align 16
9450 ; CHECK-NEXT: store <2 x i64> %36, <2 x i64>* %3, align 16
9451 ; CHECK-NEXT: store <2 x i64> %42, <2 x i64>* %4, align 16
9452 ; CHECK-NEXT: ret <2 x i64> %12
9453
9454 define <12 x i32> @zext_cast_12xi16_to_12xi32(<12 x i16>) {
9455 %2 = zext <12 x i16> %0 to <12 x i32>
9456 ret <12 x i32> %2
9457 }
9458 ; CHECK-LABEL: define <4 x i32> @zext_cast_12xi16_to_12xi32(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>)
9459 ; CHECK-NEXT: %5 = extractelement <8 x i16> %2, i32 0
9460 ; CHECK-NEXT: %6 = zext i16 %5 to i32
9461 ; CHECK-NEXT: %7 = insertelement <4 x i32> undef, i32 %6, i32 0
9462 ; CHECK-NEXT: %8 = extractelement <8 x i16> %2, i32 1
9463 ; CHECK-NEXT: %9 = zext i16 %8 to i32
9464 ; CHECK-NEXT: %10 = insertelement <4 x i32> %7, i32 %9, i32 1
9465 ; CHECK-NEXT: %11 = extractelement <8 x i16> %2, i32 2
9466 ; CHECK-NEXT: %12 = zext i16 %11 to i32
9467 ; CHECK-NEXT: %13 = insertelement <4 x i32> %10, i32 %12, i32 2
9468 ; CHECK-NEXT: %14 = extractelement <8 x i16> %2, i32 3
9469 ; CHECK-NEXT: %15 = zext i16 %14 to i32
9470 ; CHECK-NEXT: %16 = insertelement <4 x i32> %13, i32 %15, i32 3
9471 ; CHECK-NEXT: %17 = extractelement <8 x i16> %2, i32 4
9472 ; CHECK-NEXT: %18 = zext i16 %17 to i32
9473 ; CHECK-NEXT: %19 = insertelement <4 x i32> undef, i32 %18, i32 0
9474 ; CHECK-NEXT: %20 = extractelement <8 x i16> %2, i32 5
9475 ; CHECK-NEXT: %21 = zext i16 %20 to i32
9476 ; CHECK-NEXT: %22 = insertelement <4 x i32> %19, i32 %21, i32 1
9477 ; CHECK-NEXT: %23 = extractelement <8 x i16> %2, i32 6
9478 ; CHECK-NEXT: %24 = zext i16 %23 to i32
9479 ; CHECK-NEXT: %25 = insertelement <4 x i32> %22, i32 %24, i32 2
9480 ; CHECK-NEXT: %26 = extractelement <8 x i16> %2, i32 7
9481 ; CHECK-NEXT: %27 = zext i16 %26 to i32
9482 ; CHECK-NEXT: %28 = insertelement <4 x i32> %25, i32 %27, i32 3
9483 ; CHECK-NEXT: %29 = extractelement <8 x i16> %3, i32 0
9484 ; CHECK-NEXT: %30 = zext i16 %29 to i32
9485 ; CHECK-NEXT: %31 = insertelement <4 x i32> undef, i32 %30, i32 0
9486 ; CHECK-NEXT: %32 = extractelement <8 x i16> %3, i32 1
9487 ; CHECK-NEXT: %33 = zext i16 %32 to i32
9488 ; CHECK-NEXT: %34 = insertelement <4 x i32> %31, i32 %33, i32 1
9489 ; CHECK-NEXT: %35 = extractelement <8 x i16> %3, i32 2
9490 ; CHECK-NEXT: %36 = zext i16 %35 to i32
9491 ; CHECK-NEXT: %37 = insertelement <4 x i32> %34, i32 %36, i32 2
9492 ; CHECK-NEXT: %38 = extractelement <8 x i16> %3, i32 3
9493 ; CHECK-NEXT: %39 = zext i16 %38 to i32
9494 ; CHECK-NEXT: %40 = insertelement <4 x i32> %37, i32 %39, i32 3
9495 ; CHECK-NEXT: store <4 x i32> %28, <4 x i32>* %0, align 16
9496 ; CHECK-NEXT: store <4 x i32> %40, <4 x i32>* %1, align 16
9497 ; CHECK-NEXT: ret <4 x i32> %16
9498
9499 define <12 x i64> @zext_cast_12xi16_to_12xi64(<12 x i16>) {
9500 %2 = zext <12 x i16> %0 to <12 x i64>
9501 ret <12 x i64> %2
9502 }
9503 ; CHECK-LABEL: define <2 x i64> @zext_cast_12xi16_to_12xi64(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull d ereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>)
9504 ; CHECK-NEXT: %8 = extractelement <8 x i16> %5, i32 0
9505 ; CHECK-NEXT: %9 = zext i16 %8 to i64
9506 ; CHECK-NEXT: %10 = insertelement <2 x i64> undef, i64 %9, i32 0
9507 ; CHECK-NEXT: %11 = extractelement <8 x i16> %5, i32 1
9508 ; CHECK-NEXT: %12 = zext i16 %11 to i64
9509 ; CHECK-NEXT: %13 = insertelement <2 x i64> %10, i64 %12, i32 1
9510 ; CHECK-NEXT: %14 = extractelement <8 x i16> %5, i32 2
9511 ; CHECK-NEXT: %15 = zext i16 %14 to i64
9512 ; CHECK-NEXT: %16 = insertelement <2 x i64> undef, i64 %15, i32 0
9513 ; CHECK-NEXT: %17 = extractelement <8 x i16> %5, i32 3
9514 ; CHECK-NEXT: %18 = zext i16 %17 to i64
9515 ; CHECK-NEXT: %19 = insertelement <2 x i64> %16, i64 %18, i32 1
9516 ; CHECK-NEXT: %20 = extractelement <8 x i16> %5, i32 4
9517 ; CHECK-NEXT: %21 = zext i16 %20 to i64
9518 ; CHECK-NEXT: %22 = insertelement <2 x i64> undef, i64 %21, i32 0
9519 ; CHECK-NEXT: %23 = extractelement <8 x i16> %5, i32 5
9520 ; CHECK-NEXT: %24 = zext i16 %23 to i64
9521 ; CHECK-NEXT: %25 = insertelement <2 x i64> %22, i64 %24, i32 1
9522 ; CHECK-NEXT: %26 = extractelement <8 x i16> %5, i32 6
9523 ; CHECK-NEXT: %27 = zext i16 %26 to i64
9524 ; CHECK-NEXT: %28 = insertelement <2 x i64> undef, i64 %27, i32 0
9525 ; CHECK-NEXT: %29 = extractelement <8 x i16> %5, i32 7
9526 ; CHECK-NEXT: %30 = zext i16 %29 to i64
9527 ; CHECK-NEXT: %31 = insertelement <2 x i64> %28, i64 %30, i32 1
9528 ; CHECK-NEXT: %32 = extractelement <8 x i16> %6, i32 0
9529 ; CHECK-NEXT: %33 = zext i16 %32 to i64
9530 ; CHECK-NEXT: %34 = insertelement <2 x i64> undef, i64 %33, i32 0
9531 ; CHECK-NEXT: %35 = extractelement <8 x i16> %6, i32 1
9532 ; CHECK-NEXT: %36 = zext i16 %35 to i64
9533 ; CHECK-NEXT: %37 = insertelement <2 x i64> %34, i64 %36, i32 1
9534 ; CHECK-NEXT: %38 = extractelement <8 x i16> %6, i32 2
9535 ; CHECK-NEXT: %39 = zext i16 %38 to i64
9536 ; CHECK-NEXT: %40 = insertelement <2 x i64> undef, i64 %39, i32 0
9537 ; CHECK-NEXT: %41 = extractelement <8 x i16> %6, i32 3
9538 ; CHECK-NEXT: %42 = zext i16 %41 to i64
9539 ; CHECK-NEXT: %43 = insertelement <2 x i64> %40, i64 %42, i32 1
9540 ; CHECK-NEXT: store <2 x i64> %19, <2 x i64>* %0, align 16
9541 ; CHECK-NEXT: store <2 x i64> %25, <2 x i64>* %1, align 16
9542 ; CHECK-NEXT: store <2 x i64> %31, <2 x i64>* %2, align 16
9543 ; CHECK-NEXT: store <2 x i64> %37, <2 x i64>* %3, align 16
9544 ; CHECK-NEXT: store <2 x i64> %43, <2 x i64>* %4, align 16
9545 ; CHECK-NEXT: ret <2 x i64> %13
9546
9547 define <12 x i64> @zext_cast_12xi32_to_12xi64(<12 x i32>) {
9548 %2 = zext <12 x i32> %0 to <12 x i64>
9549 ret <12 x i64> %2
9550 }
9551 ; CHECK-LABEL: define <2 x i64> @zext_cast_12xi32_to_12xi64(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull d ereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>)
9552 ; CHECK-NEXT: %9 = extractelement <4 x i32> %5, i32 0
9553 ; CHECK-NEXT: %10 = zext i32 %9 to i64
9554 ; CHECK-NEXT: %11 = insertelement <2 x i64> undef, i64 %10, i32 0
9555 ; CHECK-NEXT: %12 = extractelement <4 x i32> %5, i32 1
9556 ; CHECK-NEXT: %13 = zext i32 %12 to i64
9557 ; CHECK-NEXT: %14 = insertelement <2 x i64> %11, i64 %13, i32 1
9558 ; CHECK-NEXT: %15 = extractelement <4 x i32> %5, i32 2
9559 ; CHECK-NEXT: %16 = zext i32 %15 to i64
9560 ; CHECK-NEXT: %17 = insertelement <2 x i64> undef, i64 %16, i32 0
9561 ; CHECK-NEXT: %18 = extractelement <4 x i32> %5, i32 3
9562 ; CHECK-NEXT: %19 = zext i32 %18 to i64
9563 ; CHECK-NEXT: %20 = insertelement <2 x i64> %17, i64 %19, i32 1
9564 ; CHECK-NEXT: %21 = extractelement <4 x i32> %6, i32 0
9565 ; CHECK-NEXT: %22 = zext i32 %21 to i64
9566 ; CHECK-NEXT: %23 = insertelement <2 x i64> undef, i64 %22, i32 0
9567 ; CHECK-NEXT: %24 = extractelement <4 x i32> %6, i32 1
9568 ; CHECK-NEXT: %25 = zext i32 %24 to i64
9569 ; CHECK-NEXT: %26 = insertelement <2 x i64> %23, i64 %25, i32 1
9570 ; CHECK-NEXT: %27 = extractelement <4 x i32> %6, i32 2
9571 ; CHECK-NEXT: %28 = zext i32 %27 to i64
9572 ; CHECK-NEXT: %29 = insertelement <2 x i64> undef, i64 %28, i32 0
9573 ; CHECK-NEXT: %30 = extractelement <4 x i32> %6, i32 3
9574 ; CHECK-NEXT: %31 = zext i32 %30 to i64
9575 ; CHECK-NEXT: %32 = insertelement <2 x i64> %29, i64 %31, i32 1
9576 ; CHECK-NEXT: %33 = extractelement <4 x i32> %7, i32 0
9577 ; CHECK-NEXT: %34 = zext i32 %33 to i64
9578 ; CHECK-NEXT: %35 = insertelement <2 x i64> undef, i64 %34, i32 0
9579 ; CHECK-NEXT: %36 = extractelement <4 x i32> %7, i32 1
9580 ; CHECK-NEXT: %37 = zext i32 %36 to i64
9581 ; CHECK-NEXT: %38 = insertelement <2 x i64> %35, i64 %37, i32 1
9582 ; CHECK-NEXT: %39 = extractelement <4 x i32> %7, i32 2
9583 ; CHECK-NEXT: %40 = zext i32 %39 to i64
9584 ; CHECK-NEXT: %41 = insertelement <2 x i64> undef, i64 %40, i32 0
9585 ; CHECK-NEXT: %42 = extractelement <4 x i32> %7, i32 3
9586 ; CHECK-NEXT: %43 = zext i32 %42 to i64
9587 ; CHECK-NEXT: %44 = insertelement <2 x i64> %41, i64 %43, i32 1
9588 ; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %0, align 16
9589 ; CHECK-NEXT: store <2 x i64> %26, <2 x i64>* %1, align 16
9590 ; CHECK-NEXT: store <2 x i64> %32, <2 x i64>* %2, align 16
9591 ; CHECK-NEXT: store <2 x i64> %38, <2 x i64>* %3, align 16
9592 ; CHECK-NEXT: store <2 x i64> %44, <2 x i64>* %4, align 16
9593 ; CHECK-NEXT: ret <2 x i64> %14
9594
9595 define <12 x i16> @sext_cast_12xi8_to_12xi16(<12 x i8>) {
9596 %2 = sext <12 x i8> %0 to <12 x i16>
9597 ret <12 x i16> %2
9598 }
9599 ; CHECK-LABEL: define <8 x i16> @sext_cast_12xi8_to_12xi16(<8 x i16>* nocapture nonnull dereferenceable(16), <16 x i8>)
9600 ; CHECK-NEXT: %3 = extractelement <16 x i8> %1, i32 0
9601 ; CHECK-NEXT: %4 = sext i8 %3 to i16
9602 ; CHECK-NEXT: %5 = insertelement <8 x i16> undef, i16 %4, i32 0
9603 ; CHECK-NEXT: %6 = extractelement <16 x i8> %1, i32 1
9604 ; CHECK-NEXT: %7 = sext i8 %6 to i16
9605 ; CHECK-NEXT: %8 = insertelement <8 x i16> %5, i16 %7, i32 1
9606 ; CHECK-NEXT: %9 = extractelement <16 x i8> %1, i32 2
9607 ; CHECK-NEXT: %10 = sext i8 %9 to i16
9608 ; CHECK-NEXT: %11 = insertelement <8 x i16> %8, i16 %10, i32 2
9609 ; CHECK-NEXT: %12 = extractelement <16 x i8> %1, i32 3
9610 ; CHECK-NEXT: %13 = sext i8 %12 to i16
9611 ; CHECK-NEXT: %14 = insertelement <8 x i16> %11, i16 %13, i32 3
9612 ; CHECK-NEXT: %15 = extractelement <16 x i8> %1, i32 4
9613 ; CHECK-NEXT: %16 = sext i8 %15 to i16
9614 ; CHECK-NEXT: %17 = insertelement <8 x i16> %14, i16 %16, i32 4
9615 ; CHECK-NEXT: %18 = extractelement <16 x i8> %1, i32 5
9616 ; CHECK-NEXT: %19 = sext i8 %18 to i16
9617 ; CHECK-NEXT: %20 = insertelement <8 x i16> %17, i16 %19, i32 5
9618 ; CHECK-NEXT: %21 = extractelement <16 x i8> %1, i32 6
9619 ; CHECK-NEXT: %22 = sext i8 %21 to i16
9620 ; CHECK-NEXT: %23 = insertelement <8 x i16> %20, i16 %22, i32 6
9621 ; CHECK-NEXT: %24 = extractelement <16 x i8> %1, i32 7
9622 ; CHECK-NEXT: %25 = sext i8 %24 to i16
9623 ; CHECK-NEXT: %26 = insertelement <8 x i16> %23, i16 %25, i32 7
9624 ; CHECK-NEXT: %27 = extractelement <16 x i8> %1, i32 8
9625 ; CHECK-NEXT: %28 = sext i8 %27 to i16
9626 ; CHECK-NEXT: %29 = insertelement <8 x i16> undef, i16 %28, i32 0
9627 ; CHECK-NEXT: %30 = extractelement <16 x i8> %1, i32 9
9628 ; CHECK-NEXT: %31 = sext i8 %30 to i16
9629 ; CHECK-NEXT: %32 = insertelement <8 x i16> %29, i16 %31, i32 1
9630 ; CHECK-NEXT: %33 = extractelement <16 x i8> %1, i32 10
9631 ; CHECK-NEXT: %34 = sext i8 %33 to i16
9632 ; CHECK-NEXT: %35 = insertelement <8 x i16> %32, i16 %34, i32 2
9633 ; CHECK-NEXT: %36 = extractelement <16 x i8> %1, i32 11
9634 ; CHECK-NEXT: %37 = sext i8 %36 to i16
9635 ; CHECK-NEXT: %38 = insertelement <8 x i16> %35, i16 %37, i32 3
9636 ; CHECK-NEXT: store <8 x i16> %38, <8 x i16>* %0, align 16
9637 ; CHECK-NEXT: ret <8 x i16> %26
9638
9639 define <12 x i32> @sext_cast_12xi8_to_12xi32(<12 x i8>) {
9640 %2 = sext <12 x i8> %0 to <12 x i32>
9641 ret <12 x i32> %2
9642 }
9643 ; CHECK-LABEL: define <4 x i32> @sext_cast_12xi8_to_12xi32(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), < 16 x i8>)
9644 ; CHECK-NEXT: %4 = extractelement <16 x i8> %2, i32 0
9645 ; CHECK-NEXT: %5 = sext i8 %4 to i32
9646 ; CHECK-NEXT: %6 = insertelement <4 x i32> undef, i32 %5, i32 0
9647 ; CHECK-NEXT: %7 = extractelement <16 x i8> %2, i32 1
9648 ; CHECK-NEXT: %8 = sext i8 %7 to i32
9649 ; CHECK-NEXT: %9 = insertelement <4 x i32> %6, i32 %8, i32 1
9650 ; CHECK-NEXT: %10 = extractelement <16 x i8> %2, i32 2
9651 ; CHECK-NEXT: %11 = sext i8 %10 to i32
9652 ; CHECK-NEXT: %12 = insertelement <4 x i32> %9, i32 %11, i32 2
9653 ; CHECK-NEXT: %13 = extractelement <16 x i8> %2, i32 3
9654 ; CHECK-NEXT: %14 = sext i8 %13 to i32
9655 ; CHECK-NEXT: %15 = insertelement <4 x i32> %12, i32 %14, i32 3
9656 ; CHECK-NEXT: %16 = extractelement <16 x i8> %2, i32 4
9657 ; CHECK-NEXT: %17 = sext i8 %16 to i32
9658 ; CHECK-NEXT: %18 = insertelement <4 x i32> undef, i32 %17, i32 0
9659 ; CHECK-NEXT: %19 = extractelement <16 x i8> %2, i32 5
9660 ; CHECK-NEXT: %20 = sext i8 %19 to i32
9661 ; CHECK-NEXT: %21 = insertelement <4 x i32> %18, i32 %20, i32 1
9662 ; CHECK-NEXT: %22 = extractelement <16 x i8> %2, i32 6
9663 ; CHECK-NEXT: %23 = sext i8 %22 to i32
9664 ; CHECK-NEXT: %24 = insertelement <4 x i32> %21, i32 %23, i32 2
9665 ; CHECK-NEXT: %25 = extractelement <16 x i8> %2, i32 7
9666 ; CHECK-NEXT: %26 = sext i8 %25 to i32
9667 ; CHECK-NEXT: %27 = insertelement <4 x i32> %24, i32 %26, i32 3
9668 ; CHECK-NEXT: %28 = extractelement <16 x i8> %2, i32 8
9669 ; CHECK-NEXT: %29 = sext i8 %28 to i32
9670 ; CHECK-NEXT: %30 = insertelement <4 x i32> undef, i32 %29, i32 0
9671 ; CHECK-NEXT: %31 = extractelement <16 x i8> %2, i32 9
9672 ; CHECK-NEXT: %32 = sext i8 %31 to i32
9673 ; CHECK-NEXT: %33 = insertelement <4 x i32> %30, i32 %32, i32 1
9674 ; CHECK-NEXT: %34 = extractelement <16 x i8> %2, i32 10
9675 ; CHECK-NEXT: %35 = sext i8 %34 to i32
9676 ; CHECK-NEXT: %36 = insertelement <4 x i32> %33, i32 %35, i32 2
9677 ; CHECK-NEXT: %37 = extractelement <16 x i8> %2, i32 11
9678 ; CHECK-NEXT: %38 = sext i8 %37 to i32
9679 ; CHECK-NEXT: %39 = insertelement <4 x i32> %36, i32 %38, i32 3
9680 ; CHECK-NEXT: store <4 x i32> %27, <4 x i32>* %0, align 16
9681 ; CHECK-NEXT: store <4 x i32> %39, <4 x i32>* %1, align 16
9682 ; CHECK-NEXT: ret <4 x i32> %15
9683
9684 define <12 x i64> @sext_cast_12xi8_to_12xi64(<12 x i8>) {
9685 %2 = sext <12 x i8> %0 to <12 x i64>
9686 ret <12 x i64> %2
9687 }
9688 ; CHECK-LABEL: define <2 x i64> @sext_cast_12xi8_to_12xi64(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), < 2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull de referenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <16 x i8>)
9689 ; CHECK-NEXT: %7 = extractelement <16 x i8> %5, i32 0
9690 ; CHECK-NEXT: %8 = sext i8 %7 to i64
9691 ; CHECK-NEXT: %9 = insertelement <2 x i64> undef, i64 %8, i32 0
9692 ; CHECK-NEXT: %10 = extractelement <16 x i8> %5, i32 1
9693 ; CHECK-NEXT: %11 = sext i8 %10 to i64
9694 ; CHECK-NEXT: %12 = insertelement <2 x i64> %9, i64 %11, i32 1
9695 ; CHECK-NEXT: %13 = extractelement <16 x i8> %5, i32 2
9696 ; CHECK-NEXT: %14 = sext i8 %13 to i64
9697 ; CHECK-NEXT: %15 = insertelement <2 x i64> undef, i64 %14, i32 0
9698 ; CHECK-NEXT: %16 = extractelement <16 x i8> %5, i32 3
9699 ; CHECK-NEXT: %17 = sext i8 %16 to i64
9700 ; CHECK-NEXT: %18 = insertelement <2 x i64> %15, i64 %17, i32 1
9701 ; CHECK-NEXT: %19 = extractelement <16 x i8> %5, i32 4
9702 ; CHECK-NEXT: %20 = sext i8 %19 to i64
9703 ; CHECK-NEXT: %21 = insertelement <2 x i64> undef, i64 %20, i32 0
9704 ; CHECK-NEXT: %22 = extractelement <16 x i8> %5, i32 5
9705 ; CHECK-NEXT: %23 = sext i8 %22 to i64
9706 ; CHECK-NEXT: %24 = insertelement <2 x i64> %21, i64 %23, i32 1
9707 ; CHECK-NEXT: %25 = extractelement <16 x i8> %5, i32 6
9708 ; CHECK-NEXT: %26 = sext i8 %25 to i64
9709 ; CHECK-NEXT: %27 = insertelement <2 x i64> undef, i64 %26, i32 0
9710 ; CHECK-NEXT: %28 = extractelement <16 x i8> %5, i32 7
9711 ; CHECK-NEXT: %29 = sext i8 %28 to i64
9712 ; CHECK-NEXT: %30 = insertelement <2 x i64> %27, i64 %29, i32 1
9713 ; CHECK-NEXT: %31 = extractelement <16 x i8> %5, i32 8
9714 ; CHECK-NEXT: %32 = sext i8 %31 to i64
9715 ; CHECK-NEXT: %33 = insertelement <2 x i64> undef, i64 %32, i32 0
9716 ; CHECK-NEXT: %34 = extractelement <16 x i8> %5, i32 9
9717 ; CHECK-NEXT: %35 = sext i8 %34 to i64
9718 ; CHECK-NEXT: %36 = insertelement <2 x i64> %33, i64 %35, i32 1
9719 ; CHECK-NEXT: %37 = extractelement <16 x i8> %5, i32 10
9720 ; CHECK-NEXT: %38 = sext i8 %37 to i64
9721 ; CHECK-NEXT: %39 = insertelement <2 x i64> undef, i64 %38, i32 0
9722 ; CHECK-NEXT: %40 = extractelement <16 x i8> %5, i32 11
9723 ; CHECK-NEXT: %41 = sext i8 %40 to i64
9724 ; CHECK-NEXT: %42 = insertelement <2 x i64> %39, i64 %41, i32 1
9725 ; CHECK-NEXT: store <2 x i64> %18, <2 x i64>* %0, align 16
9726 ; CHECK-NEXT: store <2 x i64> %24, <2 x i64>* %1, align 16
9727 ; CHECK-NEXT: store <2 x i64> %30, <2 x i64>* %2, align 16
9728 ; CHECK-NEXT: store <2 x i64> %36, <2 x i64>* %3, align 16
9729 ; CHECK-NEXT: store <2 x i64> %42, <2 x i64>* %4, align 16
9730 ; CHECK-NEXT: ret <2 x i64> %12
9731
9732 define <12 x i32> @sext_cast_12xi16_to_12xi32(<12 x i16>) {
9733 %2 = sext <12 x i16> %0 to <12 x i32>
9734 ret <12 x i32> %2
9735 }
9736 ; CHECK-LABEL: define <4 x i32> @sext_cast_12xi16_to_12xi32(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>)
9737 ; CHECK-NEXT: %5 = extractelement <8 x i16> %2, i32 0
9738 ; CHECK-NEXT: %6 = sext i16 %5 to i32
9739 ; CHECK-NEXT: %7 = insertelement <4 x i32> undef, i32 %6, i32 0
9740 ; CHECK-NEXT: %8 = extractelement <8 x i16> %2, i32 1
9741 ; CHECK-NEXT: %9 = sext i16 %8 to i32
9742 ; CHECK-NEXT: %10 = insertelement <4 x i32> %7, i32 %9, i32 1
9743 ; CHECK-NEXT: %11 = extractelement <8 x i16> %2, i32 2
9744 ; CHECK-NEXT: %12 = sext i16 %11 to i32
9745 ; CHECK-NEXT: %13 = insertelement <4 x i32> %10, i32 %12, i32 2
9746 ; CHECK-NEXT: %14 = extractelement <8 x i16> %2, i32 3
9747 ; CHECK-NEXT: %15 = sext i16 %14 to i32
9748 ; CHECK-NEXT: %16 = insertelement <4 x i32> %13, i32 %15, i32 3
9749 ; CHECK-NEXT: %17 = extractelement <8 x i16> %2, i32 4
9750 ; CHECK-NEXT: %18 = sext i16 %17 to i32
9751 ; CHECK-NEXT: %19 = insertelement <4 x i32> undef, i32 %18, i32 0
9752 ; CHECK-NEXT: %20 = extractelement <8 x i16> %2, i32 5
9753 ; CHECK-NEXT: %21 = sext i16 %20 to i32
9754 ; CHECK-NEXT: %22 = insertelement <4 x i32> %19, i32 %21, i32 1
9755 ; CHECK-NEXT: %23 = extractelement <8 x i16> %2, i32 6
9756 ; CHECK-NEXT: %24 = sext i16 %23 to i32
9757 ; CHECK-NEXT: %25 = insertelement <4 x i32> %22, i32 %24, i32 2
9758 ; CHECK-NEXT: %26 = extractelement <8 x i16> %2, i32 7
9759 ; CHECK-NEXT: %27 = sext i16 %26 to i32
9760 ; CHECK-NEXT: %28 = insertelement <4 x i32> %25, i32 %27, i32 3
9761 ; CHECK-NEXT: %29 = extractelement <8 x i16> %3, i32 0
9762 ; CHECK-NEXT: %30 = sext i16 %29 to i32
9763 ; CHECK-NEXT: %31 = insertelement <4 x i32> undef, i32 %30, i32 0
9764 ; CHECK-NEXT: %32 = extractelement <8 x i16> %3, i32 1
9765 ; CHECK-NEXT: %33 = sext i16 %32 to i32
9766 ; CHECK-NEXT: %34 = insertelement <4 x i32> %31, i32 %33, i32 1
9767 ; CHECK-NEXT: %35 = extractelement <8 x i16> %3, i32 2
9768 ; CHECK-NEXT: %36 = sext i16 %35 to i32
9769 ; CHECK-NEXT: %37 = insertelement <4 x i32> %34, i32 %36, i32 2
9770 ; CHECK-NEXT: %38 = extractelement <8 x i16> %3, i32 3
9771 ; CHECK-NEXT: %39 = sext i16 %38 to i32
9772 ; CHECK-NEXT: %40 = insertelement <4 x i32> %37, i32 %39, i32 3
9773 ; CHECK-NEXT: store <4 x i32> %28, <4 x i32>* %0, align 16
9774 ; CHECK-NEXT: store <4 x i32> %40, <4 x i32>* %1, align 16
9775 ; CHECK-NEXT: ret <4 x i32> %16
9776
9777 define <12 x i64> @sext_cast_12xi16_to_12xi64(<12 x i16>) {
9778 %2 = sext <12 x i16> %0 to <12 x i64>
9779 ret <12 x i64> %2
9780 }
9781 ; CHECK-LABEL: define <2 x i64> @sext_cast_12xi16_to_12xi64(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull d ereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>)
9782 ; CHECK-NEXT: %8 = extractelement <8 x i16> %5, i32 0
9783 ; CHECK-NEXT: %9 = sext i16 %8 to i64
9784 ; CHECK-NEXT: %10 = insertelement <2 x i64> undef, i64 %9, i32 0
9785 ; CHECK-NEXT: %11 = extractelement <8 x i16> %5, i32 1
9786 ; CHECK-NEXT: %12 = sext i16 %11 to i64
9787 ; CHECK-NEXT: %13 = insertelement <2 x i64> %10, i64 %12, i32 1
9788 ; CHECK-NEXT: %14 = extractelement <8 x i16> %5, i32 2
9789 ; CHECK-NEXT: %15 = sext i16 %14 to i64
9790 ; CHECK-NEXT: %16 = insertelement <2 x i64> undef, i64 %15, i32 0
9791 ; CHECK-NEXT: %17 = extractelement <8 x i16> %5, i32 3
9792 ; CHECK-NEXT: %18 = sext i16 %17 to i64
9793 ; CHECK-NEXT: %19 = insertelement <2 x i64> %16, i64 %18, i32 1
9794 ; CHECK-NEXT: %20 = extractelement <8 x i16> %5, i32 4
9795 ; CHECK-NEXT: %21 = sext i16 %20 to i64
9796 ; CHECK-NEXT: %22 = insertelement <2 x i64> undef, i64 %21, i32 0
9797 ; CHECK-NEXT: %23 = extractelement <8 x i16> %5, i32 5
9798 ; CHECK-NEXT: %24 = sext i16 %23 to i64
9799 ; CHECK-NEXT: %25 = insertelement <2 x i64> %22, i64 %24, i32 1
9800 ; CHECK-NEXT: %26 = extractelement <8 x i16> %5, i32 6
9801 ; CHECK-NEXT: %27 = sext i16 %26 to i64
9802 ; CHECK-NEXT: %28 = insertelement <2 x i64> undef, i64 %27, i32 0
9803 ; CHECK-NEXT: %29 = extractelement <8 x i16> %5, i32 7
9804 ; CHECK-NEXT: %30 = sext i16 %29 to i64
9805 ; CHECK-NEXT: %31 = insertelement <2 x i64> %28, i64 %30, i32 1
9806 ; CHECK-NEXT: %32 = extractelement <8 x i16> %6, i32 0
9807 ; CHECK-NEXT: %33 = sext i16 %32 to i64
9808 ; CHECK-NEXT: %34 = insertelement <2 x i64> undef, i64 %33, i32 0
9809 ; CHECK-NEXT: %35 = extractelement <8 x i16> %6, i32 1
9810 ; CHECK-NEXT: %36 = sext i16 %35 to i64
9811 ; CHECK-NEXT: %37 = insertelement <2 x i64> %34, i64 %36, i32 1
9812 ; CHECK-NEXT: %38 = extractelement <8 x i16> %6, i32 2
9813 ; CHECK-NEXT: %39 = sext i16 %38 to i64
9814 ; CHECK-NEXT: %40 = insertelement <2 x i64> undef, i64 %39, i32 0
9815 ; CHECK-NEXT: %41 = extractelement <8 x i16> %6, i32 3
9816 ; CHECK-NEXT: %42 = sext i16 %41 to i64
9817 ; CHECK-NEXT: %43 = insertelement <2 x i64> %40, i64 %42, i32 1
9818 ; CHECK-NEXT: store <2 x i64> %19, <2 x i64>* %0, align 16
9819 ; CHECK-NEXT: store <2 x i64> %25, <2 x i64>* %1, align 16
9820 ; CHECK-NEXT: store <2 x i64> %31, <2 x i64>* %2, align 16
9821 ; CHECK-NEXT: store <2 x i64> %37, <2 x i64>* %3, align 16
9822 ; CHECK-NEXT: store <2 x i64> %43, <2 x i64>* %4, align 16
9823 ; CHECK-NEXT: ret <2 x i64> %13
9824
9825 define <12 x i64> @sext_cast_12xi32_to_12xi64(<12 x i32>) {
9826 %2 = sext <12 x i32> %0 to <12 x i64>
9827 ret <12 x i64> %2
9828 }
9829 ; CHECK-LABEL: define <2 x i64> @sext_cast_12xi32_to_12xi64(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull d ereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>)
9830 ; CHECK-NEXT: %9 = extractelement <4 x i32> %5, i32 0
9831 ; CHECK-NEXT: %10 = sext i32 %9 to i64
9832 ; CHECK-NEXT: %11 = insertelement <2 x i64> undef, i64 %10, i32 0
9833 ; CHECK-NEXT: %12 = extractelement <4 x i32> %5, i32 1
9834 ; CHECK-NEXT: %13 = sext i32 %12 to i64
9835 ; CHECK-NEXT: %14 = insertelement <2 x i64> %11, i64 %13, i32 1
9836 ; CHECK-NEXT: %15 = extractelement <4 x i32> %5, i32 2
9837 ; CHECK-NEXT: %16 = sext i32 %15 to i64
9838 ; CHECK-NEXT: %17 = insertelement <2 x i64> undef, i64 %16, i32 0
9839 ; CHECK-NEXT: %18 = extractelement <4 x i32> %5, i32 3
9840 ; CHECK-NEXT: %19 = sext i32 %18 to i64
9841 ; CHECK-NEXT: %20 = insertelement <2 x i64> %17, i64 %19, i32 1
9842 ; CHECK-NEXT: %21 = extractelement <4 x i32> %6, i32 0
9843 ; CHECK-NEXT: %22 = sext i32 %21 to i64
9844 ; CHECK-NEXT: %23 = insertelement <2 x i64> undef, i64 %22, i32 0
9845 ; CHECK-NEXT: %24 = extractelement <4 x i32> %6, i32 1
9846 ; CHECK-NEXT: %25 = sext i32 %24 to i64
9847 ; CHECK-NEXT: %26 = insertelement <2 x i64> %23, i64 %25, i32 1
9848 ; CHECK-NEXT: %27 = extractelement <4 x i32> %6, i32 2
9849 ; CHECK-NEXT: %28 = sext i32 %27 to i64
9850 ; CHECK-NEXT: %29 = insertelement <2 x i64> undef, i64 %28, i32 0
9851 ; CHECK-NEXT: %30 = extractelement <4 x i32> %6, i32 3
9852 ; CHECK-NEXT: %31 = sext i32 %30 to i64
9853 ; CHECK-NEXT: %32 = insertelement <2 x i64> %29, i64 %31, i32 1
9854 ; CHECK-NEXT: %33 = extractelement <4 x i32> %7, i32 0
9855 ; CHECK-NEXT: %34 = sext i32 %33 to i64
9856 ; CHECK-NEXT: %35 = insertelement <2 x i64> undef, i64 %34, i32 0
9857 ; CHECK-NEXT: %36 = extractelement <4 x i32> %7, i32 1
9858 ; CHECK-NEXT: %37 = sext i32 %36 to i64
9859 ; CHECK-NEXT: %38 = insertelement <2 x i64> %35, i64 %37, i32 1
9860 ; CHECK-NEXT: %39 = extractelement <4 x i32> %7, i32 2
9861 ; CHECK-NEXT: %40 = sext i32 %39 to i64
9862 ; CHECK-NEXT: %41 = insertelement <2 x i64> undef, i64 %40, i32 0
9863 ; CHECK-NEXT: %42 = extractelement <4 x i32> %7, i32 3
9864 ; CHECK-NEXT: %43 = sext i32 %42 to i64
9865 ; CHECK-NEXT: %44 = insertelement <2 x i64> %41, i64 %43, i32 1
9866 ; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %0, align 16
9867 ; CHECK-NEXT: store <2 x i64> %26, <2 x i64>* %1, align 16
9868 ; CHECK-NEXT: store <2 x i64> %32, <2 x i64>* %2, align 16
9869 ; CHECK-NEXT: store <2 x i64> %38, <2 x i64>* %3, align 16
9870 ; CHECK-NEXT: store <2 x i64> %44, <2 x i64>* %4, align 16
9871 ; CHECK-NEXT: ret <2 x i64> %14
9872
9873 define <12 x i32> @trunc_cast_12xi64_to_12xi32(<12 x i64>) {
9874 %2 = trunc <12 x i64> %0 to <12 x i32>
9875 ret <12 x i32> %2
9876 }
9877 ; CHECK-LABEL: define <4 x i32> @trunc_cast_12xi64_to_12xi32(<4 x i32>* nocaptur e nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
9878 ; CHECK-NEXT: %9 = extractelement <2 x i64> %2, i32 0
9879 ; CHECK-NEXT: %10 = trunc i64 %9 to i32
9880 ; CHECK-NEXT: %11 = insertelement <4 x i32> undef, i32 %10, i32 0
9881 ; CHECK-NEXT: %12 = extractelement <2 x i64> %2, i32 1
9882 ; CHECK-NEXT: %13 = trunc i64 %12 to i32
9883 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 1
9884 ; CHECK-NEXT: %15 = extractelement <2 x i64> %3, i32 0
9885 ; CHECK-NEXT: %16 = trunc i64 %15 to i32
9886 ; CHECK-NEXT: %17 = insertelement <4 x i32> %14, i32 %16, i32 2
9887 ; CHECK-NEXT: %18 = extractelement <2 x i64> %3, i32 1
9888 ; CHECK-NEXT: %19 = trunc i64 %18 to i32
9889 ; CHECK-NEXT: %20 = insertelement <4 x i32> %17, i32 %19, i32 3
9890 ; CHECK-NEXT: %21 = extractelement <2 x i64> %4, i32 0
9891 ; CHECK-NEXT: %22 = trunc i64 %21 to i32
9892 ; CHECK-NEXT: %23 = insertelement <4 x i32> undef, i32 %22, i32 0
9893 ; CHECK-NEXT: %24 = extractelement <2 x i64> %4, i32 1
9894 ; CHECK-NEXT: %25 = trunc i64 %24 to i32
9895 ; CHECK-NEXT: %26 = insertelement <4 x i32> %23, i32 %25, i32 1
9896 ; CHECK-NEXT: %27 = extractelement <2 x i64> %5, i32 0
9897 ; CHECK-NEXT: %28 = trunc i64 %27 to i32
9898 ; CHECK-NEXT: %29 = insertelement <4 x i32> %26, i32 %28, i32 2
9899 ; CHECK-NEXT: %30 = extractelement <2 x i64> %5, i32 1
9900 ; CHECK-NEXT: %31 = trunc i64 %30 to i32
9901 ; CHECK-NEXT: %32 = insertelement <4 x i32> %29, i32 %31, i32 3
9902 ; CHECK-NEXT: %33 = extractelement <2 x i64> %6, i32 0
9903 ; CHECK-NEXT: %34 = trunc i64 %33 to i32
9904 ; CHECK-NEXT: %35 = insertelement <4 x i32> undef, i32 %34, i32 0
9905 ; CHECK-NEXT: %36 = extractelement <2 x i64> %6, i32 1
9906 ; CHECK-NEXT: %37 = trunc i64 %36 to i32
9907 ; CHECK-NEXT: %38 = insertelement <4 x i32> %35, i32 %37, i32 1
9908 ; CHECK-NEXT: %39 = extractelement <2 x i64> %7, i32 0
9909 ; CHECK-NEXT: %40 = trunc i64 %39 to i32
9910 ; CHECK-NEXT: %41 = insertelement <4 x i32> %38, i32 %40, i32 2
9911 ; CHECK-NEXT: %42 = extractelement <2 x i64> %7, i32 1
9912 ; CHECK-NEXT: %43 = trunc i64 %42 to i32
9913 ; CHECK-NEXT: %44 = insertelement <4 x i32> %41, i32 %43, i32 3
9914 ; CHECK-NEXT: store <4 x i32> %32, <4 x i32>* %0, align 16
9915 ; CHECK-NEXT: store <4 x i32> %44, <4 x i32>* %1, align 16
9916 ; CHECK-NEXT: ret <4 x i32> %20
9917
9918 define <12 x i16> @trunc_cast_12xi64_to_12xi16(<12 x i64>) {
9919 %2 = trunc <12 x i64> %0 to <12 x i16>
9920 ret <12 x i16> %2
9921 }
9922 ; CHECK-LABEL: define <8 x i16> @trunc_cast_12xi64_to_12xi16(<8 x i16>* nocaptur e nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
9923 ; CHECK-NEXT: %8 = extractelement <2 x i64> %1, i32 0
9924 ; CHECK-NEXT: %9 = trunc i64 %8 to i16
9925 ; CHECK-NEXT: %10 = insertelement <8 x i16> undef, i16 %9, i32 0
9926 ; CHECK-NEXT: %11 = extractelement <2 x i64> %1, i32 1
9927 ; CHECK-NEXT: %12 = trunc i64 %11 to i16
9928 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 1
9929 ; CHECK-NEXT: %14 = extractelement <2 x i64> %2, i32 0
9930 ; CHECK-NEXT: %15 = trunc i64 %14 to i16
9931 ; CHECK-NEXT: %16 = insertelement <8 x i16> %13, i16 %15, i32 2
9932 ; CHECK-NEXT: %17 = extractelement <2 x i64> %2, i32 1
9933 ; CHECK-NEXT: %18 = trunc i64 %17 to i16
9934 ; CHECK-NEXT: %19 = insertelement <8 x i16> %16, i16 %18, i32 3
9935 ; CHECK-NEXT: %20 = extractelement <2 x i64> %3, i32 0
9936 ; CHECK-NEXT: %21 = trunc i64 %20 to i16
9937 ; CHECK-NEXT: %22 = insertelement <8 x i16> %19, i16 %21, i32 4
9938 ; CHECK-NEXT: %23 = extractelement <2 x i64> %3, i32 1
9939 ; CHECK-NEXT: %24 = trunc i64 %23 to i16
9940 ; CHECK-NEXT: %25 = insertelement <8 x i16> %22, i16 %24, i32 5
9941 ; CHECK-NEXT: %26 = extractelement <2 x i64> %4, i32 0
9942 ; CHECK-NEXT: %27 = trunc i64 %26 to i16
9943 ; CHECK-NEXT: %28 = insertelement <8 x i16> %25, i16 %27, i32 6
9944 ; CHECK-NEXT: %29 = extractelement <2 x i64> %4, i32 1
9945 ; CHECK-NEXT: %30 = trunc i64 %29 to i16
9946 ; CHECK-NEXT: %31 = insertelement <8 x i16> %28, i16 %30, i32 7
9947 ; CHECK-NEXT: %32 = extractelement <2 x i64> %5, i32 0
9948 ; CHECK-NEXT: %33 = trunc i64 %32 to i16
9949 ; CHECK-NEXT: %34 = insertelement <8 x i16> undef, i16 %33, i32 0
9950 ; CHECK-NEXT: %35 = extractelement <2 x i64> %5, i32 1
9951 ; CHECK-NEXT: %36 = trunc i64 %35 to i16
9952 ; CHECK-NEXT: %37 = insertelement <8 x i16> %34, i16 %36, i32 1
9953 ; CHECK-NEXT: %38 = extractelement <2 x i64> %6, i32 0
9954 ; CHECK-NEXT: %39 = trunc i64 %38 to i16
9955 ; CHECK-NEXT: %40 = insertelement <8 x i16> %37, i16 %39, i32 2
9956 ; CHECK-NEXT: %41 = extractelement <2 x i64> %6, i32 1
9957 ; CHECK-NEXT: %42 = trunc i64 %41 to i16
9958 ; CHECK-NEXT: %43 = insertelement <8 x i16> %40, i16 %42, i32 3
9959 ; CHECK-NEXT: store <8 x i16> %43, <8 x i16>* %0, align 16
9960 ; CHECK-NEXT: ret <8 x i16> %31
9961
9962 define <12 x i8> @trunc_cast_12xi64_to_12xi8(<12 x i64>) {
9963 %2 = trunc <12 x i64> %0 to <12 x i8>
9964 ret <12 x i8> %2
9965 }
9966 ; CHECK-LABEL: define <16 x i8> @trunc_cast_12xi64_to_12xi8(<2 x i64>, <2 x i64> , <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
9967 ; CHECK-NEXT: %7 = extractelement <2 x i64> %0, i32 0
9968 ; CHECK-NEXT: %8 = trunc i64 %7 to i8
9969 ; CHECK-NEXT: %9 = insertelement <16 x i8> undef, i8 %8, i32 0
9970 ; CHECK-NEXT: %10 = extractelement <2 x i64> %0, i32 1
9971 ; CHECK-NEXT: %11 = trunc i64 %10 to i8
9972 ; CHECK-NEXT: %12 = insertelement <16 x i8> %9, i8 %11, i32 1
9973 ; CHECK-NEXT: %13 = extractelement <2 x i64> %1, i32 0
9974 ; CHECK-NEXT: %14 = trunc i64 %13 to i8
9975 ; CHECK-NEXT: %15 = insertelement <16 x i8> %12, i8 %14, i32 2
9976 ; CHECK-NEXT: %16 = extractelement <2 x i64> %1, i32 1
9977 ; CHECK-NEXT: %17 = trunc i64 %16 to i8
9978 ; CHECK-NEXT: %18 = insertelement <16 x i8> %15, i8 %17, i32 3
9979 ; CHECK-NEXT: %19 = extractelement <2 x i64> %2, i32 0
9980 ; CHECK-NEXT: %20 = trunc i64 %19 to i8
9981 ; CHECK-NEXT: %21 = insertelement <16 x i8> %18, i8 %20, i32 4
9982 ; CHECK-NEXT: %22 = extractelement <2 x i64> %2, i32 1
9983 ; CHECK-NEXT: %23 = trunc i64 %22 to i8
9984 ; CHECK-NEXT: %24 = insertelement <16 x i8> %21, i8 %23, i32 5
9985 ; CHECK-NEXT: %25 = extractelement <2 x i64> %3, i32 0
9986 ; CHECK-NEXT: %26 = trunc i64 %25 to i8
9987 ; CHECK-NEXT: %27 = insertelement <16 x i8> %24, i8 %26, i32 6
9988 ; CHECK-NEXT: %28 = extractelement <2 x i64> %3, i32 1
9989 ; CHECK-NEXT: %29 = trunc i64 %28 to i8
9990 ; CHECK-NEXT: %30 = insertelement <16 x i8> %27, i8 %29, i32 7
9991 ; CHECK-NEXT: %31 = extractelement <2 x i64> %4, i32 0
9992 ; CHECK-NEXT: %32 = trunc i64 %31 to i8
9993 ; CHECK-NEXT: %33 = insertelement <16 x i8> %30, i8 %32, i32 8
9994 ; CHECK-NEXT: %34 = extractelement <2 x i64> %4, i32 1
9995 ; CHECK-NEXT: %35 = trunc i64 %34 to i8
9996 ; CHECK-NEXT: %36 = insertelement <16 x i8> %33, i8 %35, i32 9
9997 ; CHECK-NEXT: %37 = extractelement <2 x i64> %5, i32 0
9998 ; CHECK-NEXT: %38 = trunc i64 %37 to i8
9999 ; CHECK-NEXT: %39 = insertelement <16 x i8> %36, i8 %38, i32 10
10000 ; CHECK-NEXT: %40 = extractelement <2 x i64> %5, i32 1
10001 ; CHECK-NEXT: %41 = trunc i64 %40 to i8
10002 ; CHECK-NEXT: %42 = insertelement <16 x i8> %39, i8 %41, i32 11
10003 ; CHECK-NEXT: ret <16 x i8> %42
10004
10005 define <12 x i16> @trunc_cast_12xi32_to_12xi16(<12 x i32>) {
10006 %2 = trunc <12 x i32> %0 to <12 x i16>
10007 ret <12 x i16> %2
10008 }
10009 ; CHECK-LABEL: define <8 x i16> @trunc_cast_12xi32_to_12xi16(<8 x i16>* nocaptur e nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>)
10010 ; CHECK-NEXT: %5 = extractelement <4 x i32> %1, i32 0
10011 ; CHECK-NEXT: %6 = trunc i32 %5 to i16
10012 ; CHECK-NEXT: %7 = insertelement <8 x i16> undef, i16 %6, i32 0
10013 ; CHECK-NEXT: %8 = extractelement <4 x i32> %1, i32 1
10014 ; CHECK-NEXT: %9 = trunc i32 %8 to i16
10015 ; CHECK-NEXT: %10 = insertelement <8 x i16> %7, i16 %9, i32 1
10016 ; CHECK-NEXT: %11 = extractelement <4 x i32> %1, i32 2
10017 ; CHECK-NEXT: %12 = trunc i32 %11 to i16
10018 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 2
10019 ; CHECK-NEXT: %14 = extractelement <4 x i32> %1, i32 3
10020 ; CHECK-NEXT: %15 = trunc i32 %14 to i16
10021 ; CHECK-NEXT: %16 = insertelement <8 x i16> %13, i16 %15, i32 3
10022 ; CHECK-NEXT: %17 = extractelement <4 x i32> %2, i32 0
10023 ; CHECK-NEXT: %18 = trunc i32 %17 to i16
10024 ; CHECK-NEXT: %19 = insertelement <8 x i16> %16, i16 %18, i32 4
10025 ; CHECK-NEXT: %20 = extractelement <4 x i32> %2, i32 1
10026 ; CHECK-NEXT: %21 = trunc i32 %20 to i16
10027 ; CHECK-NEXT: %22 = insertelement <8 x i16> %19, i16 %21, i32 5
10028 ; CHECK-NEXT: %23 = extractelement <4 x i32> %2, i32 2
10029 ; CHECK-NEXT: %24 = trunc i32 %23 to i16
10030 ; CHECK-NEXT: %25 = insertelement <8 x i16> %22, i16 %24, i32 6
10031 ; CHECK-NEXT: %26 = extractelement <4 x i32> %2, i32 3
10032 ; CHECK-NEXT: %27 = trunc i32 %26 to i16
10033 ; CHECK-NEXT: %28 = insertelement <8 x i16> %25, i16 %27, i32 7
10034 ; CHECK-NEXT: %29 = extractelement <4 x i32> %3, i32 0
10035 ; CHECK-NEXT: %30 = trunc i32 %29 to i16
10036 ; CHECK-NEXT: %31 = insertelement <8 x i16> undef, i16 %30, i32 0
10037 ; CHECK-NEXT: %32 = extractelement <4 x i32> %3, i32 1
10038 ; CHECK-NEXT: %33 = trunc i32 %32 to i16
10039 ; CHECK-NEXT: %34 = insertelement <8 x i16> %31, i16 %33, i32 1
10040 ; CHECK-NEXT: %35 = extractelement <4 x i32> %3, i32 2
10041 ; CHECK-NEXT: %36 = trunc i32 %35 to i16
10042 ; CHECK-NEXT: %37 = insertelement <8 x i16> %34, i16 %36, i32 2
10043 ; CHECK-NEXT: %38 = extractelement <4 x i32> %3, i32 3
10044 ; CHECK-NEXT: %39 = trunc i32 %38 to i16
10045 ; CHECK-NEXT: %40 = insertelement <8 x i16> %37, i16 %39, i32 3
10046 ; CHECK-NEXT: store <8 x i16> %40, <8 x i16>* %0, align 16
10047 ; CHECK-NEXT: ret <8 x i16> %28
10048
10049 define <12 x i8> @trunc_cast_12xi32_to_12xi8(<12 x i32>) {
10050 %2 = trunc <12 x i32> %0 to <12 x i8>
10051 ret <12 x i8> %2
10052 }
10053 ; CHECK-LABEL: define <16 x i8> @trunc_cast_12xi32_to_12xi8(<4 x i32>, <4 x i32> , <4 x i32>)
10054 ; CHECK-NEXT: %4 = extractelement <4 x i32> %0, i32 0
10055 ; CHECK-NEXT: %5 = trunc i32 %4 to i8
10056 ; CHECK-NEXT: %6 = insertelement <16 x i8> undef, i8 %5, i32 0
10057 ; CHECK-NEXT: %7 = extractelement <4 x i32> %0, i32 1
10058 ; CHECK-NEXT: %8 = trunc i32 %7 to i8
10059 ; CHECK-NEXT: %9 = insertelement <16 x i8> %6, i8 %8, i32 1
10060 ; CHECK-NEXT: %10 = extractelement <4 x i32> %0, i32 2
10061 ; CHECK-NEXT: %11 = trunc i32 %10 to i8
10062 ; CHECK-NEXT: %12 = insertelement <16 x i8> %9, i8 %11, i32 2
10063 ; CHECK-NEXT: %13 = extractelement <4 x i32> %0, i32 3
10064 ; CHECK-NEXT: %14 = trunc i32 %13 to i8
10065 ; CHECK-NEXT: %15 = insertelement <16 x i8> %12, i8 %14, i32 3
10066 ; CHECK-NEXT: %16 = extractelement <4 x i32> %1, i32 0
10067 ; CHECK-NEXT: %17 = trunc i32 %16 to i8
10068 ; CHECK-NEXT: %18 = insertelement <16 x i8> %15, i8 %17, i32 4
10069 ; CHECK-NEXT: %19 = extractelement <4 x i32> %1, i32 1
10070 ; CHECK-NEXT: %20 = trunc i32 %19 to i8
10071 ; CHECK-NEXT: %21 = insertelement <16 x i8> %18, i8 %20, i32 5
10072 ; CHECK-NEXT: %22 = extractelement <4 x i32> %1, i32 2
10073 ; CHECK-NEXT: %23 = trunc i32 %22 to i8
10074 ; CHECK-NEXT: %24 = insertelement <16 x i8> %21, i8 %23, i32 6
10075 ; CHECK-NEXT: %25 = extractelement <4 x i32> %1, i32 3
10076 ; CHECK-NEXT: %26 = trunc i32 %25 to i8
10077 ; CHECK-NEXT: %27 = insertelement <16 x i8> %24, i8 %26, i32 7
10078 ; CHECK-NEXT: %28 = extractelement <4 x i32> %2, i32 0
10079 ; CHECK-NEXT: %29 = trunc i32 %28 to i8
10080 ; CHECK-NEXT: %30 = insertelement <16 x i8> %27, i8 %29, i32 8
10081 ; CHECK-NEXT: %31 = extractelement <4 x i32> %2, i32 1
10082 ; CHECK-NEXT: %32 = trunc i32 %31 to i8
10083 ; CHECK-NEXT: %33 = insertelement <16 x i8> %30, i8 %32, i32 9
10084 ; CHECK-NEXT: %34 = extractelement <4 x i32> %2, i32 2
10085 ; CHECK-NEXT: %35 = trunc i32 %34 to i8
10086 ; CHECK-NEXT: %36 = insertelement <16 x i8> %33, i8 %35, i32 10
10087 ; CHECK-NEXT: %37 = extractelement <4 x i32> %2, i32 3
10088 ; CHECK-NEXT: %38 = trunc i32 %37 to i8
10089 ; CHECK-NEXT: %39 = insertelement <16 x i8> %36, i8 %38, i32 11
10090 ; CHECK-NEXT: ret <16 x i8> %39
10091
10092 define <12 x i8> @trunc_cast_12xi16_to_12xi8(<12 x i16>) {
10093 %2 = trunc <12 x i16> %0 to <12 x i8>
10094 ret <12 x i8> %2
10095 }
10096 ; CHECK-LABEL: define <16 x i8> @trunc_cast_12xi16_to_12xi8(<8 x i16>, <8 x i16> )
10097 ; CHECK-NEXT: %3 = extractelement <8 x i16> %0, i32 0
10098 ; CHECK-NEXT: %4 = trunc i16 %3 to i8
10099 ; CHECK-NEXT: %5 = insertelement <16 x i8> undef, i8 %4, i32 0
10100 ; CHECK-NEXT: %6 = extractelement <8 x i16> %0, i32 1
10101 ; CHECK-NEXT: %7 = trunc i16 %6 to i8
10102 ; CHECK-NEXT: %8 = insertelement <16 x i8> %5, i8 %7, i32 1
10103 ; CHECK-NEXT: %9 = extractelement <8 x i16> %0, i32 2
10104 ; CHECK-NEXT: %10 = trunc i16 %9 to i8
10105 ; CHECK-NEXT: %11 = insertelement <16 x i8> %8, i8 %10, i32 2
10106 ; CHECK-NEXT: %12 = extractelement <8 x i16> %0, i32 3
10107 ; CHECK-NEXT: %13 = trunc i16 %12 to i8
10108 ; CHECK-NEXT: %14 = insertelement <16 x i8> %11, i8 %13, i32 3
10109 ; CHECK-NEXT: %15 = extractelement <8 x i16> %0, i32 4
10110 ; CHECK-NEXT: %16 = trunc i16 %15 to i8
10111 ; CHECK-NEXT: %17 = insertelement <16 x i8> %14, i8 %16, i32 4
10112 ; CHECK-NEXT: %18 = extractelement <8 x i16> %0, i32 5
10113 ; CHECK-NEXT: %19 = trunc i16 %18 to i8
10114 ; CHECK-NEXT: %20 = insertelement <16 x i8> %17, i8 %19, i32 5
10115 ; CHECK-NEXT: %21 = extractelement <8 x i16> %0, i32 6
10116 ; CHECK-NEXT: %22 = trunc i16 %21 to i8
10117 ; CHECK-NEXT: %23 = insertelement <16 x i8> %20, i8 %22, i32 6
10118 ; CHECK-NEXT: %24 = extractelement <8 x i16> %0, i32 7
10119 ; CHECK-NEXT: %25 = trunc i16 %24 to i8
10120 ; CHECK-NEXT: %26 = insertelement <16 x i8> %23, i8 %25, i32 7
10121 ; CHECK-NEXT: %27 = extractelement <8 x i16> %1, i32 0
10122 ; CHECK-NEXT: %28 = trunc i16 %27 to i8
10123 ; CHECK-NEXT: %29 = insertelement <16 x i8> %26, i8 %28, i32 8
10124 ; CHECK-NEXT: %30 = extractelement <8 x i16> %1, i32 1
10125 ; CHECK-NEXT: %31 = trunc i16 %30 to i8
10126 ; CHECK-NEXT: %32 = insertelement <16 x i8> %29, i8 %31, i32 9
10127 ; CHECK-NEXT: %33 = extractelement <8 x i16> %1, i32 2
10128 ; CHECK-NEXT: %34 = trunc i16 %33 to i8
10129 ; CHECK-NEXT: %35 = insertelement <16 x i8> %32, i8 %34, i32 10
10130 ; CHECK-NEXT: %36 = extractelement <8 x i16> %1, i32 3
10131 ; CHECK-NEXT: %37 = trunc i16 %36 to i8
10132 ; CHECK-NEXT: %38 = insertelement <16 x i8> %35, i8 %37, i32 11
10133 ; CHECK-NEXT: ret <16 x i8> %38
10134
10135 define <16 x i16> @zext_cast_16xi8_to_16xi16(<16 x i8>) {
10136 %2 = zext <16 x i8> %0 to <16 x i16>
10137 ret <16 x i16> %2
10138 }
10139 ; CHECK-LABEL: define <8 x i16> @zext_cast_16xi8_to_16xi16(<8 x i16>* nocapture nonnull dereferenceable(16), <16 x i8>)
10140 ; CHECK-NEXT: %3 = extractelement <16 x i8> %1, i32 0
10141 ; CHECK-NEXT: %4 = zext i8 %3 to i16
10142 ; CHECK-NEXT: %5 = insertelement <8 x i16> undef, i16 %4, i32 0
10143 ; CHECK-NEXT: %6 = extractelement <16 x i8> %1, i32 1
10144 ; CHECK-NEXT: %7 = zext i8 %6 to i16
10145 ; CHECK-NEXT: %8 = insertelement <8 x i16> %5, i16 %7, i32 1
10146 ; CHECK-NEXT: %9 = extractelement <16 x i8> %1, i32 2
10147 ; CHECK-NEXT: %10 = zext i8 %9 to i16
10148 ; CHECK-NEXT: %11 = insertelement <8 x i16> %8, i16 %10, i32 2
10149 ; CHECK-NEXT: %12 = extractelement <16 x i8> %1, i32 3
10150 ; CHECK-NEXT: %13 = zext i8 %12 to i16
10151 ; CHECK-NEXT: %14 = insertelement <8 x i16> %11, i16 %13, i32 3
10152 ; CHECK-NEXT: %15 = extractelement <16 x i8> %1, i32 4
10153 ; CHECK-NEXT: %16 = zext i8 %15 to i16
10154 ; CHECK-NEXT: %17 = insertelement <8 x i16> %14, i16 %16, i32 4
10155 ; CHECK-NEXT: %18 = extractelement <16 x i8> %1, i32 5
10156 ; CHECK-NEXT: %19 = zext i8 %18 to i16
10157 ; CHECK-NEXT: %20 = insertelement <8 x i16> %17, i16 %19, i32 5
10158 ; CHECK-NEXT: %21 = extractelement <16 x i8> %1, i32 6
10159 ; CHECK-NEXT: %22 = zext i8 %21 to i16
10160 ; CHECK-NEXT: %23 = insertelement <8 x i16> %20, i16 %22, i32 6
10161 ; CHECK-NEXT: %24 = extractelement <16 x i8> %1, i32 7
10162 ; CHECK-NEXT: %25 = zext i8 %24 to i16
10163 ; CHECK-NEXT: %26 = insertelement <8 x i16> %23, i16 %25, i32 7
10164 ; CHECK-NEXT: %27 = extractelement <16 x i8> %1, i32 8
10165 ; CHECK-NEXT: %28 = zext i8 %27 to i16
10166 ; CHECK-NEXT: %29 = insertelement <8 x i16> undef, i16 %28, i32 0
10167 ; CHECK-NEXT: %30 = extractelement <16 x i8> %1, i32 9
10168 ; CHECK-NEXT: %31 = zext i8 %30 to i16
10169 ; CHECK-NEXT: %32 = insertelement <8 x i16> %29, i16 %31, i32 1
10170 ; CHECK-NEXT: %33 = extractelement <16 x i8> %1, i32 10
10171 ; CHECK-NEXT: %34 = zext i8 %33 to i16
10172 ; CHECK-NEXT: %35 = insertelement <8 x i16> %32, i16 %34, i32 2
10173 ; CHECK-NEXT: %36 = extractelement <16 x i8> %1, i32 11
10174 ; CHECK-NEXT: %37 = zext i8 %36 to i16
10175 ; CHECK-NEXT: %38 = insertelement <8 x i16> %35, i16 %37, i32 3
10176 ; CHECK-NEXT: %39 = extractelement <16 x i8> %1, i32 12
10177 ; CHECK-NEXT: %40 = zext i8 %39 to i16
10178 ; CHECK-NEXT: %41 = insertelement <8 x i16> %38, i16 %40, i32 4
10179 ; CHECK-NEXT: %42 = extractelement <16 x i8> %1, i32 13
10180 ; CHECK-NEXT: %43 = zext i8 %42 to i16
10181 ; CHECK-NEXT: %44 = insertelement <8 x i16> %41, i16 %43, i32 5
10182 ; CHECK-NEXT: %45 = extractelement <16 x i8> %1, i32 14
10183 ; CHECK-NEXT: %46 = zext i8 %45 to i16
10184 ; CHECK-NEXT: %47 = insertelement <8 x i16> %44, i16 %46, i32 6
10185 ; CHECK-NEXT: %48 = extractelement <16 x i8> %1, i32 15
10186 ; CHECK-NEXT: %49 = zext i8 %48 to i16
10187 ; CHECK-NEXT: %50 = insertelement <8 x i16> %47, i16 %49, i32 7
10188 ; CHECK-NEXT: store <8 x i16> %50, <8 x i16>* %0, align 16
10189 ; CHECK-NEXT: ret <8 x i16> %26
10190
10191 define <16 x i32> @zext_cast_16xi8_to_16xi32(<16 x i8>) {
10192 %2 = zext <16 x i8> %0 to <16 x i32>
10193 ret <16 x i32> %2
10194 }
10195 ; CHECK-LABEL: define <4 x i32> @zext_cast_16xi8_to_16xi32(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), < 4 x i32>* nocapture nonnull dereferenceable(16), <16 x i8>)
10196 ; CHECK-NEXT: %5 = extractelement <16 x i8> %3, i32 0
10197 ; CHECK-NEXT: %6 = zext i8 %5 to i32
10198 ; CHECK-NEXT: %7 = insertelement <4 x i32> undef, i32 %6, i32 0
10199 ; CHECK-NEXT: %8 = extractelement <16 x i8> %3, i32 1
10200 ; CHECK-NEXT: %9 = zext i8 %8 to i32
10201 ; CHECK-NEXT: %10 = insertelement <4 x i32> %7, i32 %9, i32 1
10202 ; CHECK-NEXT: %11 = extractelement <16 x i8> %3, i32 2
10203 ; CHECK-NEXT: %12 = zext i8 %11 to i32
10204 ; CHECK-NEXT: %13 = insertelement <4 x i32> %10, i32 %12, i32 2
10205 ; CHECK-NEXT: %14 = extractelement <16 x i8> %3, i32 3
10206 ; CHECK-NEXT: %15 = zext i8 %14 to i32
10207 ; CHECK-NEXT: %16 = insertelement <4 x i32> %13, i32 %15, i32 3
10208 ; CHECK-NEXT: %17 = extractelement <16 x i8> %3, i32 4
10209 ; CHECK-NEXT: %18 = zext i8 %17 to i32
10210 ; CHECK-NEXT: %19 = insertelement <4 x i32> undef, i32 %18, i32 0
10211 ; CHECK-NEXT: %20 = extractelement <16 x i8> %3, i32 5
10212 ; CHECK-NEXT: %21 = zext i8 %20 to i32
10213 ; CHECK-NEXT: %22 = insertelement <4 x i32> %19, i32 %21, i32 1
10214 ; CHECK-NEXT: %23 = extractelement <16 x i8> %3, i32 6
10215 ; CHECK-NEXT: %24 = zext i8 %23 to i32
10216 ; CHECK-NEXT: %25 = insertelement <4 x i32> %22, i32 %24, i32 2
10217 ; CHECK-NEXT: %26 = extractelement <16 x i8> %3, i32 7
10218 ; CHECK-NEXT: %27 = zext i8 %26 to i32
10219 ; CHECK-NEXT: %28 = insertelement <4 x i32> %25, i32 %27, i32 3
10220 ; CHECK-NEXT: %29 = extractelement <16 x i8> %3, i32 8
10221 ; CHECK-NEXT: %30 = zext i8 %29 to i32
10222 ; CHECK-NEXT: %31 = insertelement <4 x i32> undef, i32 %30, i32 0
10223 ; CHECK-NEXT: %32 = extractelement <16 x i8> %3, i32 9
10224 ; CHECK-NEXT: %33 = zext i8 %32 to i32
10225 ; CHECK-NEXT: %34 = insertelement <4 x i32> %31, i32 %33, i32 1
10226 ; CHECK-NEXT: %35 = extractelement <16 x i8> %3, i32 10
10227 ; CHECK-NEXT: %36 = zext i8 %35 to i32
10228 ; CHECK-NEXT: %37 = insertelement <4 x i32> %34, i32 %36, i32 2
10229 ; CHECK-NEXT: %38 = extractelement <16 x i8> %3, i32 11
10230 ; CHECK-NEXT: %39 = zext i8 %38 to i32
10231 ; CHECK-NEXT: %40 = insertelement <4 x i32> %37, i32 %39, i32 3
10232 ; CHECK-NEXT: %41 = extractelement <16 x i8> %3, i32 12
10233 ; CHECK-NEXT: %42 = zext i8 %41 to i32
10234 ; CHECK-NEXT: %43 = insertelement <4 x i32> undef, i32 %42, i32 0
10235 ; CHECK-NEXT: %44 = extractelement <16 x i8> %3, i32 13
10236 ; CHECK-NEXT: %45 = zext i8 %44 to i32
10237 ; CHECK-NEXT: %46 = insertelement <4 x i32> %43, i32 %45, i32 1
10238 ; CHECK-NEXT: %47 = extractelement <16 x i8> %3, i32 14
10239 ; CHECK-NEXT: %48 = zext i8 %47 to i32
10240 ; CHECK-NEXT: %49 = insertelement <4 x i32> %46, i32 %48, i32 2
10241 ; CHECK-NEXT: %50 = extractelement <16 x i8> %3, i32 15
10242 ; CHECK-NEXT: %51 = zext i8 %50 to i32
10243 ; CHECK-NEXT: %52 = insertelement <4 x i32> %49, i32 %51, i32 3
10244 ; CHECK-NEXT: store <4 x i32> %28, <4 x i32>* %0, align 16
10245 ; CHECK-NEXT: store <4 x i32> %40, <4 x i32>* %1, align 16
10246 ; CHECK-NEXT: store <4 x i32> %52, <4 x i32>* %2, align 16
10247 ; CHECK-NEXT: ret <4 x i32> %16
10248
10249 define <16 x i64> @zext_cast_16xi8_to_16xi64(<16 x i8>) {
10250 %2 = zext <16 x i8> %0 to <16 x i64>
10251 ret <16 x i64> %2
10252 }
10253 ; CHECK-LABEL: define <2 x i64> @zext_cast_16xi8_to_16xi64(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), < 2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull de referenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferencea ble(16), <16 x i8>)
10254 ; CHECK-NEXT: %9 = extractelement <16 x i8> %7, i32 0
10255 ; CHECK-NEXT: %10 = zext i8 %9 to i64
10256 ; CHECK-NEXT: %11 = insertelement <2 x i64> undef, i64 %10, i32 0
10257 ; CHECK-NEXT: %12 = extractelement <16 x i8> %7, i32 1
10258 ; CHECK-NEXT: %13 = zext i8 %12 to i64
10259 ; CHECK-NEXT: %14 = insertelement <2 x i64> %11, i64 %13, i32 1
10260 ; CHECK-NEXT: %15 = extractelement <16 x i8> %7, i32 2
10261 ; CHECK-NEXT: %16 = zext i8 %15 to i64
10262 ; CHECK-NEXT: %17 = insertelement <2 x i64> undef, i64 %16, i32 0
10263 ; CHECK-NEXT: %18 = extractelement <16 x i8> %7, i32 3
10264 ; CHECK-NEXT: %19 = zext i8 %18 to i64
10265 ; CHECK-NEXT: %20 = insertelement <2 x i64> %17, i64 %19, i32 1
10266 ; CHECK-NEXT: %21 = extractelement <16 x i8> %7, i32 4
10267 ; CHECK-NEXT: %22 = zext i8 %21 to i64
10268 ; CHECK-NEXT: %23 = insertelement <2 x i64> undef, i64 %22, i32 0
10269 ; CHECK-NEXT: %24 = extractelement <16 x i8> %7, i32 5
10270 ; CHECK-NEXT: %25 = zext i8 %24 to i64
10271 ; CHECK-NEXT: %26 = insertelement <2 x i64> %23, i64 %25, i32 1
10272 ; CHECK-NEXT: %27 = extractelement <16 x i8> %7, i32 6
10273 ; CHECK-NEXT: %28 = zext i8 %27 to i64
10274 ; CHECK-NEXT: %29 = insertelement <2 x i64> undef, i64 %28, i32 0
10275 ; CHECK-NEXT: %30 = extractelement <16 x i8> %7, i32 7
10276 ; CHECK-NEXT: %31 = zext i8 %30 to i64
10277 ; CHECK-NEXT: %32 = insertelement <2 x i64> %29, i64 %31, i32 1
10278 ; CHECK-NEXT: %33 = extractelement <16 x i8> %7, i32 8
10279 ; CHECK-NEXT: %34 = zext i8 %33 to i64
10280 ; CHECK-NEXT: %35 = insertelement <2 x i64> undef, i64 %34, i32 0
10281 ; CHECK-NEXT: %36 = extractelement <16 x i8> %7, i32 9
10282 ; CHECK-NEXT: %37 = zext i8 %36 to i64
10283 ; CHECK-NEXT: %38 = insertelement <2 x i64> %35, i64 %37, i32 1
10284 ; CHECK-NEXT: %39 = extractelement <16 x i8> %7, i32 10
10285 ; CHECK-NEXT: %40 = zext i8 %39 to i64
10286 ; CHECK-NEXT: %41 = insertelement <2 x i64> undef, i64 %40, i32 0
10287 ; CHECK-NEXT: %42 = extractelement <16 x i8> %7, i32 11
10288 ; CHECK-NEXT: %43 = zext i8 %42 to i64
10289 ; CHECK-NEXT: %44 = insertelement <2 x i64> %41, i64 %43, i32 1
10290 ; CHECK-NEXT: %45 = extractelement <16 x i8> %7, i32 12
10291 ; CHECK-NEXT: %46 = zext i8 %45 to i64
10292 ; CHECK-NEXT: %47 = insertelement <2 x i64> undef, i64 %46, i32 0
10293 ; CHECK-NEXT: %48 = extractelement <16 x i8> %7, i32 13
10294 ; CHECK-NEXT: %49 = zext i8 %48 to i64
10295 ; CHECK-NEXT: %50 = insertelement <2 x i64> %47, i64 %49, i32 1
10296 ; CHECK-NEXT: %51 = extractelement <16 x i8> %7, i32 14
10297 ; CHECK-NEXT: %52 = zext i8 %51 to i64
10298 ; CHECK-NEXT: %53 = insertelement <2 x i64> undef, i64 %52, i32 0
10299 ; CHECK-NEXT: %54 = extractelement <16 x i8> %7, i32 15
10300 ; CHECK-NEXT: %55 = zext i8 %54 to i64
10301 ; CHECK-NEXT: %56 = insertelement <2 x i64> %53, i64 %55, i32 1
10302 ; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %0, align 16
10303 ; CHECK-NEXT: store <2 x i64> %26, <2 x i64>* %1, align 16
10304 ; CHECK-NEXT: store <2 x i64> %32, <2 x i64>* %2, align 16
10305 ; CHECK-NEXT: store <2 x i64> %38, <2 x i64>* %3, align 16
10306 ; CHECK-NEXT: store <2 x i64> %44, <2 x i64>* %4, align 16
10307 ; CHECK-NEXT: store <2 x i64> %50, <2 x i64>* %5, align 16
10308 ; CHECK-NEXT: store <2 x i64> %56, <2 x i64>* %6, align 16
10309 ; CHECK-NEXT: ret <2 x i64> %14
10310
10311 define <16 x i32> @zext_cast_16xi16_to_16xi32(<16 x i16>) {
10312 %2 = zext <16 x i16> %0 to <16 x i32>
10313 ret <16 x i32> %2
10314 }
10315 ; CHECK-LABEL: define <4 x i32> @zext_cast_16xi16_to_16xi32(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>)
10316 ; CHECK-NEXT: %6 = extractelement <8 x i16> %3, i32 0
10317 ; CHECK-NEXT: %7 = zext i16 %6 to i32
10318 ; CHECK-NEXT: %8 = insertelement <4 x i32> undef, i32 %7, i32 0
10319 ; CHECK-NEXT: %9 = extractelement <8 x i16> %3, i32 1
10320 ; CHECK-NEXT: %10 = zext i16 %9 to i32
10321 ; CHECK-NEXT: %11 = insertelement <4 x i32> %8, i32 %10, i32 1
10322 ; CHECK-NEXT: %12 = extractelement <8 x i16> %3, i32 2
10323 ; CHECK-NEXT: %13 = zext i16 %12 to i32
10324 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 2
10325 ; CHECK-NEXT: %15 = extractelement <8 x i16> %3, i32 3
10326 ; CHECK-NEXT: %16 = zext i16 %15 to i32
10327 ; CHECK-NEXT: %17 = insertelement <4 x i32> %14, i32 %16, i32 3
10328 ; CHECK-NEXT: %18 = extractelement <8 x i16> %3, i32 4
10329 ; CHECK-NEXT: %19 = zext i16 %18 to i32
10330 ; CHECK-NEXT: %20 = insertelement <4 x i32> undef, i32 %19, i32 0
10331 ; CHECK-NEXT: %21 = extractelement <8 x i16> %3, i32 5
10332 ; CHECK-NEXT: %22 = zext i16 %21 to i32
10333 ; CHECK-NEXT: %23 = insertelement <4 x i32> %20, i32 %22, i32 1
10334 ; CHECK-NEXT: %24 = extractelement <8 x i16> %3, i32 6
10335 ; CHECK-NEXT: %25 = zext i16 %24 to i32
10336 ; CHECK-NEXT: %26 = insertelement <4 x i32> %23, i32 %25, i32 2
10337 ; CHECK-NEXT: %27 = extractelement <8 x i16> %3, i32 7
10338 ; CHECK-NEXT: %28 = zext i16 %27 to i32
10339 ; CHECK-NEXT: %29 = insertelement <4 x i32> %26, i32 %28, i32 3
10340 ; CHECK-NEXT: %30 = extractelement <8 x i16> %4, i32 0
10341 ; CHECK-NEXT: %31 = zext i16 %30 to i32
10342 ; CHECK-NEXT: %32 = insertelement <4 x i32> undef, i32 %31, i32 0
10343 ; CHECK-NEXT: %33 = extractelement <8 x i16> %4, i32 1
10344 ; CHECK-NEXT: %34 = zext i16 %33 to i32
10345 ; CHECK-NEXT: %35 = insertelement <4 x i32> %32, i32 %34, i32 1
10346 ; CHECK-NEXT: %36 = extractelement <8 x i16> %4, i32 2
10347 ; CHECK-NEXT: %37 = zext i16 %36 to i32
10348 ; CHECK-NEXT: %38 = insertelement <4 x i32> %35, i32 %37, i32 2
10349 ; CHECK-NEXT: %39 = extractelement <8 x i16> %4, i32 3
10350 ; CHECK-NEXT: %40 = zext i16 %39 to i32
10351 ; CHECK-NEXT: %41 = insertelement <4 x i32> %38, i32 %40, i32 3
10352 ; CHECK-NEXT: %42 = extractelement <8 x i16> %4, i32 4
10353 ; CHECK-NEXT: %43 = zext i16 %42 to i32
10354 ; CHECK-NEXT: %44 = insertelement <4 x i32> undef, i32 %43, i32 0
10355 ; CHECK-NEXT: %45 = extractelement <8 x i16> %4, i32 5
10356 ; CHECK-NEXT: %46 = zext i16 %45 to i32
10357 ; CHECK-NEXT: %47 = insertelement <4 x i32> %44, i32 %46, i32 1
10358 ; CHECK-NEXT: %48 = extractelement <8 x i16> %4, i32 6
10359 ; CHECK-NEXT: %49 = zext i16 %48 to i32
10360 ; CHECK-NEXT: %50 = insertelement <4 x i32> %47, i32 %49, i32 2
10361 ; CHECK-NEXT: %51 = extractelement <8 x i16> %4, i32 7
10362 ; CHECK-NEXT: %52 = zext i16 %51 to i32
10363 ; CHECK-NEXT: %53 = insertelement <4 x i32> %50, i32 %52, i32 3
10364 ; CHECK-NEXT: store <4 x i32> %29, <4 x i32>* %0, align 16
10365 ; CHECK-NEXT: store <4 x i32> %41, <4 x i32>* %1, align 16
10366 ; CHECK-NEXT: store <4 x i32> %53, <4 x i32>* %2, align 16
10367 ; CHECK-NEXT: ret <4 x i32> %17
10368
10369 define <16 x i64> @zext_cast_16xi16_to_16xi64(<16 x i16>) {
10370 %2 = zext <16 x i16> %0 to <16 x i64>
10371 ret <16 x i64> %2
10372 }
10373 ; CHECK-LABEL: define <2 x i64> @zext_cast_16xi16_to_16xi64(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull d ereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereference able(16), <8 x i16>, <8 x i16>)
10374 ; CHECK-NEXT: %10 = extractelement <8 x i16> %7, i32 0
10375 ; CHECK-NEXT: %11 = zext i16 %10 to i64
10376 ; CHECK-NEXT: %12 = insertelement <2 x i64> undef, i64 %11, i32 0
10377 ; CHECK-NEXT: %13 = extractelement <8 x i16> %7, i32 1
10378 ; CHECK-NEXT: %14 = zext i16 %13 to i64
10379 ; CHECK-NEXT: %15 = insertelement <2 x i64> %12, i64 %14, i32 1
10380 ; CHECK-NEXT: %16 = extractelement <8 x i16> %7, i32 2
10381 ; CHECK-NEXT: %17 = zext i16 %16 to i64
10382 ; CHECK-NEXT: %18 = insertelement <2 x i64> undef, i64 %17, i32 0
10383 ; CHECK-NEXT: %19 = extractelement <8 x i16> %7, i32 3
10384 ; CHECK-NEXT: %20 = zext i16 %19 to i64
10385 ; CHECK-NEXT: %21 = insertelement <2 x i64> %18, i64 %20, i32 1
10386 ; CHECK-NEXT: %22 = extractelement <8 x i16> %7, i32 4
10387 ; CHECK-NEXT: %23 = zext i16 %22 to i64
10388 ; CHECK-NEXT: %24 = insertelement <2 x i64> undef, i64 %23, i32 0
10389 ; CHECK-NEXT: %25 = extractelement <8 x i16> %7, i32 5
10390 ; CHECK-NEXT: %26 = zext i16 %25 to i64
10391 ; CHECK-NEXT: %27 = insertelement <2 x i64> %24, i64 %26, i32 1
10392 ; CHECK-NEXT: %28 = extractelement <8 x i16> %7, i32 6
10393 ; CHECK-NEXT: %29 = zext i16 %28 to i64
10394 ; CHECK-NEXT: %30 = insertelement <2 x i64> undef, i64 %29, i32 0
10395 ; CHECK-NEXT: %31 = extractelement <8 x i16> %7, i32 7
10396 ; CHECK-NEXT: %32 = zext i16 %31 to i64
10397 ; CHECK-NEXT: %33 = insertelement <2 x i64> %30, i64 %32, i32 1
10398 ; CHECK-NEXT: %34 = extractelement <8 x i16> %8, i32 0
10399 ; CHECK-NEXT: %35 = zext i16 %34 to i64
10400 ; CHECK-NEXT: %36 = insertelement <2 x i64> undef, i64 %35, i32 0
10401 ; CHECK-NEXT: %37 = extractelement <8 x i16> %8, i32 1
10402 ; CHECK-NEXT: %38 = zext i16 %37 to i64
10403 ; CHECK-NEXT: %39 = insertelement <2 x i64> %36, i64 %38, i32 1
10404 ; CHECK-NEXT: %40 = extractelement <8 x i16> %8, i32 2
10405 ; CHECK-NEXT: %41 = zext i16 %40 to i64
10406 ; CHECK-NEXT: %42 = insertelement <2 x i64> undef, i64 %41, i32 0
10407 ; CHECK-NEXT: %43 = extractelement <8 x i16> %8, i32 3
10408 ; CHECK-NEXT: %44 = zext i16 %43 to i64
10409 ; CHECK-NEXT: %45 = insertelement <2 x i64> %42, i64 %44, i32 1
10410 ; CHECK-NEXT: %46 = extractelement <8 x i16> %8, i32 4
10411 ; CHECK-NEXT: %47 = zext i16 %46 to i64
10412 ; CHECK-NEXT: %48 = insertelement <2 x i64> undef, i64 %47, i32 0
10413 ; CHECK-NEXT: %49 = extractelement <8 x i16> %8, i32 5
10414 ; CHECK-NEXT: %50 = zext i16 %49 to i64
10415 ; CHECK-NEXT: %51 = insertelement <2 x i64> %48, i64 %50, i32 1
10416 ; CHECK-NEXT: %52 = extractelement <8 x i16> %8, i32 6
10417 ; CHECK-NEXT: %53 = zext i16 %52 to i64
10418 ; CHECK-NEXT: %54 = insertelement <2 x i64> undef, i64 %53, i32 0
10419 ; CHECK-NEXT: %55 = extractelement <8 x i16> %8, i32 7
10420 ; CHECK-NEXT: %56 = zext i16 %55 to i64
10421 ; CHECK-NEXT: %57 = insertelement <2 x i64> %54, i64 %56, i32 1
10422 ; CHECK-NEXT: store <2 x i64> %21, <2 x i64>* %0, align 16
10423 ; CHECK-NEXT: store <2 x i64> %27, <2 x i64>* %1, align 16
10424 ; CHECK-NEXT: store <2 x i64> %33, <2 x i64>* %2, align 16
10425 ; CHECK-NEXT: store <2 x i64> %39, <2 x i64>* %3, align 16
10426 ; CHECK-NEXT: store <2 x i64> %45, <2 x i64>* %4, align 16
10427 ; CHECK-NEXT: store <2 x i64> %51, <2 x i64>* %5, align 16
10428 ; CHECK-NEXT: store <2 x i64> %57, <2 x i64>* %6, align 16
10429 ; CHECK-NEXT: ret <2 x i64> %15
10430
10431 define <16 x i64> @zext_cast_16xi32_to_16xi64(<16 x i32>) {
10432 %2 = zext <16 x i32> %0 to <16 x i64>
10433 ret <16 x i64> %2
10434 }
10435 ; CHECK-LABEL: define <2 x i64> @zext_cast_16xi32_to_16xi64(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull d ereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereference able(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>)
10436 ; CHECK-NEXT: %12 = extractelement <4 x i32> %7, i32 0
10437 ; CHECK-NEXT: %13 = zext i32 %12 to i64
10438 ; CHECK-NEXT: %14 = insertelement <2 x i64> undef, i64 %13, i32 0
10439 ; CHECK-NEXT: %15 = extractelement <4 x i32> %7, i32 1
10440 ; CHECK-NEXT: %16 = zext i32 %15 to i64
10441 ; CHECK-NEXT: %17 = insertelement <2 x i64> %14, i64 %16, i32 1
10442 ; CHECK-NEXT: %18 = extractelement <4 x i32> %7, i32 2
10443 ; CHECK-NEXT: %19 = zext i32 %18 to i64
10444 ; CHECK-NEXT: %20 = insertelement <2 x i64> undef, i64 %19, i32 0
10445 ; CHECK-NEXT: %21 = extractelement <4 x i32> %7, i32 3
10446 ; CHECK-NEXT: %22 = zext i32 %21 to i64
10447 ; CHECK-NEXT: %23 = insertelement <2 x i64> %20, i64 %22, i32 1
10448 ; CHECK-NEXT: %24 = extractelement <4 x i32> %8, i32 0
10449 ; CHECK-NEXT: %25 = zext i32 %24 to i64
10450 ; CHECK-NEXT: %26 = insertelement <2 x i64> undef, i64 %25, i32 0
10451 ; CHECK-NEXT: %27 = extractelement <4 x i32> %8, i32 1
10452 ; CHECK-NEXT: %28 = zext i32 %27 to i64
10453 ; CHECK-NEXT: %29 = insertelement <2 x i64> %26, i64 %28, i32 1
10454 ; CHECK-NEXT: %30 = extractelement <4 x i32> %8, i32 2
10455 ; CHECK-NEXT: %31 = zext i32 %30 to i64
10456 ; CHECK-NEXT: %32 = insertelement <2 x i64> undef, i64 %31, i32 0
10457 ; CHECK-NEXT: %33 = extractelement <4 x i32> %8, i32 3
10458 ; CHECK-NEXT: %34 = zext i32 %33 to i64
10459 ; CHECK-NEXT: %35 = insertelement <2 x i64> %32, i64 %34, i32 1
10460 ; CHECK-NEXT: %36 = extractelement <4 x i32> %9, i32 0
10461 ; CHECK-NEXT: %37 = zext i32 %36 to i64
10462 ; CHECK-NEXT: %38 = insertelement <2 x i64> undef, i64 %37, i32 0
10463 ; CHECK-NEXT: %39 = extractelement <4 x i32> %9, i32 1
10464 ; CHECK-NEXT: %40 = zext i32 %39 to i64
10465 ; CHECK-NEXT: %41 = insertelement <2 x i64> %38, i64 %40, i32 1
10466 ; CHECK-NEXT: %42 = extractelement <4 x i32> %9, i32 2
10467 ; CHECK-NEXT: %43 = zext i32 %42 to i64
10468 ; CHECK-NEXT: %44 = insertelement <2 x i64> undef, i64 %43, i32 0
10469 ; CHECK-NEXT: %45 = extractelement <4 x i32> %9, i32 3
10470 ; CHECK-NEXT: %46 = zext i32 %45 to i64
10471 ; CHECK-NEXT: %47 = insertelement <2 x i64> %44, i64 %46, i32 1
10472 ; CHECK-NEXT: %48 = extractelement <4 x i32> %10, i32 0
10473 ; CHECK-NEXT: %49 = zext i32 %48 to i64
10474 ; CHECK-NEXT: %50 = insertelement <2 x i64> undef, i64 %49, i32 0
10475 ; CHECK-NEXT: %51 = extractelement <4 x i32> %10, i32 1
10476 ; CHECK-NEXT: %52 = zext i32 %51 to i64
10477 ; CHECK-NEXT: %53 = insertelement <2 x i64> %50, i64 %52, i32 1
10478 ; CHECK-NEXT: %54 = extractelement <4 x i32> %10, i32 2
10479 ; CHECK-NEXT: %55 = zext i32 %54 to i64
10480 ; CHECK-NEXT: %56 = insertelement <2 x i64> undef, i64 %55, i32 0
10481 ; CHECK-NEXT: %57 = extractelement <4 x i32> %10, i32 3
10482 ; CHECK-NEXT: %58 = zext i32 %57 to i64
10483 ; CHECK-NEXT: %59 = insertelement <2 x i64> %56, i64 %58, i32 1
10484 ; CHECK-NEXT: store <2 x i64> %23, <2 x i64>* %0, align 16
10485 ; CHECK-NEXT: store <2 x i64> %29, <2 x i64>* %1, align 16
10486 ; CHECK-NEXT: store <2 x i64> %35, <2 x i64>* %2, align 16
10487 ; CHECK-NEXT: store <2 x i64> %41, <2 x i64>* %3, align 16
10488 ; CHECK-NEXT: store <2 x i64> %47, <2 x i64>* %4, align 16
10489 ; CHECK-NEXT: store <2 x i64> %53, <2 x i64>* %5, align 16
10490 ; CHECK-NEXT: store <2 x i64> %59, <2 x i64>* %6, align 16
10491 ; CHECK-NEXT: ret <2 x i64> %17
10492
10493 define <16 x i16> @sext_cast_16xi8_to_16xi16(<16 x i8>) {
10494 %2 = sext <16 x i8> %0 to <16 x i16>
10495 ret <16 x i16> %2
10496 }
10497 ; CHECK-LABEL: define <8 x i16> @sext_cast_16xi8_to_16xi16(<8 x i16>* nocapture nonnull dereferenceable(16), <16 x i8>)
10498 ; CHECK-NEXT: %3 = extractelement <16 x i8> %1, i32 0
10499 ; CHECK-NEXT: %4 = sext i8 %3 to i16
10500 ; CHECK-NEXT: %5 = insertelement <8 x i16> undef, i16 %4, i32 0
10501 ; CHECK-NEXT: %6 = extractelement <16 x i8> %1, i32 1
10502 ; CHECK-NEXT: %7 = sext i8 %6 to i16
10503 ; CHECK-NEXT: %8 = insertelement <8 x i16> %5, i16 %7, i32 1
10504 ; CHECK-NEXT: %9 = extractelement <16 x i8> %1, i32 2
10505 ; CHECK-NEXT: %10 = sext i8 %9 to i16
10506 ; CHECK-NEXT: %11 = insertelement <8 x i16> %8, i16 %10, i32 2
10507 ; CHECK-NEXT: %12 = extractelement <16 x i8> %1, i32 3
10508 ; CHECK-NEXT: %13 = sext i8 %12 to i16
10509 ; CHECK-NEXT: %14 = insertelement <8 x i16> %11, i16 %13, i32 3
10510 ; CHECK-NEXT: %15 = extractelement <16 x i8> %1, i32 4
10511 ; CHECK-NEXT: %16 = sext i8 %15 to i16
10512 ; CHECK-NEXT: %17 = insertelement <8 x i16> %14, i16 %16, i32 4
10513 ; CHECK-NEXT: %18 = extractelement <16 x i8> %1, i32 5
10514 ; CHECK-NEXT: %19 = sext i8 %18 to i16
10515 ; CHECK-NEXT: %20 = insertelement <8 x i16> %17, i16 %19, i32 5
10516 ; CHECK-NEXT: %21 = extractelement <16 x i8> %1, i32 6
10517 ; CHECK-NEXT: %22 = sext i8 %21 to i16
10518 ; CHECK-NEXT: %23 = insertelement <8 x i16> %20, i16 %22, i32 6
10519 ; CHECK-NEXT: %24 = extractelement <16 x i8> %1, i32 7
10520 ; CHECK-NEXT: %25 = sext i8 %24 to i16
10521 ; CHECK-NEXT: %26 = insertelement <8 x i16> %23, i16 %25, i32 7
10522 ; CHECK-NEXT: %27 = extractelement <16 x i8> %1, i32 8
10523 ; CHECK-NEXT: %28 = sext i8 %27 to i16
10524 ; CHECK-NEXT: %29 = insertelement <8 x i16> undef, i16 %28, i32 0
10525 ; CHECK-NEXT: %30 = extractelement <16 x i8> %1, i32 9
10526 ; CHECK-NEXT: %31 = sext i8 %30 to i16
10527 ; CHECK-NEXT: %32 = insertelement <8 x i16> %29, i16 %31, i32 1
10528 ; CHECK-NEXT: %33 = extractelement <16 x i8> %1, i32 10
10529 ; CHECK-NEXT: %34 = sext i8 %33 to i16
10530 ; CHECK-NEXT: %35 = insertelement <8 x i16> %32, i16 %34, i32 2
10531 ; CHECK-NEXT: %36 = extractelement <16 x i8> %1, i32 11
10532 ; CHECK-NEXT: %37 = sext i8 %36 to i16
10533 ; CHECK-NEXT: %38 = insertelement <8 x i16> %35, i16 %37, i32 3
10534 ; CHECK-NEXT: %39 = extractelement <16 x i8> %1, i32 12
10535 ; CHECK-NEXT: %40 = sext i8 %39 to i16
10536 ; CHECK-NEXT: %41 = insertelement <8 x i16> %38, i16 %40, i32 4
10537 ; CHECK-NEXT: %42 = extractelement <16 x i8> %1, i32 13
10538 ; CHECK-NEXT: %43 = sext i8 %42 to i16
10539 ; CHECK-NEXT: %44 = insertelement <8 x i16> %41, i16 %43, i32 5
10540 ; CHECK-NEXT: %45 = extractelement <16 x i8> %1, i32 14
10541 ; CHECK-NEXT: %46 = sext i8 %45 to i16
10542 ; CHECK-NEXT: %47 = insertelement <8 x i16> %44, i16 %46, i32 6
10543 ; CHECK-NEXT: %48 = extractelement <16 x i8> %1, i32 15
10544 ; CHECK-NEXT: %49 = sext i8 %48 to i16
10545 ; CHECK-NEXT: %50 = insertelement <8 x i16> %47, i16 %49, i32 7
10546 ; CHECK-NEXT: store <8 x i16> %50, <8 x i16>* %0, align 16
10547 ; CHECK-NEXT: ret <8 x i16> %26
10548
10549 define <16 x i32> @sext_cast_16xi8_to_16xi32(<16 x i8>) {
10550 %2 = sext <16 x i8> %0 to <16 x i32>
10551 ret <16 x i32> %2
10552 }
10553 ; CHECK-LABEL: define <4 x i32> @sext_cast_16xi8_to_16xi32(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), < 4 x i32>* nocapture nonnull dereferenceable(16), <16 x i8>)
10554 ; CHECK-NEXT: %5 = extractelement <16 x i8> %3, i32 0
10555 ; CHECK-NEXT: %6 = sext i8 %5 to i32
10556 ; CHECK-NEXT: %7 = insertelement <4 x i32> undef, i32 %6, i32 0
10557 ; CHECK-NEXT: %8 = extractelement <16 x i8> %3, i32 1
10558 ; CHECK-NEXT: %9 = sext i8 %8 to i32
10559 ; CHECK-NEXT: %10 = insertelement <4 x i32> %7, i32 %9, i32 1
10560 ; CHECK-NEXT: %11 = extractelement <16 x i8> %3, i32 2
10561 ; CHECK-NEXT: %12 = sext i8 %11 to i32
10562 ; CHECK-NEXT: %13 = insertelement <4 x i32> %10, i32 %12, i32 2
10563 ; CHECK-NEXT: %14 = extractelement <16 x i8> %3, i32 3
10564 ; CHECK-NEXT: %15 = sext i8 %14 to i32
10565 ; CHECK-NEXT: %16 = insertelement <4 x i32> %13, i32 %15, i32 3
10566 ; CHECK-NEXT: %17 = extractelement <16 x i8> %3, i32 4
10567 ; CHECK-NEXT: %18 = sext i8 %17 to i32
10568 ; CHECK-NEXT: %19 = insertelement <4 x i32> undef, i32 %18, i32 0
10569 ; CHECK-NEXT: %20 = extractelement <16 x i8> %3, i32 5
10570 ; CHECK-NEXT: %21 = sext i8 %20 to i32
10571 ; CHECK-NEXT: %22 = insertelement <4 x i32> %19, i32 %21, i32 1
10572 ; CHECK-NEXT: %23 = extractelement <16 x i8> %3, i32 6
10573 ; CHECK-NEXT: %24 = sext i8 %23 to i32
10574 ; CHECK-NEXT: %25 = insertelement <4 x i32> %22, i32 %24, i32 2
10575 ; CHECK-NEXT: %26 = extractelement <16 x i8> %3, i32 7
10576 ; CHECK-NEXT: %27 = sext i8 %26 to i32
10577 ; CHECK-NEXT: %28 = insertelement <4 x i32> %25, i32 %27, i32 3
10578 ; CHECK-NEXT: %29 = extractelement <16 x i8> %3, i32 8
10579 ; CHECK-NEXT: %30 = sext i8 %29 to i32
10580 ; CHECK-NEXT: %31 = insertelement <4 x i32> undef, i32 %30, i32 0
10581 ; CHECK-NEXT: %32 = extractelement <16 x i8> %3, i32 9
10582 ; CHECK-NEXT: %33 = sext i8 %32 to i32
10583 ; CHECK-NEXT: %34 = insertelement <4 x i32> %31, i32 %33, i32 1
10584 ; CHECK-NEXT: %35 = extractelement <16 x i8> %3, i32 10
10585 ; CHECK-NEXT: %36 = sext i8 %35 to i32
10586 ; CHECK-NEXT: %37 = insertelement <4 x i32> %34, i32 %36, i32 2
10587 ; CHECK-NEXT: %38 = extractelement <16 x i8> %3, i32 11
10588 ; CHECK-NEXT: %39 = sext i8 %38 to i32
10589 ; CHECK-NEXT: %40 = insertelement <4 x i32> %37, i32 %39, i32 3
10590 ; CHECK-NEXT: %41 = extractelement <16 x i8> %3, i32 12
10591 ; CHECK-NEXT: %42 = sext i8 %41 to i32
10592 ; CHECK-NEXT: %43 = insertelement <4 x i32> undef, i32 %42, i32 0
10593 ; CHECK-NEXT: %44 = extractelement <16 x i8> %3, i32 13
10594 ; CHECK-NEXT: %45 = sext i8 %44 to i32
10595 ; CHECK-NEXT: %46 = insertelement <4 x i32> %43, i32 %45, i32 1
10596 ; CHECK-NEXT: %47 = extractelement <16 x i8> %3, i32 14
10597 ; CHECK-NEXT: %48 = sext i8 %47 to i32
10598 ; CHECK-NEXT: %49 = insertelement <4 x i32> %46, i32 %48, i32 2
10599 ; CHECK-NEXT: %50 = extractelement <16 x i8> %3, i32 15
10600 ; CHECK-NEXT: %51 = sext i8 %50 to i32
10601 ; CHECK-NEXT: %52 = insertelement <4 x i32> %49, i32 %51, i32 3
10602 ; CHECK-NEXT: store <4 x i32> %28, <4 x i32>* %0, align 16
10603 ; CHECK-NEXT: store <4 x i32> %40, <4 x i32>* %1, align 16
10604 ; CHECK-NEXT: store <4 x i32> %52, <4 x i32>* %2, align 16
10605 ; CHECK-NEXT: ret <4 x i32> %16
10606
10607 define <16 x i64> @sext_cast_16xi8_to_16xi64(<16 x i8>) {
10608 %2 = sext <16 x i8> %0 to <16 x i64>
10609 ret <16 x i64> %2
10610 }
10611 ; CHECK-LABEL: define <2 x i64> @sext_cast_16xi8_to_16xi64(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), < 2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull de referenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferencea ble(16), <16 x i8>)
10612 ; CHECK-NEXT: %9 = extractelement <16 x i8> %7, i32 0
10613 ; CHECK-NEXT: %10 = sext i8 %9 to i64
10614 ; CHECK-NEXT: %11 = insertelement <2 x i64> undef, i64 %10, i32 0
10615 ; CHECK-NEXT: %12 = extractelement <16 x i8> %7, i32 1
10616 ; CHECK-NEXT: %13 = sext i8 %12 to i64
10617 ; CHECK-NEXT: %14 = insertelement <2 x i64> %11, i64 %13, i32 1
10618 ; CHECK-NEXT: %15 = extractelement <16 x i8> %7, i32 2
10619 ; CHECK-NEXT: %16 = sext i8 %15 to i64
10620 ; CHECK-NEXT: %17 = insertelement <2 x i64> undef, i64 %16, i32 0
10621 ; CHECK-NEXT: %18 = extractelement <16 x i8> %7, i32 3
10622 ; CHECK-NEXT: %19 = sext i8 %18 to i64
10623 ; CHECK-NEXT: %20 = insertelement <2 x i64> %17, i64 %19, i32 1
10624 ; CHECK-NEXT: %21 = extractelement <16 x i8> %7, i32 4
10625 ; CHECK-NEXT: %22 = sext i8 %21 to i64
10626 ; CHECK-NEXT: %23 = insertelement <2 x i64> undef, i64 %22, i32 0
10627 ; CHECK-NEXT: %24 = extractelement <16 x i8> %7, i32 5
10628 ; CHECK-NEXT: %25 = sext i8 %24 to i64
10629 ; CHECK-NEXT: %26 = insertelement <2 x i64> %23, i64 %25, i32 1
10630 ; CHECK-NEXT: %27 = extractelement <16 x i8> %7, i32 6
10631 ; CHECK-NEXT: %28 = sext i8 %27 to i64
10632 ; CHECK-NEXT: %29 = insertelement <2 x i64> undef, i64 %28, i32 0
10633 ; CHECK-NEXT: %30 = extractelement <16 x i8> %7, i32 7
10634 ; CHECK-NEXT: %31 = sext i8 %30 to i64
10635 ; CHECK-NEXT: %32 = insertelement <2 x i64> %29, i64 %31, i32 1
10636 ; CHECK-NEXT: %33 = extractelement <16 x i8> %7, i32 8
10637 ; CHECK-NEXT: %34 = sext i8 %33 to i64
10638 ; CHECK-NEXT: %35 = insertelement <2 x i64> undef, i64 %34, i32 0
10639 ; CHECK-NEXT: %36 = extractelement <16 x i8> %7, i32 9
10640 ; CHECK-NEXT: %37 = sext i8 %36 to i64
10641 ; CHECK-NEXT: %38 = insertelement <2 x i64> %35, i64 %37, i32 1
10642 ; CHECK-NEXT: %39 = extractelement <16 x i8> %7, i32 10
10643 ; CHECK-NEXT: %40 = sext i8 %39 to i64
10644 ; CHECK-NEXT: %41 = insertelement <2 x i64> undef, i64 %40, i32 0
10645 ; CHECK-NEXT: %42 = extractelement <16 x i8> %7, i32 11
10646 ; CHECK-NEXT: %43 = sext i8 %42 to i64
10647 ; CHECK-NEXT: %44 = insertelement <2 x i64> %41, i64 %43, i32 1
10648 ; CHECK-NEXT: %45 = extractelement <16 x i8> %7, i32 12
10649 ; CHECK-NEXT: %46 = sext i8 %45 to i64
10650 ; CHECK-NEXT: %47 = insertelement <2 x i64> undef, i64 %46, i32 0
10651 ; CHECK-NEXT: %48 = extractelement <16 x i8> %7, i32 13
10652 ; CHECK-NEXT: %49 = sext i8 %48 to i64
10653 ; CHECK-NEXT: %50 = insertelement <2 x i64> %47, i64 %49, i32 1
10654 ; CHECK-NEXT: %51 = extractelement <16 x i8> %7, i32 14
10655 ; CHECK-NEXT: %52 = sext i8 %51 to i64
10656 ; CHECK-NEXT: %53 = insertelement <2 x i64> undef, i64 %52, i32 0
10657 ; CHECK-NEXT: %54 = extractelement <16 x i8> %7, i32 15
10658 ; CHECK-NEXT: %55 = sext i8 %54 to i64
10659 ; CHECK-NEXT: %56 = insertelement <2 x i64> %53, i64 %55, i32 1
10660 ; CHECK-NEXT: store <2 x i64> %20, <2 x i64>* %0, align 16
10661 ; CHECK-NEXT: store <2 x i64> %26, <2 x i64>* %1, align 16
10662 ; CHECK-NEXT: store <2 x i64> %32, <2 x i64>* %2, align 16
10663 ; CHECK-NEXT: store <2 x i64> %38, <2 x i64>* %3, align 16
10664 ; CHECK-NEXT: store <2 x i64> %44, <2 x i64>* %4, align 16
10665 ; CHECK-NEXT: store <2 x i64> %50, <2 x i64>* %5, align 16
10666 ; CHECK-NEXT: store <2 x i64> %56, <2 x i64>* %6, align 16
10667 ; CHECK-NEXT: ret <2 x i64> %14
10668
10669 define <16 x i32> @sext_cast_16xi16_to_16xi32(<16 x i16>) {
10670 %2 = sext <16 x i16> %0 to <16 x i32>
10671 ret <16 x i32> %2
10672 }
10673 ; CHECK-LABEL: define <4 x i32> @sext_cast_16xi16_to_16xi32(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>)
10674 ; CHECK-NEXT: %6 = extractelement <8 x i16> %3, i32 0
10675 ; CHECK-NEXT: %7 = sext i16 %6 to i32
10676 ; CHECK-NEXT: %8 = insertelement <4 x i32> undef, i32 %7, i32 0
10677 ; CHECK-NEXT: %9 = extractelement <8 x i16> %3, i32 1
10678 ; CHECK-NEXT: %10 = sext i16 %9 to i32
10679 ; CHECK-NEXT: %11 = insertelement <4 x i32> %8, i32 %10, i32 1
10680 ; CHECK-NEXT: %12 = extractelement <8 x i16> %3, i32 2
10681 ; CHECK-NEXT: %13 = sext i16 %12 to i32
10682 ; CHECK-NEXT: %14 = insertelement <4 x i32> %11, i32 %13, i32 2
10683 ; CHECK-NEXT: %15 = extractelement <8 x i16> %3, i32 3
10684 ; CHECK-NEXT: %16 = sext i16 %15 to i32
10685 ; CHECK-NEXT: %17 = insertelement <4 x i32> %14, i32 %16, i32 3
10686 ; CHECK-NEXT: %18 = extractelement <8 x i16> %3, i32 4
10687 ; CHECK-NEXT: %19 = sext i16 %18 to i32
10688 ; CHECK-NEXT: %20 = insertelement <4 x i32> undef, i32 %19, i32 0
10689 ; CHECK-NEXT: %21 = extractelement <8 x i16> %3, i32 5
10690 ; CHECK-NEXT: %22 = sext i16 %21 to i32
10691 ; CHECK-NEXT: %23 = insertelement <4 x i32> %20, i32 %22, i32 1
10692 ; CHECK-NEXT: %24 = extractelement <8 x i16> %3, i32 6
10693 ; CHECK-NEXT: %25 = sext i16 %24 to i32
10694 ; CHECK-NEXT: %26 = insertelement <4 x i32> %23, i32 %25, i32 2
10695 ; CHECK-NEXT: %27 = extractelement <8 x i16> %3, i32 7
10696 ; CHECK-NEXT: %28 = sext i16 %27 to i32
10697 ; CHECK-NEXT: %29 = insertelement <4 x i32> %26, i32 %28, i32 3
10698 ; CHECK-NEXT: %30 = extractelement <8 x i16> %4, i32 0
10699 ; CHECK-NEXT: %31 = sext i16 %30 to i32
10700 ; CHECK-NEXT: %32 = insertelement <4 x i32> undef, i32 %31, i32 0
10701 ; CHECK-NEXT: %33 = extractelement <8 x i16> %4, i32 1
10702 ; CHECK-NEXT: %34 = sext i16 %33 to i32
10703 ; CHECK-NEXT: %35 = insertelement <4 x i32> %32, i32 %34, i32 1
10704 ; CHECK-NEXT: %36 = extractelement <8 x i16> %4, i32 2
10705 ; CHECK-NEXT: %37 = sext i16 %36 to i32
10706 ; CHECK-NEXT: %38 = insertelement <4 x i32> %35, i32 %37, i32 2
10707 ; CHECK-NEXT: %39 = extractelement <8 x i16> %4, i32 3
10708 ; CHECK-NEXT: %40 = sext i16 %39 to i32
10709 ; CHECK-NEXT: %41 = insertelement <4 x i32> %38, i32 %40, i32 3
10710 ; CHECK-NEXT: %42 = extractelement <8 x i16> %4, i32 4
10711 ; CHECK-NEXT: %43 = sext i16 %42 to i32
10712 ; CHECK-NEXT: %44 = insertelement <4 x i32> undef, i32 %43, i32 0
10713 ; CHECK-NEXT: %45 = extractelement <8 x i16> %4, i32 5
10714 ; CHECK-NEXT: %46 = sext i16 %45 to i32
10715 ; CHECK-NEXT: %47 = insertelement <4 x i32> %44, i32 %46, i32 1
10716 ; CHECK-NEXT: %48 = extractelement <8 x i16> %4, i32 6
10717 ; CHECK-NEXT: %49 = sext i16 %48 to i32
10718 ; CHECK-NEXT: %50 = insertelement <4 x i32> %47, i32 %49, i32 2
10719 ; CHECK-NEXT: %51 = extractelement <8 x i16> %4, i32 7
10720 ; CHECK-NEXT: %52 = sext i16 %51 to i32
10721 ; CHECK-NEXT: %53 = insertelement <4 x i32> %50, i32 %52, i32 3
10722 ; CHECK-NEXT: store <4 x i32> %29, <4 x i32>* %0, align 16
10723 ; CHECK-NEXT: store <4 x i32> %41, <4 x i32>* %1, align 16
10724 ; CHECK-NEXT: store <4 x i32> %53, <4 x i32>* %2, align 16
10725 ; CHECK-NEXT: ret <4 x i32> %17
10726
10727 define <16 x i64> @sext_cast_16xi16_to_16xi64(<16 x i16>) {
10728 %2 = sext <16 x i16> %0 to <16 x i64>
10729 ret <16 x i64> %2
10730 }
10731 ; CHECK-LABEL: define <2 x i64> @sext_cast_16xi16_to_16xi64(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull d ereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereference able(16), <8 x i16>, <8 x i16>)
10732 ; CHECK-NEXT: %10 = extractelement <8 x i16> %7, i32 0
10733 ; CHECK-NEXT: %11 = sext i16 %10 to i64
10734 ; CHECK-NEXT: %12 = insertelement <2 x i64> undef, i64 %11, i32 0
10735 ; CHECK-NEXT: %13 = extractelement <8 x i16> %7, i32 1
10736 ; CHECK-NEXT: %14 = sext i16 %13 to i64
10737 ; CHECK-NEXT: %15 = insertelement <2 x i64> %12, i64 %14, i32 1
10738 ; CHECK-NEXT: %16 = extractelement <8 x i16> %7, i32 2
10739 ; CHECK-NEXT: %17 = sext i16 %16 to i64
10740 ; CHECK-NEXT: %18 = insertelement <2 x i64> undef, i64 %17, i32 0
10741 ; CHECK-NEXT: %19 = extractelement <8 x i16> %7, i32 3
10742 ; CHECK-NEXT: %20 = sext i16 %19 to i64
10743 ; CHECK-NEXT: %21 = insertelement <2 x i64> %18, i64 %20, i32 1
10744 ; CHECK-NEXT: %22 = extractelement <8 x i16> %7, i32 4
10745 ; CHECK-NEXT: %23 = sext i16 %22 to i64
10746 ; CHECK-NEXT: %24 = insertelement <2 x i64> undef, i64 %23, i32 0
10747 ; CHECK-NEXT: %25 = extractelement <8 x i16> %7, i32 5
10748 ; CHECK-NEXT: %26 = sext i16 %25 to i64
10749 ; CHECK-NEXT: %27 = insertelement <2 x i64> %24, i64 %26, i32 1
10750 ; CHECK-NEXT: %28 = extractelement <8 x i16> %7, i32 6
10751 ; CHECK-NEXT: %29 = sext i16 %28 to i64
10752 ; CHECK-NEXT: %30 = insertelement <2 x i64> undef, i64 %29, i32 0
10753 ; CHECK-NEXT: %31 = extractelement <8 x i16> %7, i32 7
10754 ; CHECK-NEXT: %32 = sext i16 %31 to i64
10755 ; CHECK-NEXT: %33 = insertelement <2 x i64> %30, i64 %32, i32 1
10756 ; CHECK-NEXT: %34 = extractelement <8 x i16> %8, i32 0
10757 ; CHECK-NEXT: %35 = sext i16 %34 to i64
10758 ; CHECK-NEXT: %36 = insertelement <2 x i64> undef, i64 %35, i32 0
10759 ; CHECK-NEXT: %37 = extractelement <8 x i16> %8, i32 1
10760 ; CHECK-NEXT: %38 = sext i16 %37 to i64
10761 ; CHECK-NEXT: %39 = insertelement <2 x i64> %36, i64 %38, i32 1
10762 ; CHECK-NEXT: %40 = extractelement <8 x i16> %8, i32 2
10763 ; CHECK-NEXT: %41 = sext i16 %40 to i64
10764 ; CHECK-NEXT: %42 = insertelement <2 x i64> undef, i64 %41, i32 0
10765 ; CHECK-NEXT: %43 = extractelement <8 x i16> %8, i32 3
10766 ; CHECK-NEXT: %44 = sext i16 %43 to i64
10767 ; CHECK-NEXT: %45 = insertelement <2 x i64> %42, i64 %44, i32 1
10768 ; CHECK-NEXT: %46 = extractelement <8 x i16> %8, i32 4
10769 ; CHECK-NEXT: %47 = sext i16 %46 to i64
10770 ; CHECK-NEXT: %48 = insertelement <2 x i64> undef, i64 %47, i32 0
10771 ; CHECK-NEXT: %49 = extractelement <8 x i16> %8, i32 5
10772 ; CHECK-NEXT: %50 = sext i16 %49 to i64
10773 ; CHECK-NEXT: %51 = insertelement <2 x i64> %48, i64 %50, i32 1
10774 ; CHECK-NEXT: %52 = extractelement <8 x i16> %8, i32 6
10775 ; CHECK-NEXT: %53 = sext i16 %52 to i64
10776 ; CHECK-NEXT: %54 = insertelement <2 x i64> undef, i64 %53, i32 0
10777 ; CHECK-NEXT: %55 = extractelement <8 x i16> %8, i32 7
10778 ; CHECK-NEXT: %56 = sext i16 %55 to i64
10779 ; CHECK-NEXT: %57 = insertelement <2 x i64> %54, i64 %56, i32 1
10780 ; CHECK-NEXT: store <2 x i64> %21, <2 x i64>* %0, align 16
10781 ; CHECK-NEXT: store <2 x i64> %27, <2 x i64>* %1, align 16
10782 ; CHECK-NEXT: store <2 x i64> %33, <2 x i64>* %2, align 16
10783 ; CHECK-NEXT: store <2 x i64> %39, <2 x i64>* %3, align 16
10784 ; CHECK-NEXT: store <2 x i64> %45, <2 x i64>* %4, align 16
10785 ; CHECK-NEXT: store <2 x i64> %51, <2 x i64>* %5, align 16
10786 ; CHECK-NEXT: store <2 x i64> %57, <2 x i64>* %6, align 16
10787 ; CHECK-NEXT: ret <2 x i64> %15
10788
10789 define <16 x i64> @sext_cast_16xi32_to_16xi64(<16 x i32>) {
10790 %2 = sext <16 x i32> %0 to <16 x i64>
10791 ret <16 x i64> %2
10792 }
10793 ; CHECK-LABEL: define <2 x i64> @sext_cast_16xi32_to_16xi64(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull d ereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereference able(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>)
10794 ; CHECK-NEXT: %12 = extractelement <4 x i32> %7, i32 0
10795 ; CHECK-NEXT: %13 = sext i32 %12 to i64
10796 ; CHECK-NEXT: %14 = insertelement <2 x i64> undef, i64 %13, i32 0
10797 ; CHECK-NEXT: %15 = extractelement <4 x i32> %7, i32 1
10798 ; CHECK-NEXT: %16 = sext i32 %15 to i64
10799 ; CHECK-NEXT: %17 = insertelement <2 x i64> %14, i64 %16, i32 1
10800 ; CHECK-NEXT: %18 = extractelement <4 x i32> %7, i32 2
10801 ; CHECK-NEXT: %19 = sext i32 %18 to i64
10802 ; CHECK-NEXT: %20 = insertelement <2 x i64> undef, i64 %19, i32 0
10803 ; CHECK-NEXT: %21 = extractelement <4 x i32> %7, i32 3
10804 ; CHECK-NEXT: %22 = sext i32 %21 to i64
10805 ; CHECK-NEXT: %23 = insertelement <2 x i64> %20, i64 %22, i32 1
10806 ; CHECK-NEXT: %24 = extractelement <4 x i32> %8, i32 0
10807 ; CHECK-NEXT: %25 = sext i32 %24 to i64
10808 ; CHECK-NEXT: %26 = insertelement <2 x i64> undef, i64 %25, i32 0
10809 ; CHECK-NEXT: %27 = extractelement <4 x i32> %8, i32 1
10810 ; CHECK-NEXT: %28 = sext i32 %27 to i64
10811 ; CHECK-NEXT: %29 = insertelement <2 x i64> %26, i64 %28, i32 1
10812 ; CHECK-NEXT: %30 = extractelement <4 x i32> %8, i32 2
10813 ; CHECK-NEXT: %31 = sext i32 %30 to i64
10814 ; CHECK-NEXT: %32 = insertelement <2 x i64> undef, i64 %31, i32 0
10815 ; CHECK-NEXT: %33 = extractelement <4 x i32> %8, i32 3
10816 ; CHECK-NEXT: %34 = sext i32 %33 to i64
10817 ; CHECK-NEXT: %35 = insertelement <2 x i64> %32, i64 %34, i32 1
10818 ; CHECK-NEXT: %36 = extractelement <4 x i32> %9, i32 0
10819 ; CHECK-NEXT: %37 = sext i32 %36 to i64
10820 ; CHECK-NEXT: %38 = insertelement <2 x i64> undef, i64 %37, i32 0
10821 ; CHECK-NEXT: %39 = extractelement <4 x i32> %9, i32 1
10822 ; CHECK-NEXT: %40 = sext i32 %39 to i64
10823 ; CHECK-NEXT: %41 = insertelement <2 x i64> %38, i64 %40, i32 1
10824 ; CHECK-NEXT: %42 = extractelement <4 x i32> %9, i32 2
10825 ; CHECK-NEXT: %43 = sext i32 %42 to i64
10826 ; CHECK-NEXT: %44 = insertelement <2 x i64> undef, i64 %43, i32 0
10827 ; CHECK-NEXT: %45 = extractelement <4 x i32> %9, i32 3
10828 ; CHECK-NEXT: %46 = sext i32 %45 to i64
10829 ; CHECK-NEXT: %47 = insertelement <2 x i64> %44, i64 %46, i32 1
10830 ; CHECK-NEXT: %48 = extractelement <4 x i32> %10, i32 0
10831 ; CHECK-NEXT: %49 = sext i32 %48 to i64
10832 ; CHECK-NEXT: %50 = insertelement <2 x i64> undef, i64 %49, i32 0
10833 ; CHECK-NEXT: %51 = extractelement <4 x i32> %10, i32 1
10834 ; CHECK-NEXT: %52 = sext i32 %51 to i64
10835 ; CHECK-NEXT: %53 = insertelement <2 x i64> %50, i64 %52, i32 1
10836 ; CHECK-NEXT: %54 = extractelement <4 x i32> %10, i32 2
10837 ; CHECK-NEXT: %55 = sext i32 %54 to i64
10838 ; CHECK-NEXT: %56 = insertelement <2 x i64> undef, i64 %55, i32 0
10839 ; CHECK-NEXT: %57 = extractelement <4 x i32> %10, i32 3
10840 ; CHECK-NEXT: %58 = sext i32 %57 to i64
10841 ; CHECK-NEXT: %59 = insertelement <2 x i64> %56, i64 %58, i32 1
10842 ; CHECK-NEXT: store <2 x i64> %23, <2 x i64>* %0, align 16
10843 ; CHECK-NEXT: store <2 x i64> %29, <2 x i64>* %1, align 16
10844 ; CHECK-NEXT: store <2 x i64> %35, <2 x i64>* %2, align 16
10845 ; CHECK-NEXT: store <2 x i64> %41, <2 x i64>* %3, align 16
10846 ; CHECK-NEXT: store <2 x i64> %47, <2 x i64>* %4, align 16
10847 ; CHECK-NEXT: store <2 x i64> %53, <2 x i64>* %5, align 16
10848 ; CHECK-NEXT: store <2 x i64> %59, <2 x i64>* %6, align 16
10849 ; CHECK-NEXT: ret <2 x i64> %17
10850
10851 define <16 x i32> @trunc_cast_16xi64_to_16xi32(<16 x i64>) {
10852 %2 = trunc <16 x i64> %0 to <16 x i32>
10853 ret <16 x i32> %2
10854 }
10855 ; CHECK-LABEL: define <4 x i32> @trunc_cast_16xi64_to_16xi32(<4 x i32>* nocaptur e nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i6 4>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
10856 ; CHECK-NEXT: %12 = extractelement <2 x i64> %3, i32 0
10857 ; CHECK-NEXT: %13 = trunc i64 %12 to i32
10858 ; CHECK-NEXT: %14 = insertelement <4 x i32> undef, i32 %13, i32 0
10859 ; CHECK-NEXT: %15 = extractelement <2 x i64> %3, i32 1
10860 ; CHECK-NEXT: %16 = trunc i64 %15 to i32
10861 ; CHECK-NEXT: %17 = insertelement <4 x i32> %14, i32 %16, i32 1
10862 ; CHECK-NEXT: %18 = extractelement <2 x i64> %4, i32 0
10863 ; CHECK-NEXT: %19 = trunc i64 %18 to i32
10864 ; CHECK-NEXT: %20 = insertelement <4 x i32> %17, i32 %19, i32 2
10865 ; CHECK-NEXT: %21 = extractelement <2 x i64> %4, i32 1
10866 ; CHECK-NEXT: %22 = trunc i64 %21 to i32
10867 ; CHECK-NEXT: %23 = insertelement <4 x i32> %20, i32 %22, i32 3
10868 ; CHECK-NEXT: %24 = extractelement <2 x i64> %5, i32 0
10869 ; CHECK-NEXT: %25 = trunc i64 %24 to i32
10870 ; CHECK-NEXT: %26 = insertelement <4 x i32> undef, i32 %25, i32 0
10871 ; CHECK-NEXT: %27 = extractelement <2 x i64> %5, i32 1
10872 ; CHECK-NEXT: %28 = trunc i64 %27 to i32
10873 ; CHECK-NEXT: %29 = insertelement <4 x i32> %26, i32 %28, i32 1
10874 ; CHECK-NEXT: %30 = extractelement <2 x i64> %6, i32 0
10875 ; CHECK-NEXT: %31 = trunc i64 %30 to i32
10876 ; CHECK-NEXT: %32 = insertelement <4 x i32> %29, i32 %31, i32 2
10877 ; CHECK-NEXT: %33 = extractelement <2 x i64> %6, i32 1
10878 ; CHECK-NEXT: %34 = trunc i64 %33 to i32
10879 ; CHECK-NEXT: %35 = insertelement <4 x i32> %32, i32 %34, i32 3
10880 ; CHECK-NEXT: %36 = extractelement <2 x i64> %7, i32 0
10881 ; CHECK-NEXT: %37 = trunc i64 %36 to i32
10882 ; CHECK-NEXT: %38 = insertelement <4 x i32> undef, i32 %37, i32 0
10883 ; CHECK-NEXT: %39 = extractelement <2 x i64> %7, i32 1
10884 ; CHECK-NEXT: %40 = trunc i64 %39 to i32
10885 ; CHECK-NEXT: %41 = insertelement <4 x i32> %38, i32 %40, i32 1
10886 ; CHECK-NEXT: %42 = extractelement <2 x i64> %8, i32 0
10887 ; CHECK-NEXT: %43 = trunc i64 %42 to i32
10888 ; CHECK-NEXT: %44 = insertelement <4 x i32> %41, i32 %43, i32 2
10889 ; CHECK-NEXT: %45 = extractelement <2 x i64> %8, i32 1
10890 ; CHECK-NEXT: %46 = trunc i64 %45 to i32
10891 ; CHECK-NEXT: %47 = insertelement <4 x i32> %44, i32 %46, i32 3
10892 ; CHECK-NEXT: %48 = extractelement <2 x i64> %9, i32 0
10893 ; CHECK-NEXT: %49 = trunc i64 %48 to i32
10894 ; CHECK-NEXT: %50 = insertelement <4 x i32> undef, i32 %49, i32 0
10895 ; CHECK-NEXT: %51 = extractelement <2 x i64> %9, i32 1
10896 ; CHECK-NEXT: %52 = trunc i64 %51 to i32
10897 ; CHECK-NEXT: %53 = insertelement <4 x i32> %50, i32 %52, i32 1
10898 ; CHECK-NEXT: %54 = extractelement <2 x i64> %10, i32 0
10899 ; CHECK-NEXT: %55 = trunc i64 %54 to i32
10900 ; CHECK-NEXT: %56 = insertelement <4 x i32> %53, i32 %55, i32 2
10901 ; CHECK-NEXT: %57 = extractelement <2 x i64> %10, i32 1
10902 ; CHECK-NEXT: %58 = trunc i64 %57 to i32
10903 ; CHECK-NEXT: %59 = insertelement <4 x i32> %56, i32 %58, i32 3
10904 ; CHECK-NEXT: store <4 x i32> %35, <4 x i32>* %0, align 16
10905 ; CHECK-NEXT: store <4 x i32> %47, <4 x i32>* %1, align 16
10906 ; CHECK-NEXT: store <4 x i32> %59, <4 x i32>* %2, align 16
10907 ; CHECK-NEXT: ret <4 x i32> %23
10908
10909 define <16 x i16> @trunc_cast_16xi64_to_16xi16(<16 x i64>) {
10910 %2 = trunc <16 x i64> %0 to <16 x i16>
10911 ret <16 x i16> %2
10912 }
10913 ; CHECK-LABEL: define <8 x i16> @trunc_cast_16xi64_to_16xi16(<8 x i16>* nocaptur e nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
10914 ; CHECK-NEXT: %10 = extractelement <2 x i64> %1, i32 0
10915 ; CHECK-NEXT: %11 = trunc i64 %10 to i16
10916 ; CHECK-NEXT: %12 = insertelement <8 x i16> undef, i16 %11, i32 0
10917 ; CHECK-NEXT: %13 = extractelement <2 x i64> %1, i32 1
10918 ; CHECK-NEXT: %14 = trunc i64 %13 to i16
10919 ; CHECK-NEXT: %15 = insertelement <8 x i16> %12, i16 %14, i32 1
10920 ; CHECK-NEXT: %16 = extractelement <2 x i64> %2, i32 0
10921 ; CHECK-NEXT: %17 = trunc i64 %16 to i16
10922 ; CHECK-NEXT: %18 = insertelement <8 x i16> %15, i16 %17, i32 2
10923 ; CHECK-NEXT: %19 = extractelement <2 x i64> %2, i32 1
10924 ; CHECK-NEXT: %20 = trunc i64 %19 to i16
10925 ; CHECK-NEXT: %21 = insertelement <8 x i16> %18, i16 %20, i32 3
10926 ; CHECK-NEXT: %22 = extractelement <2 x i64> %3, i32 0
10927 ; CHECK-NEXT: %23 = trunc i64 %22 to i16
10928 ; CHECK-NEXT: %24 = insertelement <8 x i16> %21, i16 %23, i32 4
10929 ; CHECK-NEXT: %25 = extractelement <2 x i64> %3, i32 1
10930 ; CHECK-NEXT: %26 = trunc i64 %25 to i16
10931 ; CHECK-NEXT: %27 = insertelement <8 x i16> %24, i16 %26, i32 5
10932 ; CHECK-NEXT: %28 = extractelement <2 x i64> %4, i32 0
10933 ; CHECK-NEXT: %29 = trunc i64 %28 to i16
10934 ; CHECK-NEXT: %30 = insertelement <8 x i16> %27, i16 %29, i32 6
10935 ; CHECK-NEXT: %31 = extractelement <2 x i64> %4, i32 1
10936 ; CHECK-NEXT: %32 = trunc i64 %31 to i16
10937 ; CHECK-NEXT: %33 = insertelement <8 x i16> %30, i16 %32, i32 7
10938 ; CHECK-NEXT: %34 = extractelement <2 x i64> %5, i32 0
10939 ; CHECK-NEXT: %35 = trunc i64 %34 to i16
10940 ; CHECK-NEXT: %36 = insertelement <8 x i16> undef, i16 %35, i32 0
10941 ; CHECK-NEXT: %37 = extractelement <2 x i64> %5, i32 1
10942 ; CHECK-NEXT: %38 = trunc i64 %37 to i16
10943 ; CHECK-NEXT: %39 = insertelement <8 x i16> %36, i16 %38, i32 1
10944 ; CHECK-NEXT: %40 = extractelement <2 x i64> %6, i32 0
10945 ; CHECK-NEXT: %41 = trunc i64 %40 to i16
10946 ; CHECK-NEXT: %42 = insertelement <8 x i16> %39, i16 %41, i32 2
10947 ; CHECK-NEXT: %43 = extractelement <2 x i64> %6, i32 1
10948 ; CHECK-NEXT: %44 = trunc i64 %43 to i16
10949 ; CHECK-NEXT: %45 = insertelement <8 x i16> %42, i16 %44, i32 3
10950 ; CHECK-NEXT: %46 = extractelement <2 x i64> %7, i32 0
10951 ; CHECK-NEXT: %47 = trunc i64 %46 to i16
10952 ; CHECK-NEXT: %48 = insertelement <8 x i16> %45, i16 %47, i32 4
10953 ; CHECK-NEXT: %49 = extractelement <2 x i64> %7, i32 1
10954 ; CHECK-NEXT: %50 = trunc i64 %49 to i16
10955 ; CHECK-NEXT: %51 = insertelement <8 x i16> %48, i16 %50, i32 5
10956 ; CHECK-NEXT: %52 = extractelement <2 x i64> %8, i32 0
10957 ; CHECK-NEXT: %53 = trunc i64 %52 to i16
10958 ; CHECK-NEXT: %54 = insertelement <8 x i16> %51, i16 %53, i32 6
10959 ; CHECK-NEXT: %55 = extractelement <2 x i64> %8, i32 1
10960 ; CHECK-NEXT: %56 = trunc i64 %55 to i16
10961 ; CHECK-NEXT: %57 = insertelement <8 x i16> %54, i16 %56, i32 7
10962 ; CHECK-NEXT: store <8 x i16> %57, <8 x i16>* %0, align 16
10963 ; CHECK-NEXT: ret <8 x i16> %33
10964
10965 define <16 x i8> @trunc_cast_16xi64_to_16xi8(<16 x i64>) {
10966 %2 = trunc <16 x i64> %0 to <16 x i8>
10967 ret <16 x i8> %2
10968 }
10969 ; CHECK-LABEL: define <16 x i8> @trunc_cast_16xi64_to_16xi8(<2 x i64>, <2 x i64> , <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
10970 ; CHECK-NEXT: %9 = extractelement <2 x i64> %0, i32 0
10971 ; CHECK-NEXT: %10 = trunc i64 %9 to i8
10972 ; CHECK-NEXT: %11 = insertelement <16 x i8> undef, i8 %10, i32 0
10973 ; CHECK-NEXT: %12 = extractelement <2 x i64> %0, i32 1
10974 ; CHECK-NEXT: %13 = trunc i64 %12 to i8
10975 ; CHECK-NEXT: %14 = insertelement <16 x i8> %11, i8 %13, i32 1
10976 ; CHECK-NEXT: %15 = extractelement <2 x i64> %1, i32 0
10977 ; CHECK-NEXT: %16 = trunc i64 %15 to i8
10978 ; CHECK-NEXT: %17 = insertelement <16 x i8> %14, i8 %16, i32 2
10979 ; CHECK-NEXT: %18 = extractelement <2 x i64> %1, i32 1
10980 ; CHECK-NEXT: %19 = trunc i64 %18 to i8
10981 ; CHECK-NEXT: %20 = insertelement <16 x i8> %17, i8 %19, i32 3
10982 ; CHECK-NEXT: %21 = extractelement <2 x i64> %2, i32 0
10983 ; CHECK-NEXT: %22 = trunc i64 %21 to i8
10984 ; CHECK-NEXT: %23 = insertelement <16 x i8> %20, i8 %22, i32 4
10985 ; CHECK-NEXT: %24 = extractelement <2 x i64> %2, i32 1
10986 ; CHECK-NEXT: %25 = trunc i64 %24 to i8
10987 ; CHECK-NEXT: %26 = insertelement <16 x i8> %23, i8 %25, i32 5
10988 ; CHECK-NEXT: %27 = extractelement <2 x i64> %3, i32 0
10989 ; CHECK-NEXT: %28 = trunc i64 %27 to i8
10990 ; CHECK-NEXT: %29 = insertelement <16 x i8> %26, i8 %28, i32 6
10991 ; CHECK-NEXT: %30 = extractelement <2 x i64> %3, i32 1
10992 ; CHECK-NEXT: %31 = trunc i64 %30 to i8
10993 ; CHECK-NEXT: %32 = insertelement <16 x i8> %29, i8 %31, i32 7
10994 ; CHECK-NEXT: %33 = extractelement <2 x i64> %4, i32 0
10995 ; CHECK-NEXT: %34 = trunc i64 %33 to i8
10996 ; CHECK-NEXT: %35 = insertelement <16 x i8> %32, i8 %34, i32 8
10997 ; CHECK-NEXT: %36 = extractelement <2 x i64> %4, i32 1
10998 ; CHECK-NEXT: %37 = trunc i64 %36 to i8
10999 ; CHECK-NEXT: %38 = insertelement <16 x i8> %35, i8 %37, i32 9
11000 ; CHECK-NEXT: %39 = extractelement <2 x i64> %5, i32 0
11001 ; CHECK-NEXT: %40 = trunc i64 %39 to i8
11002 ; CHECK-NEXT: %41 = insertelement <16 x i8> %38, i8 %40, i32 10
11003 ; CHECK-NEXT: %42 = extractelement <2 x i64> %5, i32 1
11004 ; CHECK-NEXT: %43 = trunc i64 %42 to i8
11005 ; CHECK-NEXT: %44 = insertelement <16 x i8> %41, i8 %43, i32 11
11006 ; CHECK-NEXT: %45 = extractelement <2 x i64> %6, i32 0
11007 ; CHECK-NEXT: %46 = trunc i64 %45 to i8
11008 ; CHECK-NEXT: %47 = insertelement <16 x i8> %44, i8 %46, i32 12
11009 ; CHECK-NEXT: %48 = extractelement <2 x i64> %6, i32 1
11010 ; CHECK-NEXT: %49 = trunc i64 %48 to i8
11011 ; CHECK-NEXT: %50 = insertelement <16 x i8> %47, i8 %49, i32 13
11012 ; CHECK-NEXT: %51 = extractelement <2 x i64> %7, i32 0
11013 ; CHECK-NEXT: %52 = trunc i64 %51 to i8
11014 ; CHECK-NEXT: %53 = insertelement <16 x i8> %50, i8 %52, i32 14
11015 ; CHECK-NEXT: %54 = extractelement <2 x i64> %7, i32 1
11016 ; CHECK-NEXT: %55 = trunc i64 %54 to i8
11017 ; CHECK-NEXT: %56 = insertelement <16 x i8> %53, i8 %55, i32 15
11018 ; CHECK-NEXT: ret <16 x i8> %56
11019
11020 define <16 x i16> @trunc_cast_16xi32_to_16xi16(<16 x i32>) {
11021 %2 = trunc <16 x i32> %0 to <16 x i16>
11022 ret <16 x i16> %2
11023 }
11024 ; CHECK-LABEL: define <8 x i16> @trunc_cast_16xi32_to_16xi16(<8 x i16>* nocaptur e nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>)
11025 ; CHECK-NEXT: %6 = extractelement <4 x i32> %1, i32 0
11026 ; CHECK-NEXT: %7 = trunc i32 %6 to i16
11027 ; CHECK-NEXT: %8 = insertelement <8 x i16> undef, i16 %7, i32 0
11028 ; CHECK-NEXT: %9 = extractelement <4 x i32> %1, i32 1
11029 ; CHECK-NEXT: %10 = trunc i32 %9 to i16
11030 ; CHECK-NEXT: %11 = insertelement <8 x i16> %8, i16 %10, i32 1
11031 ; CHECK-NEXT: %12 = extractelement <4 x i32> %1, i32 2
11032 ; CHECK-NEXT: %13 = trunc i32 %12 to i16
11033 ; CHECK-NEXT: %14 = insertelement <8 x i16> %11, i16 %13, i32 2
11034 ; CHECK-NEXT: %15 = extractelement <4 x i32> %1, i32 3
11035 ; CHECK-NEXT: %16 = trunc i32 %15 to i16
11036 ; CHECK-NEXT: %17 = insertelement <8 x i16> %14, i16 %16, i32 3
11037 ; CHECK-NEXT: %18 = extractelement <4 x i32> %2, i32 0
11038 ; CHECK-NEXT: %19 = trunc i32 %18 to i16
11039 ; CHECK-NEXT: %20 = insertelement <8 x i16> %17, i16 %19, i32 4
11040 ; CHECK-NEXT: %21 = extractelement <4 x i32> %2, i32 1
11041 ; CHECK-NEXT: %22 = trunc i32 %21 to i16
11042 ; CHECK-NEXT: %23 = insertelement <8 x i16> %20, i16 %22, i32 5
11043 ; CHECK-NEXT: %24 = extractelement <4 x i32> %2, i32 2
11044 ; CHECK-NEXT: %25 = trunc i32 %24 to i16
11045 ; CHECK-NEXT: %26 = insertelement <8 x i16> %23, i16 %25, i32 6
11046 ; CHECK-NEXT: %27 = extractelement <4 x i32> %2, i32 3
11047 ; CHECK-NEXT: %28 = trunc i32 %27 to i16
11048 ; CHECK-NEXT: %29 = insertelement <8 x i16> %26, i16 %28, i32 7
11049 ; CHECK-NEXT: %30 = extractelement <4 x i32> %3, i32 0
11050 ; CHECK-NEXT: %31 = trunc i32 %30 to i16
11051 ; CHECK-NEXT: %32 = insertelement <8 x i16> undef, i16 %31, i32 0
11052 ; CHECK-NEXT: %33 = extractelement <4 x i32> %3, i32 1
11053 ; CHECK-NEXT: %34 = trunc i32 %33 to i16
11054 ; CHECK-NEXT: %35 = insertelement <8 x i16> %32, i16 %34, i32 1
11055 ; CHECK-NEXT: %36 = extractelement <4 x i32> %3, i32 2
11056 ; CHECK-NEXT: %37 = trunc i32 %36 to i16
11057 ; CHECK-NEXT: %38 = insertelement <8 x i16> %35, i16 %37, i32 2
11058 ; CHECK-NEXT: %39 = extractelement <4 x i32> %3, i32 3
11059 ; CHECK-NEXT: %40 = trunc i32 %39 to i16
11060 ; CHECK-NEXT: %41 = insertelement <8 x i16> %38, i16 %40, i32 3
11061 ; CHECK-NEXT: %42 = extractelement <4 x i32> %4, i32 0
11062 ; CHECK-NEXT: %43 = trunc i32 %42 to i16
11063 ; CHECK-NEXT: %44 = insertelement <8 x i16> %41, i16 %43, i32 4
11064 ; CHECK-NEXT: %45 = extractelement <4 x i32> %4, i32 1
11065 ; CHECK-NEXT: %46 = trunc i32 %45 to i16
11066 ; CHECK-NEXT: %47 = insertelement <8 x i16> %44, i16 %46, i32 5
11067 ; CHECK-NEXT: %48 = extractelement <4 x i32> %4, i32 2
11068 ; CHECK-NEXT: %49 = trunc i32 %48 to i16
11069 ; CHECK-NEXT: %50 = insertelement <8 x i16> %47, i16 %49, i32 6
11070 ; CHECK-NEXT: %51 = extractelement <4 x i32> %4, i32 3
11071 ; CHECK-NEXT: %52 = trunc i32 %51 to i16
11072 ; CHECK-NEXT: %53 = insertelement <8 x i16> %50, i16 %52, i32 7
11073 ; CHECK-NEXT: store <8 x i16> %53, <8 x i16>* %0, align 16
11074 ; CHECK-NEXT: ret <8 x i16> %29
11075
11076 define <16 x i8> @trunc_cast_16xi32_to_16xi8(<16 x i32>) {
11077 %2 = trunc <16 x i32> %0 to <16 x i8>
11078 ret <16 x i8> %2
11079 }
11080 ; CHECK-LABEL: define <16 x i8> @trunc_cast_16xi32_to_16xi8(<4 x i32>, <4 x i32> , <4 x i32>, <4 x i32>)
11081 ; CHECK-NEXT: %5 = extractelement <4 x i32> %0, i32 0
11082 ; CHECK-NEXT: %6 = trunc i32 %5 to i8
11083 ; CHECK-NEXT: %7 = insertelement <16 x i8> undef, i8 %6, i32 0
11084 ; CHECK-NEXT: %8 = extractelement <4 x i32> %0, i32 1
11085 ; CHECK-NEXT: %9 = trunc i32 %8 to i8
11086 ; CHECK-NEXT: %10 = insertelement <16 x i8> %7, i8 %9, i32 1
11087 ; CHECK-NEXT: %11 = extractelement <4 x i32> %0, i32 2
11088 ; CHECK-NEXT: %12 = trunc i32 %11 to i8
11089 ; CHECK-NEXT: %13 = insertelement <16 x i8> %10, i8 %12, i32 2
11090 ; CHECK-NEXT: %14 = extractelement <4 x i32> %0, i32 3
11091 ; CHECK-NEXT: %15 = trunc i32 %14 to i8
11092 ; CHECK-NEXT: %16 = insertelement <16 x i8> %13, i8 %15, i32 3
11093 ; CHECK-NEXT: %17 = extractelement <4 x i32> %1, i32 0
11094 ; CHECK-NEXT: %18 = trunc i32 %17 to i8
11095 ; CHECK-NEXT: %19 = insertelement <16 x i8> %16, i8 %18, i32 4
11096 ; CHECK-NEXT: %20 = extractelement <4 x i32> %1, i32 1
11097 ; CHECK-NEXT: %21 = trunc i32 %20 to i8
11098 ; CHECK-NEXT: %22 = insertelement <16 x i8> %19, i8 %21, i32 5
11099 ; CHECK-NEXT: %23 = extractelement <4 x i32> %1, i32 2
11100 ; CHECK-NEXT: %24 = trunc i32 %23 to i8
11101 ; CHECK-NEXT: %25 = insertelement <16 x i8> %22, i8 %24, i32 6
11102 ; CHECK-NEXT: %26 = extractelement <4 x i32> %1, i32 3
11103 ; CHECK-NEXT: %27 = trunc i32 %26 to i8
11104 ; CHECK-NEXT: %28 = insertelement <16 x i8> %25, i8 %27, i32 7
11105 ; CHECK-NEXT: %29 = extractelement <4 x i32> %2, i32 0
11106 ; CHECK-NEXT: %30 = trunc i32 %29 to i8
11107 ; CHECK-NEXT: %31 = insertelement <16 x i8> %28, i8 %30, i32 8
11108 ; CHECK-NEXT: %32 = extractelement <4 x i32> %2, i32 1
11109 ; CHECK-NEXT: %33 = trunc i32 %32 to i8
11110 ; CHECK-NEXT: %34 = insertelement <16 x i8> %31, i8 %33, i32 9
11111 ; CHECK-NEXT: %35 = extractelement <4 x i32> %2, i32 2
11112 ; CHECK-NEXT: %36 = trunc i32 %35 to i8
11113 ; CHECK-NEXT: %37 = insertelement <16 x i8> %34, i8 %36, i32 10
11114 ; CHECK-NEXT: %38 = extractelement <4 x i32> %2, i32 3
11115 ; CHECK-NEXT: %39 = trunc i32 %38 to i8
11116 ; CHECK-NEXT: %40 = insertelement <16 x i8> %37, i8 %39, i32 11
11117 ; CHECK-NEXT: %41 = extractelement <4 x i32> %3, i32 0
11118 ; CHECK-NEXT: %42 = trunc i32 %41 to i8
11119 ; CHECK-NEXT: %43 = insertelement <16 x i8> %40, i8 %42, i32 12
11120 ; CHECK-NEXT: %44 = extractelement <4 x i32> %3, i32 1
11121 ; CHECK-NEXT: %45 = trunc i32 %44 to i8
11122 ; CHECK-NEXT: %46 = insertelement <16 x i8> %43, i8 %45, i32 13
11123 ; CHECK-NEXT: %47 = extractelement <4 x i32> %3, i32 2
11124 ; CHECK-NEXT: %48 = trunc i32 %47 to i8
11125 ; CHECK-NEXT: %49 = insertelement <16 x i8> %46, i8 %48, i32 14
11126 ; CHECK-NEXT: %50 = extractelement <4 x i32> %3, i32 3
11127 ; CHECK-NEXT: %51 = trunc i32 %50 to i8
11128 ; CHECK-NEXT: %52 = insertelement <16 x i8> %49, i8 %51, i32 15
11129 ; CHECK-NEXT: ret <16 x i8> %52
11130
11131 define <16 x i8> @trunc_cast_16xi16_to_16xi8(<16 x i16>) {
11132 %2 = trunc <16 x i16> %0 to <16 x i8>
11133 ret <16 x i8> %2
11134 }
11135 ; CHECK-LABEL: define <16 x i8> @trunc_cast_16xi16_to_16xi8(<8 x i16>, <8 x i16> )
11136 ; CHECK-NEXT: %3 = extractelement <8 x i16> %0, i32 0
11137 ; CHECK-NEXT: %4 = trunc i16 %3 to i8
11138 ; CHECK-NEXT: %5 = insertelement <16 x i8> undef, i8 %4, i32 0
11139 ; CHECK-NEXT: %6 = extractelement <8 x i16> %0, i32 1
11140 ; CHECK-NEXT: %7 = trunc i16 %6 to i8
11141 ; CHECK-NEXT: %8 = insertelement <16 x i8> %5, i8 %7, i32 1
11142 ; CHECK-NEXT: %9 = extractelement <8 x i16> %0, i32 2
11143 ; CHECK-NEXT: %10 = trunc i16 %9 to i8
11144 ; CHECK-NEXT: %11 = insertelement <16 x i8> %8, i8 %10, i32 2
11145 ; CHECK-NEXT: %12 = extractelement <8 x i16> %0, i32 3
11146 ; CHECK-NEXT: %13 = trunc i16 %12 to i8
11147 ; CHECK-NEXT: %14 = insertelement <16 x i8> %11, i8 %13, i32 3
11148 ; CHECK-NEXT: %15 = extractelement <8 x i16> %0, i32 4
11149 ; CHECK-NEXT: %16 = trunc i16 %15 to i8
11150 ; CHECK-NEXT: %17 = insertelement <16 x i8> %14, i8 %16, i32 4
11151 ; CHECK-NEXT: %18 = extractelement <8 x i16> %0, i32 5
11152 ; CHECK-NEXT: %19 = trunc i16 %18 to i8
11153 ; CHECK-NEXT: %20 = insertelement <16 x i8> %17, i8 %19, i32 5
11154 ; CHECK-NEXT: %21 = extractelement <8 x i16> %0, i32 6
11155 ; CHECK-NEXT: %22 = trunc i16 %21 to i8
11156 ; CHECK-NEXT: %23 = insertelement <16 x i8> %20, i8 %22, i32 6
11157 ; CHECK-NEXT: %24 = extractelement <8 x i16> %0, i32 7
11158 ; CHECK-NEXT: %25 = trunc i16 %24 to i8
11159 ; CHECK-NEXT: %26 = insertelement <16 x i8> %23, i8 %25, i32 7
11160 ; CHECK-NEXT: %27 = extractelement <8 x i16> %1, i32 0
11161 ; CHECK-NEXT: %28 = trunc i16 %27 to i8
11162 ; CHECK-NEXT: %29 = insertelement <16 x i8> %26, i8 %28, i32 8
11163 ; CHECK-NEXT: %30 = extractelement <8 x i16> %1, i32 1
11164 ; CHECK-NEXT: %31 = trunc i16 %30 to i8
11165 ; CHECK-NEXT: %32 = insertelement <16 x i8> %29, i8 %31, i32 9
11166 ; CHECK-NEXT: %33 = extractelement <8 x i16> %1, i32 2
11167 ; CHECK-NEXT: %34 = trunc i16 %33 to i8
11168 ; CHECK-NEXT: %35 = insertelement <16 x i8> %32, i8 %34, i32 10
11169 ; CHECK-NEXT: %36 = extractelement <8 x i16> %1, i32 3
11170 ; CHECK-NEXT: %37 = trunc i16 %36 to i8
11171 ; CHECK-NEXT: %38 = insertelement <16 x i8> %35, i8 %37, i32 11
11172 ; CHECK-NEXT: %39 = extractelement <8 x i16> %1, i32 4
11173 ; CHECK-NEXT: %40 = trunc i16 %39 to i8
11174 ; CHECK-NEXT: %41 = insertelement <16 x i8> %38, i8 %40, i32 12
11175 ; CHECK-NEXT: %42 = extractelement <8 x i16> %1, i32 5
11176 ; CHECK-NEXT: %43 = trunc i16 %42 to i8
11177 ; CHECK-NEXT: %44 = insertelement <16 x i8> %41, i8 %43, i32 13
11178 ; CHECK-NEXT: %45 = extractelement <8 x i16> %1, i32 6
11179 ; CHECK-NEXT: %46 = trunc i16 %45 to i8
11180 ; CHECK-NEXT: %47 = insertelement <16 x i8> %44, i8 %46, i32 14
11181 ; CHECK-NEXT: %48 = extractelement <8 x i16> %1, i32 7
11182 ; CHECK-NEXT: %49 = trunc i16 %48 to i8
11183 ; CHECK-NEXT: %50 = insertelement <16 x i8> %47, i8 %49, i32 15
11184 ; CHECK-NEXT: ret <16 x i8> %50
11185
11186 define <20 x i16> @zext_cast_20xi8_to_20xi16(<20 x i8>) {
11187 %2 = zext <20 x i8> %0 to <20 x i16>
11188 ret <20 x i16> %2
11189 }
11190 ; CHECK-LABEL: define <8 x i16> @zext_cast_20xi8_to_20xi16(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), < 16 x i8>, <16 x i8>)
11191 ; CHECK-NEXT: %5 = extractelement <16 x i8> %2, i32 0
11192 ; CHECK-NEXT: %6 = zext i8 %5 to i16
11193 ; CHECK-NEXT: %7 = insertelement <8 x i16> undef, i16 %6, i32 0
11194 ; CHECK-NEXT: %8 = extractelement <16 x i8> %2, i32 1
11195 ; CHECK-NEXT: %9 = zext i8 %8 to i16
11196 ; CHECK-NEXT: %10 = insertelement <8 x i16> %7, i16 %9, i32 1
11197 ; CHECK-NEXT: %11 = extractelement <16 x i8> %2, i32 2
11198 ; CHECK-NEXT: %12 = zext i8 %11 to i16
11199 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 2
11200 ; CHECK-NEXT: %14 = extractelement <16 x i8> %2, i32 3
11201 ; CHECK-NEXT: %15 = zext i8 %14 to i16
11202 ; CHECK-NEXT: %16 = insertelement <8 x i16> %13, i16 %15, i32 3
11203 ; CHECK-NEXT: %17 = extractelement <16 x i8> %2, i32 4
11204 ; CHECK-NEXT: %18 = zext i8 %17 to i16
11205 ; CHECK-NEXT: %19 = insertelement <8 x i16> %16, i16 %18, i32 4
11206 ; CHECK-NEXT: %20 = extractelement <16 x i8> %2, i32 5
11207 ; CHECK-NEXT: %21 = zext i8 %20 to i16
11208 ; CHECK-NEXT: %22 = insertelement <8 x i16> %19, i16 %21, i32 5
11209 ; CHECK-NEXT: %23 = extractelement <16 x i8> %2, i32 6
11210 ; CHECK-NEXT: %24 = zext i8 %23 to i16
11211 ; CHECK-NEXT: %25 = insertelement <8 x i16> %22, i16 %24, i32 6
11212 ; CHECK-NEXT: %26 = extractelement <16 x i8> %2, i32 7
11213 ; CHECK-NEXT: %27 = zext i8 %26 to i16
11214 ; CHECK-NEXT: %28 = insertelement <8 x i16> %25, i16 %27, i32 7
11215 ; CHECK-NEXT: %29 = extractelement <16 x i8> %2, i32 8
11216 ; CHECK-NEXT: %30 = zext i8 %29 to i16
11217 ; CHECK-NEXT: %31 = insertelement <8 x i16> undef, i16 %30, i32 0
11218 ; CHECK-NEXT: %32 = extractelement <16 x i8> %2, i32 9
11219 ; CHECK-NEXT: %33 = zext i8 %32 to i16
11220 ; CHECK-NEXT: %34 = insertelement <8 x i16> %31, i16 %33, i32 1
11221 ; CHECK-NEXT: %35 = extractelement <16 x i8> %2, i32 10
11222 ; CHECK-NEXT: %36 = zext i8 %35 to i16
11223 ; CHECK-NEXT: %37 = insertelement <8 x i16> %34, i16 %36, i32 2
11224 ; CHECK-NEXT: %38 = extractelement <16 x i8> %2, i32 11
11225 ; CHECK-NEXT: %39 = zext i8 %38 to i16
11226 ; CHECK-NEXT: %40 = insertelement <8 x i16> %37, i16 %39, i32 3
11227 ; CHECK-NEXT: %41 = extractelement <16 x i8> %2, i32 12
11228 ; CHECK-NEXT: %42 = zext i8 %41 to i16
11229 ; CHECK-NEXT: %43 = insertelement <8 x i16> %40, i16 %42, i32 4
11230 ; CHECK-NEXT: %44 = extractelement <16 x i8> %2, i32 13
11231 ; CHECK-NEXT: %45 = zext i8 %44 to i16
11232 ; CHECK-NEXT: %46 = insertelement <8 x i16> %43, i16 %45, i32 5
11233 ; CHECK-NEXT: %47 = extractelement <16 x i8> %2, i32 14
11234 ; CHECK-NEXT: %48 = zext i8 %47 to i16
11235 ; CHECK-NEXT: %49 = insertelement <8 x i16> %46, i16 %48, i32 6
11236 ; CHECK-NEXT: %50 = extractelement <16 x i8> %2, i32 15
11237 ; CHECK-NEXT: %51 = zext i8 %50 to i16
11238 ; CHECK-NEXT: %52 = insertelement <8 x i16> %49, i16 %51, i32 7
11239 ; CHECK-NEXT: %53 = extractelement <16 x i8> %3, i32 0
11240 ; CHECK-NEXT: %54 = zext i8 %53 to i16
11241 ; CHECK-NEXT: %55 = insertelement <8 x i16> undef, i16 %54, i32 0
11242 ; CHECK-NEXT: %56 = extractelement <16 x i8> %3, i32 1
11243 ; CHECK-NEXT: %57 = zext i8 %56 to i16
11244 ; CHECK-NEXT: %58 = insertelement <8 x i16> %55, i16 %57, i32 1
11245 ; CHECK-NEXT: %59 = extractelement <16 x i8> %3, i32 2
11246 ; CHECK-NEXT: %60 = zext i8 %59 to i16
11247 ; CHECK-NEXT: %61 = insertelement <8 x i16> %58, i16 %60, i32 2
11248 ; CHECK-NEXT: %62 = extractelement <16 x i8> %3, i32 3
11249 ; CHECK-NEXT: %63 = zext i8 %62 to i16
11250 ; CHECK-NEXT: %64 = insertelement <8 x i16> %61, i16 %63, i32 3
11251 ; CHECK-NEXT: store <8 x i16> %52, <8 x i16>* %0, align 16
11252 ; CHECK-NEXT: store <8 x i16> %64, <8 x i16>* %1, align 16
11253 ; CHECK-NEXT: ret <8 x i16> %28
11254
11255 define <20 x i32> @zext_cast_20xi8_to_20xi32(<20 x i8>) {
11256 %2 = zext <20 x i8> %0 to <20 x i32>
11257 ret <20 x i32> %2
11258 }
11259 ; CHECK-LABEL: define <4 x i32> @zext_cast_20xi8_to_20xi32(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), < 4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull de referenceable(16), <16 x i8>, <16 x i8>)
11260 ; CHECK-NEXT: %7 = extractelement <16 x i8> %4, i32 0
11261 ; CHECK-NEXT: %8 = zext i8 %7 to i32
11262 ; CHECK-NEXT: %9 = insertelement <4 x i32> undef, i32 %8, i32 0
11263 ; CHECK-NEXT: %10 = extractelement <16 x i8> %4, i32 1
11264 ; CHECK-NEXT: %11 = zext i8 %10 to i32
11265 ; CHECK-NEXT: %12 = insertelement <4 x i32> %9, i32 %11, i32 1
11266 ; CHECK-NEXT: %13 = extractelement <16 x i8> %4, i32 2
11267 ; CHECK-NEXT: %14 = zext i8 %13 to i32
11268 ; CHECK-NEXT: %15 = insertelement <4 x i32> %12, i32 %14, i32 2
11269 ; CHECK-NEXT: %16 = extractelement <16 x i8> %4, i32 3
11270 ; CHECK-NEXT: %17 = zext i8 %16 to i32
11271 ; CHECK-NEXT: %18 = insertelement <4 x i32> %15, i32 %17, i32 3
11272 ; CHECK-NEXT: %19 = extractelement <16 x i8> %4, i32 4
11273 ; CHECK-NEXT: %20 = zext i8 %19 to i32
11274 ; CHECK-NEXT: %21 = insertelement <4 x i32> undef, i32 %20, i32 0
11275 ; CHECK-NEXT: %22 = extractelement <16 x i8> %4, i32 5
11276 ; CHECK-NEXT: %23 = zext i8 %22 to i32
11277 ; CHECK-NEXT: %24 = insertelement <4 x i32> %21, i32 %23, i32 1
11278 ; CHECK-NEXT: %25 = extractelement <16 x i8> %4, i32 6
11279 ; CHECK-NEXT: %26 = zext i8 %25 to i32
11280 ; CHECK-NEXT: %27 = insertelement <4 x i32> %24, i32 %26, i32 2
11281 ; CHECK-NEXT: %28 = extractelement <16 x i8> %4, i32 7
11282 ; CHECK-NEXT: %29 = zext i8 %28 to i32
11283 ; CHECK-NEXT: %30 = insertelement <4 x i32> %27, i32 %29, i32 3
11284 ; CHECK-NEXT: %31 = extractelement <16 x i8> %4, i32 8
11285 ; CHECK-NEXT: %32 = zext i8 %31 to i32
11286 ; CHECK-NEXT: %33 = insertelement <4 x i32> undef, i32 %32, i32 0
11287 ; CHECK-NEXT: %34 = extractelement <16 x i8> %4, i32 9
11288 ; CHECK-NEXT: %35 = zext i8 %34 to i32
11289 ; CHECK-NEXT: %36 = insertelement <4 x i32> %33, i32 %35, i32 1
11290 ; CHECK-NEXT: %37 = extractelement <16 x i8> %4, i32 10
11291 ; CHECK-NEXT: %38 = zext i8 %37 to i32
11292 ; CHECK-NEXT: %39 = insertelement <4 x i32> %36, i32 %38, i32 2
11293 ; CHECK-NEXT: %40 = extractelement <16 x i8> %4, i32 11
11294 ; CHECK-NEXT: %41 = zext i8 %40 to i32
11295 ; CHECK-NEXT: %42 = insertelement <4 x i32> %39, i32 %41, i32 3
11296 ; CHECK-NEXT: %43 = extractelement <16 x i8> %4, i32 12
11297 ; CHECK-NEXT: %44 = zext i8 %43 to i32
11298 ; CHECK-NEXT: %45 = insertelement <4 x i32> undef, i32 %44, i32 0
11299 ; CHECK-NEXT: %46 = extractelement <16 x i8> %4, i32 13
11300 ; CHECK-NEXT: %47 = zext i8 %46 to i32
11301 ; CHECK-NEXT: %48 = insertelement <4 x i32> %45, i32 %47, i32 1
11302 ; CHECK-NEXT: %49 = extractelement <16 x i8> %4, i32 14
11303 ; CHECK-NEXT: %50 = zext i8 %49 to i32
11304 ; CHECK-NEXT: %51 = insertelement <4 x i32> %48, i32 %50, i32 2
11305 ; CHECK-NEXT: %52 = extractelement <16 x i8> %4, i32 15
11306 ; CHECK-NEXT: %53 = zext i8 %52 to i32
11307 ; CHECK-NEXT: %54 = insertelement <4 x i32> %51, i32 %53, i32 3
11308 ; CHECK-NEXT: %55 = extractelement <16 x i8> %5, i32 0
11309 ; CHECK-NEXT: %56 = zext i8 %55 to i32
11310 ; CHECK-NEXT: %57 = insertelement <4 x i32> undef, i32 %56, i32 0
11311 ; CHECK-NEXT: %58 = extractelement <16 x i8> %5, i32 1
11312 ; CHECK-NEXT: %59 = zext i8 %58 to i32
11313 ; CHECK-NEXT: %60 = insertelement <4 x i32> %57, i32 %59, i32 1
11314 ; CHECK-NEXT: %61 = extractelement <16 x i8> %5, i32 2
11315 ; CHECK-NEXT: %62 = zext i8 %61 to i32
11316 ; CHECK-NEXT: %63 = insertelement <4 x i32> %60, i32 %62, i32 2
11317 ; CHECK-NEXT: %64 = extractelement <16 x i8> %5, i32 3
11318 ; CHECK-NEXT: %65 = zext i8 %64 to i32
11319 ; CHECK-NEXT: %66 = insertelement <4 x i32> %63, i32 %65, i32 3
11320 ; CHECK-NEXT: store <4 x i32> %30, <4 x i32>* %0, align 16
11321 ; CHECK-NEXT: store <4 x i32> %42, <4 x i32>* %1, align 16
11322 ; CHECK-NEXT: store <4 x i32> %54, <4 x i32>* %2, align 16
11323 ; CHECK-NEXT: store <4 x i32> %66, <4 x i32>* %3, align 16
11324 ; CHECK-NEXT: ret <4 x i32> %18
11325
11326 define <20 x i64> @zext_cast_20xi8_to_20xi64(<20 x i8>) {
11327 %2 = zext <20 x i8> %0 to <20 x i64>
11328 ret <20 x i64> %2
11329 }
11330 ; CHECK-LABEL: define <2 x i64> @zext_cast_20xi8_to_20xi64(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), < 2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull de referenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferencea ble(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>)
11331 ; CHECK-NEXT: %12 = extractelement <16 x i8> %9, i32 0
11332 ; CHECK-NEXT: %13 = zext i8 %12 to i64
11333 ; CHECK-NEXT: %14 = insertelement <2 x i64> undef, i64 %13, i32 0
11334 ; CHECK-NEXT: %15 = extractelement <16 x i8> %9, i32 1
11335 ; CHECK-NEXT: %16 = zext i8 %15 to i64
11336 ; CHECK-NEXT: %17 = insertelement <2 x i64> %14, i64 %16, i32 1
11337 ; CHECK-NEXT: %18 = extractelement <16 x i8> %9, i32 2
11338 ; CHECK-NEXT: %19 = zext i8 %18 to i64
11339 ; CHECK-NEXT: %20 = insertelement <2 x i64> undef, i64 %19, i32 0
11340 ; CHECK-NEXT: %21 = extractelement <16 x i8> %9, i32 3
11341 ; CHECK-NEXT: %22 = zext i8 %21 to i64
11342 ; CHECK-NEXT: %23 = insertelement <2 x i64> %20, i64 %22, i32 1
11343 ; CHECK-NEXT: %24 = extractelement <16 x i8> %9, i32 4
11344 ; CHECK-NEXT: %25 = zext i8 %24 to i64
11345 ; CHECK-NEXT: %26 = insertelement <2 x i64> undef, i64 %25, i32 0
11346 ; CHECK-NEXT: %27 = extractelement <16 x i8> %9, i32 5
11347 ; CHECK-NEXT: %28 = zext i8 %27 to i64
11348 ; CHECK-NEXT: %29 = insertelement <2 x i64> %26, i64 %28, i32 1
11349 ; CHECK-NEXT: %30 = extractelement <16 x i8> %9, i32 6
11350 ; CHECK-NEXT: %31 = zext i8 %30 to i64
11351 ; CHECK-NEXT: %32 = insertelement <2 x i64> undef, i64 %31, i32 0
11352 ; CHECK-NEXT: %33 = extractelement <16 x i8> %9, i32 7
11353 ; CHECK-NEXT: %34 = zext i8 %33 to i64
11354 ; CHECK-NEXT: %35 = insertelement <2 x i64> %32, i64 %34, i32 1
11355 ; CHECK-NEXT: %36 = extractelement <16 x i8> %9, i32 8
11356 ; CHECK-NEXT: %37 = zext i8 %36 to i64
11357 ; CHECK-NEXT: %38 = insertelement <2 x i64> undef, i64 %37, i32 0
11358 ; CHECK-NEXT: %39 = extractelement <16 x i8> %9, i32 9
11359 ; CHECK-NEXT: %40 = zext i8 %39 to i64
11360 ; CHECK-NEXT: %41 = insertelement <2 x i64> %38, i64 %40, i32 1
11361 ; CHECK-NEXT: %42 = extractelement <16 x i8> %9, i32 10
11362 ; CHECK-NEXT: %43 = zext i8 %42 to i64
11363 ; CHECK-NEXT: %44 = insertelement <2 x i64> undef, i64 %43, i32 0
11364 ; CHECK-NEXT: %45 = extractelement <16 x i8> %9, i32 11
11365 ; CHECK-NEXT: %46 = zext i8 %45 to i64
11366 ; CHECK-NEXT: %47 = insertelement <2 x i64> %44, i64 %46, i32 1
11367 ; CHECK-NEXT: %48 = extractelement <16 x i8> %9, i32 12
11368 ; CHECK-NEXT: %49 = zext i8 %48 to i64
11369 ; CHECK-NEXT: %50 = insertelement <2 x i64> undef, i64 %49, i32 0
11370 ; CHECK-NEXT: %51 = extractelement <16 x i8> %9, i32 13
11371 ; CHECK-NEXT: %52 = zext i8 %51 to i64
11372 ; CHECK-NEXT: %53 = insertelement <2 x i64> %50, i64 %52, i32 1
11373 ; CHECK-NEXT: %54 = extractelement <16 x i8> %9, i32 14
11374 ; CHECK-NEXT: %55 = zext i8 %54 to i64
11375 ; CHECK-NEXT: %56 = insertelement <2 x i64> undef, i64 %55, i32 0
11376 ; CHECK-NEXT: %57 = extractelement <16 x i8> %9, i32 15
11377 ; CHECK-NEXT: %58 = zext i8 %57 to i64
11378 ; CHECK-NEXT: %59 = insertelement <2 x i64> %56, i64 %58, i32 1
11379 ; CHECK-NEXT: %60 = extractelement <16 x i8> %10, i32 0
11380 ; CHECK-NEXT: %61 = zext i8 %60 to i64
11381 ; CHECK-NEXT: %62 = insertelement <2 x i64> undef, i64 %61, i32 0
11382 ; CHECK-NEXT: %63 = extractelement <16 x i8> %10, i32 1
11383 ; CHECK-NEXT: %64 = zext i8 %63 to i64
11384 ; CHECK-NEXT: %65 = insertelement <2 x i64> %62, i64 %64, i32 1
11385 ; CHECK-NEXT: %66 = extractelement <16 x i8> %10, i32 2
11386 ; CHECK-NEXT: %67 = zext i8 %66 to i64
11387 ; CHECK-NEXT: %68 = insertelement <2 x i64> undef, i64 %67, i32 0
11388 ; CHECK-NEXT: %69 = extractelement <16 x i8> %10, i32 3
11389 ; CHECK-NEXT: %70 = zext i8 %69 to i64
11390 ; CHECK-NEXT: %71 = insertelement <2 x i64> %68, i64 %70, i32 1
11391 ; CHECK-NEXT: store <2 x i64> %23, <2 x i64>* %0, align 16
11392 ; CHECK-NEXT: store <2 x i64> %29, <2 x i64>* %1, align 16
11393 ; CHECK-NEXT: store <2 x i64> %35, <2 x i64>* %2, align 16
11394 ; CHECK-NEXT: store <2 x i64> %41, <2 x i64>* %3, align 16
11395 ; CHECK-NEXT: store <2 x i64> %47, <2 x i64>* %4, align 16
11396 ; CHECK-NEXT: store <2 x i64> %53, <2 x i64>* %5, align 16
11397 ; CHECK-NEXT: store <2 x i64> %59, <2 x i64>* %6, align 16
11398 ; CHECK-NEXT: store <2 x i64> %65, <2 x i64>* %7, align 16
11399 ; CHECK-NEXT: store <2 x i64> %71, <2 x i64>* %8, align 16
11400 ; CHECK-NEXT: ret <2 x i64> %17
11401
11402 define <20 x i32> @zext_cast_20xi16_to_20xi32(<20 x i16>) {
11403 %2 = zext <20 x i16> %0 to <20 x i32>
11404 ret <20 x i32> %2
11405 }
11406 ; CHECK-LABEL: define <4 x i32> @zext_cast_20xi16_to_20xi32(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull d ereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>)
11407 ; CHECK-NEXT: %8 = extractelement <8 x i16> %4, i32 0
11408 ; CHECK-NEXT: %9 = zext i16 %8 to i32
11409 ; CHECK-NEXT: %10 = insertelement <4 x i32> undef, i32 %9, i32 0
11410 ; CHECK-NEXT: %11 = extractelement <8 x i16> %4, i32 1
11411 ; CHECK-NEXT: %12 = zext i16 %11 to i32
11412 ; CHECK-NEXT: %13 = insertelement <4 x i32> %10, i32 %12, i32 1
11413 ; CHECK-NEXT: %14 = extractelement <8 x i16> %4, i32 2
11414 ; CHECK-NEXT: %15 = zext i16 %14 to i32
11415 ; CHECK-NEXT: %16 = insertelement <4 x i32> %13, i32 %15, i32 2
11416 ; CHECK-NEXT: %17 = extractelement <8 x i16> %4, i32 3
11417 ; CHECK-NEXT: %18 = zext i16 %17 to i32
11418 ; CHECK-NEXT: %19 = insertelement <4 x i32> %16, i32 %18, i32 3
11419 ; CHECK-NEXT: %20 = extractelement <8 x i16> %4, i32 4
11420 ; CHECK-NEXT: %21 = zext i16 %20 to i32
11421 ; CHECK-NEXT: %22 = insertelement <4 x i32> undef, i32 %21, i32 0
11422 ; CHECK-NEXT: %23 = extractelement <8 x i16> %4, i32 5
11423 ; CHECK-NEXT: %24 = zext i16 %23 to i32
11424 ; CHECK-NEXT: %25 = insertelement <4 x i32> %22, i32 %24, i32 1
11425 ; CHECK-NEXT: %26 = extractelement <8 x i16> %4, i32 6
11426 ; CHECK-NEXT: %27 = zext i16 %26 to i32
11427 ; CHECK-NEXT: %28 = insertelement <4 x i32> %25, i32 %27, i32 2
11428 ; CHECK-NEXT: %29 = extractelement <8 x i16> %4, i32 7
11429 ; CHECK-NEXT: %30 = zext i16 %29 to i32
11430 ; CHECK-NEXT: %31 = insertelement <4 x i32> %28, i32 %30, i32 3
11431 ; CHECK-NEXT: %32 = extractelement <8 x i16> %5, i32 0
11432 ; CHECK-NEXT: %33 = zext i16 %32 to i32
11433 ; CHECK-NEXT: %34 = insertelement <4 x i32> undef, i32 %33, i32 0
11434 ; CHECK-NEXT: %35 = extractelement <8 x i16> %5, i32 1
11435 ; CHECK-NEXT: %36 = zext i16 %35 to i32
11436 ; CHECK-NEXT: %37 = insertelement <4 x i32> %34, i32 %36, i32 1
11437 ; CHECK-NEXT: %38 = extractelement <8 x i16> %5, i32 2
11438 ; CHECK-NEXT: %39 = zext i16 %38 to i32
11439 ; CHECK-NEXT: %40 = insertelement <4 x i32> %37, i32 %39, i32 2
11440 ; CHECK-NEXT: %41 = extractelement <8 x i16> %5, i32 3
11441 ; CHECK-NEXT: %42 = zext i16 %41 to i32
11442 ; CHECK-NEXT: %43 = insertelement <4 x i32> %40, i32 %42, i32 3
11443 ; CHECK-NEXT: %44 = extractelement <8 x i16> %5, i32 4
11444 ; CHECK-NEXT: %45 = zext i16 %44 to i32
11445 ; CHECK-NEXT: %46 = insertelement <4 x i32> undef, i32 %45, i32 0
11446 ; CHECK-NEXT: %47 = extractelement <8 x i16> %5, i32 5
11447 ; CHECK-NEXT: %48 = zext i16 %47 to i32
11448 ; CHECK-NEXT: %49 = insertelement <4 x i32> %46, i32 %48, i32 1
11449 ; CHECK-NEXT: %50 = extractelement <8 x i16> %5, i32 6
11450 ; CHECK-NEXT: %51 = zext i16 %50 to i32
11451 ; CHECK-NEXT: %52 = insertelement <4 x i32> %49, i32 %51, i32 2
11452 ; CHECK-NEXT: %53 = extractelement <8 x i16> %5, i32 7
11453 ; CHECK-NEXT: %54 = zext i16 %53 to i32
11454 ; CHECK-NEXT: %55 = insertelement <4 x i32> %52, i32 %54, i32 3
11455 ; CHECK-NEXT: %56 = extractelement <8 x i16> %6, i32 0
11456 ; CHECK-NEXT: %57 = zext i16 %56 to i32
11457 ; CHECK-NEXT: %58 = insertelement <4 x i32> undef, i32 %57, i32 0
11458 ; CHECK-NEXT: %59 = extractelement <8 x i16> %6, i32 1
11459 ; CHECK-NEXT: %60 = zext i16 %59 to i32
11460 ; CHECK-NEXT: %61 = insertelement <4 x i32> %58, i32 %60, i32 1
11461 ; CHECK-NEXT: %62 = extractelement <8 x i16> %6, i32 2
11462 ; CHECK-NEXT: %63 = zext i16 %62 to i32
11463 ; CHECK-NEXT: %64 = insertelement <4 x i32> %61, i32 %63, i32 2
11464 ; CHECK-NEXT: %65 = extractelement <8 x i16> %6, i32 3
11465 ; CHECK-NEXT: %66 = zext i16 %65 to i32
11466 ; CHECK-NEXT: %67 = insertelement <4 x i32> %64, i32 %66, i32 3
11467 ; CHECK-NEXT: store <4 x i32> %31, <4 x i32>* %0, align 16
11468 ; CHECK-NEXT: store <4 x i32> %43, <4 x i32>* %1, align 16
11469 ; CHECK-NEXT: store <4 x i32> %55, <4 x i32>* %2, align 16
11470 ; CHECK-NEXT: store <4 x i32> %67, <4 x i32>* %3, align 16
11471 ; CHECK-NEXT: ret <4 x i32> %19
11472
11473 define <20 x i64> @zext_cast_20xi16_to_20xi64(<20 x i16>) {
11474 %2 = zext <20 x i16> %0 to <20 x i64>
11475 ret <20 x i64> %2
11476 }
11477 ; CHECK-LABEL: define <2 x i64> @zext_cast_20xi16_to_20xi64(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull d ereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereference able(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>)
11478 ; CHECK-NEXT: %13 = extractelement <8 x i16> %9, i32 0
11479 ; CHECK-NEXT: %14 = zext i16 %13 to i64
11480 ; CHECK-NEXT: %15 = insertelement <2 x i64> undef, i64 %14, i32 0
11481 ; CHECK-NEXT: %16 = extractelement <8 x i16> %9, i32 1
11482 ; CHECK-NEXT: %17 = zext i16 %16 to i64
11483 ; CHECK-NEXT: %18 = insertelement <2 x i64> %15, i64 %17, i32 1
11484 ; CHECK-NEXT: %19 = extractelement <8 x i16> %9, i32 2
11485 ; CHECK-NEXT: %20 = zext i16 %19 to i64
11486 ; CHECK-NEXT: %21 = insertelement <2 x i64> undef, i64 %20, i32 0
11487 ; CHECK-NEXT: %22 = extractelement <8 x i16> %9, i32 3
11488 ; CHECK-NEXT: %23 = zext i16 %22 to i64
11489 ; CHECK-NEXT: %24 = insertelement <2 x i64> %21, i64 %23, i32 1
11490 ; CHECK-NEXT: %25 = extractelement <8 x i16> %9, i32 4
11491 ; CHECK-NEXT: %26 = zext i16 %25 to i64
11492 ; CHECK-NEXT: %27 = insertelement <2 x i64> undef, i64 %26, i32 0
11493 ; CHECK-NEXT: %28 = extractelement <8 x i16> %9, i32 5
11494 ; CHECK-NEXT: %29 = zext i16 %28 to i64
11495 ; CHECK-NEXT: %30 = insertelement <2 x i64> %27, i64 %29, i32 1
11496 ; CHECK-NEXT: %31 = extractelement <8 x i16> %9, i32 6
11497 ; CHECK-NEXT: %32 = zext i16 %31 to i64
11498 ; CHECK-NEXT: %33 = insertelement <2 x i64> undef, i64 %32, i32 0
11499 ; CHECK-NEXT: %34 = extractelement <8 x i16> %9, i32 7
11500 ; CHECK-NEXT: %35 = zext i16 %34 to i64
11501 ; CHECK-NEXT: %36 = insertelement <2 x i64> %33, i64 %35, i32 1
11502 ; CHECK-NEXT: %37 = extractelement <8 x i16> %10, i32 0
11503 ; CHECK-NEXT: %38 = zext i16 %37 to i64
11504 ; CHECK-NEXT: %39 = insertelement <2 x i64> undef, i64 %38, i32 0
11505 ; CHECK-NEXT: %40 = extractelement <8 x i16> %10, i32 1
11506 ; CHECK-NEXT: %41 = zext i16 %40 to i64
11507 ; CHECK-NEXT: %42 = insertelement <2 x i64> %39, i64 %41, i32 1
11508 ; CHECK-NEXT: %43 = extractelement <8 x i16> %10, i32 2
11509 ; CHECK-NEXT: %44 = zext i16 %43 to i64
11510 ; CHECK-NEXT: %45 = insertelement <2 x i64> undef, i64 %44, i32 0
11511 ; CHECK-NEXT: %46 = extractelement <8 x i16> %10, i32 3
11512 ; CHECK-NEXT: %47 = zext i16 %46 to i64
11513 ; CHECK-NEXT: %48 = insertelement <2 x i64> %45, i64 %47, i32 1
11514 ; CHECK-NEXT: %49 = extractelement <8 x i16> %10, i32 4
11515 ; CHECK-NEXT: %50 = zext i16 %49 to i64
11516 ; CHECK-NEXT: %51 = insertelement <2 x i64> undef, i64 %50, i32 0
11517 ; CHECK-NEXT: %52 = extractelement <8 x i16> %10, i32 5
11518 ; CHECK-NEXT: %53 = zext i16 %52 to i64
11519 ; CHECK-NEXT: %54 = insertelement <2 x i64> %51, i64 %53, i32 1
11520 ; CHECK-NEXT: %55 = extractelement <8 x i16> %10, i32 6
11521 ; CHECK-NEXT: %56 = zext i16 %55 to i64
11522 ; CHECK-NEXT: %57 = insertelement <2 x i64> undef, i64 %56, i32 0
11523 ; CHECK-NEXT: %58 = extractelement <8 x i16> %10, i32 7
11524 ; CHECK-NEXT: %59 = zext i16 %58 to i64
11525 ; CHECK-NEXT: %60 = insertelement <2 x i64> %57, i64 %59, i32 1
11526 ; CHECK-NEXT: %61 = extractelement <8 x i16> %11, i32 0
11527 ; CHECK-NEXT: %62 = zext i16 %61 to i64
11528 ; CHECK-NEXT: %63 = insertelement <2 x i64> undef, i64 %62, i32 0
11529 ; CHECK-NEXT: %64 = extractelement <8 x i16> %11, i32 1
11530 ; CHECK-NEXT: %65 = zext i16 %64 to i64
11531 ; CHECK-NEXT: %66 = insertelement <2 x i64> %63, i64 %65, i32 1
11532 ; CHECK-NEXT: %67 = extractelement <8 x i16> %11, i32 2
11533 ; CHECK-NEXT: %68 = zext i16 %67 to i64
11534 ; CHECK-NEXT: %69 = insertelement <2 x i64> undef, i64 %68, i32 0
11535 ; CHECK-NEXT: %70 = extractelement <8 x i16> %11, i32 3
11536 ; CHECK-NEXT: %71 = zext i16 %70 to i64
11537 ; CHECK-NEXT: %72 = insertelement <2 x i64> %69, i64 %71, i32 1
11538 ; CHECK-NEXT: store <2 x i64> %24, <2 x i64>* %0, align 16
11539 ; CHECK-NEXT: store <2 x i64> %30, <2 x i64>* %1, align 16
11540 ; CHECK-NEXT: store <2 x i64> %36, <2 x i64>* %2, align 16
11541 ; CHECK-NEXT: store <2 x i64> %42, <2 x i64>* %3, align 16
11542 ; CHECK-NEXT: store <2 x i64> %48, <2 x i64>* %4, align 16
11543 ; CHECK-NEXT: store <2 x i64> %54, <2 x i64>* %5, align 16
11544 ; CHECK-NEXT: store <2 x i64> %60, <2 x i64>* %6, align 16
11545 ; CHECK-NEXT: store <2 x i64> %66, <2 x i64>* %7, align 16
11546 ; CHECK-NEXT: store <2 x i64> %72, <2 x i64>* %8, align 16
11547 ; CHECK-NEXT: ret <2 x i64> %18
11548
11549 define <20 x i64> @zext_cast_20xi32_to_20xi64(<20 x i32>) {
11550 %2 = zext <20 x i32> %0 to <20 x i64>
11551 ret <20 x i64> %2
11552 }
11553 ; CHECK-LABEL: define <2 x i64> @zext_cast_20xi32_to_20xi64(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull d ereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereference able(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i 32>)
11554 ; CHECK-NEXT: %15 = extractelement <4 x i32> %9, i32 0
11555 ; CHECK-NEXT: %16 = zext i32 %15 to i64
11556 ; CHECK-NEXT: %17 = insertelement <2 x i64> undef, i64 %16, i32 0
11557 ; CHECK-NEXT: %18 = extractelement <4 x i32> %9, i32 1
11558 ; CHECK-NEXT: %19 = zext i32 %18 to i64
11559 ; CHECK-NEXT: %20 = insertelement <2 x i64> %17, i64 %19, i32 1
11560 ; CHECK-NEXT: %21 = extractelement <4 x i32> %9, i32 2
11561 ; CHECK-NEXT: %22 = zext i32 %21 to i64
11562 ; CHECK-NEXT: %23 = insertelement <2 x i64> undef, i64 %22, i32 0
11563 ; CHECK-NEXT: %24 = extractelement <4 x i32> %9, i32 3
11564 ; CHECK-NEXT: %25 = zext i32 %24 to i64
11565 ; CHECK-NEXT: %26 = insertelement <2 x i64> %23, i64 %25, i32 1
11566 ; CHECK-NEXT: %27 = extractelement <4 x i32> %10, i32 0
11567 ; CHECK-NEXT: %28 = zext i32 %27 to i64
11568 ; CHECK-NEXT: %29 = insertelement <2 x i64> undef, i64 %28, i32 0
11569 ; CHECK-NEXT: %30 = extractelement <4 x i32> %10, i32 1
11570 ; CHECK-NEXT: %31 = zext i32 %30 to i64
11571 ; CHECK-NEXT: %32 = insertelement <2 x i64> %29, i64 %31, i32 1
11572 ; CHECK-NEXT: %33 = extractelement <4 x i32> %10, i32 2
11573 ; CHECK-NEXT: %34 = zext i32 %33 to i64
11574 ; CHECK-NEXT: %35 = insertelement <2 x i64> undef, i64 %34, i32 0
11575 ; CHECK-NEXT: %36 = extractelement <4 x i32> %10, i32 3
11576 ; CHECK-NEXT: %37 = zext i32 %36 to i64
11577 ; CHECK-NEXT: %38 = insertelement <2 x i64> %35, i64 %37, i32 1
11578 ; CHECK-NEXT: %39 = extractelement <4 x i32> %11, i32 0
11579 ; CHECK-NEXT: %40 = zext i32 %39 to i64
11580 ; CHECK-NEXT: %41 = insertelement <2 x i64> undef, i64 %40, i32 0
11581 ; CHECK-NEXT: %42 = extractelement <4 x i32> %11, i32 1
11582 ; CHECK-NEXT: %43 = zext i32 %42 to i64
11583 ; CHECK-NEXT: %44 = insertelement <2 x i64> %41, i64 %43, i32 1
11584 ; CHECK-NEXT: %45 = extractelement <4 x i32> %11, i32 2
11585 ; CHECK-NEXT: %46 = zext i32 %45 to i64
11586 ; CHECK-NEXT: %47 = insertelement <2 x i64> undef, i64 %46, i32 0
11587 ; CHECK-NEXT: %48 = extractelement <4 x i32> %11, i32 3
11588 ; CHECK-NEXT: %49 = zext i32 %48 to i64
11589 ; CHECK-NEXT: %50 = insertelement <2 x i64> %47, i64 %49, i32 1
11590 ; CHECK-NEXT: %51 = extractelement <4 x i32> %12, i32 0
11591 ; CHECK-NEXT: %52 = zext i32 %51 to i64
11592 ; CHECK-NEXT: %53 = insertelement <2 x i64> undef, i64 %52, i32 0
11593 ; CHECK-NEXT: %54 = extractelement <4 x i32> %12, i32 1
11594 ; CHECK-NEXT: %55 = zext i32 %54 to i64
11595 ; CHECK-NEXT: %56 = insertelement <2 x i64> %53, i64 %55, i32 1
11596 ; CHECK-NEXT: %57 = extractelement <4 x i32> %12, i32 2
11597 ; CHECK-NEXT: %58 = zext i32 %57 to i64
11598 ; CHECK-NEXT: %59 = insertelement <2 x i64> undef, i64 %58, i32 0
11599 ; CHECK-NEXT: %60 = extractelement <4 x i32> %12, i32 3
11600 ; CHECK-NEXT: %61 = zext i32 %60 to i64
11601 ; CHECK-NEXT: %62 = insertelement <2 x i64> %59, i64 %61, i32 1
11602 ; CHECK-NEXT: %63 = extractelement <4 x i32> %13, i32 0
11603 ; CHECK-NEXT: %64 = zext i32 %63 to i64
11604 ; CHECK-NEXT: %65 = insertelement <2 x i64> undef, i64 %64, i32 0
11605 ; CHECK-NEXT: %66 = extractelement <4 x i32> %13, i32 1
11606 ; CHECK-NEXT: %67 = zext i32 %66 to i64
11607 ; CHECK-NEXT: %68 = insertelement <2 x i64> %65, i64 %67, i32 1
11608 ; CHECK-NEXT: %69 = extractelement <4 x i32> %13, i32 2
11609 ; CHECK-NEXT: %70 = zext i32 %69 to i64
11610 ; CHECK-NEXT: %71 = insertelement <2 x i64> undef, i64 %70, i32 0
11611 ; CHECK-NEXT: %72 = extractelement <4 x i32> %13, i32 3
11612 ; CHECK-NEXT: %73 = zext i32 %72 to i64
11613 ; CHECK-NEXT: %74 = insertelement <2 x i64> %71, i64 %73, i32 1
11614 ; CHECK-NEXT: store <2 x i64> %26, <2 x i64>* %0, align 16
11615 ; CHECK-NEXT: store <2 x i64> %32, <2 x i64>* %1, align 16
11616 ; CHECK-NEXT: store <2 x i64> %38, <2 x i64>* %2, align 16
11617 ; CHECK-NEXT: store <2 x i64> %44, <2 x i64>* %3, align 16
11618 ; CHECK-NEXT: store <2 x i64> %50, <2 x i64>* %4, align 16
11619 ; CHECK-NEXT: store <2 x i64> %56, <2 x i64>* %5, align 16
11620 ; CHECK-NEXT: store <2 x i64> %62, <2 x i64>* %6, align 16
11621 ; CHECK-NEXT: store <2 x i64> %68, <2 x i64>* %7, align 16
11622 ; CHECK-NEXT: store <2 x i64> %74, <2 x i64>* %8, align 16
11623 ; CHECK-NEXT: ret <2 x i64> %20
11624
11625 define <20 x i16> @sext_cast_20xi8_to_20xi16(<20 x i8>) {
11626 %2 = sext <20 x i8> %0 to <20 x i16>
11627 ret <20 x i16> %2
11628 }
11629 ; CHECK-LABEL: define <8 x i16> @sext_cast_20xi8_to_20xi16(<8 x i16>* nocapture nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), < 16 x i8>, <16 x i8>)
11630 ; CHECK-NEXT: %5 = extractelement <16 x i8> %2, i32 0
11631 ; CHECK-NEXT: %6 = sext i8 %5 to i16
11632 ; CHECK-NEXT: %7 = insertelement <8 x i16> undef, i16 %6, i32 0
11633 ; CHECK-NEXT: %8 = extractelement <16 x i8> %2, i32 1
11634 ; CHECK-NEXT: %9 = sext i8 %8 to i16
11635 ; CHECK-NEXT: %10 = insertelement <8 x i16> %7, i16 %9, i32 1
11636 ; CHECK-NEXT: %11 = extractelement <16 x i8> %2, i32 2
11637 ; CHECK-NEXT: %12 = sext i8 %11 to i16
11638 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 2
11639 ; CHECK-NEXT: %14 = extractelement <16 x i8> %2, i32 3
11640 ; CHECK-NEXT: %15 = sext i8 %14 to i16
11641 ; CHECK-NEXT: %16 = insertelement <8 x i16> %13, i16 %15, i32 3
11642 ; CHECK-NEXT: %17 = extractelement <16 x i8> %2, i32 4
11643 ; CHECK-NEXT: %18 = sext i8 %17 to i16
11644 ; CHECK-NEXT: %19 = insertelement <8 x i16> %16, i16 %18, i32 4
11645 ; CHECK-NEXT: %20 = extractelement <16 x i8> %2, i32 5
11646 ; CHECK-NEXT: %21 = sext i8 %20 to i16
11647 ; CHECK-NEXT: %22 = insertelement <8 x i16> %19, i16 %21, i32 5
11648 ; CHECK-NEXT: %23 = extractelement <16 x i8> %2, i32 6
11649 ; CHECK-NEXT: %24 = sext i8 %23 to i16
11650 ; CHECK-NEXT: %25 = insertelement <8 x i16> %22, i16 %24, i32 6
11651 ; CHECK-NEXT: %26 = extractelement <16 x i8> %2, i32 7
11652 ; CHECK-NEXT: %27 = sext i8 %26 to i16
11653 ; CHECK-NEXT: %28 = insertelement <8 x i16> %25, i16 %27, i32 7
11654 ; CHECK-NEXT: %29 = extractelement <16 x i8> %2, i32 8
11655 ; CHECK-NEXT: %30 = sext i8 %29 to i16
11656 ; CHECK-NEXT: %31 = insertelement <8 x i16> undef, i16 %30, i32 0
11657 ; CHECK-NEXT: %32 = extractelement <16 x i8> %2, i32 9
11658 ; CHECK-NEXT: %33 = sext i8 %32 to i16
11659 ; CHECK-NEXT: %34 = insertelement <8 x i16> %31, i16 %33, i32 1
11660 ; CHECK-NEXT: %35 = extractelement <16 x i8> %2, i32 10
11661 ; CHECK-NEXT: %36 = sext i8 %35 to i16
11662 ; CHECK-NEXT: %37 = insertelement <8 x i16> %34, i16 %36, i32 2
11663 ; CHECK-NEXT: %38 = extractelement <16 x i8> %2, i32 11
11664 ; CHECK-NEXT: %39 = sext i8 %38 to i16
11665 ; CHECK-NEXT: %40 = insertelement <8 x i16> %37, i16 %39, i32 3
11666 ; CHECK-NEXT: %41 = extractelement <16 x i8> %2, i32 12
11667 ; CHECK-NEXT: %42 = sext i8 %41 to i16
11668 ; CHECK-NEXT: %43 = insertelement <8 x i16> %40, i16 %42, i32 4
11669 ; CHECK-NEXT: %44 = extractelement <16 x i8> %2, i32 13
11670 ; CHECK-NEXT: %45 = sext i8 %44 to i16
11671 ; CHECK-NEXT: %46 = insertelement <8 x i16> %43, i16 %45, i32 5
11672 ; CHECK-NEXT: %47 = extractelement <16 x i8> %2, i32 14
11673 ; CHECK-NEXT: %48 = sext i8 %47 to i16
11674 ; CHECK-NEXT: %49 = insertelement <8 x i16> %46, i16 %48, i32 6
11675 ; CHECK-NEXT: %50 = extractelement <16 x i8> %2, i32 15
11676 ; CHECK-NEXT: %51 = sext i8 %50 to i16
11677 ; CHECK-NEXT: %52 = insertelement <8 x i16> %49, i16 %51, i32 7
11678 ; CHECK-NEXT: %53 = extractelement <16 x i8> %3, i32 0
11679 ; CHECK-NEXT: %54 = sext i8 %53 to i16
11680 ; CHECK-NEXT: %55 = insertelement <8 x i16> undef, i16 %54, i32 0
11681 ; CHECK-NEXT: %56 = extractelement <16 x i8> %3, i32 1
11682 ; CHECK-NEXT: %57 = sext i8 %56 to i16
11683 ; CHECK-NEXT: %58 = insertelement <8 x i16> %55, i16 %57, i32 1
11684 ; CHECK-NEXT: %59 = extractelement <16 x i8> %3, i32 2
11685 ; CHECK-NEXT: %60 = sext i8 %59 to i16
11686 ; CHECK-NEXT: %61 = insertelement <8 x i16> %58, i16 %60, i32 2
11687 ; CHECK-NEXT: %62 = extractelement <16 x i8> %3, i32 3
11688 ; CHECK-NEXT: %63 = sext i8 %62 to i16
11689 ; CHECK-NEXT: %64 = insertelement <8 x i16> %61, i16 %63, i32 3
11690 ; CHECK-NEXT: store <8 x i16> %52, <8 x i16>* %0, align 16
11691 ; CHECK-NEXT: store <8 x i16> %64, <8 x i16>* %1, align 16
11692 ; CHECK-NEXT: ret <8 x i16> %28
11693
11694 define <20 x i32> @sext_cast_20xi8_to_20xi32(<20 x i8>) {
11695 %2 = sext <20 x i8> %0 to <20 x i32>
11696 ret <20 x i32> %2
11697 }
11698 ; CHECK-LABEL: define <4 x i32> @sext_cast_20xi8_to_20xi32(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), < 4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull de referenceable(16), <16 x i8>, <16 x i8>)
11699 ; CHECK-NEXT: %7 = extractelement <16 x i8> %4, i32 0
11700 ; CHECK-NEXT: %8 = sext i8 %7 to i32
11701 ; CHECK-NEXT: %9 = insertelement <4 x i32> undef, i32 %8, i32 0
11702 ; CHECK-NEXT: %10 = extractelement <16 x i8> %4, i32 1
11703 ; CHECK-NEXT: %11 = sext i8 %10 to i32
11704 ; CHECK-NEXT: %12 = insertelement <4 x i32> %9, i32 %11, i32 1
11705 ; CHECK-NEXT: %13 = extractelement <16 x i8> %4, i32 2
11706 ; CHECK-NEXT: %14 = sext i8 %13 to i32
11707 ; CHECK-NEXT: %15 = insertelement <4 x i32> %12, i32 %14, i32 2
11708 ; CHECK-NEXT: %16 = extractelement <16 x i8> %4, i32 3
11709 ; CHECK-NEXT: %17 = sext i8 %16 to i32
11710 ; CHECK-NEXT: %18 = insertelement <4 x i32> %15, i32 %17, i32 3
11711 ; CHECK-NEXT: %19 = extractelement <16 x i8> %4, i32 4
11712 ; CHECK-NEXT: %20 = sext i8 %19 to i32
11713 ; CHECK-NEXT: %21 = insertelement <4 x i32> undef, i32 %20, i32 0
11714 ; CHECK-NEXT: %22 = extractelement <16 x i8> %4, i32 5
11715 ; CHECK-NEXT: %23 = sext i8 %22 to i32
11716 ; CHECK-NEXT: %24 = insertelement <4 x i32> %21, i32 %23, i32 1
11717 ; CHECK-NEXT: %25 = extractelement <16 x i8> %4, i32 6
11718 ; CHECK-NEXT: %26 = sext i8 %25 to i32
11719 ; CHECK-NEXT: %27 = insertelement <4 x i32> %24, i32 %26, i32 2
11720 ; CHECK-NEXT: %28 = extractelement <16 x i8> %4, i32 7
11721 ; CHECK-NEXT: %29 = sext i8 %28 to i32
11722 ; CHECK-NEXT: %30 = insertelement <4 x i32> %27, i32 %29, i32 3
11723 ; CHECK-NEXT: %31 = extractelement <16 x i8> %4, i32 8
11724 ; CHECK-NEXT: %32 = sext i8 %31 to i32
11725 ; CHECK-NEXT: %33 = insertelement <4 x i32> undef, i32 %32, i32 0
11726 ; CHECK-NEXT: %34 = extractelement <16 x i8> %4, i32 9
11727 ; CHECK-NEXT: %35 = sext i8 %34 to i32
11728 ; CHECK-NEXT: %36 = insertelement <4 x i32> %33, i32 %35, i32 1
11729 ; CHECK-NEXT: %37 = extractelement <16 x i8> %4, i32 10
11730 ; CHECK-NEXT: %38 = sext i8 %37 to i32
11731 ; CHECK-NEXT: %39 = insertelement <4 x i32> %36, i32 %38, i32 2
11732 ; CHECK-NEXT: %40 = extractelement <16 x i8> %4, i32 11
11733 ; CHECK-NEXT: %41 = sext i8 %40 to i32
11734 ; CHECK-NEXT: %42 = insertelement <4 x i32> %39, i32 %41, i32 3
11735 ; CHECK-NEXT: %43 = extractelement <16 x i8> %4, i32 12
11736 ; CHECK-NEXT: %44 = sext i8 %43 to i32
11737 ; CHECK-NEXT: %45 = insertelement <4 x i32> undef, i32 %44, i32 0
11738 ; CHECK-NEXT: %46 = extractelement <16 x i8> %4, i32 13
11739 ; CHECK-NEXT: %47 = sext i8 %46 to i32
11740 ; CHECK-NEXT: %48 = insertelement <4 x i32> %45, i32 %47, i32 1
11741 ; CHECK-NEXT: %49 = extractelement <16 x i8> %4, i32 14
11742 ; CHECK-NEXT: %50 = sext i8 %49 to i32
11743 ; CHECK-NEXT: %51 = insertelement <4 x i32> %48, i32 %50, i32 2
11744 ; CHECK-NEXT: %52 = extractelement <16 x i8> %4, i32 15
11745 ; CHECK-NEXT: %53 = sext i8 %52 to i32
11746 ; CHECK-NEXT: %54 = insertelement <4 x i32> %51, i32 %53, i32 3
11747 ; CHECK-NEXT: %55 = extractelement <16 x i8> %5, i32 0
11748 ; CHECK-NEXT: %56 = sext i8 %55 to i32
11749 ; CHECK-NEXT: %57 = insertelement <4 x i32> undef, i32 %56, i32 0
11750 ; CHECK-NEXT: %58 = extractelement <16 x i8> %5, i32 1
11751 ; CHECK-NEXT: %59 = sext i8 %58 to i32
11752 ; CHECK-NEXT: %60 = insertelement <4 x i32> %57, i32 %59, i32 1
11753 ; CHECK-NEXT: %61 = extractelement <16 x i8> %5, i32 2
11754 ; CHECK-NEXT: %62 = sext i8 %61 to i32
11755 ; CHECK-NEXT: %63 = insertelement <4 x i32> %60, i32 %62, i32 2
11756 ; CHECK-NEXT: %64 = extractelement <16 x i8> %5, i32 3
11757 ; CHECK-NEXT: %65 = sext i8 %64 to i32
11758 ; CHECK-NEXT: %66 = insertelement <4 x i32> %63, i32 %65, i32 3
11759 ; CHECK-NEXT: store <4 x i32> %30, <4 x i32>* %0, align 16
11760 ; CHECK-NEXT: store <4 x i32> %42, <4 x i32>* %1, align 16
11761 ; CHECK-NEXT: store <4 x i32> %54, <4 x i32>* %2, align 16
11762 ; CHECK-NEXT: store <4 x i32> %66, <4 x i32>* %3, align 16
11763 ; CHECK-NEXT: ret <4 x i32> %18
11764
11765 define <20 x i64> @sext_cast_20xi8_to_20xi64(<20 x i8>) {
11766 %2 = sext <20 x i8> %0 to <20 x i64>
11767 ret <20 x i64> %2
11768 }
11769 ; CHECK-LABEL: define <2 x i64> @sext_cast_20xi8_to_20xi64(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), < 2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull de referenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferencea ble(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <16 x i8>, <16 x i8>)
11770 ; CHECK-NEXT: %12 = extractelement <16 x i8> %9, i32 0
11771 ; CHECK-NEXT: %13 = sext i8 %12 to i64
11772 ; CHECK-NEXT: %14 = insertelement <2 x i64> undef, i64 %13, i32 0
11773 ; CHECK-NEXT: %15 = extractelement <16 x i8> %9, i32 1
11774 ; CHECK-NEXT: %16 = sext i8 %15 to i64
11775 ; CHECK-NEXT: %17 = insertelement <2 x i64> %14, i64 %16, i32 1
11776 ; CHECK-NEXT: %18 = extractelement <16 x i8> %9, i32 2
11777 ; CHECK-NEXT: %19 = sext i8 %18 to i64
11778 ; CHECK-NEXT: %20 = insertelement <2 x i64> undef, i64 %19, i32 0
11779 ; CHECK-NEXT: %21 = extractelement <16 x i8> %9, i32 3
11780 ; CHECK-NEXT: %22 = sext i8 %21 to i64
11781 ; CHECK-NEXT: %23 = insertelement <2 x i64> %20, i64 %22, i32 1
11782 ; CHECK-NEXT: %24 = extractelement <16 x i8> %9, i32 4
11783 ; CHECK-NEXT: %25 = sext i8 %24 to i64
11784 ; CHECK-NEXT: %26 = insertelement <2 x i64> undef, i64 %25, i32 0
11785 ; CHECK-NEXT: %27 = extractelement <16 x i8> %9, i32 5
11786 ; CHECK-NEXT: %28 = sext i8 %27 to i64
11787 ; CHECK-NEXT: %29 = insertelement <2 x i64> %26, i64 %28, i32 1
11788 ; CHECK-NEXT: %30 = extractelement <16 x i8> %9, i32 6
11789 ; CHECK-NEXT: %31 = sext i8 %30 to i64
11790 ; CHECK-NEXT: %32 = insertelement <2 x i64> undef, i64 %31, i32 0
11791 ; CHECK-NEXT: %33 = extractelement <16 x i8> %9, i32 7
11792 ; CHECK-NEXT: %34 = sext i8 %33 to i64
11793 ; CHECK-NEXT: %35 = insertelement <2 x i64> %32, i64 %34, i32 1
11794 ; CHECK-NEXT: %36 = extractelement <16 x i8> %9, i32 8
11795 ; CHECK-NEXT: %37 = sext i8 %36 to i64
11796 ; CHECK-NEXT: %38 = insertelement <2 x i64> undef, i64 %37, i32 0
11797 ; CHECK-NEXT: %39 = extractelement <16 x i8> %9, i32 9
11798 ; CHECK-NEXT: %40 = sext i8 %39 to i64
11799 ; CHECK-NEXT: %41 = insertelement <2 x i64> %38, i64 %40, i32 1
11800 ; CHECK-NEXT: %42 = extractelement <16 x i8> %9, i32 10
11801 ; CHECK-NEXT: %43 = sext i8 %42 to i64
11802 ; CHECK-NEXT: %44 = insertelement <2 x i64> undef, i64 %43, i32 0
11803 ; CHECK-NEXT: %45 = extractelement <16 x i8> %9, i32 11
11804 ; CHECK-NEXT: %46 = sext i8 %45 to i64
11805 ; CHECK-NEXT: %47 = insertelement <2 x i64> %44, i64 %46, i32 1
11806 ; CHECK-NEXT: %48 = extractelement <16 x i8> %9, i32 12
11807 ; CHECK-NEXT: %49 = sext i8 %48 to i64
11808 ; CHECK-NEXT: %50 = insertelement <2 x i64> undef, i64 %49, i32 0
11809 ; CHECK-NEXT: %51 = extractelement <16 x i8> %9, i32 13
11810 ; CHECK-NEXT: %52 = sext i8 %51 to i64
11811 ; CHECK-NEXT: %53 = insertelement <2 x i64> %50, i64 %52, i32 1
11812 ; CHECK-NEXT: %54 = extractelement <16 x i8> %9, i32 14
11813 ; CHECK-NEXT: %55 = sext i8 %54 to i64
11814 ; CHECK-NEXT: %56 = insertelement <2 x i64> undef, i64 %55, i32 0
11815 ; CHECK-NEXT: %57 = extractelement <16 x i8> %9, i32 15
11816 ; CHECK-NEXT: %58 = sext i8 %57 to i64
11817 ; CHECK-NEXT: %59 = insertelement <2 x i64> %56, i64 %58, i32 1
11818 ; CHECK-NEXT: %60 = extractelement <16 x i8> %10, i32 0
11819 ; CHECK-NEXT: %61 = sext i8 %60 to i64
11820 ; CHECK-NEXT: %62 = insertelement <2 x i64> undef, i64 %61, i32 0
11821 ; CHECK-NEXT: %63 = extractelement <16 x i8> %10, i32 1
11822 ; CHECK-NEXT: %64 = sext i8 %63 to i64
11823 ; CHECK-NEXT: %65 = insertelement <2 x i64> %62, i64 %64, i32 1
11824 ; CHECK-NEXT: %66 = extractelement <16 x i8> %10, i32 2
11825 ; CHECK-NEXT: %67 = sext i8 %66 to i64
11826 ; CHECK-NEXT: %68 = insertelement <2 x i64> undef, i64 %67, i32 0
11827 ; CHECK-NEXT: %69 = extractelement <16 x i8> %10, i32 3
11828 ; CHECK-NEXT: %70 = sext i8 %69 to i64
11829 ; CHECK-NEXT: %71 = insertelement <2 x i64> %68, i64 %70, i32 1
11830 ; CHECK-NEXT: store <2 x i64> %23, <2 x i64>* %0, align 16
11831 ; CHECK-NEXT: store <2 x i64> %29, <2 x i64>* %1, align 16
11832 ; CHECK-NEXT: store <2 x i64> %35, <2 x i64>* %2, align 16
11833 ; CHECK-NEXT: store <2 x i64> %41, <2 x i64>* %3, align 16
11834 ; CHECK-NEXT: store <2 x i64> %47, <2 x i64>* %4, align 16
11835 ; CHECK-NEXT: store <2 x i64> %53, <2 x i64>* %5, align 16
11836 ; CHECK-NEXT: store <2 x i64> %59, <2 x i64>* %6, align 16
11837 ; CHECK-NEXT: store <2 x i64> %65, <2 x i64>* %7, align 16
11838 ; CHECK-NEXT: store <2 x i64> %71, <2 x i64>* %8, align 16
11839 ; CHECK-NEXT: ret <2 x i64> %17
11840
11841 define <20 x i32> @sext_cast_20xi16_to_20xi32(<20 x i16>) {
11842 %2 = sext <20 x i16> %0 to <20 x i32>
11843 ret <20 x i32> %2
11844 }
11845 ; CHECK-LABEL: define <4 x i32> @sext_cast_20xi16_to_20xi32(<4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull d ereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>)
11846 ; CHECK-NEXT: %8 = extractelement <8 x i16> %4, i32 0
11847 ; CHECK-NEXT: %9 = sext i16 %8 to i32
11848 ; CHECK-NEXT: %10 = insertelement <4 x i32> undef, i32 %9, i32 0
11849 ; CHECK-NEXT: %11 = extractelement <8 x i16> %4, i32 1
11850 ; CHECK-NEXT: %12 = sext i16 %11 to i32
11851 ; CHECK-NEXT: %13 = insertelement <4 x i32> %10, i32 %12, i32 1
11852 ; CHECK-NEXT: %14 = extractelement <8 x i16> %4, i32 2
11853 ; CHECK-NEXT: %15 = sext i16 %14 to i32
11854 ; CHECK-NEXT: %16 = insertelement <4 x i32> %13, i32 %15, i32 2
11855 ; CHECK-NEXT: %17 = extractelement <8 x i16> %4, i32 3
11856 ; CHECK-NEXT: %18 = sext i16 %17 to i32
11857 ; CHECK-NEXT: %19 = insertelement <4 x i32> %16, i32 %18, i32 3
11858 ; CHECK-NEXT: %20 = extractelement <8 x i16> %4, i32 4
11859 ; CHECK-NEXT: %21 = sext i16 %20 to i32
11860 ; CHECK-NEXT: %22 = insertelement <4 x i32> undef, i32 %21, i32 0
11861 ; CHECK-NEXT: %23 = extractelement <8 x i16> %4, i32 5
11862 ; CHECK-NEXT: %24 = sext i16 %23 to i32
11863 ; CHECK-NEXT: %25 = insertelement <4 x i32> %22, i32 %24, i32 1
11864 ; CHECK-NEXT: %26 = extractelement <8 x i16> %4, i32 6
11865 ; CHECK-NEXT: %27 = sext i16 %26 to i32
11866 ; CHECK-NEXT: %28 = insertelement <4 x i32> %25, i32 %27, i32 2
11867 ; CHECK-NEXT: %29 = extractelement <8 x i16> %4, i32 7
11868 ; CHECK-NEXT: %30 = sext i16 %29 to i32
11869 ; CHECK-NEXT: %31 = insertelement <4 x i32> %28, i32 %30, i32 3
11870 ; CHECK-NEXT: %32 = extractelement <8 x i16> %5, i32 0
11871 ; CHECK-NEXT: %33 = sext i16 %32 to i32
11872 ; CHECK-NEXT: %34 = insertelement <4 x i32> undef, i32 %33, i32 0
11873 ; CHECK-NEXT: %35 = extractelement <8 x i16> %5, i32 1
11874 ; CHECK-NEXT: %36 = sext i16 %35 to i32
11875 ; CHECK-NEXT: %37 = insertelement <4 x i32> %34, i32 %36, i32 1
11876 ; CHECK-NEXT: %38 = extractelement <8 x i16> %5, i32 2
11877 ; CHECK-NEXT: %39 = sext i16 %38 to i32
11878 ; CHECK-NEXT: %40 = insertelement <4 x i32> %37, i32 %39, i32 2
11879 ; CHECK-NEXT: %41 = extractelement <8 x i16> %5, i32 3
11880 ; CHECK-NEXT: %42 = sext i16 %41 to i32
11881 ; CHECK-NEXT: %43 = insertelement <4 x i32> %40, i32 %42, i32 3
11882 ; CHECK-NEXT: %44 = extractelement <8 x i16> %5, i32 4
11883 ; CHECK-NEXT: %45 = sext i16 %44 to i32
11884 ; CHECK-NEXT: %46 = insertelement <4 x i32> undef, i32 %45, i32 0
11885 ; CHECK-NEXT: %47 = extractelement <8 x i16> %5, i32 5
11886 ; CHECK-NEXT: %48 = sext i16 %47 to i32
11887 ; CHECK-NEXT: %49 = insertelement <4 x i32> %46, i32 %48, i32 1
11888 ; CHECK-NEXT: %50 = extractelement <8 x i16> %5, i32 6
11889 ; CHECK-NEXT: %51 = sext i16 %50 to i32
11890 ; CHECK-NEXT: %52 = insertelement <4 x i32> %49, i32 %51, i32 2
11891 ; CHECK-NEXT: %53 = extractelement <8 x i16> %5, i32 7
11892 ; CHECK-NEXT: %54 = sext i16 %53 to i32
11893 ; CHECK-NEXT: %55 = insertelement <4 x i32> %52, i32 %54, i32 3
11894 ; CHECK-NEXT: %56 = extractelement <8 x i16> %6, i32 0
11895 ; CHECK-NEXT: %57 = sext i16 %56 to i32
11896 ; CHECK-NEXT: %58 = insertelement <4 x i32> undef, i32 %57, i32 0
11897 ; CHECK-NEXT: %59 = extractelement <8 x i16> %6, i32 1
11898 ; CHECK-NEXT: %60 = sext i16 %59 to i32
11899 ; CHECK-NEXT: %61 = insertelement <4 x i32> %58, i32 %60, i32 1
11900 ; CHECK-NEXT: %62 = extractelement <8 x i16> %6, i32 2
11901 ; CHECK-NEXT: %63 = sext i16 %62 to i32
11902 ; CHECK-NEXT: %64 = insertelement <4 x i32> %61, i32 %63, i32 2
11903 ; CHECK-NEXT: %65 = extractelement <8 x i16> %6, i32 3
11904 ; CHECK-NEXT: %66 = sext i16 %65 to i32
11905 ; CHECK-NEXT: %67 = insertelement <4 x i32> %64, i32 %66, i32 3
11906 ; CHECK-NEXT: store <4 x i32> %31, <4 x i32>* %0, align 16
11907 ; CHECK-NEXT: store <4 x i32> %43, <4 x i32>* %1, align 16
11908 ; CHECK-NEXT: store <4 x i32> %55, <4 x i32>* %2, align 16
11909 ; CHECK-NEXT: store <4 x i32> %67, <4 x i32>* %3, align 16
11910 ; CHECK-NEXT: ret <4 x i32> %19
11911
11912 define <20 x i64> @sext_cast_20xi16_to_20xi64(<20 x i16>) {
11913 %2 = sext <20 x i16> %0 to <20 x i64>
11914 ret <20 x i64> %2
11915 }
11916 ; CHECK-LABEL: define <2 x i64> @sext_cast_20xi16_to_20xi64(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull d ereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereference able(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>)
11917 ; CHECK-NEXT: %13 = extractelement <8 x i16> %9, i32 0
11918 ; CHECK-NEXT: %14 = sext i16 %13 to i64
11919 ; CHECK-NEXT: %15 = insertelement <2 x i64> undef, i64 %14, i32 0
11920 ; CHECK-NEXT: %16 = extractelement <8 x i16> %9, i32 1
11921 ; CHECK-NEXT: %17 = sext i16 %16 to i64
11922 ; CHECK-NEXT: %18 = insertelement <2 x i64> %15, i64 %17, i32 1
11923 ; CHECK-NEXT: %19 = extractelement <8 x i16> %9, i32 2
11924 ; CHECK-NEXT: %20 = sext i16 %19 to i64
11925 ; CHECK-NEXT: %21 = insertelement <2 x i64> undef, i64 %20, i32 0
11926 ; CHECK-NEXT: %22 = extractelement <8 x i16> %9, i32 3
11927 ; CHECK-NEXT: %23 = sext i16 %22 to i64
11928 ; CHECK-NEXT: %24 = insertelement <2 x i64> %21, i64 %23, i32 1
11929 ; CHECK-NEXT: %25 = extractelement <8 x i16> %9, i32 4
11930 ; CHECK-NEXT: %26 = sext i16 %25 to i64
11931 ; CHECK-NEXT: %27 = insertelement <2 x i64> undef, i64 %26, i32 0
11932 ; CHECK-NEXT: %28 = extractelement <8 x i16> %9, i32 5
11933 ; CHECK-NEXT: %29 = sext i16 %28 to i64
11934 ; CHECK-NEXT: %30 = insertelement <2 x i64> %27, i64 %29, i32 1
11935 ; CHECK-NEXT: %31 = extractelement <8 x i16> %9, i32 6
11936 ; CHECK-NEXT: %32 = sext i16 %31 to i64
11937 ; CHECK-NEXT: %33 = insertelement <2 x i64> undef, i64 %32, i32 0
11938 ; CHECK-NEXT: %34 = extractelement <8 x i16> %9, i32 7
11939 ; CHECK-NEXT: %35 = sext i16 %34 to i64
11940 ; CHECK-NEXT: %36 = insertelement <2 x i64> %33, i64 %35, i32 1
11941 ; CHECK-NEXT: %37 = extractelement <8 x i16> %10, i32 0
11942 ; CHECK-NEXT: %38 = sext i16 %37 to i64
11943 ; CHECK-NEXT: %39 = insertelement <2 x i64> undef, i64 %38, i32 0
11944 ; CHECK-NEXT: %40 = extractelement <8 x i16> %10, i32 1
11945 ; CHECK-NEXT: %41 = sext i16 %40 to i64
11946 ; CHECK-NEXT: %42 = insertelement <2 x i64> %39, i64 %41, i32 1
11947 ; CHECK-NEXT: %43 = extractelement <8 x i16> %10, i32 2
11948 ; CHECK-NEXT: %44 = sext i16 %43 to i64
11949 ; CHECK-NEXT: %45 = insertelement <2 x i64> undef, i64 %44, i32 0
11950 ; CHECK-NEXT: %46 = extractelement <8 x i16> %10, i32 3
11951 ; CHECK-NEXT: %47 = sext i16 %46 to i64
11952 ; CHECK-NEXT: %48 = insertelement <2 x i64> %45, i64 %47, i32 1
11953 ; CHECK-NEXT: %49 = extractelement <8 x i16> %10, i32 4
11954 ; CHECK-NEXT: %50 = sext i16 %49 to i64
11955 ; CHECK-NEXT: %51 = insertelement <2 x i64> undef, i64 %50, i32 0
11956 ; CHECK-NEXT: %52 = extractelement <8 x i16> %10, i32 5
11957 ; CHECK-NEXT: %53 = sext i16 %52 to i64
11958 ; CHECK-NEXT: %54 = insertelement <2 x i64> %51, i64 %53, i32 1
11959 ; CHECK-NEXT: %55 = extractelement <8 x i16> %10, i32 6
11960 ; CHECK-NEXT: %56 = sext i16 %55 to i64
11961 ; CHECK-NEXT: %57 = insertelement <2 x i64> undef, i64 %56, i32 0
11962 ; CHECK-NEXT: %58 = extractelement <8 x i16> %10, i32 7
11963 ; CHECK-NEXT: %59 = sext i16 %58 to i64
11964 ; CHECK-NEXT: %60 = insertelement <2 x i64> %57, i64 %59, i32 1
11965 ; CHECK-NEXT: %61 = extractelement <8 x i16> %11, i32 0
11966 ; CHECK-NEXT: %62 = sext i16 %61 to i64
11967 ; CHECK-NEXT: %63 = insertelement <2 x i64> undef, i64 %62, i32 0
11968 ; CHECK-NEXT: %64 = extractelement <8 x i16> %11, i32 1
11969 ; CHECK-NEXT: %65 = sext i16 %64 to i64
11970 ; CHECK-NEXT: %66 = insertelement <2 x i64> %63, i64 %65, i32 1
11971 ; CHECK-NEXT: %67 = extractelement <8 x i16> %11, i32 2
11972 ; CHECK-NEXT: %68 = sext i16 %67 to i64
11973 ; CHECK-NEXT: %69 = insertelement <2 x i64> undef, i64 %68, i32 0
11974 ; CHECK-NEXT: %70 = extractelement <8 x i16> %11, i32 3
11975 ; CHECK-NEXT: %71 = sext i16 %70 to i64
11976 ; CHECK-NEXT: %72 = insertelement <2 x i64> %69, i64 %71, i32 1
11977 ; CHECK-NEXT: store <2 x i64> %24, <2 x i64>* %0, align 16
11978 ; CHECK-NEXT: store <2 x i64> %30, <2 x i64>* %1, align 16
11979 ; CHECK-NEXT: store <2 x i64> %36, <2 x i64>* %2, align 16
11980 ; CHECK-NEXT: store <2 x i64> %42, <2 x i64>* %3, align 16
11981 ; CHECK-NEXT: store <2 x i64> %48, <2 x i64>* %4, align 16
11982 ; CHECK-NEXT: store <2 x i64> %54, <2 x i64>* %5, align 16
11983 ; CHECK-NEXT: store <2 x i64> %60, <2 x i64>* %6, align 16
11984 ; CHECK-NEXT: store <2 x i64> %66, <2 x i64>* %7, align 16
11985 ; CHECK-NEXT: store <2 x i64> %72, <2 x i64>* %8, align 16
11986 ; CHECK-NEXT: ret <2 x i64> %18
11987
11988 define <20 x i64> @sext_cast_20xi32_to_20xi64(<20 x i32>) {
11989 %2 = sext <20 x i32> %0 to <20 x i64>
11990 ret <20 x i64> %2
11991 }
11992 ; CHECK-LABEL: define <2 x i64> @sext_cast_20xi32_to_20xi64(<2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull d ereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereference able(16), <2 x i64>* nocapture nonnull dereferenceable(16), <2 x i64>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i 32>)
11993 ; CHECK-NEXT: %15 = extractelement <4 x i32> %9, i32 0
11994 ; CHECK-NEXT: %16 = sext i32 %15 to i64
11995 ; CHECK-NEXT: %17 = insertelement <2 x i64> undef, i64 %16, i32 0
11996 ; CHECK-NEXT: %18 = extractelement <4 x i32> %9, i32 1
11997 ; CHECK-NEXT: %19 = sext i32 %18 to i64
11998 ; CHECK-NEXT: %20 = insertelement <2 x i64> %17, i64 %19, i32 1
11999 ; CHECK-NEXT: %21 = extractelement <4 x i32> %9, i32 2
12000 ; CHECK-NEXT: %22 = sext i32 %21 to i64
12001 ; CHECK-NEXT: %23 = insertelement <2 x i64> undef, i64 %22, i32 0
12002 ; CHECK-NEXT: %24 = extractelement <4 x i32> %9, i32 3
12003 ; CHECK-NEXT: %25 = sext i32 %24 to i64
12004 ; CHECK-NEXT: %26 = insertelement <2 x i64> %23, i64 %25, i32 1
12005 ; CHECK-NEXT: %27 = extractelement <4 x i32> %10, i32 0
12006 ; CHECK-NEXT: %28 = sext i32 %27 to i64
12007 ; CHECK-NEXT: %29 = insertelement <2 x i64> undef, i64 %28, i32 0
12008 ; CHECK-NEXT: %30 = extractelement <4 x i32> %10, i32 1
12009 ; CHECK-NEXT: %31 = sext i32 %30 to i64
12010 ; CHECK-NEXT: %32 = insertelement <2 x i64> %29, i64 %31, i32 1
12011 ; CHECK-NEXT: %33 = extractelement <4 x i32> %10, i32 2
12012 ; CHECK-NEXT: %34 = sext i32 %33 to i64
12013 ; CHECK-NEXT: %35 = insertelement <2 x i64> undef, i64 %34, i32 0
12014 ; CHECK-NEXT: %36 = extractelement <4 x i32> %10, i32 3
12015 ; CHECK-NEXT: %37 = sext i32 %36 to i64
12016 ; CHECK-NEXT: %38 = insertelement <2 x i64> %35, i64 %37, i32 1
12017 ; CHECK-NEXT: %39 = extractelement <4 x i32> %11, i32 0
12018 ; CHECK-NEXT: %40 = sext i32 %39 to i64
12019 ; CHECK-NEXT: %41 = insertelement <2 x i64> undef, i64 %40, i32 0
12020 ; CHECK-NEXT: %42 = extractelement <4 x i32> %11, i32 1
12021 ; CHECK-NEXT: %43 = sext i32 %42 to i64
12022 ; CHECK-NEXT: %44 = insertelement <2 x i64> %41, i64 %43, i32 1
12023 ; CHECK-NEXT: %45 = extractelement <4 x i32> %11, i32 2
12024 ; CHECK-NEXT: %46 = sext i32 %45 to i64
12025 ; CHECK-NEXT: %47 = insertelement <2 x i64> undef, i64 %46, i32 0
12026 ; CHECK-NEXT: %48 = extractelement <4 x i32> %11, i32 3
12027 ; CHECK-NEXT: %49 = sext i32 %48 to i64
12028 ; CHECK-NEXT: %50 = insertelement <2 x i64> %47, i64 %49, i32 1
12029 ; CHECK-NEXT: %51 = extractelement <4 x i32> %12, i32 0
12030 ; CHECK-NEXT: %52 = sext i32 %51 to i64
12031 ; CHECK-NEXT: %53 = insertelement <2 x i64> undef, i64 %52, i32 0
12032 ; CHECK-NEXT: %54 = extractelement <4 x i32> %12, i32 1
12033 ; CHECK-NEXT: %55 = sext i32 %54 to i64
12034 ; CHECK-NEXT: %56 = insertelement <2 x i64> %53, i64 %55, i32 1
12035 ; CHECK-NEXT: %57 = extractelement <4 x i32> %12, i32 2
12036 ; CHECK-NEXT: %58 = sext i32 %57 to i64
12037 ; CHECK-NEXT: %59 = insertelement <2 x i64> undef, i64 %58, i32 0
12038 ; CHECK-NEXT: %60 = extractelement <4 x i32> %12, i32 3
12039 ; CHECK-NEXT: %61 = sext i32 %60 to i64
12040 ; CHECK-NEXT: %62 = insertelement <2 x i64> %59, i64 %61, i32 1
12041 ; CHECK-NEXT: %63 = extractelement <4 x i32> %13, i32 0
12042 ; CHECK-NEXT: %64 = sext i32 %63 to i64
12043 ; CHECK-NEXT: %65 = insertelement <2 x i64> undef, i64 %64, i32 0
12044 ; CHECK-NEXT: %66 = extractelement <4 x i32> %13, i32 1
12045 ; CHECK-NEXT: %67 = sext i32 %66 to i64
12046 ; CHECK-NEXT: %68 = insertelement <2 x i64> %65, i64 %67, i32 1
12047 ; CHECK-NEXT: %69 = extractelement <4 x i32> %13, i32 2
12048 ; CHECK-NEXT: %70 = sext i32 %69 to i64
12049 ; CHECK-NEXT: %71 = insertelement <2 x i64> undef, i64 %70, i32 0
12050 ; CHECK-NEXT: %72 = extractelement <4 x i32> %13, i32 3
12051 ; CHECK-NEXT: %73 = sext i32 %72 to i64
12052 ; CHECK-NEXT: %74 = insertelement <2 x i64> %71, i64 %73, i32 1
12053 ; CHECK-NEXT: store <2 x i64> %26, <2 x i64>* %0, align 16
12054 ; CHECK-NEXT: store <2 x i64> %32, <2 x i64>* %1, align 16
12055 ; CHECK-NEXT: store <2 x i64> %38, <2 x i64>* %2, align 16
12056 ; CHECK-NEXT: store <2 x i64> %44, <2 x i64>* %3, align 16
12057 ; CHECK-NEXT: store <2 x i64> %50, <2 x i64>* %4, align 16
12058 ; CHECK-NEXT: store <2 x i64> %56, <2 x i64>* %5, align 16
12059 ; CHECK-NEXT: store <2 x i64> %62, <2 x i64>* %6, align 16
12060 ; CHECK-NEXT: store <2 x i64> %68, <2 x i64>* %7, align 16
12061 ; CHECK-NEXT: store <2 x i64> %74, <2 x i64>* %8, align 16
12062 ; CHECK-NEXT: ret <2 x i64> %20
12063
12064 define <20 x i32> @trunc_cast_20xi64_to_20xi32(<20 x i64>) {
12065 %2 = trunc <20 x i64> %0 to <20 x i32>
12066 ret <20 x i32> %2
12067 }
12068 ; CHECK-LABEL: define <4 x i32> @trunc_cast_20xi64_to_20xi32(<4 x i32>* nocaptur e nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <4 x i32>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
12069 ; CHECK-NEXT: %15 = extractelement <2 x i64> %4, i32 0
12070 ; CHECK-NEXT: %16 = trunc i64 %15 to i32
12071 ; CHECK-NEXT: %17 = insertelement <4 x i32> undef, i32 %16, i32 0
12072 ; CHECK-NEXT: %18 = extractelement <2 x i64> %4, i32 1
12073 ; CHECK-NEXT: %19 = trunc i64 %18 to i32
12074 ; CHECK-NEXT: %20 = insertelement <4 x i32> %17, i32 %19, i32 1
12075 ; CHECK-NEXT: %21 = extractelement <2 x i64> %5, i32 0
12076 ; CHECK-NEXT: %22 = trunc i64 %21 to i32
12077 ; CHECK-NEXT: %23 = insertelement <4 x i32> %20, i32 %22, i32 2
12078 ; CHECK-NEXT: %24 = extractelement <2 x i64> %5, i32 1
12079 ; CHECK-NEXT: %25 = trunc i64 %24 to i32
12080 ; CHECK-NEXT: %26 = insertelement <4 x i32> %23, i32 %25, i32 3
12081 ; CHECK-NEXT: %27 = extractelement <2 x i64> %6, i32 0
12082 ; CHECK-NEXT: %28 = trunc i64 %27 to i32
12083 ; CHECK-NEXT: %29 = insertelement <4 x i32> undef, i32 %28, i32 0
12084 ; CHECK-NEXT: %30 = extractelement <2 x i64> %6, i32 1
12085 ; CHECK-NEXT: %31 = trunc i64 %30 to i32
12086 ; CHECK-NEXT: %32 = insertelement <4 x i32> %29, i32 %31, i32 1
12087 ; CHECK-NEXT: %33 = extractelement <2 x i64> %7, i32 0
12088 ; CHECK-NEXT: %34 = trunc i64 %33 to i32
12089 ; CHECK-NEXT: %35 = insertelement <4 x i32> %32, i32 %34, i32 2
12090 ; CHECK-NEXT: %36 = extractelement <2 x i64> %7, i32 1
12091 ; CHECK-NEXT: %37 = trunc i64 %36 to i32
12092 ; CHECK-NEXT: %38 = insertelement <4 x i32> %35, i32 %37, i32 3
12093 ; CHECK-NEXT: %39 = extractelement <2 x i64> %8, i32 0
12094 ; CHECK-NEXT: %40 = trunc i64 %39 to i32
12095 ; CHECK-NEXT: %41 = insertelement <4 x i32> undef, i32 %40, i32 0
12096 ; CHECK-NEXT: %42 = extractelement <2 x i64> %8, i32 1
12097 ; CHECK-NEXT: %43 = trunc i64 %42 to i32
12098 ; CHECK-NEXT: %44 = insertelement <4 x i32> %41, i32 %43, i32 1
12099 ; CHECK-NEXT: %45 = extractelement <2 x i64> %9, i32 0
12100 ; CHECK-NEXT: %46 = trunc i64 %45 to i32
12101 ; CHECK-NEXT: %47 = insertelement <4 x i32> %44, i32 %46, i32 2
12102 ; CHECK-NEXT: %48 = extractelement <2 x i64> %9, i32 1
12103 ; CHECK-NEXT: %49 = trunc i64 %48 to i32
12104 ; CHECK-NEXT: %50 = insertelement <4 x i32> %47, i32 %49, i32 3
12105 ; CHECK-NEXT: %51 = extractelement <2 x i64> %10, i32 0
12106 ; CHECK-NEXT: %52 = trunc i64 %51 to i32
12107 ; CHECK-NEXT: %53 = insertelement <4 x i32> undef, i32 %52, i32 0
12108 ; CHECK-NEXT: %54 = extractelement <2 x i64> %10, i32 1
12109 ; CHECK-NEXT: %55 = trunc i64 %54 to i32
12110 ; CHECK-NEXT: %56 = insertelement <4 x i32> %53, i32 %55, i32 1
12111 ; CHECK-NEXT: %57 = extractelement <2 x i64> %11, i32 0
12112 ; CHECK-NEXT: %58 = trunc i64 %57 to i32
12113 ; CHECK-NEXT: %59 = insertelement <4 x i32> %56, i32 %58, i32 2
12114 ; CHECK-NEXT: %60 = extractelement <2 x i64> %11, i32 1
12115 ; CHECK-NEXT: %61 = trunc i64 %60 to i32
12116 ; CHECK-NEXT: %62 = insertelement <4 x i32> %59, i32 %61, i32 3
12117 ; CHECK-NEXT: %63 = extractelement <2 x i64> %12, i32 0
12118 ; CHECK-NEXT: %64 = trunc i64 %63 to i32
12119 ; CHECK-NEXT: %65 = insertelement <4 x i32> undef, i32 %64, i32 0
12120 ; CHECK-NEXT: %66 = extractelement <2 x i64> %12, i32 1
12121 ; CHECK-NEXT: %67 = trunc i64 %66 to i32
12122 ; CHECK-NEXT: %68 = insertelement <4 x i32> %65, i32 %67, i32 1
12123 ; CHECK-NEXT: %69 = extractelement <2 x i64> %13, i32 0
12124 ; CHECK-NEXT: %70 = trunc i64 %69 to i32
12125 ; CHECK-NEXT: %71 = insertelement <4 x i32> %68, i32 %70, i32 2
12126 ; CHECK-NEXT: %72 = extractelement <2 x i64> %13, i32 1
12127 ; CHECK-NEXT: %73 = trunc i64 %72 to i32
12128 ; CHECK-NEXT: %74 = insertelement <4 x i32> %71, i32 %73, i32 3
12129 ; CHECK-NEXT: store <4 x i32> %38, <4 x i32>* %0, align 16
12130 ; CHECK-NEXT: store <4 x i32> %50, <4 x i32>* %1, align 16
12131 ; CHECK-NEXT: store <4 x i32> %62, <4 x i32>* %2, align 16
12132 ; CHECK-NEXT: store <4 x i32> %74, <4 x i32>* %3, align 16
12133 ; CHECK-NEXT: ret <4 x i32> %26
12134
12135 define <20 x i16> @trunc_cast_20xi64_to_20xi16(<20 x i64>) {
12136 %2 = trunc <20 x i64> %0 to <20 x i16>
12137 ret <20 x i16> %2
12138 }
12139 ; CHECK-LABEL: define <8 x i16> @trunc_cast_20xi64_to_20xi16(<8 x i16>* nocaptur e nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
12140 ; CHECK-NEXT: %13 = extractelement <2 x i64> %2, i32 0
12141 ; CHECK-NEXT: %14 = trunc i64 %13 to i16
12142 ; CHECK-NEXT: %15 = insertelement <8 x i16> undef, i16 %14, i32 0
12143 ; CHECK-NEXT: %16 = extractelement <2 x i64> %2, i32 1
12144 ; CHECK-NEXT: %17 = trunc i64 %16 to i16
12145 ; CHECK-NEXT: %18 = insertelement <8 x i16> %15, i16 %17, i32 1
12146 ; CHECK-NEXT: %19 = extractelement <2 x i64> %3, i32 0
12147 ; CHECK-NEXT: %20 = trunc i64 %19 to i16
12148 ; CHECK-NEXT: %21 = insertelement <8 x i16> %18, i16 %20, i32 2
12149 ; CHECK-NEXT: %22 = extractelement <2 x i64> %3, i32 1
12150 ; CHECK-NEXT: %23 = trunc i64 %22 to i16
12151 ; CHECK-NEXT: %24 = insertelement <8 x i16> %21, i16 %23, i32 3
12152 ; CHECK-NEXT: %25 = extractelement <2 x i64> %4, i32 0
12153 ; CHECK-NEXT: %26 = trunc i64 %25 to i16
12154 ; CHECK-NEXT: %27 = insertelement <8 x i16> %24, i16 %26, i32 4
12155 ; CHECK-NEXT: %28 = extractelement <2 x i64> %4, i32 1
12156 ; CHECK-NEXT: %29 = trunc i64 %28 to i16
12157 ; CHECK-NEXT: %30 = insertelement <8 x i16> %27, i16 %29, i32 5
12158 ; CHECK-NEXT: %31 = extractelement <2 x i64> %5, i32 0
12159 ; CHECK-NEXT: %32 = trunc i64 %31 to i16
12160 ; CHECK-NEXT: %33 = insertelement <8 x i16> %30, i16 %32, i32 6
12161 ; CHECK-NEXT: %34 = extractelement <2 x i64> %5, i32 1
12162 ; CHECK-NEXT: %35 = trunc i64 %34 to i16
12163 ; CHECK-NEXT: %36 = insertelement <8 x i16> %33, i16 %35, i32 7
12164 ; CHECK-NEXT: %37 = extractelement <2 x i64> %6, i32 0
12165 ; CHECK-NEXT: %38 = trunc i64 %37 to i16
12166 ; CHECK-NEXT: %39 = insertelement <8 x i16> undef, i16 %38, i32 0
12167 ; CHECK-NEXT: %40 = extractelement <2 x i64> %6, i32 1
12168 ; CHECK-NEXT: %41 = trunc i64 %40 to i16
12169 ; CHECK-NEXT: %42 = insertelement <8 x i16> %39, i16 %41, i32 1
12170 ; CHECK-NEXT: %43 = extractelement <2 x i64> %7, i32 0
12171 ; CHECK-NEXT: %44 = trunc i64 %43 to i16
12172 ; CHECK-NEXT: %45 = insertelement <8 x i16> %42, i16 %44, i32 2
12173 ; CHECK-NEXT: %46 = extractelement <2 x i64> %7, i32 1
12174 ; CHECK-NEXT: %47 = trunc i64 %46 to i16
12175 ; CHECK-NEXT: %48 = insertelement <8 x i16> %45, i16 %47, i32 3
12176 ; CHECK-NEXT: %49 = extractelement <2 x i64> %8, i32 0
12177 ; CHECK-NEXT: %50 = trunc i64 %49 to i16
12178 ; CHECK-NEXT: %51 = insertelement <8 x i16> %48, i16 %50, i32 4
12179 ; CHECK-NEXT: %52 = extractelement <2 x i64> %8, i32 1
12180 ; CHECK-NEXT: %53 = trunc i64 %52 to i16
12181 ; CHECK-NEXT: %54 = insertelement <8 x i16> %51, i16 %53, i32 5
12182 ; CHECK-NEXT: %55 = extractelement <2 x i64> %9, i32 0
12183 ; CHECK-NEXT: %56 = trunc i64 %55 to i16
12184 ; CHECK-NEXT: %57 = insertelement <8 x i16> %54, i16 %56, i32 6
12185 ; CHECK-NEXT: %58 = extractelement <2 x i64> %9, i32 1
12186 ; CHECK-NEXT: %59 = trunc i64 %58 to i16
12187 ; CHECK-NEXT: %60 = insertelement <8 x i16> %57, i16 %59, i32 7
12188 ; CHECK-NEXT: %61 = extractelement <2 x i64> %10, i32 0
12189 ; CHECK-NEXT: %62 = trunc i64 %61 to i16
12190 ; CHECK-NEXT: %63 = insertelement <8 x i16> undef, i16 %62, i32 0
12191 ; CHECK-NEXT: %64 = extractelement <2 x i64> %10, i32 1
12192 ; CHECK-NEXT: %65 = trunc i64 %64 to i16
12193 ; CHECK-NEXT: %66 = insertelement <8 x i16> %63, i16 %65, i32 1
12194 ; CHECK-NEXT: %67 = extractelement <2 x i64> %11, i32 0
12195 ; CHECK-NEXT: %68 = trunc i64 %67 to i16
12196 ; CHECK-NEXT: %69 = insertelement <8 x i16> %66, i16 %68, i32 2
12197 ; CHECK-NEXT: %70 = extractelement <2 x i64> %11, i32 1
12198 ; CHECK-NEXT: %71 = trunc i64 %70 to i16
12199 ; CHECK-NEXT: %72 = insertelement <8 x i16> %69, i16 %71, i32 3
12200 ; CHECK-NEXT: store <8 x i16> %60, <8 x i16>* %0, align 16
12201 ; CHECK-NEXT: store <8 x i16> %72, <8 x i16>* %1, align 16
12202 ; CHECK-NEXT: ret <8 x i16> %36
12203
12204 define <20 x i8> @trunc_cast_20xi64_to_20xi8(<20 x i64>) {
12205 %2 = trunc <20 x i64> %0 to <20 x i8>
12206 ret <20 x i8> %2
12207 }
12208 ; CHECK-LABEL: define <16 x i8> @trunc_cast_20xi64_to_20xi8(<16 x i8>* nocapture nonnull dereferenceable(16), <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i 64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>)
12209 ; CHECK-NEXT: %12 = extractelement <2 x i64> %1, i32 0
12210 ; CHECK-NEXT: %13 = trunc i64 %12 to i8
12211 ; CHECK-NEXT: %14 = insertelement <16 x i8> undef, i8 %13, i32 0
12212 ; CHECK-NEXT: %15 = extractelement <2 x i64> %1, i32 1
12213 ; CHECK-NEXT: %16 = trunc i64 %15 to i8
12214 ; CHECK-NEXT: %17 = insertelement <16 x i8> %14, i8 %16, i32 1
12215 ; CHECK-NEXT: %18 = extractelement <2 x i64> %2, i32 0
12216 ; CHECK-NEXT: %19 = trunc i64 %18 to i8
12217 ; CHECK-NEXT: %20 = insertelement <16 x i8> %17, i8 %19, i32 2
12218 ; CHECK-NEXT: %21 = extractelement <2 x i64> %2, i32 1
12219 ; CHECK-NEXT: %22 = trunc i64 %21 to i8
12220 ; CHECK-NEXT: %23 = insertelement <16 x i8> %20, i8 %22, i32 3
12221 ; CHECK-NEXT: %24 = extractelement <2 x i64> %3, i32 0
12222 ; CHECK-NEXT: %25 = trunc i64 %24 to i8
12223 ; CHECK-NEXT: %26 = insertelement <16 x i8> %23, i8 %25, i32 4
12224 ; CHECK-NEXT: %27 = extractelement <2 x i64> %3, i32 1
12225 ; CHECK-NEXT: %28 = trunc i64 %27 to i8
12226 ; CHECK-NEXT: %29 = insertelement <16 x i8> %26, i8 %28, i32 5
12227 ; CHECK-NEXT: %30 = extractelement <2 x i64> %4, i32 0
12228 ; CHECK-NEXT: %31 = trunc i64 %30 to i8
12229 ; CHECK-NEXT: %32 = insertelement <16 x i8> %29, i8 %31, i32 6
12230 ; CHECK-NEXT: %33 = extractelement <2 x i64> %4, i32 1
12231 ; CHECK-NEXT: %34 = trunc i64 %33 to i8
12232 ; CHECK-NEXT: %35 = insertelement <16 x i8> %32, i8 %34, i32 7
12233 ; CHECK-NEXT: %36 = extractelement <2 x i64> %5, i32 0
12234 ; CHECK-NEXT: %37 = trunc i64 %36 to i8
12235 ; CHECK-NEXT: %38 = insertelement <16 x i8> %35, i8 %37, i32 8
12236 ; CHECK-NEXT: %39 = extractelement <2 x i64> %5, i32 1
12237 ; CHECK-NEXT: %40 = trunc i64 %39 to i8
12238 ; CHECK-NEXT: %41 = insertelement <16 x i8> %38, i8 %40, i32 9
12239 ; CHECK-NEXT: %42 = extractelement <2 x i64> %6, i32 0
12240 ; CHECK-NEXT: %43 = trunc i64 %42 to i8
12241 ; CHECK-NEXT: %44 = insertelement <16 x i8> %41, i8 %43, i32 10
12242 ; CHECK-NEXT: %45 = extractelement <2 x i64> %6, i32 1
12243 ; CHECK-NEXT: %46 = trunc i64 %45 to i8
12244 ; CHECK-NEXT: %47 = insertelement <16 x i8> %44, i8 %46, i32 11
12245 ; CHECK-NEXT: %48 = extractelement <2 x i64> %7, i32 0
12246 ; CHECK-NEXT: %49 = trunc i64 %48 to i8
12247 ; CHECK-NEXT: %50 = insertelement <16 x i8> %47, i8 %49, i32 12
12248 ; CHECK-NEXT: %51 = extractelement <2 x i64> %7, i32 1
12249 ; CHECK-NEXT: %52 = trunc i64 %51 to i8
12250 ; CHECK-NEXT: %53 = insertelement <16 x i8> %50, i8 %52, i32 13
12251 ; CHECK-NEXT: %54 = extractelement <2 x i64> %8, i32 0
12252 ; CHECK-NEXT: %55 = trunc i64 %54 to i8
12253 ; CHECK-NEXT: %56 = insertelement <16 x i8> %53, i8 %55, i32 14
12254 ; CHECK-NEXT: %57 = extractelement <2 x i64> %8, i32 1
12255 ; CHECK-NEXT: %58 = trunc i64 %57 to i8
12256 ; CHECK-NEXT: %59 = insertelement <16 x i8> %56, i8 %58, i32 15
12257 ; CHECK-NEXT: %60 = extractelement <2 x i64> %9, i32 0
12258 ; CHECK-NEXT: %61 = trunc i64 %60 to i8
12259 ; CHECK-NEXT: %62 = insertelement <16 x i8> undef, i8 %61, i32 0
12260 ; CHECK-NEXT: %63 = extractelement <2 x i64> %9, i32 1
12261 ; CHECK-NEXT: %64 = trunc i64 %63 to i8
12262 ; CHECK-NEXT: %65 = insertelement <16 x i8> %62, i8 %64, i32 1
12263 ; CHECK-NEXT: %66 = extractelement <2 x i64> %10, i32 0
12264 ; CHECK-NEXT: %67 = trunc i64 %66 to i8
12265 ; CHECK-NEXT: %68 = insertelement <16 x i8> %65, i8 %67, i32 2
12266 ; CHECK-NEXT: %69 = extractelement <2 x i64> %10, i32 1
12267 ; CHECK-NEXT: %70 = trunc i64 %69 to i8
12268 ; CHECK-NEXT: %71 = insertelement <16 x i8> %68, i8 %70, i32 3
12269 ; CHECK-NEXT: store <16 x i8> %71, <16 x i8>* %0, align 16
12270 ; CHECK-NEXT: ret <16 x i8> %59
12271
12272 define <20 x i16> @trunc_cast_20xi32_to_20xi16(<20 x i32>) {
12273 %2 = trunc <20 x i32> %0 to <20 x i16>
12274 ret <20 x i16> %2
12275 }
12276 ; CHECK-LABEL: define <8 x i16> @trunc_cast_20xi32_to_20xi16(<8 x i16>* nocaptur e nonnull dereferenceable(16), <8 x i16>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>)
12277 ; CHECK-NEXT: %8 = extractelement <4 x i32> %2, i32 0
12278 ; CHECK-NEXT: %9 = trunc i32 %8 to i16
12279 ; CHECK-NEXT: %10 = insertelement <8 x i16> undef, i16 %9, i32 0
12280 ; CHECK-NEXT: %11 = extractelement <4 x i32> %2, i32 1
12281 ; CHECK-NEXT: %12 = trunc i32 %11 to i16
12282 ; CHECK-NEXT: %13 = insertelement <8 x i16> %10, i16 %12, i32 1
12283 ; CHECK-NEXT: %14 = extractelement <4 x i32> %2, i32 2
12284 ; CHECK-NEXT: %15 = trunc i32 %14 to i16
12285 ; CHECK-NEXT: %16 = insertelement <8 x i16> %13, i16 %15, i32 2
12286 ; CHECK-NEXT: %17 = extractelement <4 x i32> %2, i32 3
12287 ; CHECK-NEXT: %18 = trunc i32 %17 to i16
12288 ; CHECK-NEXT: %19 = insertelement <8 x i16> %16, i16 %18, i32 3
12289 ; CHECK-NEXT: %20 = extractelement <4 x i32> %3, i32 0
12290 ; CHECK-NEXT: %21 = trunc i32 %20 to i16
12291 ; CHECK-NEXT: %22 = insertelement <8 x i16> %19, i16 %21, i32 4
12292 ; CHECK-NEXT: %23 = extractelement <4 x i32> %3, i32 1
12293 ; CHECK-NEXT: %24 = trunc i32 %23 to i16
12294 ; CHECK-NEXT: %25 = insertelement <8 x i16> %22, i16 %24, i32 5
12295 ; CHECK-NEXT: %26 = extractelement <4 x i32> %3, i32 2
12296 ; CHECK-NEXT: %27 = trunc i32 %26 to i16
12297 ; CHECK-NEXT: %28 = insertelement <8 x i16> %25, i16 %27, i32 6
12298 ; CHECK-NEXT: %29 = extractelement <4 x i32> %3, i32 3
12299 ; CHECK-NEXT: %30 = trunc i32 %29 to i16
12300 ; CHECK-NEXT: %31 = insertelement <8 x i16> %28, i16 %30, i32 7
12301 ; CHECK-NEXT: %32 = extractelement <4 x i32> %4, i32 0
12302 ; CHECK-NEXT: %33 = trunc i32 %32 to i16
12303 ; CHECK-NEXT: %34 = insertelement <8 x i16> undef, i16 %33, i32 0
12304 ; CHECK-NEXT: %35 = extractelement <4 x i32> %4, i32 1
12305 ; CHECK-NEXT: %36 = trunc i32 %35 to i16
12306 ; CHECK-NEXT: %37 = insertelement <8 x i16> %34, i16 %36, i32 1
12307 ; CHECK-NEXT: %38 = extractelement <4 x i32> %4, i32 2
12308 ; CHECK-NEXT: %39 = trunc i32 %38 to i16
12309 ; CHECK-NEXT: %40 = insertelement <8 x i16> %37, i16 %39, i32 2
12310 ; CHECK-NEXT: %41 = extractelement <4 x i32> %4, i32 3
12311 ; CHECK-NEXT: %42 = trunc i32 %41 to i16
12312 ; CHECK-NEXT: %43 = insertelement <8 x i16> %40, i16 %42, i32 3
12313 ; CHECK-NEXT: %44 = extractelement <4 x i32> %5, i32 0
12314 ; CHECK-NEXT: %45 = trunc i32 %44 to i16
12315 ; CHECK-NEXT: %46 = insertelement <8 x i16> %43, i16 %45, i32 4
12316 ; CHECK-NEXT: %47 = extractelement <4 x i32> %5, i32 1
12317 ; CHECK-NEXT: %48 = trunc i32 %47 to i16
12318 ; CHECK-NEXT: %49 = insertelement <8 x i16> %46, i16 %48, i32 5
12319 ; CHECK-NEXT: %50 = extractelement <4 x i32> %5, i32 2
12320 ; CHECK-NEXT: %51 = trunc i32 %50 to i16
12321 ; CHECK-NEXT: %52 = insertelement <8 x i16> %49, i16 %51, i32 6
12322 ; CHECK-NEXT: %53 = extractelement <4 x i32> %5, i32 3
12323 ; CHECK-NEXT: %54 = trunc i32 %53 to i16
12324 ; CHECK-NEXT: %55 = insertelement <8 x i16> %52, i16 %54, i32 7
12325 ; CHECK-NEXT: %56 = extractelement <4 x i32> %6, i32 0
12326 ; CHECK-NEXT: %57 = trunc i32 %56 to i16
12327 ; CHECK-NEXT: %58 = insertelement <8 x i16> undef, i16 %57, i32 0
12328 ; CHECK-NEXT: %59 = extractelement <4 x i32> %6, i32 1
12329 ; CHECK-NEXT: %60 = trunc i32 %59 to i16
12330 ; CHECK-NEXT: %61 = insertelement <8 x i16> %58, i16 %60, i32 1
12331 ; CHECK-NEXT: %62 = extractelement <4 x i32> %6, i32 2
12332 ; CHECK-NEXT: %63 = trunc i32 %62 to i16
12333 ; CHECK-NEXT: %64 = insertelement <8 x i16> %61, i16 %63, i32 2
12334 ; CHECK-NEXT: %65 = extractelement <4 x i32> %6, i32 3
12335 ; CHECK-NEXT: %66 = trunc i32 %65 to i16
12336 ; CHECK-NEXT: %67 = insertelement <8 x i16> %64, i16 %66, i32 3
12337 ; CHECK-NEXT: store <8 x i16> %55, <8 x i16>* %0, align 16
12338 ; CHECK-NEXT: store <8 x i16> %67, <8 x i16>* %1, align 16
12339 ; CHECK-NEXT: ret <8 x i16> %31
12340
12341 define <20 x i8> @trunc_cast_20xi32_to_20xi8(<20 x i32>) {
12342 %2 = trunc <20 x i32> %0 to <20 x i8>
12343 ret <20 x i8> %2
12344 }
12345 ; CHECK-LABEL: define <16 x i8> @trunc_cast_20xi32_to_20xi8(<16 x i8>* nocapture nonnull dereferenceable(16), <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i 32>)
12346 ; CHECK-NEXT: %7 = extractelement <4 x i32> %1, i32 0
12347 ; CHECK-NEXT: %8 = trunc i32 %7 to i8
12348 ; CHECK-NEXT: %9 = insertelement <16 x i8> undef, i8 %8, i32 0
12349 ; CHECK-NEXT: %10 = extractelement <4 x i32> %1, i32 1
12350 ; CHECK-NEXT: %11 = trunc i32 %10 to i8
12351 ; CHECK-NEXT: %12 = insertelement <16 x i8> %9, i8 %11, i32 1
12352 ; CHECK-NEXT: %13 = extractelement <4 x i32> %1, i32 2
12353 ; CHECK-NEXT: %14 = trunc i32 %13 to i8
12354 ; CHECK-NEXT: %15 = insertelement <16 x i8> %12, i8 %14, i32 2
12355 ; CHECK-NEXT: %16 = extractelement <4 x i32> %1, i32 3
12356 ; CHECK-NEXT: %17 = trunc i32 %16 to i8
12357 ; CHECK-NEXT: %18 = insertelement <16 x i8> %15, i8 %17, i32 3
12358 ; CHECK-NEXT: %19 = extractelement <4 x i32> %2, i32 0
12359 ; CHECK-NEXT: %20 = trunc i32 %19 to i8
12360 ; CHECK-NEXT: %21 = insertelement <16 x i8> %18, i8 %20, i32 4
12361 ; CHECK-NEXT: %22 = extractelement <4 x i32> %2, i32 1
12362 ; CHECK-NEXT: %23 = trunc i32 %22 to i8
12363 ; CHECK-NEXT: %24 = insertelement <16 x i8> %21, i8 %23, i32 5
12364 ; CHECK-NEXT: %25 = extractelement <4 x i32> %2, i32 2
12365 ; CHECK-NEXT: %26 = trunc i32 %25 to i8
12366 ; CHECK-NEXT: %27 = insertelement <16 x i8> %24, i8 %26, i32 6
12367 ; CHECK-NEXT: %28 = extractelement <4 x i32> %2, i32 3
12368 ; CHECK-NEXT: %29 = trunc i32 %28 to i8
12369 ; CHECK-NEXT: %30 = insertelement <16 x i8> %27, i8 %29, i32 7
12370 ; CHECK-NEXT: %31 = extractelement <4 x i32> %3, i32 0
12371 ; CHECK-NEXT: %32 = trunc i32 %31 to i8
12372 ; CHECK-NEXT: %33 = insertelement <16 x i8> %30, i8 %32, i32 8
12373 ; CHECK-NEXT: %34 = extractelement <4 x i32> %3, i32 1
12374 ; CHECK-NEXT: %35 = trunc i32 %34 to i8
12375 ; CHECK-NEXT: %36 = insertelement <16 x i8> %33, i8 %35, i32 9
12376 ; CHECK-NEXT: %37 = extractelement <4 x i32> %3, i32 2
12377 ; CHECK-NEXT: %38 = trunc i32 %37 to i8
12378 ; CHECK-NEXT: %39 = insertelement <16 x i8> %36, i8 %38, i32 10
12379 ; CHECK-NEXT: %40 = extractelement <4 x i32> %3, i32 3
12380 ; CHECK-NEXT: %41 = trunc i32 %40 to i8
12381 ; CHECK-NEXT: %42 = insertelement <16 x i8> %39, i8 %41, i32 11
12382 ; CHECK-NEXT: %43 = extractelement <4 x i32> %4, i32 0
12383 ; CHECK-NEXT: %44 = trunc i32 %43 to i8
12384 ; CHECK-NEXT: %45 = insertelement <16 x i8> %42, i8 %44, i32 12
12385 ; CHECK-NEXT: %46 = extractelement <4 x i32> %4, i32 1
12386 ; CHECK-NEXT: %47 = trunc i32 %46 to i8
12387 ; CHECK-NEXT: %48 = insertelement <16 x i8> %45, i8 %47, i32 13
12388 ; CHECK-NEXT: %49 = extractelement <4 x i32> %4, i32 2
12389 ; CHECK-NEXT: %50 = trunc i32 %49 to i8
12390 ; CHECK-NEXT: %51 = insertelement <16 x i8> %48, i8 %50, i32 14
12391 ; CHECK-NEXT: %52 = extractelement <4 x i32> %4, i32 3
12392 ; CHECK-NEXT: %53 = trunc i32 %52 to i8
12393 ; CHECK-NEXT: %54 = insertelement <16 x i8> %51, i8 %53, i32 15
12394 ; CHECK-NEXT: %55 = extractelement <4 x i32> %5, i32 0
12395 ; CHECK-NEXT: %56 = trunc i32 %55 to i8
12396 ; CHECK-NEXT: %57 = insertelement <16 x i8> undef, i8 %56, i32 0
12397 ; CHECK-NEXT: %58 = extractelement <4 x i32> %5, i32 1
12398 ; CHECK-NEXT: %59 = trunc i32 %58 to i8
12399 ; CHECK-NEXT: %60 = insertelement <16 x i8> %57, i8 %59, i32 1
12400 ; CHECK-NEXT: %61 = extractelement <4 x i32> %5, i32 2
12401 ; CHECK-NEXT: %62 = trunc i32 %61 to i8
12402 ; CHECK-NEXT: %63 = insertelement <16 x i8> %60, i8 %62, i32 2
12403 ; CHECK-NEXT: %64 = extractelement <4 x i32> %5, i32 3
12404 ; CHECK-NEXT: %65 = trunc i32 %64 to i8
12405 ; CHECK-NEXT: %66 = insertelement <16 x i8> %63, i8 %65, i32 3
12406 ; CHECK-NEXT: store <16 x i8> %66, <16 x i8>* %0, align 16
12407 ; CHECK-NEXT: ret <16 x i8> %54
12408
12409 define <20 x i8> @trunc_cast_20xi16_to_20xi8(<20 x i16>) {
12410 %2 = trunc <20 x i16> %0 to <20 x i8>
12411 ret <20 x i8> %2
12412 }
12413 ; CHECK-LABEL: define <16 x i8> @trunc_cast_20xi16_to_20xi8(<16 x i8>* nocapture nonnull dereferenceable(16), <8 x i16>, <8 x i16>, <8 x i16>)
12414 ; CHECK-NEXT: %5 = extractelement <8 x i16> %1, i32 0
12415 ; CHECK-NEXT: %6 = trunc i16 %5 to i8
12416 ; CHECK-NEXT: %7 = insertelement <16 x i8> undef, i8 %6, i32 0
12417 ; CHECK-NEXT: %8 = extractelement <8 x i16> %1, i32 1
12418 ; CHECK-NEXT: %9 = trunc i16 %8 to i8
12419 ; CHECK-NEXT: %10 = insertelement <16 x i8> %7, i8 %9, i32 1
12420 ; CHECK-NEXT: %11 = extractelement <8 x i16> %1, i32 2
12421 ; CHECK-NEXT: %12 = trunc i16 %11 to i8
12422 ; CHECK-NEXT: %13 = insertelement <16 x i8> %10, i8 %12, i32 2
12423 ; CHECK-NEXT: %14 = extractelement <8 x i16> %1, i32 3
12424 ; CHECK-NEXT: %15 = trunc i16 %14 to i8
12425 ; CHECK-NEXT: %16 = insertelement <16 x i8> %13, i8 %15, i32 3
12426 ; CHECK-NEXT: %17 = extractelement <8 x i16> %1, i32 4
12427 ; CHECK-NEXT: %18 = trunc i16 %17 to i8
12428 ; CHECK-NEXT: %19 = insertelement <16 x i8> %16, i8 %18, i32 4
12429 ; CHECK-NEXT: %20 = extractelement <8 x i16> %1, i32 5
12430 ; CHECK-NEXT: %21 = trunc i16 %20 to i8
12431 ; CHECK-NEXT: %22 = insertelement <16 x i8> %19, i8 %21, i32 5
12432 ; CHECK-NEXT: %23 = extractelement <8 x i16> %1, i32 6
12433 ; CHECK-NEXT: %24 = trunc i16 %23 to i8
12434 ; CHECK-NEXT: %25 = insertelement <16 x i8> %22, i8 %24, i32 6
12435 ; CHECK-NEXT: %26 = extractelement <8 x i16> %1, i32 7
12436 ; CHECK-NEXT: %27 = trunc i16 %26 to i8
12437 ; CHECK-NEXT: %28 = insertelement <16 x i8> %25, i8 %27, i32 7
12438 ; CHECK-NEXT: %29 = extractelement <8 x i16> %2, i32 0
12439 ; CHECK-NEXT: %30 = trunc i16 %29 to i8
12440 ; CHECK-NEXT: %31 = insertelement <16 x i8> %28, i8 %30, i32 8
12441 ; CHECK-NEXT: %32 = extractelement <8 x i16> %2, i32 1
12442 ; CHECK-NEXT: %33 = trunc i16 %32 to i8
12443 ; CHECK-NEXT: %34 = insertelement <16 x i8> %31, i8 %33, i32 9
12444 ; CHECK-NEXT: %35 = extractelement <8 x i16> %2, i32 2
12445 ; CHECK-NEXT: %36 = trunc i16 %35 to i8
12446 ; CHECK-NEXT: %37 = insertelement <16 x i8> %34, i8 %36, i32 10
12447 ; CHECK-NEXT: %38 = extractelement <8 x i16> %2, i32 3
12448 ; CHECK-NEXT: %39 = trunc i16 %38 to i8
12449 ; CHECK-NEXT: %40 = insertelement <16 x i8> %37, i8 %39, i32 11
12450 ; CHECK-NEXT: %41 = extractelement <8 x i16> %2, i32 4
12451 ; CHECK-NEXT: %42 = trunc i16 %41 to i8
12452 ; CHECK-NEXT: %43 = insertelement <16 x i8> %40, i8 %42, i32 12
12453 ; CHECK-NEXT: %44 = extractelement <8 x i16> %2, i32 5
12454 ; CHECK-NEXT: %45 = trunc i16 %44 to i8
12455 ; CHECK-NEXT: %46 = insertelement <16 x i8> %43, i8 %45, i32 13
12456 ; CHECK-NEXT: %47 = extractelement <8 x i16> %2, i32 6
12457 ; CHECK-NEXT: %48 = trunc i16 %47 to i8
12458 ; CHECK-NEXT: %49 = insertelement <16 x i8> %46, i8 %48, i32 14
12459 ; CHECK-NEXT: %50 = extractelement <8 x i16> %2, i32 7
12460 ; CHECK-NEXT: %51 = trunc i16 %50 to i8
12461 ; CHECK-NEXT: %52 = insertelement <16 x i8> %49, i8 %51, i32 15
12462 ; CHECK-NEXT: %53 = extractelement <8 x i16> %3, i32 0
12463 ; CHECK-NEXT: %54 = trunc i16 %53 to i8
12464 ; CHECK-NEXT: %55 = insertelement <16 x i8> undef, i8 %54, i32 0
12465 ; CHECK-NEXT: %56 = extractelement <8 x i16> %3, i32 1
12466 ; CHECK-NEXT: %57 = trunc i16 %56 to i8
12467 ; CHECK-NEXT: %58 = insertelement <16 x i8> %55, i8 %57, i32 1
12468 ; CHECK-NEXT: %59 = extractelement <8 x i16> %3, i32 2
12469 ; CHECK-NEXT: %60 = trunc i16 %59 to i8
12470 ; CHECK-NEXT: %61 = insertelement <16 x i8> %58, i8 %60, i32 2
12471 ; CHECK-NEXT: %62 = extractelement <8 x i16> %3, i32 3
12472 ; CHECK-NEXT: %63 = trunc i16 %62 to i8
12473 ; CHECK-NEXT: %64 = insertelement <16 x i8> %61, i8 %63, i32 3
12474 ; CHECK-NEXT: store <16 x i8> %64, <16 x i8>* %0, align 16
12475 ; CHECK-NEXT: ret <16 x i8> %52
12476
OLDNEW
« no previous file with comments | « test/Transforms/NaCl/vector-canonicalization-calls.ll ('k') | test/Transforms/NaCl/vector-canonicalization-cmps.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698