1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -mtriple=x86_64-unknown -basicaa -slp-vectorizer -S | FileCheck %s --check-prefix=CHECK --check-prefix=SSE
3 ; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=slm -basicaa -slp-vectorizer -S | FileCheck %s --check-prefix=CHECK --check-prefix=SLM
4 ; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7-avx -basicaa -slp-vectorizer -S | FileCheck %s --check-prefix=CHECK --check-prefix=AVX
5 ; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=core-avx2 -basicaa -slp-vectorizer -S | FileCheck %s --check-prefix=CHECK --check-prefix=AVX
6 ; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=skx -basicaa -slp-vectorizer -S | FileCheck %s --check-prefix=CHECK --check-prefix=AVX
12 define <2 x double> @buildvector_add_2f64(<2 x double> %a, <2 x double> %b) {
13 ; CHECK-LABEL: @buildvector_add_2f64(
14 ; CHECK-NEXT: [[TMP1:%.*]] = fadd <2 x double> [[A:%.*]], [[B:%.*]]
15 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <2 x double> [[TMP1]], i32 0
16 ; CHECK-NEXT: [[R0:%.*]] = insertelement <2 x double> undef, double [[TMP2]], i32 0
17 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <2 x double> [[TMP1]], i32 1
18 ; CHECK-NEXT: [[R1:%.*]] = insertelement <2 x double> [[R0]], double [[TMP3]], i32 1
19 ; CHECK-NEXT: ret <2 x double> [[R1]]
21 %a0 = extractelement <2 x double> %a, i32 0
22 %a1 = extractelement <2 x double> %a, i32 1
23 %b0 = extractelement <2 x double> %b, i32 0
24 %b1 = extractelement <2 x double> %b, i32 1
25 %c0 = fadd double %a0, %b0
26 %c1 = fadd double %a1, %b1
27 %r0 = insertelement <2 x double> undef, double %c0, i32 0
28 %r1 = insertelement <2 x double> %r0, double %c1, i32 1
32 define <2 x double> @buildvector_sub_2f64(<2 x double> %a, <2 x double> %b) {
33 ; CHECK-LABEL: @buildvector_sub_2f64(
34 ; CHECK-NEXT: [[TMP1:%.*]] = fsub <2 x double> [[A:%.*]], [[B:%.*]]
35 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <2 x double> [[TMP1]], i32 0
36 ; CHECK-NEXT: [[R0:%.*]] = insertelement <2 x double> undef, double [[TMP2]], i32 0
37 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <2 x double> [[TMP1]], i32 1
38 ; CHECK-NEXT: [[R1:%.*]] = insertelement <2 x double> [[R0]], double [[TMP3]], i32 1
39 ; CHECK-NEXT: ret <2 x double> [[R1]]
41 %a0 = extractelement <2 x double> %a, i32 0
42 %a1 = extractelement <2 x double> %a, i32 1
43 %b0 = extractelement <2 x double> %b, i32 0
44 %b1 = extractelement <2 x double> %b, i32 1
45 %c0 = fsub double %a0, %b0
46 %c1 = fsub double %a1, %b1
47 %r0 = insertelement <2 x double> undef, double %c0, i32 0
48 %r1 = insertelement <2 x double> %r0, double %c1, i32 1
52 define <2 x double> @buildvector_mul_2f64(<2 x double> %a, <2 x double> %b) {
53 ; CHECK-LABEL: @buildvector_mul_2f64(
54 ; CHECK-NEXT: [[TMP1:%.*]] = fmul <2 x double> [[A:%.*]], [[B:%.*]]
55 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <2 x double> [[TMP1]], i32 0
56 ; CHECK-NEXT: [[R0:%.*]] = insertelement <2 x double> undef, double [[TMP2]], i32 0
57 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <2 x double> [[TMP1]], i32 1
58 ; CHECK-NEXT: [[R1:%.*]] = insertelement <2 x double> [[R0]], double [[TMP3]], i32 1
59 ; CHECK-NEXT: ret <2 x double> [[R1]]
61 %a0 = extractelement <2 x double> %a, i32 0
62 %a1 = extractelement <2 x double> %a, i32 1
63 %b0 = extractelement <2 x double> %b, i32 0
64 %b1 = extractelement <2 x double> %b, i32 1
65 %c0 = fmul double %a0, %b0
66 %c1 = fmul double %a1, %b1
67 %r0 = insertelement <2 x double> undef, double %c0, i32 0
68 %r1 = insertelement <2 x double> %r0, double %c1, i32 1
72 define <2 x double> @buildvector_div_2f64(<2 x double> %a, <2 x double> %b) {
73 ; SSE-LABEL: @buildvector_div_2f64(
74 ; SSE-NEXT: [[TMP1:%.*]] = fdiv <2 x double> [[A:%.*]], [[B:%.*]]
75 ; SSE-NEXT: [[TMP2:%.*]] = extractelement <2 x double> [[TMP1]], i32 0
76 ; SSE-NEXT: [[R0:%.*]] = insertelement <2 x double> undef, double [[TMP2]], i32 0
77 ; SSE-NEXT: [[TMP3:%.*]] = extractelement <2 x double> [[TMP1]], i32 1
78 ; SSE-NEXT: [[R1:%.*]] = insertelement <2 x double> [[R0]], double [[TMP3]], i32 1
79 ; SSE-NEXT: ret <2 x double> [[R1]]
81 ; SLM-LABEL: @buildvector_div_2f64(
82 ; SLM-NEXT: [[A0:%.*]] = extractelement <2 x double> [[A:%.*]], i32 0
83 ; SLM-NEXT: [[A1:%.*]] = extractelement <2 x double> [[A]], i32 1
84 ; SLM-NEXT: [[B0:%.*]] = extractelement <2 x double> [[B:%.*]], i32 0
85 ; SLM-NEXT: [[B1:%.*]] = extractelement <2 x double> [[B]], i32 1
86 ; SLM-NEXT: [[C0:%.*]] = fdiv double [[A0]], [[B0]]
87 ; SLM-NEXT: [[C1:%.*]] = fdiv double [[A1]], [[B1]]
88 ; SLM-NEXT: [[R0:%.*]] = insertelement <2 x double> undef, double [[C0]], i32 0
89 ; SLM-NEXT: [[R1:%.*]] = insertelement <2 x double> [[R0]], double [[C1]], i32 1
90 ; SLM-NEXT: ret <2 x double> [[R1]]
92 ; AVX-LABEL: @buildvector_div_2f64(
93 ; AVX-NEXT: [[TMP1:%.*]] = fdiv <2 x double> [[A:%.*]], [[B:%.*]]
94 ; AVX-NEXT: [[TMP2:%.*]] = extractelement <2 x double> [[TMP1]], i32 0
95 ; AVX-NEXT: [[R0:%.*]] = insertelement <2 x double> undef, double [[TMP2]], i32 0
96 ; AVX-NEXT: [[TMP3:%.*]] = extractelement <2 x double> [[TMP1]], i32 1
97 ; AVX-NEXT: [[R1:%.*]] = insertelement <2 x double> [[R0]], double [[TMP3]], i32 1
98 ; AVX-NEXT: ret <2 x double> [[R1]]
100 %a0 = extractelement <2 x double> %a, i32 0
101 %a1 = extractelement <2 x double> %a, i32 1
102 %b0 = extractelement <2 x double> %b, i32 0
103 %b1 = extractelement <2 x double> %b, i32 1
104 %c0 = fdiv double %a0, %b0
105 %c1 = fdiv double %a1, %b1
106 %r0 = insertelement <2 x double> undef, double %c0, i32 0
107 %r1 = insertelement <2 x double> %r0, double %c1, i32 1
111 define <4 x float> @buildvector_add_4f32(<4 x float> %a, <4 x float> %b) {
112 ; CHECK-LABEL: @buildvector_add_4f32(
113 ; CHECK-NEXT: [[TMP1:%.*]] = fadd <4 x float> [[A:%.*]], [[B:%.*]]
114 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <4 x float> [[TMP1]], i32 0
115 ; CHECK-NEXT: [[R0:%.*]] = insertelement <4 x float> undef, float [[TMP2]], i32 0
116 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <4 x float> [[TMP1]], i32 1
117 ; CHECK-NEXT: [[R1:%.*]] = insertelement <4 x float> [[R0]], float [[TMP3]], i32 1
118 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <4 x float> [[TMP1]], i32 2
119 ; CHECK-NEXT: [[R2:%.*]] = insertelement <4 x float> [[R1]], float [[TMP4]], i32 2
120 ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x float> [[TMP1]], i32 3
121 ; CHECK-NEXT: [[R3:%.*]] = insertelement <4 x float> [[R2]], float [[TMP5]], i32 3
122 ; CHECK-NEXT: ret <4 x float> [[R3]]
124 %a0 = extractelement <4 x float> %a, i32 0
125 %a1 = extractelement <4 x float> %a, i32 1
126 %a2 = extractelement <4 x float> %a, i32 2
127 %a3 = extractelement <4 x float> %a, i32 3
128 %b0 = extractelement <4 x float> %b, i32 0
129 %b1 = extractelement <4 x float> %b, i32 1
130 %b2 = extractelement <4 x float> %b, i32 2
131 %b3 = extractelement <4 x float> %b, i32 3
132 %c0 = fadd float %a0, %b0
133 %c1 = fadd float %a1, %b1
134 %c2 = fadd float %a2, %b2
135 %c3 = fadd float %a3, %b3
136 %r0 = insertelement <4 x float> undef, float %c0, i32 0
137 %r1 = insertelement <4 x float> %r0, float %c1, i32 1
138 %r2 = insertelement <4 x float> %r1, float %c2, i32 2
139 %r3 = insertelement <4 x float> %r2, float %c3, i32 3
143 define <4 x float> @buildvector_sub_4f32(<4 x float> %a, <4 x float> %b) {
144 ; CHECK-LABEL: @buildvector_sub_4f32(
145 ; CHECK-NEXT: [[TMP1:%.*]] = fsub <4 x float> [[A:%.*]], [[B:%.*]]
146 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <4 x float> [[TMP1]], i32 0
147 ; CHECK-NEXT: [[R0:%.*]] = insertelement <4 x float> undef, float [[TMP2]], i32 0
148 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <4 x float> [[TMP1]], i32 1
149 ; CHECK-NEXT: [[R1:%.*]] = insertelement <4 x float> [[R0]], float [[TMP3]], i32 1
150 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <4 x float> [[TMP1]], i32 2
151 ; CHECK-NEXT: [[R2:%.*]] = insertelement <4 x float> [[R1]], float [[TMP4]], i32 2
152 ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x float> [[TMP1]], i32 3
153 ; CHECK-NEXT: [[R3:%.*]] = insertelement <4 x float> [[R2]], float [[TMP5]], i32 3
154 ; CHECK-NEXT: ret <4 x float> [[R3]]
156 %a0 = extractelement <4 x float> %a, i32 0
157 %a1 = extractelement <4 x float> %a, i32 1
158 %a2 = extractelement <4 x float> %a, i32 2
159 %a3 = extractelement <4 x float> %a, i32 3
160 %b0 = extractelement <4 x float> %b, i32 0
161 %b1 = extractelement <4 x float> %b, i32 1
162 %b2 = extractelement <4 x float> %b, i32 2
163 %b3 = extractelement <4 x float> %b, i32 3
164 %c0 = fsub float %a0, %b0
165 %c1 = fsub float %a1, %b1
166 %c2 = fsub float %a2, %b2
167 %c3 = fsub float %a3, %b3
168 %r0 = insertelement <4 x float> undef, float %c0, i32 0
169 %r1 = insertelement <4 x float> %r0, float %c1, i32 1
170 %r2 = insertelement <4 x float> %r1, float %c2, i32 2
171 %r3 = insertelement <4 x float> %r2, float %c3, i32 3
175 define <4 x float> @buildvector_mul_4f32(<4 x float> %a, <4 x float> %b) {
176 ; CHECK-LABEL: @buildvector_mul_4f32(
177 ; CHECK-NEXT: [[TMP1:%.*]] = fmul <4 x float> [[A:%.*]], [[B:%.*]]
178 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <4 x float> [[TMP1]], i32 0
179 ; CHECK-NEXT: [[R0:%.*]] = insertelement <4 x float> undef, float [[TMP2]], i32 0
180 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <4 x float> [[TMP1]], i32 1
181 ; CHECK-NEXT: [[R1:%.*]] = insertelement <4 x float> [[R0]], float [[TMP3]], i32 1
182 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <4 x float> [[TMP1]], i32 2
183 ; CHECK-NEXT: [[R2:%.*]] = insertelement <4 x float> [[R1]], float [[TMP4]], i32 2
184 ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x float> [[TMP1]], i32 3
185 ; CHECK-NEXT: [[R3:%.*]] = insertelement <4 x float> [[R2]], float [[TMP5]], i32 3
186 ; CHECK-NEXT: ret <4 x float> [[R3]]
188 %a0 = extractelement <4 x float> %a, i32 0
189 %a1 = extractelement <4 x float> %a, i32 1
190 %a2 = extractelement <4 x float> %a, i32 2
191 %a3 = extractelement <4 x float> %a, i32 3
192 %b0 = extractelement <4 x float> %b, i32 0
193 %b1 = extractelement <4 x float> %b, i32 1
194 %b2 = extractelement <4 x float> %b, i32 2
195 %b3 = extractelement <4 x float> %b, i32 3
196 %c0 = fmul float %a0, %b0
197 %c1 = fmul float %a1, %b1
198 %c2 = fmul float %a2, %b2
199 %c3 = fmul float %a3, %b3
200 %r0 = insertelement <4 x float> undef, float %c0, i32 0
201 %r1 = insertelement <4 x float> %r0, float %c1, i32 1
202 %r2 = insertelement <4 x float> %r1, float %c2, i32 2
203 %r3 = insertelement <4 x float> %r2, float %c3, i32 3
207 define <4 x float> @buildvector_div_4f32(<4 x float> %a, <4 x float> %b) {
208 ; CHECK-LABEL: @buildvector_div_4f32(
209 ; CHECK-NEXT: [[TMP1:%.*]] = fdiv <4 x float> [[A:%.*]], [[B:%.*]]
210 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <4 x float> [[TMP1]], i32 0
211 ; CHECK-NEXT: [[R0:%.*]] = insertelement <4 x float> undef, float [[TMP2]], i32 0
212 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <4 x float> [[TMP1]], i32 1
213 ; CHECK-NEXT: [[R1:%.*]] = insertelement <4 x float> [[R0]], float [[TMP3]], i32 1
214 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <4 x float> [[TMP1]], i32 2
215 ; CHECK-NEXT: [[R2:%.*]] = insertelement <4 x float> [[R1]], float [[TMP4]], i32 2
216 ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x float> [[TMP1]], i32 3
217 ; CHECK-NEXT: [[R3:%.*]] = insertelement <4 x float> [[R2]], float [[TMP5]], i32 3
218 ; CHECK-NEXT: ret <4 x float> [[R3]]
220 %a0 = extractelement <4 x float> %a, i32 0
221 %a1 = extractelement <4 x float> %a, i32 1
222 %a2 = extractelement <4 x float> %a, i32 2
223 %a3 = extractelement <4 x float> %a, i32 3
224 %b0 = extractelement <4 x float> %b, i32 0
225 %b1 = extractelement <4 x float> %b, i32 1
226 %b2 = extractelement <4 x float> %b, i32 2
227 %b3 = extractelement <4 x float> %b, i32 3
228 %c0 = fdiv float %a0, %b0
229 %c1 = fdiv float %a1, %b1
230 %c2 = fdiv float %a2, %b2
231 %c3 = fdiv float %a3, %b3
232 %r0 = insertelement <4 x float> undef, float %c0, i32 0
233 %r1 = insertelement <4 x float> %r0, float %c1, i32 1
234 %r2 = insertelement <4 x float> %r1, float %c2, i32 2
235 %r3 = insertelement <4 x float> %r2, float %c3, i32 3
243 define <4 x double> @buildvector_add_4f64(<4 x double> %a, <4 x double> %b) {
244 ; CHECK-LABEL: @buildvector_add_4f64(
245 ; CHECK-NEXT: [[TMP1:%.*]] = fadd <4 x double> [[A:%.*]], [[B:%.*]]
246 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <4 x double> [[TMP1]], i32 0
247 ; CHECK-NEXT: [[R0:%.*]] = insertelement <4 x double> undef, double [[TMP2]], i32 0
248 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <4 x double> [[TMP1]], i32 1
249 ; CHECK-NEXT: [[R1:%.*]] = insertelement <4 x double> [[R0]], double [[TMP3]], i32 1
250 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <4 x double> [[TMP1]], i32 2
251 ; CHECK-NEXT: [[R2:%.*]] = insertelement <4 x double> [[R1]], double [[TMP4]], i32 2
252 ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x double> [[TMP1]], i32 3
253 ; CHECK-NEXT: [[R3:%.*]] = insertelement <4 x double> [[R2]], double [[TMP5]], i32 3
254 ; CHECK-NEXT: ret <4 x double> [[R3]]
256 %a0 = extractelement <4 x double> %a, i32 0
257 %a1 = extractelement <4 x double> %a, i32 1
258 %a2 = extractelement <4 x double> %a, i32 2
259 %a3 = extractelement <4 x double> %a, i32 3
260 %b0 = extractelement <4 x double> %b, i32 0
261 %b1 = extractelement <4 x double> %b, i32 1
262 %b2 = extractelement <4 x double> %b, i32 2
263 %b3 = extractelement <4 x double> %b, i32 3
264 %c0 = fadd double %a0, %b0
265 %c1 = fadd double %a1, %b1
266 %c2 = fadd double %a2, %b2
267 %c3 = fadd double %a3, %b3
268 %r0 = insertelement <4 x double> undef, double %c0, i32 0
269 %r1 = insertelement <4 x double> %r0, double %c1, i32 1
270 %r2 = insertelement <4 x double> %r1, double %c2, i32 2
271 %r3 = insertelement <4 x double> %r2, double %c3, i32 3
275 define <4 x double> @buildvector_sub_4f64(<4 x double> %a, <4 x double> %b) {
276 ; CHECK-LABEL: @buildvector_sub_4f64(
277 ; CHECK-NEXT: [[TMP1:%.*]] = fsub <4 x double> [[A:%.*]], [[B:%.*]]
278 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <4 x double> [[TMP1]], i32 0
279 ; CHECK-NEXT: [[R0:%.*]] = insertelement <4 x double> undef, double [[TMP2]], i32 0
280 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <4 x double> [[TMP1]], i32 1
281 ; CHECK-NEXT: [[R1:%.*]] = insertelement <4 x double> [[R0]], double [[TMP3]], i32 1
282 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <4 x double> [[TMP1]], i32 2
283 ; CHECK-NEXT: [[R2:%.*]] = insertelement <4 x double> [[R1]], double [[TMP4]], i32 2
284 ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x double> [[TMP1]], i32 3
285 ; CHECK-NEXT: [[R3:%.*]] = insertelement <4 x double> [[R2]], double [[TMP5]], i32 3
286 ; CHECK-NEXT: ret <4 x double> [[R3]]
288 %a0 = extractelement <4 x double> %a, i32 0
289 %a1 = extractelement <4 x double> %a, i32 1
290 %a2 = extractelement <4 x double> %a, i32 2
291 %a3 = extractelement <4 x double> %a, i32 3
292 %b0 = extractelement <4 x double> %b, i32 0
293 %b1 = extractelement <4 x double> %b, i32 1
294 %b2 = extractelement <4 x double> %b, i32 2
295 %b3 = extractelement <4 x double> %b, i32 3
296 %c0 = fsub double %a0, %b0
297 %c1 = fsub double %a1, %b1
298 %c2 = fsub double %a2, %b2
299 %c3 = fsub double %a3, %b3
300 %r0 = insertelement <4 x double> undef, double %c0, i32 0
301 %r1 = insertelement <4 x double> %r0, double %c1, i32 1
302 %r2 = insertelement <4 x double> %r1, double %c2, i32 2
303 %r3 = insertelement <4 x double> %r2, double %c3, i32 3
307 define <4 x double> @buildvector_mul_4f64(<4 x double> %a, <4 x double> %b) {
308 ; CHECK-LABEL: @buildvector_mul_4f64(
309 ; CHECK-NEXT: [[TMP1:%.*]] = fmul <4 x double> [[A:%.*]], [[B:%.*]]
310 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <4 x double> [[TMP1]], i32 0
311 ; CHECK-NEXT: [[R0:%.*]] = insertelement <4 x double> undef, double [[TMP2]], i32 0
312 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <4 x double> [[TMP1]], i32 1
313 ; CHECK-NEXT: [[R1:%.*]] = insertelement <4 x double> [[R0]], double [[TMP3]], i32 1
314 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <4 x double> [[TMP1]], i32 2
315 ; CHECK-NEXT: [[R2:%.*]] = insertelement <4 x double> [[R1]], double [[TMP4]], i32 2
316 ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x double> [[TMP1]], i32 3
317 ; CHECK-NEXT: [[R3:%.*]] = insertelement <4 x double> [[R2]], double [[TMP5]], i32 3
318 ; CHECK-NEXT: ret <4 x double> [[R3]]
320 %a0 = extractelement <4 x double> %a, i32 0
321 %a1 = extractelement <4 x double> %a, i32 1
322 %a2 = extractelement <4 x double> %a, i32 2
323 %a3 = extractelement <4 x double> %a, i32 3
324 %b0 = extractelement <4 x double> %b, i32 0
325 %b1 = extractelement <4 x double> %b, i32 1
326 %b2 = extractelement <4 x double> %b, i32 2
327 %b3 = extractelement <4 x double> %b, i32 3
328 %c0 = fmul double %a0, %b0
329 %c1 = fmul double %a1, %b1
330 %c2 = fmul double %a2, %b2
331 %c3 = fmul double %a3, %b3
332 %r0 = insertelement <4 x double> undef, double %c0, i32 0
333 %r1 = insertelement <4 x double> %r0, double %c1, i32 1
334 %r2 = insertelement <4 x double> %r1, double %c2, i32 2
335 %r3 = insertelement <4 x double> %r2, double %c3, i32 3
339 define <4 x double> @buildvector_div_4f64(<4 x double> %a, <4 x double> %b) {
340 ; SSE-LABEL: @buildvector_div_4f64(
341 ; SSE-NEXT: [[TMP1:%.*]] = fdiv <4 x double> [[A:%.*]], [[B:%.*]]
342 ; SSE-NEXT: [[TMP2:%.*]] = extractelement <4 x double> [[TMP1]], i32 0
343 ; SSE-NEXT: [[R0:%.*]] = insertelement <4 x double> undef, double [[TMP2]], i32 0
344 ; SSE-NEXT: [[TMP3:%.*]] = extractelement <4 x double> [[TMP1]], i32 1
345 ; SSE-NEXT: [[R1:%.*]] = insertelement <4 x double> [[R0]], double [[TMP3]], i32 1
346 ; SSE-NEXT: [[TMP4:%.*]] = extractelement <4 x double> [[TMP1]], i32 2
347 ; SSE-NEXT: [[R2:%.*]] = insertelement <4 x double> [[R1]], double [[TMP4]], i32 2
348 ; SSE-NEXT: [[TMP5:%.*]] = extractelement <4 x double> [[TMP1]], i32 3
349 ; SSE-NEXT: [[R3:%.*]] = insertelement <4 x double> [[R2]], double [[TMP5]], i32 3
350 ; SSE-NEXT: ret <4 x double> [[R3]]
352 ; SLM-LABEL: @buildvector_div_4f64(
353 ; SLM-NEXT: [[A0:%.*]] = extractelement <4 x double> [[A:%.*]], i32 0
354 ; SLM-NEXT: [[A1:%.*]] = extractelement <4 x double> [[A]], i32 1
355 ; SLM-NEXT: [[A2:%.*]] = extractelement <4 x double> [[A]], i32 2
356 ; SLM-NEXT: [[A3:%.*]] = extractelement <4 x double> [[A]], i32 3
357 ; SLM-NEXT: [[B0:%.*]] = extractelement <4 x double> [[B:%.*]], i32 0
358 ; SLM-NEXT: [[B1:%.*]] = extractelement <4 x double> [[B]], i32 1
359 ; SLM-NEXT: [[B2:%.*]] = extractelement <4 x double> [[B]], i32 2
360 ; SLM-NEXT: [[B3:%.*]] = extractelement <4 x double> [[B]], i32 3
361 ; SLM-NEXT: [[C0:%.*]] = fdiv double [[A0]], [[B0]]
362 ; SLM-NEXT: [[C1:%.*]] = fdiv double [[A1]], [[B1]]
363 ; SLM-NEXT: [[C2:%.*]] = fdiv double [[A2]], [[B2]]
364 ; SLM-NEXT: [[C3:%.*]] = fdiv double [[A3]], [[B3]]
365 ; SLM-NEXT: [[R0:%.*]] = insertelement <4 x double> undef, double [[C0]], i32 0
366 ; SLM-NEXT: [[R1:%.*]] = insertelement <4 x double> [[R0]], double [[C1]], i32 1
367 ; SLM-NEXT: [[R2:%.*]] = insertelement <4 x double> [[R1]], double [[C2]], i32 2
368 ; SLM-NEXT: [[R3:%.*]] = insertelement <4 x double> [[R2]], double [[C3]], i32 3
369 ; SLM-NEXT: ret <4 x double> [[R3]]
371 ; AVX-LABEL: @buildvector_div_4f64(
372 ; AVX-NEXT: [[TMP1:%.*]] = fdiv <4 x double> [[A:%.*]], [[B:%.*]]
373 ; AVX-NEXT: [[TMP2:%.*]] = extractelement <4 x double> [[TMP1]], i32 0
374 ; AVX-NEXT: [[R0:%.*]] = insertelement <4 x double> undef, double [[TMP2]], i32 0
375 ; AVX-NEXT: [[TMP3:%.*]] = extractelement <4 x double> [[TMP1]], i32 1
376 ; AVX-NEXT: [[R1:%.*]] = insertelement <4 x double> [[R0]], double [[TMP3]], i32 1
377 ; AVX-NEXT: [[TMP4:%.*]] = extractelement <4 x double> [[TMP1]], i32 2
378 ; AVX-NEXT: [[R2:%.*]] = insertelement <4 x double> [[R1]], double [[TMP4]], i32 2
379 ; AVX-NEXT: [[TMP5:%.*]] = extractelement <4 x double> [[TMP1]], i32 3
380 ; AVX-NEXT: [[R3:%.*]] = insertelement <4 x double> [[R2]], double [[TMP5]], i32 3
381 ; AVX-NEXT: ret <4 x double> [[R3]]
383 %a0 = extractelement <4 x double> %a, i32 0
384 %a1 = extractelement <4 x double> %a, i32 1
385 %a2 = extractelement <4 x double> %a, i32 2
386 %a3 = extractelement <4 x double> %a, i32 3
387 %b0 = extractelement <4 x double> %b, i32 0
388 %b1 = extractelement <4 x double> %b, i32 1
389 %b2 = extractelement <4 x double> %b, i32 2
390 %b3 = extractelement <4 x double> %b, i32 3
391 %c0 = fdiv double %a0, %b0
392 %c1 = fdiv double %a1, %b1
393 %c2 = fdiv double %a2, %b2
394 %c3 = fdiv double %a3, %b3
395 %r0 = insertelement <4 x double> undef, double %c0, i32 0
396 %r1 = insertelement <4 x double> %r0, double %c1, i32 1
397 %r2 = insertelement <4 x double> %r1, double %c2, i32 2
398 %r3 = insertelement <4 x double> %r2, double %c3, i32 3
402 define <8 x float> @buildvector_add_8f32(<8 x float> %a, <8 x float> %b) {
403 ; CHECK-LABEL: @buildvector_add_8f32(
404 ; CHECK-NEXT: [[TMP1:%.*]] = fadd <8 x float> [[A:%.*]], [[B:%.*]]
405 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <8 x float> [[TMP1]], i32 0
406 ; CHECK-NEXT: [[R0:%.*]] = insertelement <8 x float> undef, float [[TMP2]], i32 0
407 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <8 x float> [[TMP1]], i32 1
408 ; CHECK-NEXT: [[R1:%.*]] = insertelement <8 x float> [[R0]], float [[TMP3]], i32 1
409 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <8 x float> [[TMP1]], i32 2
410 ; CHECK-NEXT: [[R2:%.*]] = insertelement <8 x float> [[R1]], float [[TMP4]], i32 2
411 ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <8 x float> [[TMP1]], i32 3
412 ; CHECK-NEXT: [[R3:%.*]] = insertelement <8 x float> [[R2]], float [[TMP5]], i32 3
413 ; CHECK-NEXT: [[TMP6:%.*]] = extractelement <8 x float> [[TMP1]], i32 4
414 ; CHECK-NEXT: [[R4:%.*]] = insertelement <8 x float> [[R3]], float [[TMP6]], i32 4
415 ; CHECK-NEXT: [[TMP7:%.*]] = extractelement <8 x float> [[TMP1]], i32 5
416 ; CHECK-NEXT: [[R5:%.*]] = insertelement <8 x float> [[R4]], float [[TMP7]], i32 5
417 ; CHECK-NEXT: [[TMP8:%.*]] = extractelement <8 x float> [[TMP1]], i32 6
418 ; CHECK-NEXT: [[R6:%.*]] = insertelement <8 x float> [[R5]], float [[TMP8]], i32 6
419 ; CHECK-NEXT: [[TMP9:%.*]] = extractelement <8 x float> [[TMP1]], i32 7
420 ; CHECK-NEXT: [[R7:%.*]] = insertelement <8 x float> [[R6]], float [[TMP9]], i32 7
421 ; CHECK-NEXT: ret <8 x float> [[R7]]
423 %a0 = extractelement <8 x float> %a, i32 0
424 %a1 = extractelement <8 x float> %a, i32 1
425 %a2 = extractelement <8 x float> %a, i32 2
426 %a3 = extractelement <8 x float> %a, i32 3
427 %a4 = extractelement <8 x float> %a, i32 4
428 %a5 = extractelement <8 x float> %a, i32 5
429 %a6 = extractelement <8 x float> %a, i32 6
430 %a7 = extractelement <8 x float> %a, i32 7
431 %b0 = extractelement <8 x float> %b, i32 0
432 %b1 = extractelement <8 x float> %b, i32 1
433 %b2 = extractelement <8 x float> %b, i32 2
434 %b3 = extractelement <8 x float> %b, i32 3
435 %b4 = extractelement <8 x float> %b, i32 4
436 %b5 = extractelement <8 x float> %b, i32 5
437 %b6 = extractelement <8 x float> %b, i32 6
438 %b7 = extractelement <8 x float> %b, i32 7
439 %c0 = fadd float %a0, %b0
440 %c1 = fadd float %a1, %b1
441 %c2 = fadd float %a2, %b2
442 %c3 = fadd float %a3, %b3
443 %c4 = fadd float %a4, %b4
444 %c5 = fadd float %a5, %b5
445 %c6 = fadd float %a6, %b6
446 %c7 = fadd float %a7, %b7
447 %r0 = insertelement <8 x float> undef, float %c0, i32 0
448 %r1 = insertelement <8 x float> %r0, float %c1, i32 1
449 %r2 = insertelement <8 x float> %r1, float %c2, i32 2
450 %r3 = insertelement <8 x float> %r2, float %c3, i32 3
451 %r4 = insertelement <8 x float> %r3, float %c4, i32 4
452 %r5 = insertelement <8 x float> %r4, float %c5, i32 5
453 %r6 = insertelement <8 x float> %r5, float %c6, i32 6
454 %r7 = insertelement <8 x float> %r6, float %c7, i32 7
458 define <8 x float> @buildvector_sub_8f32(<8 x float> %a, <8 x float> %b) {
459 ; CHECK-LABEL: @buildvector_sub_8f32(
460 ; CHECK-NEXT: [[TMP1:%.*]] = fsub <8 x float> [[A:%.*]], [[B:%.*]]
461 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <8 x float> [[TMP1]], i32 0
462 ; CHECK-NEXT: [[R0:%.*]] = insertelement <8 x float> undef, float [[TMP2]], i32 0
463 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <8 x float> [[TMP1]], i32 1
464 ; CHECK-NEXT: [[R1:%.*]] = insertelement <8 x float> [[R0]], float [[TMP3]], i32 1
465 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <8 x float> [[TMP1]], i32 2
466 ; CHECK-NEXT: [[R2:%.*]] = insertelement <8 x float> [[R1]], float [[TMP4]], i32 2
467 ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <8 x float> [[TMP1]], i32 3
468 ; CHECK-NEXT: [[R3:%.*]] = insertelement <8 x float> [[R2]], float [[TMP5]], i32 3
469 ; CHECK-NEXT: [[TMP6:%.*]] = extractelement <8 x float> [[TMP1]], i32 4
470 ; CHECK-NEXT: [[R4:%.*]] = insertelement <8 x float> [[R3]], float [[TMP6]], i32 4
471 ; CHECK-NEXT: [[TMP7:%.*]] = extractelement <8 x float> [[TMP1]], i32 5
472 ; CHECK-NEXT: [[R5:%.*]] = insertelement <8 x float> [[R4]], float [[TMP7]], i32 5
473 ; CHECK-NEXT: [[TMP8:%.*]] = extractelement <8 x float> [[TMP1]], i32 6
474 ; CHECK-NEXT: [[R6:%.*]] = insertelement <8 x float> [[R5]], float [[TMP8]], i32 6
475 ; CHECK-NEXT: [[TMP9:%.*]] = extractelement <8 x float> [[TMP1]], i32 7
476 ; CHECK-NEXT: [[R7:%.*]] = insertelement <8 x float> [[R6]], float [[TMP9]], i32 7
477 ; CHECK-NEXT: ret <8 x float> [[R7]]
479 %a0 = extractelement <8 x float> %a, i32 0
480 %a1 = extractelement <8 x float> %a, i32 1
481 %a2 = extractelement <8 x float> %a, i32 2
482 %a3 = extractelement <8 x float> %a, i32 3
483 %a4 = extractelement <8 x float> %a, i32 4
484 %a5 = extractelement <8 x float> %a, i32 5
485 %a6 = extractelement <8 x float> %a, i32 6
486 %a7 = extractelement <8 x float> %a, i32 7
487 %b0 = extractelement <8 x float> %b, i32 0
488 %b1 = extractelement <8 x float> %b, i32 1
489 %b2 = extractelement <8 x float> %b, i32 2
490 %b3 = extractelement <8 x float> %b, i32 3
491 %b4 = extractelement <8 x float> %b, i32 4
492 %b5 = extractelement <8 x float> %b, i32 5
493 %b6 = extractelement <8 x float> %b, i32 6
494 %b7 = extractelement <8 x float> %b, i32 7
495 %c0 = fsub float %a0, %b0
496 %c1 = fsub float %a1, %b1
497 %c2 = fsub float %a2, %b2
498 %c3 = fsub float %a3, %b3
499 %c4 = fsub float %a4, %b4
500 %c5 = fsub float %a5, %b5
501 %c6 = fsub float %a6, %b6
502 %c7 = fsub float %a7, %b7
503 %r0 = insertelement <8 x float> undef, float %c0, i32 0
504 %r1 = insertelement <8 x float> %r0, float %c1, i32 1
505 %r2 = insertelement <8 x float> %r1, float %c2, i32 2
506 %r3 = insertelement <8 x float> %r2, float %c3, i32 3
507 %r4 = insertelement <8 x float> %r3, float %c4, i32 4
508 %r5 = insertelement <8 x float> %r4, float %c5, i32 5
509 %r6 = insertelement <8 x float> %r5, float %c6, i32 6
510 %r7 = insertelement <8 x float> %r6, float %c7, i32 7
514 define <8 x float> @buildvector_mul_8f32(<8 x float> %a, <8 x float> %b) {
515 ; CHECK-LABEL: @buildvector_mul_8f32(
516 ; CHECK-NEXT: [[TMP1:%.*]] = fmul <8 x float> [[A:%.*]], [[B:%.*]]
517 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <8 x float> [[TMP1]], i32 0
518 ; CHECK-NEXT: [[R0:%.*]] = insertelement <8 x float> undef, float [[TMP2]], i32 0
519 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <8 x float> [[TMP1]], i32 1
520 ; CHECK-NEXT: [[R1:%.*]] = insertelement <8 x float> [[R0]], float [[TMP3]], i32 1
521 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <8 x float> [[TMP1]], i32 2
522 ; CHECK-NEXT: [[R2:%.*]] = insertelement <8 x float> [[R1]], float [[TMP4]], i32 2
523 ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <8 x float> [[TMP1]], i32 3
524 ; CHECK-NEXT: [[R3:%.*]] = insertelement <8 x float> [[R2]], float [[TMP5]], i32 3
525 ; CHECK-NEXT: [[TMP6:%.*]] = extractelement <8 x float> [[TMP1]], i32 4
526 ; CHECK-NEXT: [[R4:%.*]] = insertelement <8 x float> [[R3]], float [[TMP6]], i32 4
527 ; CHECK-NEXT: [[TMP7:%.*]] = extractelement <8 x float> [[TMP1]], i32 5
528 ; CHECK-NEXT: [[R5:%.*]] = insertelement <8 x float> [[R4]], float [[TMP7]], i32 5
529 ; CHECK-NEXT: [[TMP8:%.*]] = extractelement <8 x float> [[TMP1]], i32 6
530 ; CHECK-NEXT: [[R6:%.*]] = insertelement <8 x float> [[R5]], float [[TMP8]], i32 6
531 ; CHECK-NEXT: [[TMP9:%.*]] = extractelement <8 x float> [[TMP1]], i32 7
532 ; CHECK-NEXT: [[R7:%.*]] = insertelement <8 x float> [[R6]], float [[TMP9]], i32 7
533 ; CHECK-NEXT: ret <8 x float> [[R7]]
535 %a0 = extractelement <8 x float> %a, i32 0
536 %a1 = extractelement <8 x float> %a, i32 1
537 %a2 = extractelement <8 x float> %a, i32 2
538 %a3 = extractelement <8 x float> %a, i32 3
539 %a4 = extractelement <8 x float> %a, i32 4
540 %a5 = extractelement <8 x float> %a, i32 5
541 %a6 = extractelement <8 x float> %a, i32 6
542 %a7 = extractelement <8 x float> %a, i32 7
543 %b0 = extractelement <8 x float> %b, i32 0
544 %b1 = extractelement <8 x float> %b, i32 1
545 %b2 = extractelement <8 x float> %b, i32 2
546 %b3 = extractelement <8 x float> %b, i32 3
547 %b4 = extractelement <8 x float> %b, i32 4
548 %b5 = extractelement <8 x float> %b, i32 5
549 %b6 = extractelement <8 x float> %b, i32 6
550 %b7 = extractelement <8 x float> %b, i32 7
551 %c0 = fmul float %a0, %b0
552 %c1 = fmul float %a1, %b1
553 %c2 = fmul float %a2, %b2
554 %c3 = fmul float %a3, %b3
555 %c4 = fmul float %a4, %b4
556 %c5 = fmul float %a5, %b5
557 %c6 = fmul float %a6, %b6
558 %c7 = fmul float %a7, %b7
559 %r0 = insertelement <8 x float> undef, float %c0, i32 0
560 %r1 = insertelement <8 x float> %r0, float %c1, i32 1
561 %r2 = insertelement <8 x float> %r1, float %c2, i32 2
562 %r3 = insertelement <8 x float> %r2, float %c3, i32 3
563 %r4 = insertelement <8 x float> %r3, float %c4, i32 4
564 %r5 = insertelement <8 x float> %r4, float %c5, i32 5
565 %r6 = insertelement <8 x float> %r5, float %c6, i32 6
566 %r7 = insertelement <8 x float> %r6, float %c7, i32 7
570 define <8 x float> @buildvector_div_8f32(<8 x float> %a, <8 x float> %b) {
571 ; CHECK-LABEL: @buildvector_div_8f32(
572 ; CHECK-NEXT: [[TMP1:%.*]] = fdiv <8 x float> [[A:%.*]], [[B:%.*]]
573 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <8 x float> [[TMP1]], i32 0
574 ; CHECK-NEXT: [[R0:%.*]] = insertelement <8 x float> undef, float [[TMP2]], i32 0
575 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <8 x float> [[TMP1]], i32 1
576 ; CHECK-NEXT: [[R1:%.*]] = insertelement <8 x float> [[R0]], float [[TMP3]], i32 1
577 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <8 x float> [[TMP1]], i32 2
578 ; CHECK-NEXT: [[R2:%.*]] = insertelement <8 x float> [[R1]], float [[TMP4]], i32 2
579 ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <8 x float> [[TMP1]], i32 3
580 ; CHECK-NEXT: [[R3:%.*]] = insertelement <8 x float> [[R2]], float [[TMP5]], i32 3
581 ; CHECK-NEXT: [[TMP6:%.*]] = extractelement <8 x float> [[TMP1]], i32 4
582 ; CHECK-NEXT: [[R4:%.*]] = insertelement <8 x float> [[R3]], float [[TMP6]], i32 4
583 ; CHECK-NEXT: [[TMP7:%.*]] = extractelement <8 x float> [[TMP1]], i32 5
584 ; CHECK-NEXT: [[R5:%.*]] = insertelement <8 x float> [[R4]], float [[TMP7]], i32 5
585 ; CHECK-NEXT: [[TMP8:%.*]] = extractelement <8 x float> [[TMP1]], i32 6
586 ; CHECK-NEXT: [[R6:%.*]] = insertelement <8 x float> [[R5]], float [[TMP8]], i32 6
587 ; CHECK-NEXT: [[TMP9:%.*]] = extractelement <8 x float> [[TMP1]], i32 7
588 ; CHECK-NEXT: [[R7:%.*]] = insertelement <8 x float> [[R6]], float [[TMP9]], i32 7
589 ; CHECK-NEXT: ret <8 x float> [[R7]]
591 %a0 = extractelement <8 x float> %a, i32 0
592 %a1 = extractelement <8 x float> %a, i32 1
593 %a2 = extractelement <8 x float> %a, i32 2
594 %a3 = extractelement <8 x float> %a, i32 3
595 %a4 = extractelement <8 x float> %a, i32 4
596 %a5 = extractelement <8 x float> %a, i32 5
597 %a6 = extractelement <8 x float> %a, i32 6
598 %a7 = extractelement <8 x float> %a, i32 7
599 %b0 = extractelement <8 x float> %b, i32 0
600 %b1 = extractelement <8 x float> %b, i32 1
601 %b2 = extractelement <8 x float> %b, i32 2
602 %b3 = extractelement <8 x float> %b, i32 3
603 %b4 = extractelement <8 x float> %b, i32 4
604 %b5 = extractelement <8 x float> %b, i32 5
605 %b6 = extractelement <8 x float> %b, i32 6
606 %b7 = extractelement <8 x float> %b, i32 7
607 %c0 = fdiv float %a0, %b0
608 %c1 = fdiv float %a1, %b1
609 %c2 = fdiv float %a2, %b2
610 %c3 = fdiv float %a3, %b3
611 %c4 = fdiv float %a4, %b4
612 %c5 = fdiv float %a5, %b5
613 %c6 = fdiv float %a6, %b6
614 %c7 = fdiv float %a7, %b7
615 %r0 = insertelement <8 x float> undef, float %c0, i32 0
616 %r1 = insertelement <8 x float> %r0, float %c1, i32 1
617 %r2 = insertelement <8 x float> %r1, float %c2, i32 2
618 %r3 = insertelement <8 x float> %r2, float %c3, i32 3
619 %r4 = insertelement <8 x float> %r3, float %c4, i32 4
620 %r5 = insertelement <8 x float> %r4, float %c5, i32 5
621 %r6 = insertelement <8 x float> %r5, float %c6, i32 6
622 %r7 = insertelement <8 x float> %r6, float %c7, i32 7
630 define <8 x double> @buildvector_add_8f64(<8 x double> %a, <8 x double> %b) {
631 ; CHECK-LABEL: @buildvector_add_8f64(
632 ; CHECK-NEXT: [[TMP1:%.*]] = fadd <8 x double> [[A:%.*]], [[B:%.*]]
633 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <8 x double> [[TMP1]], i32 0
634 ; CHECK-NEXT: [[R0:%.*]] = insertelement <8 x double> undef, double [[TMP2]], i32 0
635 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <8 x double> [[TMP1]], i32 1
636 ; CHECK-NEXT: [[R1:%.*]] = insertelement <8 x double> [[R0]], double [[TMP3]], i32 1
637 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <8 x double> [[TMP1]], i32 2
638 ; CHECK-NEXT: [[R2:%.*]] = insertelement <8 x double> [[R1]], double [[TMP4]], i32 2
639 ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <8 x double> [[TMP1]], i32 3
640 ; CHECK-NEXT: [[R3:%.*]] = insertelement <8 x double> [[R2]], double [[TMP5]], i32 3
641 ; CHECK-NEXT: [[TMP6:%.*]] = extractelement <8 x double> [[TMP1]], i32 4
642 ; CHECK-NEXT: [[R4:%.*]] = insertelement <8 x double> [[R3]], double [[TMP6]], i32 4
643 ; CHECK-NEXT: [[TMP7:%.*]] = extractelement <8 x double> [[TMP1]], i32 5
644 ; CHECK-NEXT: [[R5:%.*]] = insertelement <8 x double> [[R4]], double [[TMP7]], i32 5
645 ; CHECK-NEXT: [[TMP8:%.*]] = extractelement <8 x double> [[TMP1]], i32 6
646 ; CHECK-NEXT: [[R6:%.*]] = insertelement <8 x double> [[R5]], double [[TMP8]], i32 6
647 ; CHECK-NEXT: [[TMP9:%.*]] = extractelement <8 x double> [[TMP1]], i32 7
648 ; CHECK-NEXT: [[R7:%.*]] = insertelement <8 x double> [[R6]], double [[TMP9]], i32 7
649 ; CHECK-NEXT: ret <8 x double> [[R7]]
651 %a0 = extractelement <8 x double> %a, i32 0
652 %a1 = extractelement <8 x double> %a, i32 1
653 %a2 = extractelement <8 x double> %a, i32 2
654 %a3 = extractelement <8 x double> %a, i32 3
655 %a4 = extractelement <8 x double> %a, i32 4
656 %a5 = extractelement <8 x double> %a, i32 5
657 %a6 = extractelement <8 x double> %a, i32 6
658 %a7 = extractelement <8 x double> %a, i32 7
659 %b0 = extractelement <8 x double> %b, i32 0
660 %b1 = extractelement <8 x double> %b, i32 1
661 %b2 = extractelement <8 x double> %b, i32 2
662 %b3 = extractelement <8 x double> %b, i32 3
663 %b4 = extractelement <8 x double> %b, i32 4
664 %b5 = extractelement <8 x double> %b, i32 5
665 %b6 = extractelement <8 x double> %b, i32 6
666 %b7 = extractelement <8 x double> %b, i32 7
667 %c0 = fadd double %a0, %b0
668 %c1 = fadd double %a1, %b1
669 %c2 = fadd double %a2, %b2
670 %c3 = fadd double %a3, %b3
671 %c4 = fadd double %a4, %b4
672 %c5 = fadd double %a5, %b5
673 %c6 = fadd double %a6, %b6
674 %c7 = fadd double %a7, %b7
675 %r0 = insertelement <8 x double> undef, double %c0, i32 0
676 %r1 = insertelement <8 x double> %r0, double %c1, i32 1
677 %r2 = insertelement <8 x double> %r1, double %c2, i32 2
678 %r3 = insertelement <8 x double> %r2, double %c3, i32 3
679 %r4 = insertelement <8 x double> %r3, double %c4, i32 4
680 %r5 = insertelement <8 x double> %r4, double %c5, i32 5
681 %r6 = insertelement <8 x double> %r5, double %c6, i32 6
682 %r7 = insertelement <8 x double> %r6, double %c7, i32 7
686 define <8 x double> @buildvector_sub_8f64(<8 x double> %a, <8 x double> %b) {
687 ; CHECK-LABEL: @buildvector_sub_8f64(
688 ; CHECK-NEXT: [[TMP1:%.*]] = fsub <8 x double> [[A:%.*]], [[B:%.*]]
689 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <8 x double> [[TMP1]], i32 0
690 ; CHECK-NEXT: [[R0:%.*]] = insertelement <8 x double> undef, double [[TMP2]], i32 0
691 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <8 x double> [[TMP1]], i32 1
692 ; CHECK-NEXT: [[R1:%.*]] = insertelement <8 x double> [[R0]], double [[TMP3]], i32 1
693 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <8 x double> [[TMP1]], i32 2
694 ; CHECK-NEXT: [[R2:%.*]] = insertelement <8 x double> [[R1]], double [[TMP4]], i32 2
695 ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <8 x double> [[TMP1]], i32 3
696 ; CHECK-NEXT: [[R3:%.*]] = insertelement <8 x double> [[R2]], double [[TMP5]], i32 3
697 ; CHECK-NEXT: [[TMP6:%.*]] = extractelement <8 x double> [[TMP1]], i32 4
698 ; CHECK-NEXT: [[R4:%.*]] = insertelement <8 x double> [[R3]], double [[TMP6]], i32 4
699 ; CHECK-NEXT: [[TMP7:%.*]] = extractelement <8 x double> [[TMP1]], i32 5
700 ; CHECK-NEXT: [[R5:%.*]] = insertelement <8 x double> [[R4]], double [[TMP7]], i32 5
701 ; CHECK-NEXT: [[TMP8:%.*]] = extractelement <8 x double> [[TMP1]], i32 6
702 ; CHECK-NEXT: [[R6:%.*]] = insertelement <8 x double> [[R5]], double [[TMP8]], i32 6
703 ; CHECK-NEXT: [[TMP9:%.*]] = extractelement <8 x double> [[TMP1]], i32 7
704 ; CHECK-NEXT: [[R7:%.*]] = insertelement <8 x double> [[R6]], double [[TMP9]], i32 7
705 ; CHECK-NEXT: ret <8 x double> [[R7]]
707 %a0 = extractelement <8 x double> %a, i32 0
708 %a1 = extractelement <8 x double> %a, i32 1
709 %a2 = extractelement <8 x double> %a, i32 2
710 %a3 = extractelement <8 x double> %a, i32 3
711 %a4 = extractelement <8 x double> %a, i32 4
712 %a5 = extractelement <8 x double> %a, i32 5
713 %a6 = extractelement <8 x double> %a, i32 6
714 %a7 = extractelement <8 x double> %a, i32 7
715 %b0 = extractelement <8 x double> %b, i32 0
716 %b1 = extractelement <8 x double> %b, i32 1
717 %b2 = extractelement <8 x double> %b, i32 2
718 %b3 = extractelement <8 x double> %b, i32 3
719 %b4 = extractelement <8 x double> %b, i32 4
720 %b5 = extractelement <8 x double> %b, i32 5
721 %b6 = extractelement <8 x double> %b, i32 6
722 %b7 = extractelement <8 x double> %b, i32 7
723 %c0 = fsub double %a0, %b0
724 %c1 = fsub double %a1, %b1
725 %c2 = fsub double %a2, %b2
726 %c3 = fsub double %a3, %b3
727 %c4 = fsub double %a4, %b4
728 %c5 = fsub double %a5, %b5
729 %c6 = fsub double %a6, %b6
730 %c7 = fsub double %a7, %b7
731 %r0 = insertelement <8 x double> undef, double %c0, i32 0
732 %r1 = insertelement <8 x double> %r0, double %c1, i32 1
733 %r2 = insertelement <8 x double> %r1, double %c2, i32 2
734 %r3 = insertelement <8 x double> %r2, double %c3, i32 3
735 %r4 = insertelement <8 x double> %r3, double %c4, i32 4
736 %r5 = insertelement <8 x double> %r4, double %c5, i32 5
737 %r6 = insertelement <8 x double> %r5, double %c6, i32 6
738 %r7 = insertelement <8 x double> %r6, double %c7, i32 7
742 define <8 x double> @buildvector_mul_8f64(<8 x double> %a, <8 x double> %b) {
743 ; CHECK-LABEL: @buildvector_mul_8f64(
744 ; CHECK-NEXT: [[TMP1:%.*]] = fmul <8 x double> [[A:%.*]], [[B:%.*]]
745 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <8 x double> [[TMP1]], i32 0
746 ; CHECK-NEXT: [[R0:%.*]] = insertelement <8 x double> undef, double [[TMP2]], i32 0
747 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <8 x double> [[TMP1]], i32 1
748 ; CHECK-NEXT: [[R1:%.*]] = insertelement <8 x double> [[R0]], double [[TMP3]], i32 1
749 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <8 x double> [[TMP1]], i32 2
750 ; CHECK-NEXT: [[R2:%.*]] = insertelement <8 x double> [[R1]], double [[TMP4]], i32 2
751 ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <8 x double> [[TMP1]], i32 3
752 ; CHECK-NEXT: [[R3:%.*]] = insertelement <8 x double> [[R2]], double [[TMP5]], i32 3
753 ; CHECK-NEXT: [[TMP6:%.*]] = extractelement <8 x double> [[TMP1]], i32 4
754 ; CHECK-NEXT: [[R4:%.*]] = insertelement <8 x double> [[R3]], double [[TMP6]], i32 4
755 ; CHECK-NEXT: [[TMP7:%.*]] = extractelement <8 x double> [[TMP1]], i32 5
756 ; CHECK-NEXT: [[R5:%.*]] = insertelement <8 x double> [[R4]], double [[TMP7]], i32 5
757 ; CHECK-NEXT: [[TMP8:%.*]] = extractelement <8 x double> [[TMP1]], i32 6
758 ; CHECK-NEXT: [[R6:%.*]] = insertelement <8 x double> [[R5]], double [[TMP8]], i32 6
759 ; CHECK-NEXT: [[TMP9:%.*]] = extractelement <8 x double> [[TMP1]], i32 7
760 ; CHECK-NEXT: [[R7:%.*]] = insertelement <8 x double> [[R6]], double [[TMP9]], i32 7
761 ; CHECK-NEXT: ret <8 x double> [[R7]]
763 %a0 = extractelement <8 x double> %a, i32 0
764 %a1 = extractelement <8 x double> %a, i32 1
765 %a2 = extractelement <8 x double> %a, i32 2
766 %a3 = extractelement <8 x double> %a, i32 3
767 %a4 = extractelement <8 x double> %a, i32 4
768 %a5 = extractelement <8 x double> %a, i32 5
769 %a6 = extractelement <8 x double> %a, i32 6
770 %a7 = extractelement <8 x double> %a, i32 7
771 %b0 = extractelement <8 x double> %b, i32 0
772 %b1 = extractelement <8 x double> %b, i32 1
773 %b2 = extractelement <8 x double> %b, i32 2
774 %b3 = extractelement <8 x double> %b, i32 3
775 %b4 = extractelement <8 x double> %b, i32 4
776 %b5 = extractelement <8 x double> %b, i32 5
777 %b6 = extractelement <8 x double> %b, i32 6
778 %b7 = extractelement <8 x double> %b, i32 7
779 %c0 = fmul double %a0, %b0
780 %c1 = fmul double %a1, %b1
781 %c2 = fmul double %a2, %b2
782 %c3 = fmul double %a3, %b3
783 %c4 = fmul double %a4, %b4
784 %c5 = fmul double %a5, %b5
785 %c6 = fmul double %a6, %b6
786 %c7 = fmul double %a7, %b7
787 %r0 = insertelement <8 x double> undef, double %c0, i32 0
788 %r1 = insertelement <8 x double> %r0, double %c1, i32 1
789 %r2 = insertelement <8 x double> %r1, double %c2, i32 2
790 %r3 = insertelement <8 x double> %r2, double %c3, i32 3
791 %r4 = insertelement <8 x double> %r3, double %c4, i32 4
792 %r5 = insertelement <8 x double> %r4, double %c5, i32 5
793 %r6 = insertelement <8 x double> %r5, double %c6, i32 6
794 %r7 = insertelement <8 x double> %r6, double %c7, i32 7
798 define <8 x double> @buildvector_div_8f64(<8 x double> %a, <8 x double> %b) {
799 ; SSE-LABEL: @buildvector_div_8f64(
800 ; SSE-NEXT: [[TMP1:%.*]] = fdiv <8 x double> [[A:%.*]], [[B:%.*]]
801 ; SSE-NEXT: [[TMP2:%.*]] = extractelement <8 x double> [[TMP1]], i32 0
802 ; SSE-NEXT: [[R0:%.*]] = insertelement <8 x double> undef, double [[TMP2]], i32 0
803 ; SSE-NEXT: [[TMP3:%.*]] = extractelement <8 x double> [[TMP1]], i32 1
804 ; SSE-NEXT: [[R1:%.*]] = insertelement <8 x double> [[R0]], double [[TMP3]], i32 1
805 ; SSE-NEXT: [[TMP4:%.*]] = extractelement <8 x double> [[TMP1]], i32 2
806 ; SSE-NEXT: [[R2:%.*]] = insertelement <8 x double> [[R1]], double [[TMP4]], i32 2
807 ; SSE-NEXT: [[TMP5:%.*]] = extractelement <8 x double> [[TMP1]], i32 3
808 ; SSE-NEXT: [[R3:%.*]] = insertelement <8 x double> [[R2]], double [[TMP5]], i32 3
809 ; SSE-NEXT: [[TMP6:%.*]] = extractelement <8 x double> [[TMP1]], i32 4
810 ; SSE-NEXT: [[R4:%.*]] = insertelement <8 x double> [[R3]], double [[TMP6]], i32 4
811 ; SSE-NEXT: [[TMP7:%.*]] = extractelement <8 x double> [[TMP1]], i32 5
812 ; SSE-NEXT: [[R5:%.*]] = insertelement <8 x double> [[R4]], double [[TMP7]], i32 5
813 ; SSE-NEXT: [[TMP8:%.*]] = extractelement <8 x double> [[TMP1]], i32 6
814 ; SSE-NEXT: [[R6:%.*]] = insertelement <8 x double> [[R5]], double [[TMP8]], i32 6
815 ; SSE-NEXT: [[TMP9:%.*]] = extractelement <8 x double> [[TMP1]], i32 7
816 ; SSE-NEXT: [[R7:%.*]] = insertelement <8 x double> [[R6]], double [[TMP9]], i32 7
817 ; SSE-NEXT: ret <8 x double> [[R7]]
819 ; SLM-LABEL: @buildvector_div_8f64(
820 ; SLM-NEXT: [[A0:%.*]] = extractelement <8 x double> [[A:%.*]], i32 0
821 ; SLM-NEXT: [[A1:%.*]] = extractelement <8 x double> [[A]], i32 1
822 ; SLM-NEXT: [[A2:%.*]] = extractelement <8 x double> [[A]], i32 2
823 ; SLM-NEXT: [[A3:%.*]] = extractelement <8 x double> [[A]], i32 3
824 ; SLM-NEXT: [[A4:%.*]] = extractelement <8 x double> [[A]], i32 4
825 ; SLM-NEXT: [[A5:%.*]] = extractelement <8 x double> [[A]], i32 5
826 ; SLM-NEXT: [[A6:%.*]] = extractelement <8 x double> [[A]], i32 6
827 ; SLM-NEXT: [[A7:%.*]] = extractelement <8 x double> [[A]], i32 7
828 ; SLM-NEXT: [[B0:%.*]] = extractelement <8 x double> [[B:%.*]], i32 0
829 ; SLM-NEXT: [[B1:%.*]] = extractelement <8 x double> [[B]], i32 1
830 ; SLM-NEXT: [[B2:%.*]] = extractelement <8 x double> [[B]], i32 2
831 ; SLM-NEXT: [[B3:%.*]] = extractelement <8 x double> [[B]], i32 3
832 ; SLM-NEXT: [[B4:%.*]] = extractelement <8 x double> [[B]], i32 4
833 ; SLM-NEXT: [[B5:%.*]] = extractelement <8 x double> [[B]], i32 5
834 ; SLM-NEXT: [[B6:%.*]] = extractelement <8 x double> [[B]], i32 6
835 ; SLM-NEXT: [[B7:%.*]] = extractelement <8 x double> [[B]], i32 7
836 ; SLM-NEXT: [[C0:%.*]] = fdiv double [[A0]], [[B0]]
837 ; SLM-NEXT: [[C1:%.*]] = fdiv double [[A1]], [[B1]]
838 ; SLM-NEXT: [[C2:%.*]] = fdiv double [[A2]], [[B2]]
839 ; SLM-NEXT: [[C3:%.*]] = fdiv double [[A3]], [[B3]]
840 ; SLM-NEXT: [[C4:%.*]] = fdiv double [[A4]], [[B4]]
841 ; SLM-NEXT: [[C5:%.*]] = fdiv double [[A5]], [[B5]]
842 ; SLM-NEXT: [[C6:%.*]] = fdiv double [[A6]], [[B6]]
843 ; SLM-NEXT: [[C7:%.*]] = fdiv double [[A7]], [[B7]]
844 ; SLM-NEXT: [[R0:%.*]] = insertelement <8 x double> undef, double [[C0]], i32 0
845 ; SLM-NEXT: [[R1:%.*]] = insertelement <8 x double> [[R0]], double [[C1]], i32 1
846 ; SLM-NEXT: [[R2:%.*]] = insertelement <8 x double> [[R1]], double [[C2]], i32 2
847 ; SLM-NEXT: [[R3:%.*]] = insertelement <8 x double> [[R2]], double [[C3]], i32 3
848 ; SLM-NEXT: [[R4:%.*]] = insertelement <8 x double> [[R3]], double [[C4]], i32 4
849 ; SLM-NEXT: [[R5:%.*]] = insertelement <8 x double> [[R4]], double [[C5]], i32 5
850 ; SLM-NEXT: [[R6:%.*]] = insertelement <8 x double> [[R5]], double [[C6]], i32 6
851 ; SLM-NEXT: [[R7:%.*]] = insertelement <8 x double> [[R6]], double [[C7]], i32 7
852 ; SLM-NEXT: ret <8 x double> [[R7]]
854 ; AVX-LABEL: @buildvector_div_8f64(
855 ; AVX-NEXT: [[TMP1:%.*]] = fdiv <8 x double> [[A:%.*]], [[B:%.*]]
856 ; AVX-NEXT: [[TMP2:%.*]] = extractelement <8 x double> [[TMP1]], i32 0
857 ; AVX-NEXT: [[R0:%.*]] = insertelement <8 x double> undef, double [[TMP2]], i32 0
858 ; AVX-NEXT: [[TMP3:%.*]] = extractelement <8 x double> [[TMP1]], i32 1
859 ; AVX-NEXT: [[R1:%.*]] = insertelement <8 x double> [[R0]], double [[TMP3]], i32 1
860 ; AVX-NEXT: [[TMP4:%.*]] = extractelement <8 x double> [[TMP1]], i32 2
861 ; AVX-NEXT: [[R2:%.*]] = insertelement <8 x double> [[R1]], double [[TMP4]], i32 2
862 ; AVX-NEXT: [[TMP5:%.*]] = extractelement <8 x double> [[TMP1]], i32 3
863 ; AVX-NEXT: [[R3:%.*]] = insertelement <8 x double> [[R2]], double [[TMP5]], i32 3
864 ; AVX-NEXT: [[TMP6:%.*]] = extractelement <8 x double> [[TMP1]], i32 4
865 ; AVX-NEXT: [[R4:%.*]] = insertelement <8 x double> [[R3]], double [[TMP6]], i32 4
866 ; AVX-NEXT: [[TMP7:%.*]] = extractelement <8 x double> [[TMP1]], i32 5
867 ; AVX-NEXT: [[R5:%.*]] = insertelement <8 x double> [[R4]], double [[TMP7]], i32 5
868 ; AVX-NEXT: [[TMP8:%.*]] = extractelement <8 x double> [[TMP1]], i32 6
869 ; AVX-NEXT: [[R6:%.*]] = insertelement <8 x double> [[R5]], double [[TMP8]], i32 6
870 ; AVX-NEXT: [[TMP9:%.*]] = extractelement <8 x double> [[TMP1]], i32 7
871 ; AVX-NEXT: [[R7:%.*]] = insertelement <8 x double> [[R6]], double [[TMP9]], i32 7
872 ; AVX-NEXT: ret <8 x double> [[R7]]
874 %a0 = extractelement <8 x double> %a, i32 0
875 %a1 = extractelement <8 x double> %a, i32 1
876 %a2 = extractelement <8 x double> %a, i32 2
877 %a3 = extractelement <8 x double> %a, i32 3
878 %a4 = extractelement <8 x double> %a, i32 4
879 %a5 = extractelement <8 x double> %a, i32 5
880 %a6 = extractelement <8 x double> %a, i32 6
881 %a7 = extractelement <8 x double> %a, i32 7
882 %b0 = extractelement <8 x double> %b, i32 0
883 %b1 = extractelement <8 x double> %b, i32 1
884 %b2 = extractelement <8 x double> %b, i32 2
885 %b3 = extractelement <8 x double> %b, i32 3
886 %b4 = extractelement <8 x double> %b, i32 4
887 %b5 = extractelement <8 x double> %b, i32 5
888 %b6 = extractelement <8 x double> %b, i32 6
889 %b7 = extractelement <8 x double> %b, i32 7
890 %c0 = fdiv double %a0, %b0
891 %c1 = fdiv double %a1, %b1
892 %c2 = fdiv double %a2, %b2
893 %c3 = fdiv double %a3, %b3
894 %c4 = fdiv double %a4, %b4
895 %c5 = fdiv double %a5, %b5
896 %c6 = fdiv double %a6, %b6
897 %c7 = fdiv double %a7, %b7
898 %r0 = insertelement <8 x double> undef, double %c0, i32 0
899 %r1 = insertelement <8 x double> %r0, double %c1, i32 1
900 %r2 = insertelement <8 x double> %r1, double %c2, i32 2
901 %r3 = insertelement <8 x double> %r2, double %c3, i32 3
902 %r4 = insertelement <8 x double> %r3, double %c4, i32 4
903 %r5 = insertelement <8 x double> %r4, double %c5, i32 5
904 %r6 = insertelement <8 x double> %r5, double %c6, i32 6
905 %r7 = insertelement <8 x double> %r6, double %c7, i32 7
909 define <16 x float> @buildvector_add_16f32(<16 x float> %a, <16 x float> %b) {
910 ; CHECK-LABEL: @buildvector_add_16f32(
911 ; CHECK-NEXT: [[TMP1:%.*]] = fadd <16 x float> [[A:%.*]], [[B:%.*]]
912 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <16 x float> [[TMP1]], i32 0
913 ; CHECK-NEXT: [[R0:%.*]] = insertelement <16 x float> undef, float [[TMP2]], i32 0
914 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <16 x float> [[TMP1]], i32 1
915 ; CHECK-NEXT: [[R1:%.*]] = insertelement <16 x float> [[R0]], float [[TMP3]], i32 1
916 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <16 x float> [[TMP1]], i32 2
917 ; CHECK-NEXT: [[R2:%.*]] = insertelement <16 x float> [[R1]], float [[TMP4]], i32 2
918 ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <16 x float> [[TMP1]], i32 3
919 ; CHECK-NEXT: [[R3:%.*]] = insertelement <16 x float> [[R2]], float [[TMP5]], i32 3
920 ; CHECK-NEXT: [[TMP6:%.*]] = extractelement <16 x float> [[TMP1]], i32 4
921 ; CHECK-NEXT: [[R4:%.*]] = insertelement <16 x float> [[R3]], float [[TMP6]], i32 4
922 ; CHECK-NEXT: [[TMP7:%.*]] = extractelement <16 x float> [[TMP1]], i32 5
923 ; CHECK-NEXT: [[R5:%.*]] = insertelement <16 x float> [[R4]], float [[TMP7]], i32 5
924 ; CHECK-NEXT: [[TMP8:%.*]] = extractelement <16 x float> [[TMP1]], i32 6
925 ; CHECK-NEXT: [[R6:%.*]] = insertelement <16 x float> [[R5]], float [[TMP8]], i32 6
926 ; CHECK-NEXT: [[TMP9:%.*]] = extractelement <16 x float> [[TMP1]], i32 7
927 ; CHECK-NEXT: [[R7:%.*]] = insertelement <16 x float> [[R6]], float [[TMP9]], i32 7
928 ; CHECK-NEXT: [[TMP10:%.*]] = extractelement <16 x float> [[TMP1]], i32 8
929 ; CHECK-NEXT: [[R8:%.*]] = insertelement <16 x float> [[R7]], float [[TMP10]], i32 8
930 ; CHECK-NEXT: [[TMP11:%.*]] = extractelement <16 x float> [[TMP1]], i32 9
931 ; CHECK-NEXT: [[R9:%.*]] = insertelement <16 x float> [[R8]], float [[TMP11]], i32 9
932 ; CHECK-NEXT: [[TMP12:%.*]] = extractelement <16 x float> [[TMP1]], i32 10
933 ; CHECK-NEXT: [[R10:%.*]] = insertelement <16 x float> [[R9]], float [[TMP12]], i32 10
934 ; CHECK-NEXT: [[TMP13:%.*]] = extractelement <16 x float> [[TMP1]], i32 11
935 ; CHECK-NEXT: [[R11:%.*]] = insertelement <16 x float> [[R10]], float [[TMP13]], i32 11
936 ; CHECK-NEXT: [[TMP14:%.*]] = extractelement <16 x float> [[TMP1]], i32 12
937 ; CHECK-NEXT: [[R12:%.*]] = insertelement <16 x float> [[R11]], float [[TMP14]], i32 12
938 ; CHECK-NEXT: [[TMP15:%.*]] = extractelement <16 x float> [[TMP1]], i32 13
939 ; CHECK-NEXT: [[R13:%.*]] = insertelement <16 x float> [[R12]], float [[TMP15]], i32 13
940 ; CHECK-NEXT: [[TMP16:%.*]] = extractelement <16 x float> [[TMP1]], i32 14
941 ; CHECK-NEXT: [[R14:%.*]] = insertelement <16 x float> [[R13]], float [[TMP16]], i32 14
942 ; CHECK-NEXT: [[TMP17:%.*]] = extractelement <16 x float> [[TMP1]], i32 15
943 ; CHECK-NEXT: [[R15:%.*]] = insertelement <16 x float> [[R14]], float [[TMP17]], i32 15
944 ; CHECK-NEXT: ret <16 x float> [[R15]]
946 %a0 = extractelement <16 x float> %a, i32 0
947 %a1 = extractelement <16 x float> %a, i32 1
948 %a2 = extractelement <16 x float> %a, i32 2
949 %a3 = extractelement <16 x float> %a, i32 3
950 %a4 = extractelement <16 x float> %a, i32 4
951 %a5 = extractelement <16 x float> %a, i32 5
952 %a6 = extractelement <16 x float> %a, i32 6
953 %a7 = extractelement <16 x float> %a, i32 7
954 %a8 = extractelement <16 x float> %a, i32 8
955 %a9 = extractelement <16 x float> %a, i32 9
956 %a10 = extractelement <16 x float> %a, i32 10
957 %a11 = extractelement <16 x float> %a, i32 11
958 %a12 = extractelement <16 x float> %a, i32 12
959 %a13 = extractelement <16 x float> %a, i32 13
960 %a14 = extractelement <16 x float> %a, i32 14
961 %a15 = extractelement <16 x float> %a, i32 15
962 %b0 = extractelement <16 x float> %b, i32 0
963 %b1 = extractelement <16 x float> %b, i32 1
964 %b2 = extractelement <16 x float> %b, i32 2
965 %b3 = extractelement <16 x float> %b, i32 3
966 %b4 = extractelement <16 x float> %b, i32 4
967 %b5 = extractelement <16 x float> %b, i32 5
968 %b6 = extractelement <16 x float> %b, i32 6
969 %b7 = extractelement <16 x float> %b, i32 7
970 %b8 = extractelement <16 x float> %b, i32 8
971 %b9 = extractelement <16 x float> %b, i32 9
972 %b10 = extractelement <16 x float> %b, i32 10
973 %b11 = extractelement <16 x float> %b, i32 11
974 %b12 = extractelement <16 x float> %b, i32 12
975 %b13 = extractelement <16 x float> %b, i32 13
976 %b14 = extractelement <16 x float> %b, i32 14
977 %b15 = extractelement <16 x float> %b, i32 15
978 %c0 = fadd float %a0 , %b0
979 %c1 = fadd float %a1 , %b1
980 %c2 = fadd float %a2 , %b2
981 %c3 = fadd float %a3 , %b3
982 %c4 = fadd float %a4 , %b4
983 %c5 = fadd float %a5 , %b5
984 %c6 = fadd float %a6 , %b6
985 %c7 = fadd float %a7 , %b7
986 %c8 = fadd float %a8 , %b8
987 %c9 = fadd float %a9 , %b9
988 %c10 = fadd float %a10, %b10
989 %c11 = fadd float %a11, %b11
990 %c12 = fadd float %a12, %b12
991 %c13 = fadd float %a13, %b13
992 %c14 = fadd float %a14, %b14
993 %c15 = fadd float %a15, %b15
994 %r0 = insertelement <16 x float> undef, float %c0 , i32 0
995 %r1 = insertelement <16 x float> %r0 , float %c1 , i32 1
996 %r2 = insertelement <16 x float> %r1 , float %c2 , i32 2
997 %r3 = insertelement <16 x float> %r2 , float %c3 , i32 3
998 %r4 = insertelement <16 x float> %r3 , float %c4 , i32 4
999 %r5 = insertelement <16 x float> %r4 , float %c5 , i32 5
1000 %r6 = insertelement <16 x float> %r5 , float %c6 , i32 6
1001 %r7 = insertelement <16 x float> %r6 , float %c7 , i32 7
1002 %r8 = insertelement <16 x float> %r7 , float %c8 , i32 8
1003 %r9 = insertelement <16 x float> %r8 , float %c9 , i32 9
1004 %r10 = insertelement <16 x float> %r9 , float %c10, i32 10
1005 %r11 = insertelement <16 x float> %r10, float %c11, i32 11
1006 %r12 = insertelement <16 x float> %r11, float %c12, i32 12
1007 %r13 = insertelement <16 x float> %r12, float %c13, i32 13
1008 %r14 = insertelement <16 x float> %r13, float %c14, i32 14
1009 %r15 = insertelement <16 x float> %r14, float %c15, i32 15
1010 ret <16 x float> %r15
1013 define <16 x float> @buildvector_sub_16f32(<16 x float> %a, <16 x float> %b) {
1014 ; CHECK-LABEL: @buildvector_sub_16f32(
1015 ; CHECK-NEXT: [[TMP1:%.*]] = fsub <16 x float> [[A:%.*]], [[B:%.*]]
1016 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <16 x float> [[TMP1]], i32 0
1017 ; CHECK-NEXT: [[R0:%.*]] = insertelement <16 x float> undef, float [[TMP2]], i32 0
1018 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <16 x float> [[TMP1]], i32 1
1019 ; CHECK-NEXT: [[R1:%.*]] = insertelement <16 x float> [[R0]], float [[TMP3]], i32 1
1020 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <16 x float> [[TMP1]], i32 2
1021 ; CHECK-NEXT: [[R2:%.*]] = insertelement <16 x float> [[R1]], float [[TMP4]], i32 2
1022 ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <16 x float> [[TMP1]], i32 3
1023 ; CHECK-NEXT: [[R3:%.*]] = insertelement <16 x float> [[R2]], float [[TMP5]], i32 3
1024 ; CHECK-NEXT: [[TMP6:%.*]] = extractelement <16 x float> [[TMP1]], i32 4
1025 ; CHECK-NEXT: [[R4:%.*]] = insertelement <16 x float> [[R3]], float [[TMP6]], i32 4
1026 ; CHECK-NEXT: [[TMP7:%.*]] = extractelement <16 x float> [[TMP1]], i32 5
1027 ; CHECK-NEXT: [[R5:%.*]] = insertelement <16 x float> [[R4]], float [[TMP7]], i32 5
1028 ; CHECK-NEXT: [[TMP8:%.*]] = extractelement <16 x float> [[TMP1]], i32 6
1029 ; CHECK-NEXT: [[R6:%.*]] = insertelement <16 x float> [[R5]], float [[TMP8]], i32 6
1030 ; CHECK-NEXT: [[TMP9:%.*]] = extractelement <16 x float> [[TMP1]], i32 7
1031 ; CHECK-NEXT: [[R7:%.*]] = insertelement <16 x float> [[R6]], float [[TMP9]], i32 7
1032 ; CHECK-NEXT: [[TMP10:%.*]] = extractelement <16 x float> [[TMP1]], i32 8
1033 ; CHECK-NEXT: [[R8:%.*]] = insertelement <16 x float> [[R7]], float [[TMP10]], i32 8
1034 ; CHECK-NEXT: [[TMP11:%.*]] = extractelement <16 x float> [[TMP1]], i32 9
1035 ; CHECK-NEXT: [[R9:%.*]] = insertelement <16 x float> [[R8]], float [[TMP11]], i32 9
1036 ; CHECK-NEXT: [[TMP12:%.*]] = extractelement <16 x float> [[TMP1]], i32 10
1037 ; CHECK-NEXT: [[R10:%.*]] = insertelement <16 x float> [[R9]], float [[TMP12]], i32 10
1038 ; CHECK-NEXT: [[TMP13:%.*]] = extractelement <16 x float> [[TMP1]], i32 11
1039 ; CHECK-NEXT: [[R11:%.*]] = insertelement <16 x float> [[R10]], float [[TMP13]], i32 11
1040 ; CHECK-NEXT: [[TMP14:%.*]] = extractelement <16 x float> [[TMP1]], i32 12
1041 ; CHECK-NEXT: [[R12:%.*]] = insertelement <16 x float> [[R11]], float [[TMP14]], i32 12
1042 ; CHECK-NEXT: [[TMP15:%.*]] = extractelement <16 x float> [[TMP1]], i32 13
1043 ; CHECK-NEXT: [[R13:%.*]] = insertelement <16 x float> [[R12]], float [[TMP15]], i32 13
1044 ; CHECK-NEXT: [[TMP16:%.*]] = extractelement <16 x float> [[TMP1]], i32 14
1045 ; CHECK-NEXT: [[R14:%.*]] = insertelement <16 x float> [[R13]], float [[TMP16]], i32 14
1046 ; CHECK-NEXT: [[TMP17:%.*]] = extractelement <16 x float> [[TMP1]], i32 15
1047 ; CHECK-NEXT: [[R15:%.*]] = insertelement <16 x float> [[R14]], float [[TMP17]], i32 15
1048 ; CHECK-NEXT: ret <16 x float> [[R15]]
1050 %a0 = extractelement <16 x float> %a, i32 0
1051 %a1 = extractelement <16 x float> %a, i32 1
1052 %a2 = extractelement <16 x float> %a, i32 2
1053 %a3 = extractelement <16 x float> %a, i32 3
1054 %a4 = extractelement <16 x float> %a, i32 4
1055 %a5 = extractelement <16 x float> %a, i32 5
1056 %a6 = extractelement <16 x float> %a, i32 6
1057 %a7 = extractelement <16 x float> %a, i32 7
1058 %a8 = extractelement <16 x float> %a, i32 8
1059 %a9 = extractelement <16 x float> %a, i32 9
1060 %a10 = extractelement <16 x float> %a, i32 10
1061 %a11 = extractelement <16 x float> %a, i32 11
1062 %a12 = extractelement <16 x float> %a, i32 12
1063 %a13 = extractelement <16 x float> %a, i32 13
1064 %a14 = extractelement <16 x float> %a, i32 14
1065 %a15 = extractelement <16 x float> %a, i32 15
1066 %b0 = extractelement <16 x float> %b, i32 0
1067 %b1 = extractelement <16 x float> %b, i32 1
1068 %b2 = extractelement <16 x float> %b, i32 2
1069 %b3 = extractelement <16 x float> %b, i32 3
1070 %b4 = extractelement <16 x float> %b, i32 4
1071 %b5 = extractelement <16 x float> %b, i32 5
1072 %b6 = extractelement <16 x float> %b, i32 6
1073 %b7 = extractelement <16 x float> %b, i32 7
1074 %b8 = extractelement <16 x float> %b, i32 8
1075 %b9 = extractelement <16 x float> %b, i32 9
1076 %b10 = extractelement <16 x float> %b, i32 10
1077 %b11 = extractelement <16 x float> %b, i32 11
1078 %b12 = extractelement <16 x float> %b, i32 12
1079 %b13 = extractelement <16 x float> %b, i32 13
1080 %b14 = extractelement <16 x float> %b, i32 14
1081 %b15 = extractelement <16 x float> %b, i32 15
1082 %c0 = fsub float %a0 , %b0
1083 %c1 = fsub float %a1 , %b1
1084 %c2 = fsub float %a2 , %b2
1085 %c3 = fsub float %a3 , %b3
1086 %c4 = fsub float %a4 , %b4
1087 %c5 = fsub float %a5 , %b5
1088 %c6 = fsub float %a6 , %b6
1089 %c7 = fsub float %a7 , %b7
1090 %c8 = fsub float %a8 , %b8
1091 %c9 = fsub float %a9 , %b9
1092 %c10 = fsub float %a10, %b10
1093 %c11 = fsub float %a11, %b11
1094 %c12 = fsub float %a12, %b12
1095 %c13 = fsub float %a13, %b13
1096 %c14 = fsub float %a14, %b14
1097 %c15 = fsub float %a15, %b15
1098 %r0 = insertelement <16 x float> undef, float %c0 , i32 0
1099 %r1 = insertelement <16 x float> %r0 , float %c1 , i32 1
1100 %r2 = insertelement <16 x float> %r1 , float %c2 , i32 2
1101 %r3 = insertelement <16 x float> %r2 , float %c3 , i32 3
1102 %r4 = insertelement <16 x float> %r3 , float %c4 , i32 4
1103 %r5 = insertelement <16 x float> %r4 , float %c5 , i32 5
1104 %r6 = insertelement <16 x float> %r5 , float %c6 , i32 6
1105 %r7 = insertelement <16 x float> %r6 , float %c7 , i32 7
1106 %r8 = insertelement <16 x float> %r7 , float %c8 , i32 8
1107 %r9 = insertelement <16 x float> %r8 , float %c9 , i32 9
1108 %r10 = insertelement <16 x float> %r9 , float %c10, i32 10
1109 %r11 = insertelement <16 x float> %r10, float %c11, i32 11
1110 %r12 = insertelement <16 x float> %r11, float %c12, i32 12
1111 %r13 = insertelement <16 x float> %r12, float %c13, i32 13
1112 %r14 = insertelement <16 x float> %r13, float %c14, i32 14
1113 %r15 = insertelement <16 x float> %r14, float %c15, i32 15
1114 ret <16 x float> %r15
1117 define <16 x float> @buildvector_mul_16f32(<16 x float> %a, <16 x float> %b) {
1118 ; CHECK-LABEL: @buildvector_mul_16f32(
1119 ; CHECK-NEXT: [[TMP1:%.*]] = fmul <16 x float> [[A:%.*]], [[B:%.*]]
1120 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <16 x float> [[TMP1]], i32 0
1121 ; CHECK-NEXT: [[R0:%.*]] = insertelement <16 x float> undef, float [[TMP2]], i32 0
1122 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <16 x float> [[TMP1]], i32 1
1123 ; CHECK-NEXT: [[R1:%.*]] = insertelement <16 x float> [[R0]], float [[TMP3]], i32 1
1124 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <16 x float> [[TMP1]], i32 2
1125 ; CHECK-NEXT: [[R2:%.*]] = insertelement <16 x float> [[R1]], float [[TMP4]], i32 2
1126 ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <16 x float> [[TMP1]], i32 3
1127 ; CHECK-NEXT: [[R3:%.*]] = insertelement <16 x float> [[R2]], float [[TMP5]], i32 3
1128 ; CHECK-NEXT: [[TMP6:%.*]] = extractelement <16 x float> [[TMP1]], i32 4
1129 ; CHECK-NEXT: [[R4:%.*]] = insertelement <16 x float> [[R3]], float [[TMP6]], i32 4
1130 ; CHECK-NEXT: [[TMP7:%.*]] = extractelement <16 x float> [[TMP1]], i32 5
1131 ; CHECK-NEXT: [[R5:%.*]] = insertelement <16 x float> [[R4]], float [[TMP7]], i32 5
1132 ; CHECK-NEXT: [[TMP8:%.*]] = extractelement <16 x float> [[TMP1]], i32 6
1133 ; CHECK-NEXT: [[R6:%.*]] = insertelement <16 x float> [[R5]], float [[TMP8]], i32 6
1134 ; CHECK-NEXT: [[TMP9:%.*]] = extractelement <16 x float> [[TMP1]], i32 7
1135 ; CHECK-NEXT: [[R7:%.*]] = insertelement <16 x float> [[R6]], float [[TMP9]], i32 7
1136 ; CHECK-NEXT: [[TMP10:%.*]] = extractelement <16 x float> [[TMP1]], i32 8
1137 ; CHECK-NEXT: [[R8:%.*]] = insertelement <16 x float> [[R7]], float [[TMP10]], i32 8
1138 ; CHECK-NEXT: [[TMP11:%.*]] = extractelement <16 x float> [[TMP1]], i32 9
1139 ; CHECK-NEXT: [[R9:%.*]] = insertelement <16 x float> [[R8]], float [[TMP11]], i32 9
1140 ; CHECK-NEXT: [[TMP12:%.*]] = extractelement <16 x float> [[TMP1]], i32 10
1141 ; CHECK-NEXT: [[R10:%.*]] = insertelement <16 x float> [[R9]], float [[TMP12]], i32 10
1142 ; CHECK-NEXT: [[TMP13:%.*]] = extractelement <16 x float> [[TMP1]], i32 11
1143 ; CHECK-NEXT: [[R11:%.*]] = insertelement <16 x float> [[R10]], float [[TMP13]], i32 11
1144 ; CHECK-NEXT: [[TMP14:%.*]] = extractelement <16 x float> [[TMP1]], i32 12
1145 ; CHECK-NEXT: [[R12:%.*]] = insertelement <16 x float> [[R11]], float [[TMP14]], i32 12
1146 ; CHECK-NEXT: [[TMP15:%.*]] = extractelement <16 x float> [[TMP1]], i32 13
1147 ; CHECK-NEXT: [[R13:%.*]] = insertelement <16 x float> [[R12]], float [[TMP15]], i32 13
1148 ; CHECK-NEXT: [[TMP16:%.*]] = extractelement <16 x float> [[TMP1]], i32 14
1149 ; CHECK-NEXT: [[R14:%.*]] = insertelement <16 x float> [[R13]], float [[TMP16]], i32 14
1150 ; CHECK-NEXT: [[TMP17:%.*]] = extractelement <16 x float> [[TMP1]], i32 15
1151 ; CHECK-NEXT: [[R15:%.*]] = insertelement <16 x float> [[R14]], float [[TMP17]], i32 15
1152 ; CHECK-NEXT: ret <16 x float> [[R15]]
1154 %a0 = extractelement <16 x float> %a, i32 0
1155 %a1 = extractelement <16 x float> %a, i32 1
1156 %a2 = extractelement <16 x float> %a, i32 2
1157 %a3 = extractelement <16 x float> %a, i32 3
1158 %a4 = extractelement <16 x float> %a, i32 4
1159 %a5 = extractelement <16 x float> %a, i32 5
1160 %a6 = extractelement <16 x float> %a, i32 6
1161 %a7 = extractelement <16 x float> %a, i32 7
1162 %a8 = extractelement <16 x float> %a, i32 8
1163 %a9 = extractelement <16 x float> %a, i32 9
1164 %a10 = extractelement <16 x float> %a, i32 10
1165 %a11 = extractelement <16 x float> %a, i32 11
1166 %a12 = extractelement <16 x float> %a, i32 12
1167 %a13 = extractelement <16 x float> %a, i32 13
1168 %a14 = extractelement <16 x float> %a, i32 14
1169 %a15 = extractelement <16 x float> %a, i32 15
1170 %b0 = extractelement <16 x float> %b, i32 0
1171 %b1 = extractelement <16 x float> %b, i32 1
1172 %b2 = extractelement <16 x float> %b, i32 2
1173 %b3 = extractelement <16 x float> %b, i32 3
1174 %b4 = extractelement <16 x float> %b, i32 4
1175 %b5 = extractelement <16 x float> %b, i32 5
1176 %b6 = extractelement <16 x float> %b, i32 6
1177 %b7 = extractelement <16 x float> %b, i32 7
1178 %b8 = extractelement <16 x float> %b, i32 8
1179 %b9 = extractelement <16 x float> %b, i32 9
1180 %b10 = extractelement <16 x float> %b, i32 10
1181 %b11 = extractelement <16 x float> %b, i32 11
1182 %b12 = extractelement <16 x float> %b, i32 12
1183 %b13 = extractelement <16 x float> %b, i32 13
1184 %b14 = extractelement <16 x float> %b, i32 14
1185 %b15 = extractelement <16 x float> %b, i32 15
1186 %c0 = fmul float %a0 , %b0
1187 %c1 = fmul float %a1 , %b1
1188 %c2 = fmul float %a2 , %b2
1189 %c3 = fmul float %a3 , %b3
1190 %c4 = fmul float %a4 , %b4
1191 %c5 = fmul float %a5 , %b5
1192 %c6 = fmul float %a6 , %b6
1193 %c7 = fmul float %a7 , %b7
1194 %c8 = fmul float %a8 , %b8
1195 %c9 = fmul float %a9 , %b9
1196 %c10 = fmul float %a10, %b10
1197 %c11 = fmul float %a11, %b11
1198 %c12 = fmul float %a12, %b12
1199 %c13 = fmul float %a13, %b13
1200 %c14 = fmul float %a14, %b14
1201 %c15 = fmul float %a15, %b15
1202 %r0 = insertelement <16 x float> undef, float %c0 , i32 0
1203 %r1 = insertelement <16 x float> %r0 , float %c1 , i32 1
1204 %r2 = insertelement <16 x float> %r1 , float %c2 , i32 2
1205 %r3 = insertelement <16 x float> %r2 , float %c3 , i32 3
1206 %r4 = insertelement <16 x float> %r3 , float %c4 , i32 4
1207 %r5 = insertelement <16 x float> %r4 , float %c5 , i32 5
1208 %r6 = insertelement <16 x float> %r5 , float %c6 , i32 6
1209 %r7 = insertelement <16 x float> %r6 , float %c7 , i32 7
1210 %r8 = insertelement <16 x float> %r7 , float %c8 , i32 8
1211 %r9 = insertelement <16 x float> %r8 , float %c9 , i32 9
1212 %r10 = insertelement <16 x float> %r9 , float %c10, i32 10
1213 %r11 = insertelement <16 x float> %r10, float %c11, i32 11
1214 %r12 = insertelement <16 x float> %r11, float %c12, i32 12
1215 %r13 = insertelement <16 x float> %r12, float %c13, i32 13
1216 %r14 = insertelement <16 x float> %r13, float %c14, i32 14
1217 %r15 = insertelement <16 x float> %r14, float %c15, i32 15
1218 ret <16 x float> %r15
1221 define <16 x float> @buildvector_div_16f32(<16 x float> %a, <16 x float> %b) {
1222 ; CHECK-LABEL: @buildvector_div_16f32(
1223 ; CHECK-NEXT: [[TMP1:%.*]] = fdiv <16 x float> [[A:%.*]], [[B:%.*]]
1224 ; CHECK-NEXT: [[TMP2:%.*]] = extractelement <16 x float> [[TMP1]], i32 0
1225 ; CHECK-NEXT: [[R0:%.*]] = insertelement <16 x float> undef, float [[TMP2]], i32 0
1226 ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <16 x float> [[TMP1]], i32 1
1227 ; CHECK-NEXT: [[R1:%.*]] = insertelement <16 x float> [[R0]], float [[TMP3]], i32 1
1228 ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <16 x float> [[TMP1]], i32 2
1229 ; CHECK-NEXT: [[R2:%.*]] = insertelement <16 x float> [[R1]], float [[TMP4]], i32 2
1230 ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <16 x float> [[TMP1]], i32 3
1231 ; CHECK-NEXT: [[R3:%.*]] = insertelement <16 x float> [[R2]], float [[TMP5]], i32 3
1232 ; CHECK-NEXT: [[TMP6:%.*]] = extractelement <16 x float> [[TMP1]], i32 4
1233 ; CHECK-NEXT: [[R4:%.*]] = insertelement <16 x float> [[R3]], float [[TMP6]], i32 4
1234 ; CHECK-NEXT: [[TMP7:%.*]] = extractelement <16 x float> [[TMP1]], i32 5
1235 ; CHECK-NEXT: [[R5:%.*]] = insertelement <16 x float> [[R4]], float [[TMP7]], i32 5
1236 ; CHECK-NEXT: [[TMP8:%.*]] = extractelement <16 x float> [[TMP1]], i32 6
1237 ; CHECK-NEXT: [[R6:%.*]] = insertelement <16 x float> [[R5]], float [[TMP8]], i32 6
1238 ; CHECK-NEXT: [[TMP9:%.*]] = extractelement <16 x float> [[TMP1]], i32 7
1239 ; CHECK-NEXT: [[R7:%.*]] = insertelement <16 x float> [[R6]], float [[TMP9]], i32 7
1240 ; CHECK-NEXT: [[TMP10:%.*]] = extractelement <16 x float> [[TMP1]], i32 8
1241 ; CHECK-NEXT: [[R8:%.*]] = insertelement <16 x float> [[R7]], float [[TMP10]], i32 8
1242 ; CHECK-NEXT: [[TMP11:%.*]] = extractelement <16 x float> [[TMP1]], i32 9
1243 ; CHECK-NEXT: [[R9:%.*]] = insertelement <16 x float> [[R8]], float [[TMP11]], i32 9
1244 ; CHECK-NEXT: [[TMP12:%.*]] = extractelement <16 x float> [[TMP1]], i32 10
1245 ; CHECK-NEXT: [[R10:%.*]] = insertelement <16 x float> [[R9]], float [[TMP12]], i32 10
1246 ; CHECK-NEXT: [[TMP13:%.*]] = extractelement <16 x float> [[TMP1]], i32 11
1247 ; CHECK-NEXT: [[R11:%.*]] = insertelement <16 x float> [[R10]], float [[TMP13]], i32 11
1248 ; CHECK-NEXT: [[TMP14:%.*]] = extractelement <16 x float> [[TMP1]], i32 12
1249 ; CHECK-NEXT: [[R12:%.*]] = insertelement <16 x float> [[R11]], float [[TMP14]], i32 12
1250 ; CHECK-NEXT: [[TMP15:%.*]] = extractelement <16 x float> [[TMP1]], i32 13
1251 ; CHECK-NEXT: [[R13:%.*]] = insertelement <16 x float> [[R12]], float [[TMP15]], i32 13
1252 ; CHECK-NEXT: [[TMP16:%.*]] = extractelement <16 x float> [[TMP1]], i32 14
1253 ; CHECK-NEXT: [[R14:%.*]] = insertelement <16 x float> [[R13]], float [[TMP16]], i32 14
1254 ; CHECK-NEXT: [[TMP17:%.*]] = extractelement <16 x float> [[TMP1]], i32 15
1255 ; CHECK-NEXT: [[R15:%.*]] = insertelement <16 x float> [[R14]], float [[TMP17]], i32 15
1256 ; CHECK-NEXT: ret <16 x float> [[R15]]
1258 %a0 = extractelement <16 x float> %a, i32 0
1259 %a1 = extractelement <16 x float> %a, i32 1
1260 %a2 = extractelement <16 x float> %a, i32 2
1261 %a3 = extractelement <16 x float> %a, i32 3
1262 %a4 = extractelement <16 x float> %a, i32 4
1263 %a5 = extractelement <16 x float> %a, i32 5
1264 %a6 = extractelement <16 x float> %a, i32 6
1265 %a7 = extractelement <16 x float> %a, i32 7
1266 %a8 = extractelement <16 x float> %a, i32 8
1267 %a9 = extractelement <16 x float> %a, i32 9
1268 %a10 = extractelement <16 x float> %a, i32 10
1269 %a11 = extractelement <16 x float> %a, i32 11
1270 %a12 = extractelement <16 x float> %a, i32 12
1271 %a13 = extractelement <16 x float> %a, i32 13
1272 %a14 = extractelement <16 x float> %a, i32 14
1273 %a15 = extractelement <16 x float> %a, i32 15
1274 %b0 = extractelement <16 x float> %b, i32 0
1275 %b1 = extractelement <16 x float> %b, i32 1
1276 %b2 = extractelement <16 x float> %b, i32 2
1277 %b3 = extractelement <16 x float> %b, i32 3
1278 %b4 = extractelement <16 x float> %b, i32 4
1279 %b5 = extractelement <16 x float> %b, i32 5
1280 %b6 = extractelement <16 x float> %b, i32 6
1281 %b7 = extractelement <16 x float> %b, i32 7
1282 %b8 = extractelement <16 x float> %b, i32 8
1283 %b9 = extractelement <16 x float> %b, i32 9
1284 %b10 = extractelement <16 x float> %b, i32 10
1285 %b11 = extractelement <16 x float> %b, i32 11
1286 %b12 = extractelement <16 x float> %b, i32 12
1287 %b13 = extractelement <16 x float> %b, i32 13
1288 %b14 = extractelement <16 x float> %b, i32 14
1289 %b15 = extractelement <16 x float> %b, i32 15
1290 %c0 = fdiv float %a0 , %b0
1291 %c1 = fdiv float %a1 , %b1
1292 %c2 = fdiv float %a2 , %b2
1293 %c3 = fdiv float %a3 , %b3
1294 %c4 = fdiv float %a4 , %b4
1295 %c5 = fdiv float %a5 , %b5
1296 %c6 = fdiv float %a6 , %b6
1297 %c7 = fdiv float %a7 , %b7
1298 %c8 = fdiv float %a8 , %b8
1299 %c9 = fdiv float %a9 , %b9
1300 %c10 = fdiv float %a10, %b10
1301 %c11 = fdiv float %a11, %b11
1302 %c12 = fdiv float %a12, %b12
1303 %c13 = fdiv float %a13, %b13
1304 %c14 = fdiv float %a14, %b14
1305 %c15 = fdiv float %a15, %b15
1306 %r0 = insertelement <16 x float> undef, float %c0 , i32 0
1307 %r1 = insertelement <16 x float> %r0 , float %c1 , i32 1
1308 %r2 = insertelement <16 x float> %r1 , float %c2 , i32 2
1309 %r3 = insertelement <16 x float> %r2 , float %c3 , i32 3
1310 %r4 = insertelement <16 x float> %r3 , float %c4 , i32 4
1311 %r5 = insertelement <16 x float> %r4 , float %c5 , i32 5
1312 %r6 = insertelement <16 x float> %r5 , float %c6 , i32 6
1313 %r7 = insertelement <16 x float> %r6 , float %c7 , i32 7
1314 %r8 = insertelement <16 x float> %r7 , float %c8 , i32 8
1315 %r9 = insertelement <16 x float> %r8 , float %c9 , i32 9
1316 %r10 = insertelement <16 x float> %r9 , float %c10, i32 10
1317 %r11 = insertelement <16 x float> %r10, float %c11, i32 11
1318 %r12 = insertelement <16 x float> %r11, float %c12, i32 12
1319 %r13 = insertelement <16 x float> %r12, float %c13, i32 13
1320 %r14 = insertelement <16 x float> %r13, float %c14, i32 14
1321 %r15 = insertelement <16 x float> %r14, float %c15, i32 15
1322 ret <16 x float> %r15