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