961 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -mtriple=x86_64-unknown -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,SSE3; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=slm -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,SLM4; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7-avx -mattr=-prefer-128-bit -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX5; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7-avx -mattr=+prefer-128-bit -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,SSE6; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=core-avx2 -mattr=-prefer-128-bit -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX7; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=core-avx2 -mattr=+prefer-128-bit -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,SSE8; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=skx -passes=slp-vectorizer -S | FileCheck %s --check-prefixes=CHECK,AVX5129 10;11; 128-bit Vectors12;13 14define <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: ret <2 x double> [[TMP1]]18;19 %a0 = extractelement <2 x double> %a, i32 020 %a1 = extractelement <2 x double> %a, i32 121 %b0 = extractelement <2 x double> %b, i32 022 %b1 = extractelement <2 x double> %b, i32 123 %c0 = fadd double %a0, %b024 %c1 = fadd double %a1, %b125 %r0 = insertelement <2 x double> undef, double %c0, i32 026 %r1 = insertelement <2 x double> %r0, double %c1, i32 127 ret <2 x double> %r128}29 30define <2 x double> @buildvector_sub_2f64(<2 x double> %a, <2 x double> %b) {31; CHECK-LABEL: @buildvector_sub_2f64(32; CHECK-NEXT: [[TMP1:%.*]] = fsub <2 x double> [[A:%.*]], [[B:%.*]]33; CHECK-NEXT: ret <2 x double> [[TMP1]]34;35 %a0 = extractelement <2 x double> %a, i32 036 %a1 = extractelement <2 x double> %a, i32 137 %b0 = extractelement <2 x double> %b, i32 038 %b1 = extractelement <2 x double> %b, i32 139 %c0 = fsub double %a0, %b040 %c1 = fsub double %a1, %b141 %r0 = insertelement <2 x double> undef, double %c0, i32 042 %r1 = insertelement <2 x double> %r0, double %c1, i32 143 ret <2 x double> %r144}45 46define <2 x double> @buildvector_mul_2f64(<2 x double> %a, <2 x double> %b) {47; CHECK-LABEL: @buildvector_mul_2f64(48; CHECK-NEXT: [[TMP1:%.*]] = fmul <2 x double> [[A:%.*]], [[B:%.*]]49; CHECK-NEXT: ret <2 x double> [[TMP1]]50;51 %a0 = extractelement <2 x double> %a, i32 052 %a1 = extractelement <2 x double> %a, i32 153 %b0 = extractelement <2 x double> %b, i32 054 %b1 = extractelement <2 x double> %b, i32 155 %c0 = fmul double %a0, %b056 %c1 = fmul double %a1, %b157 %r0 = insertelement <2 x double> undef, double %c0, i32 058 %r1 = insertelement <2 x double> %r0, double %c1, i32 159 ret <2 x double> %r160}61 62define <2 x double> @buildvector_div_2f64(<2 x double> %a, <2 x double> %b) {63; SSE-LABEL: @buildvector_div_2f64(64; SSE-NEXT: [[TMP1:%.*]] = fdiv <2 x double> [[A:%.*]], [[B:%.*]]65; SSE-NEXT: ret <2 x double> [[TMP1]]66;67; SLM-LABEL: @buildvector_div_2f64(68; SLM-NEXT: [[A0:%.*]] = extractelement <2 x double> [[A:%.*]], i32 069; SLM-NEXT: [[A1:%.*]] = extractelement <2 x double> [[A]], i32 170; SLM-NEXT: [[B0:%.*]] = extractelement <2 x double> [[B:%.*]], i32 071; SLM-NEXT: [[B1:%.*]] = extractelement <2 x double> [[B]], i32 172; SLM-NEXT: [[C0:%.*]] = fdiv double [[A0]], [[B0]]73; SLM-NEXT: [[C1:%.*]] = fdiv double [[A1]], [[B1]]74; SLM-NEXT: [[R0:%.*]] = insertelement <2 x double> undef, double [[C0]], i32 075; SLM-NEXT: [[R1:%.*]] = insertelement <2 x double> [[R0]], double [[C1]], i32 176; SLM-NEXT: ret <2 x double> [[R1]]77;78; AVX-LABEL: @buildvector_div_2f64(79; AVX-NEXT: [[TMP1:%.*]] = fdiv <2 x double> [[A:%.*]], [[B:%.*]]80; AVX-NEXT: ret <2 x double> [[TMP1]]81;82; AVX512-LABEL: @buildvector_div_2f64(83; AVX512-NEXT: [[TMP1:%.*]] = fdiv <2 x double> [[A:%.*]], [[B:%.*]]84; AVX512-NEXT: ret <2 x double> [[TMP1]]85;86 %a0 = extractelement <2 x double> %a, i32 087 %a1 = extractelement <2 x double> %a, i32 188 %b0 = extractelement <2 x double> %b, i32 089 %b1 = extractelement <2 x double> %b, i32 190 %c0 = fdiv double %a0, %b091 %c1 = fdiv double %a1, %b192 %r0 = insertelement <2 x double> undef, double %c0, i32 093 %r1 = insertelement <2 x double> %r0, double %c1, i32 194 ret <2 x double> %r195}96 97define <4 x float> @buildvector_add_4f32(<4 x float> %a, <4 x float> %b) {98; CHECK-LABEL: @buildvector_add_4f32(99; CHECK-NEXT: [[TMP1:%.*]] = fadd <4 x float> [[A:%.*]], [[B:%.*]]100; CHECK-NEXT: ret <4 x float> [[TMP1]]101;102 %a0 = extractelement <4 x float> %a, i32 0103 %a1 = extractelement <4 x float> %a, i32 1104 %a2 = extractelement <4 x float> %a, i32 2105 %a3 = extractelement <4 x float> %a, i32 3106 %b0 = extractelement <4 x float> %b, i32 0107 %b1 = extractelement <4 x float> %b, i32 1108 %b2 = extractelement <4 x float> %b, i32 2109 %b3 = extractelement <4 x float> %b, i32 3110 %c0 = fadd float %a0, %b0111 %c1 = fadd float %a1, %b1112 %c2 = fadd float %a2, %b2113 %c3 = fadd float %a3, %b3114 %r0 = insertelement <4 x float> undef, float %c0, i32 0115 %r1 = insertelement <4 x float> %r0, float %c1, i32 1116 %r2 = insertelement <4 x float> %r1, float %c2, i32 2117 %r3 = insertelement <4 x float> %r2, float %c3, i32 3118 ret <4 x float> %r3119}120 121define <4 x float> @buildvector_sub_4f32(<4 x float> %a, <4 x float> %b) {122; CHECK-LABEL: @buildvector_sub_4f32(123; CHECK-NEXT: [[TMP1:%.*]] = fsub <4 x float> [[A:%.*]], [[B:%.*]]124; CHECK-NEXT: ret <4 x float> [[TMP1]]125;126 %a0 = extractelement <4 x float> %a, i32 0127 %a1 = extractelement <4 x float> %a, i32 1128 %a2 = extractelement <4 x float> %a, i32 2129 %a3 = extractelement <4 x float> %a, i32 3130 %b0 = extractelement <4 x float> %b, i32 0131 %b1 = extractelement <4 x float> %b, i32 1132 %b2 = extractelement <4 x float> %b, i32 2133 %b3 = extractelement <4 x float> %b, i32 3134 %c0 = fsub float %a0, %b0135 %c1 = fsub float %a1, %b1136 %c2 = fsub float %a2, %b2137 %c3 = fsub float %a3, %b3138 %r0 = insertelement <4 x float> undef, float %c0, i32 0139 %r1 = insertelement <4 x float> %r0, float %c1, i32 1140 %r2 = insertelement <4 x float> %r1, float %c2, i32 2141 %r3 = insertelement <4 x float> %r2, float %c3, i32 3142 ret <4 x float> %r3143}144 145define <4 x float> @buildvector_mul_4f32(<4 x float> %a, <4 x float> %b) {146; CHECK-LABEL: @buildvector_mul_4f32(147; CHECK-NEXT: [[TMP1:%.*]] = fmul <4 x float> [[A:%.*]], [[B:%.*]]148; CHECK-NEXT: ret <4 x float> [[TMP1]]149;150 %a0 = extractelement <4 x float> %a, i32 0151 %a1 = extractelement <4 x float> %a, i32 1152 %a2 = extractelement <4 x float> %a, i32 2153 %a3 = extractelement <4 x float> %a, i32 3154 %b0 = extractelement <4 x float> %b, i32 0155 %b1 = extractelement <4 x float> %b, i32 1156 %b2 = extractelement <4 x float> %b, i32 2157 %b3 = extractelement <4 x float> %b, i32 3158 %c0 = fmul float %a0, %b0159 %c1 = fmul float %a1, %b1160 %c2 = fmul float %a2, %b2161 %c3 = fmul float %a3, %b3162 %r0 = insertelement <4 x float> undef, float %c0, i32 0163 %r1 = insertelement <4 x float> %r0, float %c1, i32 1164 %r2 = insertelement <4 x float> %r1, float %c2, i32 2165 %r3 = insertelement <4 x float> %r2, float %c3, i32 3166 ret <4 x float> %r3167}168 169define <4 x float> @buildvector_div_4f32(<4 x float> %a, <4 x float> %b) {170; CHECK-LABEL: @buildvector_div_4f32(171; CHECK-NEXT: [[TMP1:%.*]] = fdiv <4 x float> [[A:%.*]], [[B:%.*]]172; CHECK-NEXT: ret <4 x float> [[TMP1]]173;174 %a0 = extractelement <4 x float> %a, i32 0175 %a1 = extractelement <4 x float> %a, i32 1176 %a2 = extractelement <4 x float> %a, i32 2177 %a3 = extractelement <4 x float> %a, i32 3178 %b0 = extractelement <4 x float> %b, i32 0179 %b1 = extractelement <4 x float> %b, i32 1180 %b2 = extractelement <4 x float> %b, i32 2181 %b3 = extractelement <4 x float> %b, i32 3182 %c0 = fdiv float %a0, %b0183 %c1 = fdiv float %a1, %b1184 %c2 = fdiv float %a2, %b2185 %c3 = fdiv float %a3, %b3186 %r0 = insertelement <4 x float> undef, float %c0, i32 0187 %r1 = insertelement <4 x float> %r0, float %c1, i32 1188 %r2 = insertelement <4 x float> %r1, float %c2, i32 2189 %r3 = insertelement <4 x float> %r2, float %c3, i32 3190 ret <4 x float> %r3191}192 193;194; 256-bit Vectors195;196 197define <4 x double> @buildvector_add_4f64(<4 x double> %a, <4 x double> %b) {198; CHECK-LABEL: @buildvector_add_4f64(199; CHECK-NEXT: [[TMP1:%.*]] = fadd <4 x double> [[A:%.*]], [[B:%.*]]200; CHECK-NEXT: ret <4 x double> [[TMP1]]201;202 %a0 = extractelement <4 x double> %a, i32 0203 %a1 = extractelement <4 x double> %a, i32 1204 %a2 = extractelement <4 x double> %a, i32 2205 %a3 = extractelement <4 x double> %a, i32 3206 %b0 = extractelement <4 x double> %b, i32 0207 %b1 = extractelement <4 x double> %b, i32 1208 %b2 = extractelement <4 x double> %b, i32 2209 %b3 = extractelement <4 x double> %b, i32 3210 %c0 = fadd double %a0, %b0211 %c1 = fadd double %a1, %b1212 %c2 = fadd double %a2, %b2213 %c3 = fadd double %a3, %b3214 %r0 = insertelement <4 x double> undef, double %c0, i32 0215 %r1 = insertelement <4 x double> %r0, double %c1, i32 1216 %r2 = insertelement <4 x double> %r1, double %c2, i32 2217 %r3 = insertelement <4 x double> %r2, double %c3, i32 3218 ret <4 x double> %r3219}220 221define <4 x double> @buildvector_sub_4f64(<4 x double> %a, <4 x double> %b) {222; CHECK-LABEL: @buildvector_sub_4f64(223; CHECK-NEXT: [[TMP1:%.*]] = fsub <4 x double> [[A:%.*]], [[B:%.*]]224; CHECK-NEXT: ret <4 x double> [[TMP1]]225;226 %a0 = extractelement <4 x double> %a, i32 0227 %a1 = extractelement <4 x double> %a, i32 1228 %a2 = extractelement <4 x double> %a, i32 2229 %a3 = extractelement <4 x double> %a, i32 3230 %b0 = extractelement <4 x double> %b, i32 0231 %b1 = extractelement <4 x double> %b, i32 1232 %b2 = extractelement <4 x double> %b, i32 2233 %b3 = extractelement <4 x double> %b, i32 3234 %c0 = fsub double %a0, %b0235 %c1 = fsub double %a1, %b1236 %c2 = fsub double %a2, %b2237 %c3 = fsub double %a3, %b3238 %r0 = insertelement <4 x double> undef, double %c0, i32 0239 %r1 = insertelement <4 x double> %r0, double %c1, i32 1240 %r2 = insertelement <4 x double> %r1, double %c2, i32 2241 %r3 = insertelement <4 x double> %r2, double %c3, i32 3242 ret <4 x double> %r3243}244 245define <4 x double> @buildvector_mul_4f64(<4 x double> %a, <4 x double> %b) {246; CHECK-LABEL: @buildvector_mul_4f64(247; CHECK-NEXT: [[TMP1:%.*]] = fmul <4 x double> [[A:%.*]], [[B:%.*]]248; CHECK-NEXT: ret <4 x double> [[TMP1]]249;250 %a0 = extractelement <4 x double> %a, i32 0251 %a1 = extractelement <4 x double> %a, i32 1252 %a2 = extractelement <4 x double> %a, i32 2253 %a3 = extractelement <4 x double> %a, i32 3254 %b0 = extractelement <4 x double> %b, i32 0255 %b1 = extractelement <4 x double> %b, i32 1256 %b2 = extractelement <4 x double> %b, i32 2257 %b3 = extractelement <4 x double> %b, i32 3258 %c0 = fmul double %a0, %b0259 %c1 = fmul double %a1, %b1260 %c2 = fmul double %a2, %b2261 %c3 = fmul double %a3, %b3262 %r0 = insertelement <4 x double> undef, double %c0, i32 0263 %r1 = insertelement <4 x double> %r0, double %c1, i32 1264 %r2 = insertelement <4 x double> %r1, double %c2, i32 2265 %r3 = insertelement <4 x double> %r2, double %c3, i32 3266 ret <4 x double> %r3267}268 269define <4 x double> @buildvector_div_4f64(<4 x double> %a, <4 x double> %b) {270; SSE-LABEL: @buildvector_div_4f64(271; SSE-NEXT: [[TMP1:%.*]] = fdiv <4 x double> [[A:%.*]], [[B:%.*]]272; SSE-NEXT: ret <4 x double> [[TMP1]]273;274; SLM-LABEL: @buildvector_div_4f64(275; SLM-NEXT: [[A0:%.*]] = extractelement <4 x double> [[A:%.*]], i32 0276; SLM-NEXT: [[A1:%.*]] = extractelement <4 x double> [[A]], i32 1277; SLM-NEXT: [[A2:%.*]] = extractelement <4 x double> [[A]], i32 2278; SLM-NEXT: [[A3:%.*]] = extractelement <4 x double> [[A]], i32 3279; SLM-NEXT: [[B0:%.*]] = extractelement <4 x double> [[B:%.*]], i32 0280; SLM-NEXT: [[B1:%.*]] = extractelement <4 x double> [[B]], i32 1281; SLM-NEXT: [[B2:%.*]] = extractelement <4 x double> [[B]], i32 2282; SLM-NEXT: [[B3:%.*]] = extractelement <4 x double> [[B]], i32 3283; SLM-NEXT: [[C0:%.*]] = fdiv double [[A0]], [[B0]]284; SLM-NEXT: [[C1:%.*]] = fdiv double [[A1]], [[B1]]285; SLM-NEXT: [[C2:%.*]] = fdiv double [[A2]], [[B2]]286; SLM-NEXT: [[C3:%.*]] = fdiv double [[A3]], [[B3]]287; SLM-NEXT: [[R0:%.*]] = insertelement <4 x double> undef, double [[C0]], i32 0288; SLM-NEXT: [[R1:%.*]] = insertelement <4 x double> [[R0]], double [[C1]], i32 1289; SLM-NEXT: [[R2:%.*]] = insertelement <4 x double> [[R1]], double [[C2]], i32 2290; SLM-NEXT: [[R3:%.*]] = insertelement <4 x double> [[R2]], double [[C3]], i32 3291; SLM-NEXT: ret <4 x double> [[R3]]292;293; AVX-LABEL: @buildvector_div_4f64(294; AVX-NEXT: [[TMP1:%.*]] = fdiv <4 x double> [[A:%.*]], [[B:%.*]]295; AVX-NEXT: ret <4 x double> [[TMP1]]296;297; AVX512-LABEL: @buildvector_div_4f64(298; AVX512-NEXT: [[TMP1:%.*]] = fdiv <4 x double> [[A:%.*]], [[B:%.*]]299; AVX512-NEXT: ret <4 x double> [[TMP1]]300;301 %a0 = extractelement <4 x double> %a, i32 0302 %a1 = extractelement <4 x double> %a, i32 1303 %a2 = extractelement <4 x double> %a, i32 2304 %a3 = extractelement <4 x double> %a, i32 3305 %b0 = extractelement <4 x double> %b, i32 0306 %b1 = extractelement <4 x double> %b, i32 1307 %b2 = extractelement <4 x double> %b, i32 2308 %b3 = extractelement <4 x double> %b, i32 3309 %c0 = fdiv double %a0, %b0310 %c1 = fdiv double %a1, %b1311 %c2 = fdiv double %a2, %b2312 %c3 = fdiv double %a3, %b3313 %r0 = insertelement <4 x double> undef, double %c0, i32 0314 %r1 = insertelement <4 x double> %r0, double %c1, i32 1315 %r2 = insertelement <4 x double> %r1, double %c2, i32 2316 %r3 = insertelement <4 x double> %r2, double %c3, i32 3317 ret <4 x double> %r3318}319 320define <8 x float> @buildvector_add_8f32(<8 x float> %a, <8 x float> %b) {321; CHECK-LABEL: @buildvector_add_8f32(322; CHECK-NEXT: [[TMP1:%.*]] = fadd <8 x float> [[A:%.*]], [[B:%.*]]323; CHECK-NEXT: ret <8 x float> [[TMP1]]324;325 %a0 = extractelement <8 x float> %a, i32 0326 %a1 = extractelement <8 x float> %a, i32 1327 %a2 = extractelement <8 x float> %a, i32 2328 %a3 = extractelement <8 x float> %a, i32 3329 %a4 = extractelement <8 x float> %a, i32 4330 %a5 = extractelement <8 x float> %a, i32 5331 %a6 = extractelement <8 x float> %a, i32 6332 %a7 = extractelement <8 x float> %a, i32 7333 %b0 = extractelement <8 x float> %b, i32 0334 %b1 = extractelement <8 x float> %b, i32 1335 %b2 = extractelement <8 x float> %b, i32 2336 %b3 = extractelement <8 x float> %b, i32 3337 %b4 = extractelement <8 x float> %b, i32 4338 %b5 = extractelement <8 x float> %b, i32 5339 %b6 = extractelement <8 x float> %b, i32 6340 %b7 = extractelement <8 x float> %b, i32 7341 %c0 = fadd float %a0, %b0342 %c1 = fadd float %a1, %b1343 %c2 = fadd float %a2, %b2344 %c3 = fadd float %a3, %b3345 %c4 = fadd float %a4, %b4346 %c5 = fadd float %a5, %b5347 %c6 = fadd float %a6, %b6348 %c7 = fadd float %a7, %b7349 %r0 = insertelement <8 x float> undef, float %c0, i32 0350 %r1 = insertelement <8 x float> %r0, float %c1, i32 1351 %r2 = insertelement <8 x float> %r1, float %c2, i32 2352 %r3 = insertelement <8 x float> %r2, float %c3, i32 3353 %r4 = insertelement <8 x float> %r3, float %c4, i32 4354 %r5 = insertelement <8 x float> %r4, float %c5, i32 5355 %r6 = insertelement <8 x float> %r5, float %c6, i32 6356 %r7 = insertelement <8 x float> %r6, float %c7, i32 7357 ret <8 x float> %r7358}359 360define <8 x float> @buildvector_sub_8f32(<8 x float> %a, <8 x float> %b) {361; CHECK-LABEL: @buildvector_sub_8f32(362; CHECK-NEXT: [[TMP1:%.*]] = fsub <8 x float> [[A:%.*]], [[B:%.*]]363; CHECK-NEXT: ret <8 x float> [[TMP1]]364;365 %a0 = extractelement <8 x float> %a, i32 0366 %a1 = extractelement <8 x float> %a, i32 1367 %a2 = extractelement <8 x float> %a, i32 2368 %a3 = extractelement <8 x float> %a, i32 3369 %a4 = extractelement <8 x float> %a, i32 4370 %a5 = extractelement <8 x float> %a, i32 5371 %a6 = extractelement <8 x float> %a, i32 6372 %a7 = extractelement <8 x float> %a, i32 7373 %b0 = extractelement <8 x float> %b, i32 0374 %b1 = extractelement <8 x float> %b, i32 1375 %b2 = extractelement <8 x float> %b, i32 2376 %b3 = extractelement <8 x float> %b, i32 3377 %b4 = extractelement <8 x float> %b, i32 4378 %b5 = extractelement <8 x float> %b, i32 5379 %b6 = extractelement <8 x float> %b, i32 6380 %b7 = extractelement <8 x float> %b, i32 7381 %c0 = fsub float %a0, %b0382 %c1 = fsub float %a1, %b1383 %c2 = fsub float %a2, %b2384 %c3 = fsub float %a3, %b3385 %c4 = fsub float %a4, %b4386 %c5 = fsub float %a5, %b5387 %c6 = fsub float %a6, %b6388 %c7 = fsub float %a7, %b7389 %r0 = insertelement <8 x float> undef, float %c0, i32 0390 %r1 = insertelement <8 x float> %r0, float %c1, i32 1391 %r2 = insertelement <8 x float> %r1, float %c2, i32 2392 %r3 = insertelement <8 x float> %r2, float %c3, i32 3393 %r4 = insertelement <8 x float> %r3, float %c4, i32 4394 %r5 = insertelement <8 x float> %r4, float %c5, i32 5395 %r6 = insertelement <8 x float> %r5, float %c6, i32 6396 %r7 = insertelement <8 x float> %r6, float %c7, i32 7397 ret <8 x float> %r7398}399 400define <8 x float> @buildvector_mul_8f32(<8 x float> %a, <8 x float> %b) {401; CHECK-LABEL: @buildvector_mul_8f32(402; CHECK-NEXT: [[TMP1:%.*]] = fmul <8 x float> [[A:%.*]], [[B:%.*]]403; CHECK-NEXT: ret <8 x float> [[TMP1]]404;405 %a0 = extractelement <8 x float> %a, i32 0406 %a1 = extractelement <8 x float> %a, i32 1407 %a2 = extractelement <8 x float> %a, i32 2408 %a3 = extractelement <8 x float> %a, i32 3409 %a4 = extractelement <8 x float> %a, i32 4410 %a5 = extractelement <8 x float> %a, i32 5411 %a6 = extractelement <8 x float> %a, i32 6412 %a7 = extractelement <8 x float> %a, i32 7413 %b0 = extractelement <8 x float> %b, i32 0414 %b1 = extractelement <8 x float> %b, i32 1415 %b2 = extractelement <8 x float> %b, i32 2416 %b3 = extractelement <8 x float> %b, i32 3417 %b4 = extractelement <8 x float> %b, i32 4418 %b5 = extractelement <8 x float> %b, i32 5419 %b6 = extractelement <8 x float> %b, i32 6420 %b7 = extractelement <8 x float> %b, i32 7421 %c0 = fmul float %a0, %b0422 %c1 = fmul float %a1, %b1423 %c2 = fmul float %a2, %b2424 %c3 = fmul float %a3, %b3425 %c4 = fmul float %a4, %b4426 %c5 = fmul float %a5, %b5427 %c6 = fmul float %a6, %b6428 %c7 = fmul float %a7, %b7429 %r0 = insertelement <8 x float> undef, float %c0, i32 0430 %r1 = insertelement <8 x float> %r0, float %c1, i32 1431 %r2 = insertelement <8 x float> %r1, float %c2, i32 2432 %r3 = insertelement <8 x float> %r2, float %c3, i32 3433 %r4 = insertelement <8 x float> %r3, float %c4, i32 4434 %r5 = insertelement <8 x float> %r4, float %c5, i32 5435 %r6 = insertelement <8 x float> %r5, float %c6, i32 6436 %r7 = insertelement <8 x float> %r6, float %c7, i32 7437 ret <8 x float> %r7438}439 440define <8 x float> @buildvector_div_8f32(<8 x float> %a, <8 x float> %b) {441; CHECK-LABEL: @buildvector_div_8f32(442; CHECK-NEXT: [[TMP1:%.*]] = fdiv <8 x float> [[A:%.*]], [[B:%.*]]443; CHECK-NEXT: ret <8 x float> [[TMP1]]444;445 %a0 = extractelement <8 x float> %a, i32 0446 %a1 = extractelement <8 x float> %a, i32 1447 %a2 = extractelement <8 x float> %a, i32 2448 %a3 = extractelement <8 x float> %a, i32 3449 %a4 = extractelement <8 x float> %a, i32 4450 %a5 = extractelement <8 x float> %a, i32 5451 %a6 = extractelement <8 x float> %a, i32 6452 %a7 = extractelement <8 x float> %a, i32 7453 %b0 = extractelement <8 x float> %b, i32 0454 %b1 = extractelement <8 x float> %b, i32 1455 %b2 = extractelement <8 x float> %b, i32 2456 %b3 = extractelement <8 x float> %b, i32 3457 %b4 = extractelement <8 x float> %b, i32 4458 %b5 = extractelement <8 x float> %b, i32 5459 %b6 = extractelement <8 x float> %b, i32 6460 %b7 = extractelement <8 x float> %b, i32 7461 %c0 = fdiv float %a0, %b0462 %c1 = fdiv float %a1, %b1463 %c2 = fdiv float %a2, %b2464 %c3 = fdiv float %a3, %b3465 %c4 = fdiv float %a4, %b4466 %c5 = fdiv float %a5, %b5467 %c6 = fdiv float %a6, %b6468 %c7 = fdiv float %a7, %b7469 %r0 = insertelement <8 x float> undef, float %c0, i32 0470 %r1 = insertelement <8 x float> %r0, float %c1, i32 1471 %r2 = insertelement <8 x float> %r1, float %c2, i32 2472 %r3 = insertelement <8 x float> %r2, float %c3, i32 3473 %r4 = insertelement <8 x float> %r3, float %c4, i32 4474 %r5 = insertelement <8 x float> %r4, float %c5, i32 5475 %r6 = insertelement <8 x float> %r5, float %c6, i32 6476 %r7 = insertelement <8 x float> %r6, float %c7, i32 7477 ret <8 x float> %r7478}479 480;481; 512-bit Vectors482;483 484define <8 x double> @buildvector_add_8f64(<8 x double> %a, <8 x double> %b) {485; CHECK-LABEL: @buildvector_add_8f64(486; CHECK-NEXT: [[TMP1:%.*]] = fadd <8 x double> [[A:%.*]], [[B:%.*]]487; CHECK-NEXT: ret <8 x double> [[TMP1]]488;489 %a0 = extractelement <8 x double> %a, i32 0490 %a1 = extractelement <8 x double> %a, i32 1491 %a2 = extractelement <8 x double> %a, i32 2492 %a3 = extractelement <8 x double> %a, i32 3493 %a4 = extractelement <8 x double> %a, i32 4494 %a5 = extractelement <8 x double> %a, i32 5495 %a6 = extractelement <8 x double> %a, i32 6496 %a7 = extractelement <8 x double> %a, i32 7497 %b0 = extractelement <8 x double> %b, i32 0498 %b1 = extractelement <8 x double> %b, i32 1499 %b2 = extractelement <8 x double> %b, i32 2500 %b3 = extractelement <8 x double> %b, i32 3501 %b4 = extractelement <8 x double> %b, i32 4502 %b5 = extractelement <8 x double> %b, i32 5503 %b6 = extractelement <8 x double> %b, i32 6504 %b7 = extractelement <8 x double> %b, i32 7505 %c0 = fadd double %a0, %b0506 %c1 = fadd double %a1, %b1507 %c2 = fadd double %a2, %b2508 %c3 = fadd double %a3, %b3509 %c4 = fadd double %a4, %b4510 %c5 = fadd double %a5, %b5511 %c6 = fadd double %a6, %b6512 %c7 = fadd double %a7, %b7513 %r0 = insertelement <8 x double> undef, double %c0, i32 0514 %r1 = insertelement <8 x double> %r0, double %c1, i32 1515 %r2 = insertelement <8 x double> %r1, double %c2, i32 2516 %r3 = insertelement <8 x double> %r2, double %c3, i32 3517 %r4 = insertelement <8 x double> %r3, double %c4, i32 4518 %r5 = insertelement <8 x double> %r4, double %c5, i32 5519 %r6 = insertelement <8 x double> %r5, double %c6, i32 6520 %r7 = insertelement <8 x double> %r6, double %c7, i32 7521 ret <8 x double> %r7522}523 524define <8 x double> @buildvector_sub_8f64(<8 x double> %a, <8 x double> %b) {525; CHECK-LABEL: @buildvector_sub_8f64(526; CHECK-NEXT: [[TMP1:%.*]] = fsub <8 x double> [[A:%.*]], [[B:%.*]]527; CHECK-NEXT: ret <8 x double> [[TMP1]]528;529 %a0 = extractelement <8 x double> %a, i32 0530 %a1 = extractelement <8 x double> %a, i32 1531 %a2 = extractelement <8 x double> %a, i32 2532 %a3 = extractelement <8 x double> %a, i32 3533 %a4 = extractelement <8 x double> %a, i32 4534 %a5 = extractelement <8 x double> %a, i32 5535 %a6 = extractelement <8 x double> %a, i32 6536 %a7 = extractelement <8 x double> %a, i32 7537 %b0 = extractelement <8 x double> %b, i32 0538 %b1 = extractelement <8 x double> %b, i32 1539 %b2 = extractelement <8 x double> %b, i32 2540 %b3 = extractelement <8 x double> %b, i32 3541 %b4 = extractelement <8 x double> %b, i32 4542 %b5 = extractelement <8 x double> %b, i32 5543 %b6 = extractelement <8 x double> %b, i32 6544 %b7 = extractelement <8 x double> %b, i32 7545 %c0 = fsub double %a0, %b0546 %c1 = fsub double %a1, %b1547 %c2 = fsub double %a2, %b2548 %c3 = fsub double %a3, %b3549 %c4 = fsub double %a4, %b4550 %c5 = fsub double %a5, %b5551 %c6 = fsub double %a6, %b6552 %c7 = fsub double %a7, %b7553 %r0 = insertelement <8 x double> undef, double %c0, i32 0554 %r1 = insertelement <8 x double> %r0, double %c1, i32 1555 %r2 = insertelement <8 x double> %r1, double %c2, i32 2556 %r3 = insertelement <8 x double> %r2, double %c3, i32 3557 %r4 = insertelement <8 x double> %r3, double %c4, i32 4558 %r5 = insertelement <8 x double> %r4, double %c5, i32 5559 %r6 = insertelement <8 x double> %r5, double %c6, i32 6560 %r7 = insertelement <8 x double> %r6, double %c7, i32 7561 ret <8 x double> %r7562}563 564define <8 x double> @buildvector_mul_8f64(<8 x double> %a, <8 x double> %b) {565; CHECK-LABEL: @buildvector_mul_8f64(566; CHECK-NEXT: [[TMP1:%.*]] = fmul <8 x double> [[A:%.*]], [[B:%.*]]567; CHECK-NEXT: ret <8 x double> [[TMP1]]568;569 %a0 = extractelement <8 x double> %a, i32 0570 %a1 = extractelement <8 x double> %a, i32 1571 %a2 = extractelement <8 x double> %a, i32 2572 %a3 = extractelement <8 x double> %a, i32 3573 %a4 = extractelement <8 x double> %a, i32 4574 %a5 = extractelement <8 x double> %a, i32 5575 %a6 = extractelement <8 x double> %a, i32 6576 %a7 = extractelement <8 x double> %a, i32 7577 %b0 = extractelement <8 x double> %b, i32 0578 %b1 = extractelement <8 x double> %b, i32 1579 %b2 = extractelement <8 x double> %b, i32 2580 %b3 = extractelement <8 x double> %b, i32 3581 %b4 = extractelement <8 x double> %b, i32 4582 %b5 = extractelement <8 x double> %b, i32 5583 %b6 = extractelement <8 x double> %b, i32 6584 %b7 = extractelement <8 x double> %b, i32 7585 %c0 = fmul double %a0, %b0586 %c1 = fmul double %a1, %b1587 %c2 = fmul double %a2, %b2588 %c3 = fmul double %a3, %b3589 %c4 = fmul double %a4, %b4590 %c5 = fmul double %a5, %b5591 %c6 = fmul double %a6, %b6592 %c7 = fmul double %a7, %b7593 %r0 = insertelement <8 x double> undef, double %c0, i32 0594 %r1 = insertelement <8 x double> %r0, double %c1, i32 1595 %r2 = insertelement <8 x double> %r1, double %c2, i32 2596 %r3 = insertelement <8 x double> %r2, double %c3, i32 3597 %r4 = insertelement <8 x double> %r3, double %c4, i32 4598 %r5 = insertelement <8 x double> %r4, double %c5, i32 5599 %r6 = insertelement <8 x double> %r5, double %c6, i32 6600 %r7 = insertelement <8 x double> %r6, double %c7, i32 7601 ret <8 x double> %r7602}603 604define <8 x double> @buildvector_div_8f64(<8 x double> %a, <8 x double> %b) {605; SSE-LABEL: @buildvector_div_8f64(606; SSE-NEXT: [[TMP1:%.*]] = fdiv <8 x double> [[A:%.*]], [[B:%.*]]607; SSE-NEXT: ret <8 x double> [[TMP1]]608;609; SLM-LABEL: @buildvector_div_8f64(610; SLM-NEXT: [[TMP1:%.*]] = shufflevector <8 x double> [[A:%.*]], <8 x double> poison, <2 x i32> <i32 0, i32 1>611; SLM-NEXT: [[TMP2:%.*]] = shufflevector <8 x double> [[B:%.*]], <8 x double> poison, <2 x i32> <i32 0, i32 1>612; SLM-NEXT: [[TMP3:%.*]] = fdiv <2 x double> [[TMP1]], [[TMP2]]613; SLM-NEXT: [[TMP4:%.*]] = shufflevector <8 x double> [[A]], <8 x double> poison, <2 x i32> <i32 2, i32 3>614; SLM-NEXT: [[TMP5:%.*]] = shufflevector <8 x double> [[B]], <8 x double> poison, <2 x i32> <i32 2, i32 3>615; SLM-NEXT: [[TMP6:%.*]] = fdiv <2 x double> [[TMP4]], [[TMP5]]616; SLM-NEXT: [[TMP7:%.*]] = shufflevector <8 x double> [[A]], <8 x double> poison, <2 x i32> <i32 4, i32 5>617; SLM-NEXT: [[TMP8:%.*]] = shufflevector <8 x double> [[B]], <8 x double> poison, <2 x i32> <i32 4, i32 5>618; SLM-NEXT: [[TMP9:%.*]] = fdiv <2 x double> [[TMP7]], [[TMP8]]619; SLM-NEXT: [[TMP10:%.*]] = shufflevector <8 x double> [[A]], <8 x double> poison, <2 x i32> <i32 6, i32 7>620; SLM-NEXT: [[TMP11:%.*]] = shufflevector <8 x double> [[B]], <8 x double> poison, <2 x i32> <i32 6, i32 7>621; SLM-NEXT: [[TMP12:%.*]] = fdiv <2 x double> [[TMP10]], [[TMP11]]622; SLM-NEXT: [[TMP13:%.*]] = shufflevector <2 x double> [[TMP3]], <2 x double> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>623; SLM-NEXT: [[TMP14:%.*]] = shufflevector <2 x double> [[TMP6]], <2 x double> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>624; SLM-NEXT: [[R31:%.*]] = shufflevector <8 x double> [[TMP13]], <8 x double> [[TMP14]], <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 4, i32 5, i32 6, i32 7>625; SLM-NEXT: [[TMP15:%.*]] = shufflevector <2 x double> [[TMP9]], <2 x double> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>626; SLM-NEXT: [[R52:%.*]] = shufflevector <8 x double> [[R31]], <8 x double> [[TMP15]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 6, i32 7>627; SLM-NEXT: [[TMP16:%.*]] = shufflevector <2 x double> [[TMP12]], <2 x double> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>628; SLM-NEXT: [[R73:%.*]] = shufflevector <8 x double> [[R52]], <8 x double> [[TMP16]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9>629; SLM-NEXT: ret <8 x double> [[R73]]630;631; AVX-LABEL: @buildvector_div_8f64(632; AVX-NEXT: [[TMP1:%.*]] = fdiv <8 x double> [[A:%.*]], [[B:%.*]]633; AVX-NEXT: ret <8 x double> [[TMP1]]634;635; AVX512-LABEL: @buildvector_div_8f64(636; AVX512-NEXT: [[TMP1:%.*]] = fdiv <8 x double> [[A:%.*]], [[B:%.*]]637; AVX512-NEXT: ret <8 x double> [[TMP1]]638;639 %a0 = extractelement <8 x double> %a, i32 0640 %a1 = extractelement <8 x double> %a, i32 1641 %a2 = extractelement <8 x double> %a, i32 2642 %a3 = extractelement <8 x double> %a, i32 3643 %a4 = extractelement <8 x double> %a, i32 4644 %a5 = extractelement <8 x double> %a, i32 5645 %a6 = extractelement <8 x double> %a, i32 6646 %a7 = extractelement <8 x double> %a, i32 7647 %b0 = extractelement <8 x double> %b, i32 0648 %b1 = extractelement <8 x double> %b, i32 1649 %b2 = extractelement <8 x double> %b, i32 2650 %b3 = extractelement <8 x double> %b, i32 3651 %b4 = extractelement <8 x double> %b, i32 4652 %b5 = extractelement <8 x double> %b, i32 5653 %b6 = extractelement <8 x double> %b, i32 6654 %b7 = extractelement <8 x double> %b, i32 7655 %c0 = fdiv double %a0, %b0656 %c1 = fdiv double %a1, %b1657 %c2 = fdiv double %a2, %b2658 %c3 = fdiv double %a3, %b3659 %c4 = fdiv double %a4, %b4660 %c5 = fdiv double %a5, %b5661 %c6 = fdiv double %a6, %b6662 %c7 = fdiv double %a7, %b7663 %r0 = insertelement <8 x double> undef, double %c0, i32 0664 %r1 = insertelement <8 x double> %r0, double %c1, i32 1665 %r2 = insertelement <8 x double> %r1, double %c2, i32 2666 %r3 = insertelement <8 x double> %r2, double %c3, i32 3667 %r4 = insertelement <8 x double> %r3, double %c4, i32 4668 %r5 = insertelement <8 x double> %r4, double %c5, i32 5669 %r6 = insertelement <8 x double> %r5, double %c6, i32 6670 %r7 = insertelement <8 x double> %r6, double %c7, i32 7671 ret <8 x double> %r7672}673 674define <16 x float> @buildvector_add_16f32(<16 x float> %a, <16 x float> %b) {675; CHECK-LABEL: @buildvector_add_16f32(676; CHECK-NEXT: [[TMP1:%.*]] = fadd <16 x float> [[A:%.*]], [[B:%.*]]677; CHECK-NEXT: ret <16 x float> [[TMP1]]678;679 %a0 = extractelement <16 x float> %a, i32 0680 %a1 = extractelement <16 x float> %a, i32 1681 %a2 = extractelement <16 x float> %a, i32 2682 %a3 = extractelement <16 x float> %a, i32 3683 %a4 = extractelement <16 x float> %a, i32 4684 %a5 = extractelement <16 x float> %a, i32 5685 %a6 = extractelement <16 x float> %a, i32 6686 %a7 = extractelement <16 x float> %a, i32 7687 %a8 = extractelement <16 x float> %a, i32 8688 %a9 = extractelement <16 x float> %a, i32 9689 %a10 = extractelement <16 x float> %a, i32 10690 %a11 = extractelement <16 x float> %a, i32 11691 %a12 = extractelement <16 x float> %a, i32 12692 %a13 = extractelement <16 x float> %a, i32 13693 %a14 = extractelement <16 x float> %a, i32 14694 %a15 = extractelement <16 x float> %a, i32 15695 %b0 = extractelement <16 x float> %b, i32 0696 %b1 = extractelement <16 x float> %b, i32 1697 %b2 = extractelement <16 x float> %b, i32 2698 %b3 = extractelement <16 x float> %b, i32 3699 %b4 = extractelement <16 x float> %b, i32 4700 %b5 = extractelement <16 x float> %b, i32 5701 %b6 = extractelement <16 x float> %b, i32 6702 %b7 = extractelement <16 x float> %b, i32 7703 %b8 = extractelement <16 x float> %b, i32 8704 %b9 = extractelement <16 x float> %b, i32 9705 %b10 = extractelement <16 x float> %b, i32 10706 %b11 = extractelement <16 x float> %b, i32 11707 %b12 = extractelement <16 x float> %b, i32 12708 %b13 = extractelement <16 x float> %b, i32 13709 %b14 = extractelement <16 x float> %b, i32 14710 %b15 = extractelement <16 x float> %b, i32 15711 %c0 = fadd float %a0 , %b0712 %c1 = fadd float %a1 , %b1713 %c2 = fadd float %a2 , %b2714 %c3 = fadd float %a3 , %b3715 %c4 = fadd float %a4 , %b4716 %c5 = fadd float %a5 , %b5717 %c6 = fadd float %a6 , %b6718 %c7 = fadd float %a7 , %b7719 %c8 = fadd float %a8 , %b8720 %c9 = fadd float %a9 , %b9721 %c10 = fadd float %a10, %b10722 %c11 = fadd float %a11, %b11723 %c12 = fadd float %a12, %b12724 %c13 = fadd float %a13, %b13725 %c14 = fadd float %a14, %b14726 %c15 = fadd float %a15, %b15727 %r0 = insertelement <16 x float> undef, float %c0 , i32 0728 %r1 = insertelement <16 x float> %r0 , float %c1 , i32 1729 %r2 = insertelement <16 x float> %r1 , float %c2 , i32 2730 %r3 = insertelement <16 x float> %r2 , float %c3 , i32 3731 %r4 = insertelement <16 x float> %r3 , float %c4 , i32 4732 %r5 = insertelement <16 x float> %r4 , float %c5 , i32 5733 %r6 = insertelement <16 x float> %r5 , float %c6 , i32 6734 %r7 = insertelement <16 x float> %r6 , float %c7 , i32 7735 %r8 = insertelement <16 x float> %r7 , float %c8 , i32 8736 %r9 = insertelement <16 x float> %r8 , float %c9 , i32 9737 %r10 = insertelement <16 x float> %r9 , float %c10, i32 10738 %r11 = insertelement <16 x float> %r10, float %c11, i32 11739 %r12 = insertelement <16 x float> %r11, float %c12, i32 12740 %r13 = insertelement <16 x float> %r12, float %c13, i32 13741 %r14 = insertelement <16 x float> %r13, float %c14, i32 14742 %r15 = insertelement <16 x float> %r14, float %c15, i32 15743 ret <16 x float> %r15744}745 746define <16 x float> @buildvector_sub_16f32(<16 x float> %a, <16 x float> %b) {747; CHECK-LABEL: @buildvector_sub_16f32(748; CHECK-NEXT: [[TMP1:%.*]] = fsub <16 x float> [[A:%.*]], [[B:%.*]]749; CHECK-NEXT: ret <16 x float> [[TMP1]]750;751 %a0 = extractelement <16 x float> %a, i32 0752 %a1 = extractelement <16 x float> %a, i32 1753 %a2 = extractelement <16 x float> %a, i32 2754 %a3 = extractelement <16 x float> %a, i32 3755 %a4 = extractelement <16 x float> %a, i32 4756 %a5 = extractelement <16 x float> %a, i32 5757 %a6 = extractelement <16 x float> %a, i32 6758 %a7 = extractelement <16 x float> %a, i32 7759 %a8 = extractelement <16 x float> %a, i32 8760 %a9 = extractelement <16 x float> %a, i32 9761 %a10 = extractelement <16 x float> %a, i32 10762 %a11 = extractelement <16 x float> %a, i32 11763 %a12 = extractelement <16 x float> %a, i32 12764 %a13 = extractelement <16 x float> %a, i32 13765 %a14 = extractelement <16 x float> %a, i32 14766 %a15 = extractelement <16 x float> %a, i32 15767 %b0 = extractelement <16 x float> %b, i32 0768 %b1 = extractelement <16 x float> %b, i32 1769 %b2 = extractelement <16 x float> %b, i32 2770 %b3 = extractelement <16 x float> %b, i32 3771 %b4 = extractelement <16 x float> %b, i32 4772 %b5 = extractelement <16 x float> %b, i32 5773 %b6 = extractelement <16 x float> %b, i32 6774 %b7 = extractelement <16 x float> %b, i32 7775 %b8 = extractelement <16 x float> %b, i32 8776 %b9 = extractelement <16 x float> %b, i32 9777 %b10 = extractelement <16 x float> %b, i32 10778 %b11 = extractelement <16 x float> %b, i32 11779 %b12 = extractelement <16 x float> %b, i32 12780 %b13 = extractelement <16 x float> %b, i32 13781 %b14 = extractelement <16 x float> %b, i32 14782 %b15 = extractelement <16 x float> %b, i32 15783 %c0 = fsub float %a0 , %b0784 %c1 = fsub float %a1 , %b1785 %c2 = fsub float %a2 , %b2786 %c3 = fsub float %a3 , %b3787 %c4 = fsub float %a4 , %b4788 %c5 = fsub float %a5 , %b5789 %c6 = fsub float %a6 , %b6790 %c7 = fsub float %a7 , %b7791 %c8 = fsub float %a8 , %b8792 %c9 = fsub float %a9 , %b9793 %c10 = fsub float %a10, %b10794 %c11 = fsub float %a11, %b11795 %c12 = fsub float %a12, %b12796 %c13 = fsub float %a13, %b13797 %c14 = fsub float %a14, %b14798 %c15 = fsub float %a15, %b15799 %r0 = insertelement <16 x float> undef, float %c0 , i32 0800 %r1 = insertelement <16 x float> %r0 , float %c1 , i32 1801 %r2 = insertelement <16 x float> %r1 , float %c2 , i32 2802 %r3 = insertelement <16 x float> %r2 , float %c3 , i32 3803 %r4 = insertelement <16 x float> %r3 , float %c4 , i32 4804 %r5 = insertelement <16 x float> %r4 , float %c5 , i32 5805 %r6 = insertelement <16 x float> %r5 , float %c6 , i32 6806 %r7 = insertelement <16 x float> %r6 , float %c7 , i32 7807 %r8 = insertelement <16 x float> %r7 , float %c8 , i32 8808 %r9 = insertelement <16 x float> %r8 , float %c9 , i32 9809 %r10 = insertelement <16 x float> %r9 , float %c10, i32 10810 %r11 = insertelement <16 x float> %r10, float %c11, i32 11811 %r12 = insertelement <16 x float> %r11, float %c12, i32 12812 %r13 = insertelement <16 x float> %r12, float %c13, i32 13813 %r14 = insertelement <16 x float> %r13, float %c14, i32 14814 %r15 = insertelement <16 x float> %r14, float %c15, i32 15815 ret <16 x float> %r15816}817 818define <16 x float> @buildvector_mul_16f32(<16 x float> %a, <16 x float> %b) {819; CHECK-LABEL: @buildvector_mul_16f32(820; CHECK-NEXT: [[TMP1:%.*]] = fmul <16 x float> [[A:%.*]], [[B:%.*]]821; CHECK-NEXT: ret <16 x float> [[TMP1]]822;823 %a0 = extractelement <16 x float> %a, i32 0824 %a1 = extractelement <16 x float> %a, i32 1825 %a2 = extractelement <16 x float> %a, i32 2826 %a3 = extractelement <16 x float> %a, i32 3827 %a4 = extractelement <16 x float> %a, i32 4828 %a5 = extractelement <16 x float> %a, i32 5829 %a6 = extractelement <16 x float> %a, i32 6830 %a7 = extractelement <16 x float> %a, i32 7831 %a8 = extractelement <16 x float> %a, i32 8832 %a9 = extractelement <16 x float> %a, i32 9833 %a10 = extractelement <16 x float> %a, i32 10834 %a11 = extractelement <16 x float> %a, i32 11835 %a12 = extractelement <16 x float> %a, i32 12836 %a13 = extractelement <16 x float> %a, i32 13837 %a14 = extractelement <16 x float> %a, i32 14838 %a15 = extractelement <16 x float> %a, i32 15839 %b0 = extractelement <16 x float> %b, i32 0840 %b1 = extractelement <16 x float> %b, i32 1841 %b2 = extractelement <16 x float> %b, i32 2842 %b3 = extractelement <16 x float> %b, i32 3843 %b4 = extractelement <16 x float> %b, i32 4844 %b5 = extractelement <16 x float> %b, i32 5845 %b6 = extractelement <16 x float> %b, i32 6846 %b7 = extractelement <16 x float> %b, i32 7847 %b8 = extractelement <16 x float> %b, i32 8848 %b9 = extractelement <16 x float> %b, i32 9849 %b10 = extractelement <16 x float> %b, i32 10850 %b11 = extractelement <16 x float> %b, i32 11851 %b12 = extractelement <16 x float> %b, i32 12852 %b13 = extractelement <16 x float> %b, i32 13853 %b14 = extractelement <16 x float> %b, i32 14854 %b15 = extractelement <16 x float> %b, i32 15855 %c0 = fmul float %a0 , %b0856 %c1 = fmul float %a1 , %b1857 %c2 = fmul float %a2 , %b2858 %c3 = fmul float %a3 , %b3859 %c4 = fmul float %a4 , %b4860 %c5 = fmul float %a5 , %b5861 %c6 = fmul float %a6 , %b6862 %c7 = fmul float %a7 , %b7863 %c8 = fmul float %a8 , %b8864 %c9 = fmul float %a9 , %b9865 %c10 = fmul float %a10, %b10866 %c11 = fmul float %a11, %b11867 %c12 = fmul float %a12, %b12868 %c13 = fmul float %a13, %b13869 %c14 = fmul float %a14, %b14870 %c15 = fmul float %a15, %b15871 %r0 = insertelement <16 x float> undef, float %c0 , i32 0872 %r1 = insertelement <16 x float> %r0 , float %c1 , i32 1873 %r2 = insertelement <16 x float> %r1 , float %c2 , i32 2874 %r3 = insertelement <16 x float> %r2 , float %c3 , i32 3875 %r4 = insertelement <16 x float> %r3 , float %c4 , i32 4876 %r5 = insertelement <16 x float> %r4 , float %c5 , i32 5877 %r6 = insertelement <16 x float> %r5 , float %c6 , i32 6878 %r7 = insertelement <16 x float> %r6 , float %c7 , i32 7879 %r8 = insertelement <16 x float> %r7 , float %c8 , i32 8880 %r9 = insertelement <16 x float> %r8 , float %c9 , i32 9881 %r10 = insertelement <16 x float> %r9 , float %c10, i32 10882 %r11 = insertelement <16 x float> %r10, float %c11, i32 11883 %r12 = insertelement <16 x float> %r11, float %c12, i32 12884 %r13 = insertelement <16 x float> %r12, float %c13, i32 13885 %r14 = insertelement <16 x float> %r13, float %c14, i32 14886 %r15 = insertelement <16 x float> %r14, float %c15, i32 15887 ret <16 x float> %r15888}889 890define <16 x float> @buildvector_div_16f32(<16 x float> %a, <16 x float> %b) {891; CHECK-LABEL: @buildvector_div_16f32(892; CHECK-NEXT: [[TMP1:%.*]] = fdiv <16 x float> [[A:%.*]], [[B:%.*]]893; CHECK-NEXT: ret <16 x float> [[TMP1]]894;895 %a0 = extractelement <16 x float> %a, i32 0896 %a1 = extractelement <16 x float> %a, i32 1897 %a2 = extractelement <16 x float> %a, i32 2898 %a3 = extractelement <16 x float> %a, i32 3899 %a4 = extractelement <16 x float> %a, i32 4900 %a5 = extractelement <16 x float> %a, i32 5901 %a6 = extractelement <16 x float> %a, i32 6902 %a7 = extractelement <16 x float> %a, i32 7903 %a8 = extractelement <16 x float> %a, i32 8904 %a9 = extractelement <16 x float> %a, i32 9905 %a10 = extractelement <16 x float> %a, i32 10906 %a11 = extractelement <16 x float> %a, i32 11907 %a12 = extractelement <16 x float> %a, i32 12908 %a13 = extractelement <16 x float> %a, i32 13909 %a14 = extractelement <16 x float> %a, i32 14910 %a15 = extractelement <16 x float> %a, i32 15911 %b0 = extractelement <16 x float> %b, i32 0912 %b1 = extractelement <16 x float> %b, i32 1913 %b2 = extractelement <16 x float> %b, i32 2914 %b3 = extractelement <16 x float> %b, i32 3915 %b4 = extractelement <16 x float> %b, i32 4916 %b5 = extractelement <16 x float> %b, i32 5917 %b6 = extractelement <16 x float> %b, i32 6918 %b7 = extractelement <16 x float> %b, i32 7919 %b8 = extractelement <16 x float> %b, i32 8920 %b9 = extractelement <16 x float> %b, i32 9921 %b10 = extractelement <16 x float> %b, i32 10922 %b11 = extractelement <16 x float> %b, i32 11923 %b12 = extractelement <16 x float> %b, i32 12924 %b13 = extractelement <16 x float> %b, i32 13925 %b14 = extractelement <16 x float> %b, i32 14926 %b15 = extractelement <16 x float> %b, i32 15927 %c0 = fdiv float %a0 , %b0928 %c1 = fdiv float %a1 , %b1929 %c2 = fdiv float %a2 , %b2930 %c3 = fdiv float %a3 , %b3931 %c4 = fdiv float %a4 , %b4932 %c5 = fdiv float %a5 , %b5933 %c6 = fdiv float %a6 , %b6934 %c7 = fdiv float %a7 , %b7935 %c8 = fdiv float %a8 , %b8936 %c9 = fdiv float %a9 , %b9937 %c10 = fdiv float %a10, %b10938 %c11 = fdiv float %a11, %b11939 %c12 = fdiv float %a12, %b12940 %c13 = fdiv float %a13, %b13941 %c14 = fdiv float %a14, %b14942 %c15 = fdiv float %a15, %b15943 %r0 = insertelement <16 x float> undef, float %c0 , i32 0944 %r1 = insertelement <16 x float> %r0 , float %c1 , i32 1945 %r2 = insertelement <16 x float> %r1 , float %c2 , i32 2946 %r3 = insertelement <16 x float> %r2 , float %c3 , i32 3947 %r4 = insertelement <16 x float> %r3 , float %c4 , i32 4948 %r5 = insertelement <16 x float> %r4 , float %c5 , i32 5949 %r6 = insertelement <16 x float> %r5 , float %c6 , i32 6950 %r7 = insertelement <16 x float> %r6 , float %c7 , i32 7951 %r8 = insertelement <16 x float> %r7 , float %c8 , i32 8952 %r9 = insertelement <16 x float> %r8 , float %c9 , i32 9953 %r10 = insertelement <16 x float> %r9 , float %c10, i32 10954 %r11 = insertelement <16 x float> %r10, float %c11, i32 11955 %r12 = insertelement <16 x float> %r11, float %c12, i32 12956 %r13 = insertelement <16 x float> %r12, float %c13, i32 13957 %r14 = insertelement <16 x float> %r13, float %c14, i32 14958 %r15 = insertelement <16 x float> %r14, float %c15, i32 15959 ret <16 x float> %r15960}961