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