[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / Transforms / SLPVectorizer / X86 / arith-fp.ll
blob119cf594c905db633158b643a23179973ffb17d3
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
9 ; 128-bit Vectors
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
29   ret <2 x double> %r1
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
49   ret <2 x double> %r1
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
69   ret <2 x double> %r1
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
108   ret <2 x double> %r1
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
140   ret <4 x float> %r3
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
172   ret <4 x float> %r3
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
204   ret <4 x float> %r3
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
236   ret <4 x float> %r3
240 ; 256-bit Vectors
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
272   ret <4 x double> %r3
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
304   ret <4 x double> %r3
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
336   ret <4 x double> %r3
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
399   ret <4 x double> %r3
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
455   ret <8 x float> %r7
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
511   ret <8 x float> %r7
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
567   ret <8 x float> %r7
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
623   ret <8 x float> %r7
627 ; 512-bit Vectors
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
683   ret <8 x double> %r7
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
739   ret <8 x double> %r7
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
795   ret <8 x double> %r7
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
906   ret <8 x double> %r7
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