brintos

brintos / llvm-project-archived public Read only

0
0
Text · 41.9 KiB · 8b8bc71 Raw
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