4153 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefixes=SSE3; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX1OR2,AVX14; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX1OR2,AVX25; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefixes=AVX512,AVX512F6; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx512vl | FileCheck %s --check-prefixes=AVX512,AVX512VL7 8;9; Basic matrix multiply tests based on the pattern:10;11; using matrix_ty = float __attribute__((matrix_type(2,2)));12; matrix_ty test_mul2x2(matrix_ty a0, matrix_ty a1) nounwind {13; return a0 * a1;14; }15;16 17define <4 x float> @test_mul2x2_f32(<4 x float> %a0, <4 x float> %a1) nounwind {18; SSE-LABEL: test_mul2x2_f32:19; SSE: # %bb.0: # %entry20; SSE-NEXT: movaps %xmm1, %xmm221; SSE-NEXT: unpcklps {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]22; SSE-NEXT: mulps %xmm0, %xmm223; SSE-NEXT: movaps %xmm1, %xmm324; SSE-NEXT: unpckhps {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]25; SSE-NEXT: mulps %xmm0, %xmm326; SSE-NEXT: movaps %xmm0, %xmm427; SSE-NEXT: unpckhpd {{.*#+}} xmm4 = xmm4[1],xmm0[1]28; SSE-NEXT: movaps %xmm1, %xmm029; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[1,1]30; SSE-NEXT: mulps %xmm4, %xmm031; SSE-NEXT: addps %xmm2, %xmm032; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3,3,3]33; SSE-NEXT: mulps %xmm4, %xmm134; SSE-NEXT: addps %xmm3, %xmm135; SSE-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]36; SSE-NEXT: retq37;38; AVX1-LABEL: test_mul2x2_f32:39; AVX1: # %bb.0: # %entry40; AVX1-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1,0]41; AVX1-NEXT: vmovsldup {{.*#+}} xmm3 = xmm1[0,0,2,2]42; AVX1-NEXT: vmulps %xmm3, %xmm0, %xmm343; AVX1-NEXT: vmovshdup {{.*#+}} xmm4 = xmm1[1,1,3,3]44; AVX1-NEXT: vmulps %xmm4, %xmm2, %xmm445; AVX1-NEXT: vaddps %xmm4, %xmm3, %xmm346; AVX1-NEXT: vshufps {{.*#+}} xmm4 = xmm1[2,2,2,2]47; AVX1-NEXT: vmulps %xmm4, %xmm0, %xmm048; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm1[3,3,3,3]49; AVX1-NEXT: vmulps %xmm1, %xmm2, %xmm150; AVX1-NEXT: vaddps %xmm1, %xmm0, %xmm051; AVX1-NEXT: vmovlhps {{.*#+}} xmm0 = xmm3[0],xmm0[0]52; AVX1-NEXT: retq53;54; AVX2-LABEL: test_mul2x2_f32:55; AVX2: # %bb.0: # %entry56; AVX2-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1,0]57; AVX2-NEXT: vbroadcastss %xmm1, %xmm358; AVX2-NEXT: vmulps %xmm3, %xmm0, %xmm359; AVX2-NEXT: vmovshdup {{.*#+}} xmm4 = xmm1[1,1,3,3]60; AVX2-NEXT: vmulps %xmm4, %xmm2, %xmm461; AVX2-NEXT: vaddps %xmm4, %xmm3, %xmm362; AVX2-NEXT: vshufps {{.*#+}} xmm4 = xmm1[2,2,2,2]63; AVX2-NEXT: vmulps %xmm4, %xmm0, %xmm064; AVX2-NEXT: vshufps {{.*#+}} xmm1 = xmm1[3,3,3,3]65; AVX2-NEXT: vmulps %xmm1, %xmm2, %xmm166; AVX2-NEXT: vaddps %xmm1, %xmm0, %xmm067; AVX2-NEXT: vmovlhps {{.*#+}} xmm0 = xmm3[0],xmm0[0]68; AVX2-NEXT: retq69;70; AVX512-LABEL: test_mul2x2_f32:71; AVX512: # %bb.0: # %entry72; AVX512-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1,0]73; AVX512-NEXT: vbroadcastss %xmm1, %xmm374; AVX512-NEXT: vmulps %xmm3, %xmm0, %xmm375; AVX512-NEXT: vmovshdup {{.*#+}} xmm4 = xmm1[1,1,3,3]76; AVX512-NEXT: vmulps %xmm4, %xmm2, %xmm477; AVX512-NEXT: vaddps %xmm4, %xmm3, %xmm378; AVX512-NEXT: vshufps {{.*#+}} xmm4 = xmm1[2,2,2,2]79; AVX512-NEXT: vmulps %xmm4, %xmm0, %xmm080; AVX512-NEXT: vshufps {{.*#+}} xmm1 = xmm1[3,3,3,3]81; AVX512-NEXT: vmulps %xmm1, %xmm2, %xmm182; AVX512-NEXT: vaddps %xmm1, %xmm0, %xmm083; AVX512-NEXT: vmovlhps {{.*#+}} xmm0 = xmm3[0],xmm0[0]84; AVX512-NEXT: retq85entry:86 %split = shufflevector <4 x float> %a0, <4 x float> poison, <2 x i32> <i32 0, i32 1>87 %split1 = shufflevector <4 x float> %a0, <4 x float> poison, <2 x i32> <i32 2, i32 3>88 %splat.splat = shufflevector <4 x float> %a1, <4 x float> undef, <2 x i32> zeroinitializer89 %0 = fmul <2 x float> %split, %splat.splat90 %splat.splat6 = shufflevector <4 x float> %a1, <4 x float> undef, <2 x i32> <i32 1, i32 1>91 %1 = fmul <2 x float> %split1, %splat.splat692 %2 = fadd <2 x float> %0, %193 %splat.splat9 = shufflevector <4 x float> %a1, <4 x float> undef, <2 x i32> <i32 2, i32 2>94 %3 = fmul <2 x float> %split, %splat.splat995 %splat.splat12 = shufflevector <4 x float> %a1, <4 x float> undef, <2 x i32> <i32 3, i32 3>96 %4 = fmul <2 x float> %split1, %splat.splat1297 %5 = fadd <2 x float> %3, %498 %6 = shufflevector <2 x float> %2, <2 x float> %5, <4 x i32> <i32 0, i32 1, i32 2, i32 3>99 ret <4 x float> %6100}101 102define <4 x double> @test_mul2x2_f64(<4 x double> %a0, <4 x double> %a1) nounwind {103; SSE-LABEL: test_mul2x2_f64:104; SSE: # %bb.0: # %entry105; SSE-NEXT: movapd %xmm2, %xmm4106; SSE-NEXT: unpcklpd {{.*#+}} xmm4 = xmm4[0],xmm2[0]107; SSE-NEXT: mulpd %xmm0, %xmm4108; SSE-NEXT: unpckhpd {{.*#+}} xmm2 = xmm2[1,1]109; SSE-NEXT: mulpd %xmm1, %xmm2110; SSE-NEXT: addpd %xmm2, %xmm4111; SSE-NEXT: movapd %xmm3, %xmm2112; SSE-NEXT: unpcklpd {{.*#+}} xmm2 = xmm2[0],xmm3[0]113; SSE-NEXT: mulpd %xmm0, %xmm2114; SSE-NEXT: unpckhpd {{.*#+}} xmm3 = xmm3[1,1]115; SSE-NEXT: mulpd %xmm3, %xmm1116; SSE-NEXT: addpd %xmm2, %xmm1117; SSE-NEXT: movapd %xmm4, %xmm0118; SSE-NEXT: retq119;120; AVX1-LABEL: test_mul2x2_f64:121; AVX1: # %bb.0: # %entry122; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,2,3]123; AVX1-NEXT: vshufpd {{.*#+}} ymm3 = ymm1[1,1,3,3]124; AVX1-NEXT: vmulpd %ymm3, %ymm2, %ymm2125; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0126; AVX1-NEXT: vmovddup {{.*#+}} ymm1 = ymm1[0,0,2,2]127; AVX1-NEXT: vmulpd %ymm1, %ymm0, %ymm0128; AVX1-NEXT: vaddpd %ymm2, %ymm0, %ymm0129; AVX1-NEXT: retq130;131; AVX2-LABEL: test_mul2x2_f64:132; AVX2: # %bb.0: # %entry133; AVX2-NEXT: vshufpd {{.*#+}} ymm2 = ymm1[1,1,3,3]134; AVX2-NEXT: vpermpd {{.*#+}} ymm3 = ymm0[2,3,2,3]135; AVX2-NEXT: vmulpd %ymm2, %ymm3, %ymm2136; AVX2-NEXT: vmovddup {{.*#+}} ymm1 = ymm1[0,0,2,2]137; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]138; AVX2-NEXT: vmulpd %ymm1, %ymm0, %ymm0139; AVX2-NEXT: vaddpd %ymm2, %ymm0, %ymm0140; AVX2-NEXT: retq141;142; AVX512-LABEL: test_mul2x2_f64:143; AVX512: # %bb.0: # %entry144; AVX512-NEXT: vshufpd {{.*#+}} ymm2 = ymm1[1,1,3,3]145; AVX512-NEXT: vpermpd {{.*#+}} ymm3 = ymm0[2,3,2,3]146; AVX512-NEXT: vmulpd %ymm2, %ymm3, %ymm2147; AVX512-NEXT: vmovddup {{.*#+}} ymm1 = ymm1[0,0,2,2]148; AVX512-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,0,1]149; AVX512-NEXT: vmulpd %ymm1, %ymm0, %ymm0150; AVX512-NEXT: vaddpd %ymm2, %ymm0, %ymm0151; AVX512-NEXT: retq152entry:153 %split = shufflevector <4 x double> %a0, <4 x double> poison, <2 x i32> <i32 0, i32 1>154 %split1 = shufflevector <4 x double> %a0, <4 x double> poison, <2 x i32> <i32 2, i32 3>155 %splat.splat = shufflevector <4 x double> %a1, <4 x double> undef, <2 x i32> zeroinitializer156 %0 = fmul <2 x double> %split, %splat.splat157 %splat.splat6 = shufflevector <4 x double> %a1, <4 x double> undef, <2 x i32> <i32 1, i32 1>158 %1 = fmul <2 x double> %split1, %splat.splat6159 %2 = fadd <2 x double> %0, %1160 %splat.splat9 = shufflevector <4 x double> %a1, <4 x double> undef, <2 x i32> <i32 2, i32 2>161 %3 = fmul <2 x double> %split, %splat.splat9162 %splat.splat12 = shufflevector <4 x double> %a1, <4 x double> undef, <2 x i32> <i32 3, i32 3>163 %4 = fmul <2 x double> %split1, %splat.splat12164 %5 = fadd <2 x double> %3, %4165 %6 = shufflevector <2 x double> %2, <2 x double> %5, <4 x i32> <i32 0, i32 1, i32 2, i32 3>166 ret <4 x double> %6167}168 169define <9 x float> @test_mul3x3_f32(<9 x float> %a0, <9 x float> %a1) nounwind {170; SSE-LABEL: test_mul3x3_f32:171; SSE: # %bb.0: # %entry172; SSE-NEXT: movq %rdi, %rax173; SSE-NEXT: movss {{.*#+}} xmm8 = mem[0],zero,zero,zero174; SSE-NEXT: movss {{.*#+}} xmm10 = mem[0],zero,zero,zero175; SSE-NEXT: movss {{.*#+}} xmm9 = mem[0],zero,zero,zero176; SSE-NEXT: movss {{.*#+}} xmm11 = mem[0],zero,zero,zero177; SSE-NEXT: movss {{.*#+}} xmm12 = mem[0],zero,zero,zero178; SSE-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]179; SSE-NEXT: movaps %xmm2, %xmm13180; SSE-NEXT: mulss %xmm12, %xmm13181; SSE-NEXT: unpcklps {{.*#+}} xmm12 = xmm12[0,0,1,1]182; SSE-NEXT: mulps %xmm0, %xmm12183; SSE-NEXT: unpcklps {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]184; SSE-NEXT: movaps %xmm5, %xmm1185; SSE-NEXT: mulss %xmm11, %xmm1186; SSE-NEXT: unpcklps {{.*#+}} xmm11 = xmm11[0,0,1,1]187; SSE-NEXT: mulps %xmm3, %xmm11188; SSE-NEXT: addps %xmm12, %xmm11189; SSE-NEXT: movss {{.*#+}} xmm4 = mem[0],zero,zero,zero190; SSE-NEXT: unpcklps {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[1],xmm7[1]191; SSE-NEXT: movaps %xmm9, %xmm7192; SSE-NEXT: mulss %xmm4, %xmm7193; SSE-NEXT: unpcklps {{.*#+}} xmm4 = xmm4[0,0,1,1]194; SSE-NEXT: mulps %xmm6, %xmm4195; SSE-NEXT: addps %xmm11, %xmm4196; SSE-NEXT: movss {{.*#+}} xmm11 = mem[0],zero,zero,zero197; SSE-NEXT: addss %xmm13, %xmm1198; SSE-NEXT: addss %xmm7, %xmm1199; SSE-NEXT: movaps %xmm2, %xmm7200; SSE-NEXT: mulss %xmm11, %xmm7201; SSE-NEXT: unpcklps {{.*#+}} xmm11 = xmm11[0,0,1,1]202; SSE-NEXT: mulps %xmm0, %xmm11203; SSE-NEXT: movaps %xmm5, %xmm12204; SSE-NEXT: mulss %xmm10, %xmm12205; SSE-NEXT: unpcklps {{.*#+}} xmm10 = xmm10[0,0,1,1]206; SSE-NEXT: mulps %xmm3, %xmm10207; SSE-NEXT: addps %xmm11, %xmm10208; SSE-NEXT: movaps %xmm9, %xmm11209; SSE-NEXT: mulss %xmm8, %xmm11210; SSE-NEXT: unpcklps {{.*#+}} xmm8 = xmm8[0,0,1,1]211; SSE-NEXT: mulps %xmm6, %xmm8212; SSE-NEXT: addps %xmm10, %xmm8213; SSE-NEXT: addss %xmm7, %xmm12214; SSE-NEXT: addss %xmm11, %xmm12215; SSE-NEXT: movaps %xmm8, %xmm7216; SSE-NEXT: movlhps {{.*#+}} xmm7 = xmm7[0],xmm12[0]217; SSE-NEXT: movss {{.*#+}} xmm10 = mem[0],zero,zero,zero218; SSE-NEXT: mulss %xmm10, %xmm2219; SSE-NEXT: unpcklps {{.*#+}} xmm10 = xmm10[0,0,1,1]220; SSE-NEXT: mulps %xmm0, %xmm10221; SSE-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero222; SSE-NEXT: mulss %xmm0, %xmm5223; SSE-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0,0,1,1]224; SSE-NEXT: mulps %xmm3, %xmm0225; SSE-NEXT: addps %xmm10, %xmm0226; SSE-NEXT: movss {{.*#+}} xmm3 = mem[0],zero,zero,zero227; SSE-NEXT: mulss %xmm3, %xmm9228; SSE-NEXT: unpcklps {{.*#+}} xmm3 = xmm3[0,0,1,1]229; SSE-NEXT: mulps %xmm6, %xmm3230; SSE-NEXT: addps %xmm0, %xmm3231; SSE-NEXT: shufps {{.*#+}} xmm7 = xmm7[1,2],xmm3[0,1]232; SSE-NEXT: addss %xmm2, %xmm5233; SSE-NEXT: addss %xmm9, %xmm5234; SSE-NEXT: movlhps {{.*#+}} xmm8 = xmm8[0],xmm1[0]235; SSE-NEXT: shufps {{.*#+}} xmm4 = xmm4[0,1],xmm8[2,0]236; SSE-NEXT: movss %xmm5, 32(%rdi)237; SSE-NEXT: movaps %xmm7, 16(%rdi)238; SSE-NEXT: movaps %xmm4, (%rdi)239; SSE-NEXT: retq240;241; AVX1-LABEL: test_mul3x3_f32:242; AVX1: # %bb.0: # %entry243; AVX1-NEXT: movq %rdi, %rax244; AVX1-NEXT: vmovss {{.*#+}} xmm8 = mem[0],zero,zero,zero245; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3]246; AVX1-NEXT: vbroadcastss {{[0-9]+}}(%rsp), %xmm1247; AVX1-NEXT: vmulps %xmm1, %xmm0, %xmm9248; AVX1-NEXT: vinsertps {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[2,3]249; AVX1-NEXT: vbroadcastss {{[0-9]+}}(%rsp), %xmm4250; AVX1-NEXT: vmulps %xmm4, %xmm3, %xmm10251; AVX1-NEXT: vaddps %xmm10, %xmm9, %xmm9252; AVX1-NEXT: vinsertps {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[2,3]253; AVX1-NEXT: vbroadcastss {{[0-9]+}}(%rsp), %xmm7254; AVX1-NEXT: vmulps %xmm7, %xmm6, %xmm10255; AVX1-NEXT: vaddps %xmm10, %xmm9, %xmm9256; AVX1-NEXT: vmulss %xmm1, %xmm2, %xmm1257; AVX1-NEXT: vmulss %xmm4, %xmm5, %xmm4258; AVX1-NEXT: vaddss %xmm4, %xmm1, %xmm1259; AVX1-NEXT: vmulss %xmm7, %xmm8, %xmm4260; AVX1-NEXT: vaddss %xmm4, %xmm1, %xmm1261; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm9[0,1],xmm1[0],xmm9[3]262; AVX1-NEXT: vbroadcastss {{[0-9]+}}(%rsp), %xmm4263; AVX1-NEXT: vmulps %xmm4, %xmm0, %xmm7264; AVX1-NEXT: vbroadcastss {{[0-9]+}}(%rsp), %xmm9265; AVX1-NEXT: vmulps %xmm3, %xmm9, %xmm10266; AVX1-NEXT: vaddps %xmm7, %xmm10, %xmm7267; AVX1-NEXT: vbroadcastss {{[0-9]+}}(%rsp), %xmm10268; AVX1-NEXT: vmulps %xmm6, %xmm10, %xmm11269; AVX1-NEXT: vaddps %xmm7, %xmm11, %xmm7270; AVX1-NEXT: vmulss %xmm4, %xmm2, %xmm4271; AVX1-NEXT: vmulss %xmm5, %xmm9, %xmm9272; AVX1-NEXT: vaddss %xmm4, %xmm9, %xmm4273; AVX1-NEXT: vmulss %xmm10, %xmm8, %xmm9274; AVX1-NEXT: vaddss %xmm4, %xmm9, %xmm4275; AVX1-NEXT: vinsertps {{.*#+}} xmm4 = xmm7[0,1],xmm4[0],xmm7[3]276; AVX1-NEXT: vbroadcastss {{[0-9]+}}(%rsp), %xmm9277; AVX1-NEXT: vmulps %xmm0, %xmm9, %xmm0278; AVX1-NEXT: vbroadcastss {{[0-9]+}}(%rsp), %xmm10279; AVX1-NEXT: vmulps %xmm3, %xmm10, %xmm3280; AVX1-NEXT: vaddps %xmm3, %xmm0, %xmm0281; AVX1-NEXT: vbroadcastss {{[0-9]+}}(%rsp), %xmm3282; AVX1-NEXT: vmulps %xmm3, %xmm6, %xmm6283; AVX1-NEXT: vaddps %xmm6, %xmm0, %xmm0284; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm4[1,2],xmm0[0,1]285; AVX1-NEXT: vmulss %xmm2, %xmm9, %xmm2286; AVX1-NEXT: vmulss %xmm5, %xmm10, %xmm4287; AVX1-NEXT: vaddss %xmm4, %xmm2, %xmm2288; AVX1-NEXT: vmulss %xmm3, %xmm8, %xmm3289; AVX1-NEXT: vaddss %xmm3, %xmm2, %xmm2290; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm7[0]291; AVX1-NEXT: vmovss %xmm2, 32(%rdi)292; AVX1-NEXT: vmovaps %xmm0, 16(%rdi)293; AVX1-NEXT: vmovaps %xmm1, (%rdi)294; AVX1-NEXT: retq295;296; AVX2-LABEL: test_mul3x3_f32:297; AVX2: # %bb.0: # %entry298; AVX2-NEXT: movq %rdi, %rax299; AVX2-NEXT: vmovss {{.*#+}} xmm8 = mem[0],zero,zero,zero300; AVX2-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3]301; AVX2-NEXT: vbroadcastss {{[0-9]+}}(%rsp), %xmm1302; AVX2-NEXT: vmulps %xmm1, %xmm0, %xmm9303; AVX2-NEXT: vinsertps {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[2,3]304; AVX2-NEXT: vbroadcastss {{[0-9]+}}(%rsp), %xmm4305; AVX2-NEXT: vmulps %xmm4, %xmm3, %xmm10306; AVX2-NEXT: vaddps %xmm10, %xmm9, %xmm9307; AVX2-NEXT: vinsertps {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[2,3]308; AVX2-NEXT: vbroadcastss {{[0-9]+}}(%rsp), %xmm7309; AVX2-NEXT: vmulps %xmm7, %xmm6, %xmm10310; AVX2-NEXT: vaddps %xmm10, %xmm9, %xmm9311; AVX2-NEXT: vmulss %xmm1, %xmm2, %xmm1312; AVX2-NEXT: vmulss %xmm4, %xmm5, %xmm4313; AVX2-NEXT: vaddss %xmm4, %xmm1, %xmm1314; AVX2-NEXT: vmulss %xmm7, %xmm8, %xmm4315; AVX2-NEXT: vaddss %xmm4, %xmm1, %xmm1316; AVX2-NEXT: vinsertps {{.*#+}} xmm1 = xmm9[0,1],xmm1[0],xmm9[3]317; AVX2-NEXT: vbroadcastss {{[0-9]+}}(%rsp), %xmm4318; AVX2-NEXT: vmulps %xmm4, %xmm0, %xmm7319; AVX2-NEXT: vbroadcastss {{[0-9]+}}(%rsp), %xmm9320; AVX2-NEXT: vmulps %xmm3, %xmm9, %xmm10321; AVX2-NEXT: vaddps %xmm7, %xmm10, %xmm7322; AVX2-NEXT: vbroadcastss {{[0-9]+}}(%rsp), %xmm10323; AVX2-NEXT: vmulps %xmm6, %xmm10, %xmm11324; AVX2-NEXT: vaddps %xmm7, %xmm11, %xmm7325; AVX2-NEXT: vmulss %xmm4, %xmm2, %xmm4326; AVX2-NEXT: vmulss %xmm5, %xmm9, %xmm9327; AVX2-NEXT: vaddss %xmm4, %xmm9, %xmm4328; AVX2-NEXT: vmulss %xmm10, %xmm8, %xmm9329; AVX2-NEXT: vaddss %xmm4, %xmm9, %xmm4330; AVX2-NEXT: vinsertps {{.*#+}} xmm4 = xmm7[0,1],xmm4[0],xmm7[3]331; AVX2-NEXT: vbroadcastss {{[0-9]+}}(%rsp), %xmm7332; AVX2-NEXT: vmulps %xmm7, %xmm0, %xmm0333; AVX2-NEXT: vbroadcastss {{[0-9]+}}(%rsp), %xmm9334; AVX2-NEXT: vmulps %xmm3, %xmm9, %xmm3335; AVX2-NEXT: vaddps %xmm3, %xmm0, %xmm0336; AVX2-NEXT: vbroadcastss {{[0-9]+}}(%rsp), %xmm3337; AVX2-NEXT: vmulps %xmm3, %xmm6, %xmm6338; AVX2-NEXT: vaddps %xmm6, %xmm0, %xmm0339; AVX2-NEXT: vmulss %xmm7, %xmm2, %xmm2340; AVX2-NEXT: vmulss %xmm5, %xmm9, %xmm5341; AVX2-NEXT: vaddss %xmm5, %xmm2, %xmm2342; AVX2-NEXT: vmulss %xmm3, %xmm8, %xmm3343; AVX2-NEXT: vaddss %xmm3, %xmm2, %xmm2344; AVX2-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm1345; AVX2-NEXT: vmovaps {{.*#+}} ymm3 = [0,1,2,4,5,6,u,u]346; AVX2-NEXT: vpermps %ymm1, %ymm3, %ymm1347; AVX2-NEXT: vbroadcastsd %xmm0, %ymm0348; AVX2-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5],ymm0[6,7]349; AVX2-NEXT: vmovss %xmm2, 32(%rdi)350; AVX2-NEXT: vmovaps %ymm0, (%rdi)351; AVX2-NEXT: vzeroupper352; AVX2-NEXT: retq353;354; AVX512F-LABEL: test_mul3x3_f32:355; AVX512F: # %bb.0: # %entry356; AVX512F-NEXT: valignd {{.*#+}} zmm2 = zmm0[3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2]357; AVX512F-NEXT: vbroadcastss %xmm1, %xmm3358; AVX512F-NEXT: vmulps %xmm3, %xmm0, %xmm3359; AVX512F-NEXT: vextractf128 $1, %ymm0, %xmm5360; AVX512F-NEXT: vmovshdup {{.*#+}} xmm6 = xmm1[1,1,3,3]361; AVX512F-NEXT: vmulps %xmm6, %xmm2, %xmm4362; AVX512F-NEXT: vaddps %xmm4, %xmm3, %xmm4363; AVX512F-NEXT: vshufpd {{.*#+}} xmm3 = xmm5[1,0]364; AVX512F-NEXT: vshufps {{.*#+}} xmm7 = xmm1[3,3,3,3]365; AVX512F-NEXT: vshufpd {{.*#+}} xmm8 = xmm1[1,0]366; AVX512F-NEXT: vshufps {{.*#+}} xmm9 = xmm1[2,2,2,2]367; AVX512F-NEXT: vmulps %xmm3, %xmm9, %xmm9368; AVX512F-NEXT: vaddps %xmm4, %xmm9, %xmm9369; AVX512F-NEXT: vshufpd {{.*#+}} xmm4 = xmm0[1,0]370; AVX512F-NEXT: vmulss %xmm1, %xmm4, %xmm10371; AVX512F-NEXT: vmovshdup {{.*#+}} xmm11 = xmm5[1,1,3,3]372; AVX512F-NEXT: vmulss %xmm6, %xmm11, %xmm5373; AVX512F-NEXT: vaddss %xmm5, %xmm10, %xmm5374; AVX512F-NEXT: vextractf32x4 $2, %zmm0, %xmm6375; AVX512F-NEXT: vmulss %xmm6, %xmm8, %xmm8376; AVX512F-NEXT: vaddss %xmm5, %xmm8, %xmm5377; AVX512F-NEXT: vinsertps {{.*#+}} xmm5 = xmm9[0,1],xmm5[0],xmm9[3]378; AVX512F-NEXT: vmulps %xmm7, %xmm0, %xmm8379; AVX512F-NEXT: vextractf128 $1, %ymm1, %xmm9380; AVX512F-NEXT: vmovsldup {{.*#+}} xmm10 = xmm9[0,0,2,2]381; AVX512F-NEXT: vmulps %xmm2, %xmm10, %xmm10382; AVX512F-NEXT: vaddps %xmm10, %xmm8, %xmm8383; AVX512F-NEXT: vmovshdup {{.*#+}} xmm10 = xmm9[1,1,3,3]384; AVX512F-NEXT: vmulps %xmm3, %xmm10, %xmm12385; AVX512F-NEXT: vaddps %xmm12, %xmm8, %xmm8386; AVX512F-NEXT: vmulss %xmm7, %xmm4, %xmm7387; AVX512F-NEXT: vmulss %xmm9, %xmm11, %xmm12388; AVX512F-NEXT: vaddss %xmm7, %xmm12, %xmm7389; AVX512F-NEXT: vmulss %xmm6, %xmm10, %xmm10390; AVX512F-NEXT: vaddss %xmm7, %xmm10, %xmm7391; AVX512F-NEXT: vshufps {{.*#+}} xmm10 = xmm9[3,3,3,3]392; AVX512F-NEXT: vshufpd {{.*#+}} xmm12 = xmm9[1,0]393; AVX512F-NEXT: vshufps {{.*#+}} xmm9 = xmm9[2,2,2,2]394; AVX512F-NEXT: vmulps %xmm0, %xmm9, %xmm0395; AVX512F-NEXT: vmulps %xmm2, %xmm10, %xmm2396; AVX512F-NEXT: vaddps %xmm2, %xmm0, %xmm0397; AVX512F-NEXT: vextractf32x4 $2, %zmm1, %xmm1398; AVX512F-NEXT: vbroadcastss %xmm1, %xmm2399; AVX512F-NEXT: vmulps %xmm2, %xmm3, %xmm2400; AVX512F-NEXT: vaddps %xmm2, %xmm0, %xmm0401; AVX512F-NEXT: vmulss %xmm4, %xmm12, %xmm2402; AVX512F-NEXT: vmulss %xmm10, %xmm11, %xmm3403; AVX512F-NEXT: vaddss %xmm3, %xmm2, %xmm2404; AVX512F-NEXT: vmulss %xmm1, %xmm6, %xmm1405; AVX512F-NEXT: vaddss %xmm1, %xmm2, %xmm1406; AVX512F-NEXT: vmovshdup {{.*#+}} xmm2 = xmm8[1,1,3,3]407; AVX512F-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],xmm7[0],xmm2[2,3]408; AVX512F-NEXT: vmovlhps {{.*#+}} xmm0 = xmm2[0],xmm0[0]409; AVX512F-NEXT: vinsertps {{.*#+}} xmm2 = xmm5[0,1,2],xmm8[0]410; AVX512F-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0411; AVX512F-NEXT: vinsertf32x4 $2, %xmm1, %zmm0, %zmm0412; AVX512F-NEXT: retq413;414; AVX512VL-LABEL: test_mul3x3_f32:415; AVX512VL: # %bb.0: # %entry416; AVX512VL-NEXT: valignd {{.*#+}} zmm2 = zmm0[3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2]417; AVX512VL-NEXT: vbroadcastss %xmm1, %xmm3418; AVX512VL-NEXT: vmulps %xmm3, %xmm0, %xmm3419; AVX512VL-NEXT: vextractf128 $1, %ymm0, %xmm4420; AVX512VL-NEXT: vmovshdup {{.*#+}} xmm5 = xmm1[1,1,3,3]421; AVX512VL-NEXT: vmulps %xmm5, %xmm2, %xmm6422; AVX512VL-NEXT: vaddps %xmm6, %xmm3, %xmm3423; AVX512VL-NEXT: vshufpd {{.*#+}} xmm6 = xmm4[1,0]424; AVX512VL-NEXT: vshufps {{.*#+}} xmm7 = xmm1[3,3,3,3]425; AVX512VL-NEXT: vshufpd {{.*#+}} xmm8 = xmm1[1,0]426; AVX512VL-NEXT: vshufps {{.*#+}} xmm9 = xmm1[2,2,2,2]427; AVX512VL-NEXT: vmulps %xmm6, %xmm9, %xmm9428; AVX512VL-NEXT: vaddps %xmm3, %xmm9, %xmm3429; AVX512VL-NEXT: vshufpd {{.*#+}} xmm9 = xmm0[1,0]430; AVX512VL-NEXT: vmulss %xmm1, %xmm9, %xmm10431; AVX512VL-NEXT: vmovshdup {{.*#+}} xmm4 = xmm4[1,1,3,3]432; AVX512VL-NEXT: vmulss %xmm5, %xmm4, %xmm5433; AVX512VL-NEXT: vaddss %xmm5, %xmm10, %xmm5434; AVX512VL-NEXT: vextractf32x4 $2, %zmm0, %xmm10435; AVX512VL-NEXT: vmulss %xmm8, %xmm10, %xmm8436; AVX512VL-NEXT: vaddss %xmm5, %xmm8, %xmm5437; AVX512VL-NEXT: vinsertps {{.*#+}} xmm3 = xmm3[0,1],xmm5[0],xmm3[3]438; AVX512VL-NEXT: vmulps %xmm7, %xmm0, %xmm5439; AVX512VL-NEXT: vextractf128 $1, %ymm1, %xmm8440; AVX512VL-NEXT: vmovsldup {{.*#+}} xmm11 = xmm8[0,0,2,2]441; AVX512VL-NEXT: vmulps %xmm2, %xmm11, %xmm11442; AVX512VL-NEXT: vaddps %xmm5, %xmm11, %xmm5443; AVX512VL-NEXT: vmovshdup {{.*#+}} xmm11 = xmm8[1,1,3,3]444; AVX512VL-NEXT: vmulps %xmm6, %xmm11, %xmm12445; AVX512VL-NEXT: vaddps %xmm5, %xmm12, %xmm5446; AVX512VL-NEXT: vmulss %xmm7, %xmm9, %xmm7447; AVX512VL-NEXT: vmulss %xmm4, %xmm8, %xmm12448; AVX512VL-NEXT: vaddss %xmm7, %xmm12, %xmm7449; AVX512VL-NEXT: vmulss %xmm11, %xmm10, %xmm11450; AVX512VL-NEXT: vaddss %xmm7, %xmm11, %xmm7451; AVX512VL-NEXT: vshufps {{.*#+}} xmm11 = xmm8[3,3,3,3]452; AVX512VL-NEXT: vshufpd {{.*#+}} xmm12 = xmm8[1,0]453; AVX512VL-NEXT: vshufps {{.*#+}} xmm8 = xmm8[2,2,2,2]454; AVX512VL-NEXT: vmulps %xmm0, %xmm8, %xmm0455; AVX512VL-NEXT: vmulps %xmm2, %xmm11, %xmm2456; AVX512VL-NEXT: vaddps %xmm2, %xmm0, %xmm0457; AVX512VL-NEXT: vextractf32x4 $2, %zmm1, %xmm1458; AVX512VL-NEXT: vbroadcastss %xmm1, %xmm2459; AVX512VL-NEXT: vmulps %xmm2, %xmm6, %xmm2460; AVX512VL-NEXT: vaddps %xmm2, %xmm0, %xmm0461; AVX512VL-NEXT: vmulss %xmm12, %xmm9, %xmm2462; AVX512VL-NEXT: vmulss %xmm4, %xmm11, %xmm4463; AVX512VL-NEXT: vaddss %xmm4, %xmm2, %xmm2464; AVX512VL-NEXT: vmulss %xmm1, %xmm10, %xmm1465; AVX512VL-NEXT: vaddss %xmm1, %xmm2, %xmm1466; AVX512VL-NEXT: vmovshdup {{.*#+}} xmm2 = xmm5[1,1,3,3]467; AVX512VL-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],xmm7[0],xmm2[2,3]468; AVX512VL-NEXT: vmovlhps {{.*#+}} xmm0 = xmm2[0],xmm0[0]469; AVX512VL-NEXT: vinsertps {{.*#+}} xmm2 = xmm3[0,1,2],xmm5[0]470; AVX512VL-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0471; AVX512VL-NEXT: vinsertf32x4 $2, %xmm1, %zmm0, %zmm0472; AVX512VL-NEXT: retq473entry:474 %block = shufflevector <9 x float> %a0, <9 x float> poison, <2 x i32> <i32 0, i32 1>475 %splat.splat = shufflevector <9 x float> %a1, <9 x float> undef, <2 x i32> zeroinitializer476 %0 = fmul <2 x float> %block, %splat.splat477 %block6 = shufflevector <9 x float> %a0, <9 x float> poison, <2 x i32> <i32 3, i32 4>478 %splat.splat8 = shufflevector <9 x float> %a1, <9 x float> undef, <2 x i32> <i32 1, i32 1>479 %1 = fmul <2 x float> %block6, %splat.splat8480 %2 = fadd <2 x float> %0, %1481 %block9 = shufflevector <9 x float> %a0, <9 x float> poison, <2 x i32> <i32 6, i32 7>482 %splat.splat11 = shufflevector <9 x float> %a1, <9 x float> undef, <2 x i32> <i32 2, i32 2>483 %3 = fmul <2 x float> %block9, %splat.splat11484 %4 = fadd <2 x float> %2, %3485 %5 = shufflevector <2 x float> %4, <2 x float> poison, <3 x i32> <i32 0, i32 1, i32 undef>486 %block12 = shufflevector <9 x float> %a0, <9 x float> poison, <1 x i32> <i32 2>487 %splat.splatinsert13 = shufflevector <9 x float> %a1, <9 x float> undef, <1 x i32> zeroinitializer488 %6 = fmul <1 x float> %block12, %splat.splatinsert13489 %block15 = shufflevector <9 x float> %a0, <9 x float> poison, <1 x i32> <i32 5>490 %splat.splatinsert16 = shufflevector <9 x float> %a1, <9 x float> undef, <1 x i32> <i32 1>491 %7 = fmul <1 x float> %block15, %splat.splatinsert16492 %8 = fadd <1 x float> %6, %7493 %block18 = shufflevector <9 x float> %a0, <9 x float> poison, <1 x i32> <i32 8>494 %splat.splatinsert19 = shufflevector <9 x float> %a1, <9 x float> undef, <1 x i32> <i32 2>495 %9 = fmul <1 x float> %block18, %splat.splatinsert19496 %10 = fadd <1 x float> %8, %9497 %11 = shufflevector <1 x float> %10, <1 x float> poison, <3 x i32> <i32 0, i32 undef, i32 undef>498 %12 = shufflevector <3 x float> %5, <3 x float> %11, <3 x i32> <i32 0, i32 1, i32 3>499 %splat.splat23 = shufflevector <9 x float> %a1, <9 x float> undef, <2 x i32> <i32 3, i32 3>500 %13 = fmul <2 x float> %block, %splat.splat23501 %splat.splat26 = shufflevector <9 x float> %a1, <9 x float> undef, <2 x i32> <i32 4, i32 4>502 %14 = fmul <2 x float> %block6, %splat.splat26503 %15 = fadd <2 x float> %13, %14504 %splat.splat29 = shufflevector <9 x float> %a1, <9 x float> undef, <2 x i32> <i32 5, i32 5>505 %16 = fmul <2 x float> %block9, %splat.splat29506 %17 = fadd <2 x float> %15, %16507 %18 = shufflevector <2 x float> %17, <2 x float> poison, <3 x i32> <i32 0, i32 1, i32 undef>508 %splat.splatinsert31 = shufflevector <9 x float> %a1, <9 x float> undef, <1 x i32> <i32 3>509 %19 = fmul <1 x float> %block12, %splat.splatinsert31510 %splat.splatinsert34 = shufflevector <9 x float> %a1, <9 x float> undef, <1 x i32> <i32 4>511 %20 = fmul <1 x float> %block15, %splat.splatinsert34512 %21 = fadd <1 x float> %19, %20513 %splat.splatinsert37 = shufflevector <9 x float> %a1, <9 x float> undef, <1 x i32> <i32 5>514 %22 = fmul <1 x float> %block18, %splat.splatinsert37515 %23 = fadd <1 x float> %21, %22516 %24 = shufflevector <1 x float> %23, <1 x float> poison, <3 x i32> <i32 0, i32 undef, i32 undef>517 %25 = shufflevector <3 x float> %18, <3 x float> %24, <3 x i32> <i32 0, i32 1, i32 3>518 %splat.splat41 = shufflevector <9 x float> %a1, <9 x float> undef, <2 x i32> <i32 6, i32 6>519 %26 = fmul <2 x float> %block, %splat.splat41520 %splat.splat44 = shufflevector <9 x float> %a1, <9 x float> undef, <2 x i32> <i32 7, i32 7>521 %27 = fmul <2 x float> %block6, %splat.splat44522 %28 = fadd <2 x float> %26, %27523 %splat.splat47 = shufflevector <9 x float> %a1, <9 x float> undef, <2 x i32> <i32 8, i32 8>524 %29 = fmul <2 x float> %block9, %splat.splat47525 %30 = fadd <2 x float> %28, %29526 %31 = shufflevector <2 x float> %30, <2 x float> poison, <3 x i32> <i32 0, i32 1, i32 undef>527 %splat.splatinsert49 = shufflevector <9 x float> %a1, <9 x float> undef, <1 x i32> <i32 6>528 %32 = fmul <1 x float> %block12, %splat.splatinsert49529 %splat.splatinsert52 = shufflevector <9 x float> %a1, <9 x float> undef, <1 x i32> <i32 7>530 %33 = fmul <1 x float> %block15, %splat.splatinsert52531 %34 = fadd <1 x float> %32, %33532 %35 = fmul <9 x float> %a0, %a1533 %36 = shufflevector <9 x float> %35, <9 x float> poison, <1 x i32> <i32 8>534 %37 = fadd <1 x float> %34, %36535 %38 = shufflevector <1 x float> %37, <1 x float> poison, <3 x i32> <i32 0, i32 undef, i32 undef>536 %39 = shufflevector <3 x float> %31, <3 x float> %38, <3 x i32> <i32 0, i32 1, i32 3>537 %40 = shufflevector <3 x float> %12, <3 x float> %25, <6 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5>538 %41 = shufflevector <3 x float> %39, <3 x float> poison, <6 x i32> <i32 0, i32 1, i32 2, i32 undef, i32 undef, i32 undef>539 %42 = shufflevector <6 x float> %40, <6 x float> %41, <9 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>540 ret <9 x float> %42541}542 543define <9 x double> @test_mul3x3_f64(<9 x double> %a0, <9 x double> %a1) nounwind {544; SSE-LABEL: test_mul3x3_f64:545; SSE: # %bb.0: # %entry546; SSE-NEXT: movq %rdi, %rax547; SSE-NEXT: movsd {{.*#+}} xmm8 = mem[0],zero548; SSE-NEXT: movsd {{.*#+}} xmm10 = mem[0],zero549; SSE-NEXT: movsd {{.*#+}} xmm9 = mem[0],zero550; SSE-NEXT: movsd {{.*#+}} xmm11 = mem[0],zero551; SSE-NEXT: movsd {{.*#+}} xmm12 = mem[0],zero552; SSE-NEXT: unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]553; SSE-NEXT: movapd %xmm2, %xmm13554; SSE-NEXT: mulsd %xmm12, %xmm13555; SSE-NEXT: unpcklpd {{.*#+}} xmm12 = xmm12[0,0]556; SSE-NEXT: mulpd %xmm0, %xmm12557; SSE-NEXT: unpcklpd {{.*#+}} xmm3 = xmm3[0],xmm4[0]558; SSE-NEXT: movapd %xmm5, %xmm1559; SSE-NEXT: mulsd %xmm11, %xmm1560; SSE-NEXT: unpcklpd {{.*#+}} xmm11 = xmm11[0,0]561; SSE-NEXT: mulpd %xmm3, %xmm11562; SSE-NEXT: addpd %xmm12, %xmm11563; SSE-NEXT: movsd {{.*#+}} xmm4 = mem[0],zero564; SSE-NEXT: unpcklpd {{.*#+}} xmm6 = xmm6[0],xmm7[0]565; SSE-NEXT: movapd %xmm9, %xmm7566; SSE-NEXT: mulsd %xmm4, %xmm7567; SSE-NEXT: unpcklpd {{.*#+}} xmm4 = xmm4[0,0]568; SSE-NEXT: mulpd %xmm6, %xmm4569; SSE-NEXT: addpd %xmm11, %xmm4570; SSE-NEXT: movsd {{.*#+}} xmm11 = mem[0],zero571; SSE-NEXT: addsd %xmm13, %xmm1572; SSE-NEXT: addsd %xmm7, %xmm1573; SSE-NEXT: movapd %xmm2, %xmm12574; SSE-NEXT: mulsd %xmm11, %xmm12575; SSE-NEXT: unpcklpd {{.*#+}} xmm11 = xmm11[0,0]576; SSE-NEXT: mulpd %xmm0, %xmm11577; SSE-NEXT: movapd %xmm5, %xmm7578; SSE-NEXT: mulsd %xmm10, %xmm7579; SSE-NEXT: unpcklpd {{.*#+}} xmm10 = xmm10[0,0]580; SSE-NEXT: mulpd %xmm3, %xmm10581; SSE-NEXT: addpd %xmm11, %xmm10582; SSE-NEXT: movapd %xmm9, %xmm11583; SSE-NEXT: mulsd %xmm8, %xmm11584; SSE-NEXT: unpcklpd {{.*#+}} xmm8 = xmm8[0,0]585; SSE-NEXT: mulpd %xmm6, %xmm8586; SSE-NEXT: addpd %xmm10, %xmm8587; SSE-NEXT: addsd %xmm12, %xmm7588; SSE-NEXT: addsd %xmm11, %xmm7589; SSE-NEXT: movsd {{.*#+}} xmm10 = mem[0],zero590; SSE-NEXT: mulsd %xmm10, %xmm2591; SSE-NEXT: unpcklpd {{.*#+}} xmm10 = xmm10[0,0]592; SSE-NEXT: mulpd %xmm0, %xmm10593; SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero594; SSE-NEXT: mulsd %xmm0, %xmm5595; SSE-NEXT: unpcklpd {{.*#+}} xmm0 = xmm0[0,0]596; SSE-NEXT: mulpd %xmm3, %xmm0597; SSE-NEXT: addpd %xmm10, %xmm0598; SSE-NEXT: movsd {{.*#+}} xmm3 = mem[0],zero599; SSE-NEXT: mulsd %xmm3, %xmm9600; SSE-NEXT: unpcklpd {{.*#+}} xmm3 = xmm3[0,0]601; SSE-NEXT: mulpd %xmm6, %xmm3602; SSE-NEXT: addpd %xmm0, %xmm3603; SSE-NEXT: addsd %xmm2, %xmm5604; SSE-NEXT: addsd %xmm9, %xmm5605; SSE-NEXT: unpcklpd {{.*#+}} xmm1 = xmm1[0],xmm8[0]606; SSE-NEXT: shufpd {{.*#+}} xmm8 = xmm8[1],xmm7[0]607; SSE-NEXT: movsd %xmm5, 64(%rdi)608; SSE-NEXT: movapd %xmm3, 48(%rdi)609; SSE-NEXT: movapd %xmm4, (%rdi)610; SSE-NEXT: movapd %xmm8, 32(%rdi)611; SSE-NEXT: movapd %xmm1, 16(%rdi)612; SSE-NEXT: retq613;614; AVX1-LABEL: test_mul3x3_f64:615; AVX1: # %bb.0: # %entry616; AVX1-NEXT: movq %rdi, %rax617; AVX1-NEXT: vmovsd {{.*#+}} xmm8 = mem[0],zero618; AVX1-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm0[0],xmm1[0]619; AVX1-NEXT: vmovddup {{.*#+}} xmm9 = mem[0,0]620; AVX1-NEXT: vmulpd %xmm1, %xmm9, %xmm0621; AVX1-NEXT: vunpcklpd {{.*#+}} xmm3 = xmm3[0],xmm4[0]622; AVX1-NEXT: vmovddup {{.*#+}} xmm4 = mem[0,0]623; AVX1-NEXT: vmulpd %xmm4, %xmm3, %xmm10624; AVX1-NEXT: vaddpd %xmm0, %xmm10, %xmm0625; AVX1-NEXT: vunpcklpd {{.*#+}} xmm6 = xmm6[0],xmm7[0]626; AVX1-NEXT: vmovddup {{.*#+}} xmm7 = mem[0,0]627; AVX1-NEXT: vmulpd %xmm7, %xmm6, %xmm10628; AVX1-NEXT: vaddpd %xmm0, %xmm10, %xmm0629; AVX1-NEXT: vmulsd %xmm2, %xmm9, %xmm9630; AVX1-NEXT: vmulsd %xmm4, %xmm5, %xmm4631; AVX1-NEXT: vaddsd %xmm4, %xmm9, %xmm4632; AVX1-NEXT: vmulsd %xmm7, %xmm8, %xmm7633; AVX1-NEXT: vaddsd %xmm7, %xmm4, %xmm4634; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm4635; AVX1-NEXT: vmovddup {{.*#+}} xmm7 = mem[0,0]636; AVX1-NEXT: vmulpd %xmm7, %xmm1, %xmm9637; AVX1-NEXT: vmovddup {{.*#+}} xmm10 = mem[0,0]638; AVX1-NEXT: vmulpd %xmm3, %xmm10, %xmm11639; AVX1-NEXT: vaddpd %xmm11, %xmm9, %xmm9640; AVX1-NEXT: vmovddup {{.*#+}} xmm11 = mem[0,0]641; AVX1-NEXT: vmulpd %xmm6, %xmm11, %xmm12642; AVX1-NEXT: vaddpd %xmm12, %xmm9, %xmm9643; AVX1-NEXT: vmulsd %xmm7, %xmm2, %xmm7644; AVX1-NEXT: vmulsd %xmm5, %xmm10, %xmm10645; AVX1-NEXT: vaddsd %xmm7, %xmm10, %xmm7646; AVX1-NEXT: vmulsd %xmm11, %xmm8, %xmm10647; AVX1-NEXT: vaddsd %xmm7, %xmm10, %xmm7648; AVX1-NEXT: vmovddup {{.*#+}} xmm10 = mem[0,0]649; AVX1-NEXT: vmulpd %xmm1, %xmm10, %xmm1650; AVX1-NEXT: vmovddup {{.*#+}} xmm11 = mem[0,0]651; AVX1-NEXT: vmulpd %xmm3, %xmm11, %xmm3652; AVX1-NEXT: vaddpd %xmm3, %xmm1, %xmm1653; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = mem[0,0]654; AVX1-NEXT: vmulpd %xmm3, %xmm6, %xmm6655; AVX1-NEXT: vaddpd %xmm6, %xmm1, %xmm1656; AVX1-NEXT: vmulsd %xmm2, %xmm10, %xmm2657; AVX1-NEXT: vmulsd %xmm5, %xmm11, %xmm5658; AVX1-NEXT: vaddsd %xmm5, %xmm2, %xmm2659; AVX1-NEXT: vmulsd %xmm3, %xmm8, %xmm3660; AVX1-NEXT: vaddsd %xmm3, %xmm2, %xmm2661; AVX1-NEXT: vinsertf128 $1, %xmm9, %ymm0, %ymm0662; AVX1-NEXT: vshufpd {{.*#+}} ymm0 = ymm4[0],ymm0[1],ymm4[2],ymm0[2]663; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm7, %ymm3664; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm9, %ymm1665; AVX1-NEXT: vshufpd {{.*#+}} ymm1 = ymm1[1],ymm3[0],ymm1[2],ymm3[3]666; AVX1-NEXT: vmovsd %xmm2, 64(%rdi)667; AVX1-NEXT: vmovapd %ymm1, 32(%rdi)668; AVX1-NEXT: vmovapd %ymm0, (%rdi)669; AVX1-NEXT: vzeroupper670; AVX1-NEXT: retq671;672; AVX2-LABEL: test_mul3x3_f64:673; AVX2: # %bb.0: # %entry674; AVX2-NEXT: movq %rdi, %rax675; AVX2-NEXT: vmovsd {{.*#+}} xmm8 = mem[0],zero676; AVX2-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]677; AVX2-NEXT: vmovddup {{.*#+}} xmm9 = mem[0,0]678; AVX2-NEXT: vmulpd %xmm0, %xmm9, %xmm10679; AVX2-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm3[0],xmm4[0]680; AVX2-NEXT: vmovddup {{.*#+}} xmm3 = mem[0,0]681; AVX2-NEXT: vmulpd %xmm3, %xmm1, %xmm4682; AVX2-NEXT: vaddpd %xmm4, %xmm10, %xmm4683; AVX2-NEXT: vunpcklpd {{.*#+}} xmm6 = xmm6[0],xmm7[0]684; AVX2-NEXT: vmovddup {{.*#+}} xmm7 = mem[0,0]685; AVX2-NEXT: vmulpd %xmm7, %xmm6, %xmm10686; AVX2-NEXT: vaddpd %xmm4, %xmm10, %xmm4687; AVX2-NEXT: vmulsd %xmm2, %xmm9, %xmm9688; AVX2-NEXT: vmulsd %xmm3, %xmm5, %xmm3689; AVX2-NEXT: vaddsd %xmm3, %xmm9, %xmm3690; AVX2-NEXT: vmulsd %xmm7, %xmm8, %xmm7691; AVX2-NEXT: vaddsd %xmm7, %xmm3, %xmm3692; AVX2-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3693; AVX2-NEXT: vmovddup {{.*#+}} xmm4 = mem[0,0]694; AVX2-NEXT: vmulpd %xmm4, %xmm0, %xmm7695; AVX2-NEXT: vmovddup {{.*#+}} xmm9 = mem[0,0]696; AVX2-NEXT: vmulpd %xmm1, %xmm9, %xmm10697; AVX2-NEXT: vaddpd %xmm7, %xmm10, %xmm7698; AVX2-NEXT: vmovddup {{.*#+}} xmm10 = mem[0,0]699; AVX2-NEXT: vmulpd %xmm6, %xmm10, %xmm11700; AVX2-NEXT: vaddpd %xmm7, %xmm11, %xmm7701; AVX2-NEXT: vmulsd %xmm4, %xmm2, %xmm4702; AVX2-NEXT: vmulsd %xmm5, %xmm9, %xmm9703; AVX2-NEXT: vaddsd %xmm4, %xmm9, %xmm4704; AVX2-NEXT: vmulsd %xmm10, %xmm8, %xmm9705; AVX2-NEXT: vaddsd %xmm4, %xmm9, %xmm4706; AVX2-NEXT: vmovddup {{.*#+}} xmm9 = mem[0,0]707; AVX2-NEXT: vmulpd %xmm0, %xmm9, %xmm0708; AVX2-NEXT: vmovddup {{.*#+}} xmm10 = mem[0,0]709; AVX2-NEXT: vmulpd %xmm1, %xmm10, %xmm1710; AVX2-NEXT: vaddpd %xmm1, %xmm0, %xmm0711; AVX2-NEXT: vmovddup {{.*#+}} xmm1 = mem[0,0]712; AVX2-NEXT: vmulpd %xmm1, %xmm6, %xmm6713; AVX2-NEXT: vaddpd %xmm6, %xmm0, %xmm0714; AVX2-NEXT: vmulsd %xmm2, %xmm9, %xmm2715; AVX2-NEXT: vmulsd %xmm5, %xmm10, %xmm5716; AVX2-NEXT: vaddsd %xmm5, %xmm2, %xmm2717; AVX2-NEXT: vmulsd %xmm1, %xmm8, %xmm1718; AVX2-NEXT: vaddsd %xmm1, %xmm2, %xmm1719; AVX2-NEXT: vbroadcastsd %xmm7, %ymm2720; AVX2-NEXT: vblendpd {{.*#+}} ymm2 = ymm3[0,1,2],ymm2[3]721; AVX2-NEXT: vinsertf128 $1, %xmm0, %ymm4, %ymm3722; AVX2-NEXT: vinsertf128 $1, %xmm0, %ymm7, %ymm0723; AVX2-NEXT: vshufpd {{.*#+}} ymm0 = ymm0[1],ymm3[0],ymm0[2],ymm3[3]724; AVX2-NEXT: vmovsd %xmm1, 64(%rdi)725; AVX2-NEXT: vmovapd %ymm0, 32(%rdi)726; AVX2-NEXT: vmovapd %ymm2, (%rdi)727; AVX2-NEXT: vzeroupper728; AVX2-NEXT: retq729;730; AVX512F-LABEL: test_mul3x3_f64:731; AVX512F: # %bb.0: # %entry732; AVX512F-NEXT: movq %rdi, %rax733; AVX512F-NEXT: vmovsd {{.*#+}} xmm8 = mem[0],zero734; AVX512F-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]735; AVX512F-NEXT: vmovddup {{.*#+}} xmm9 = mem[0,0]736; AVX512F-NEXT: vmulpd %xmm0, %xmm9, %xmm10737; AVX512F-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm3[0],xmm4[0]738; AVX512F-NEXT: vmovddup {{.*#+}} xmm3 = mem[0,0]739; AVX512F-NEXT: vmulpd %xmm3, %xmm1, %xmm4740; AVX512F-NEXT: vaddpd %xmm4, %xmm10, %xmm4741; AVX512F-NEXT: vunpcklpd {{.*#+}} xmm6 = xmm6[0],xmm7[0]742; AVX512F-NEXT: vmovddup {{.*#+}} xmm7 = mem[0,0]743; AVX512F-NEXT: vmulpd %xmm7, %xmm6, %xmm10744; AVX512F-NEXT: vaddpd %xmm4, %xmm10, %xmm4745; AVX512F-NEXT: vmulsd %xmm2, %xmm9, %xmm9746; AVX512F-NEXT: vmulsd %xmm3, %xmm5, %xmm3747; AVX512F-NEXT: vaddsd %xmm3, %xmm9, %xmm3748; AVX512F-NEXT: vmulsd %xmm7, %xmm8, %xmm7749; AVX512F-NEXT: vaddsd %xmm7, %xmm3, %xmm3750; AVX512F-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3751; AVX512F-NEXT: vmovddup {{.*#+}} xmm4 = mem[0,0]752; AVX512F-NEXT: vmulpd %xmm4, %xmm0, %xmm7753; AVX512F-NEXT: vmovddup {{.*#+}} xmm9 = mem[0,0]754; AVX512F-NEXT: vmulpd %xmm1, %xmm9, %xmm10755; AVX512F-NEXT: vaddpd %xmm7, %xmm10, %xmm7756; AVX512F-NEXT: vmovddup {{.*#+}} xmm10 = mem[0,0]757; AVX512F-NEXT: vmulpd %xmm6, %xmm10, %xmm11758; AVX512F-NEXT: vaddpd %xmm7, %xmm11, %xmm7759; AVX512F-NEXT: vmulsd %xmm4, %xmm2, %xmm4760; AVX512F-NEXT: vmulsd %xmm5, %xmm9, %xmm9761; AVX512F-NEXT: vaddsd %xmm4, %xmm9, %xmm4762; AVX512F-NEXT: vmulsd %xmm10, %xmm8, %xmm9763; AVX512F-NEXT: vaddsd %xmm4, %xmm9, %xmm4764; AVX512F-NEXT: vinsertf128 $1, %xmm4, %ymm7, %ymm4765; AVX512F-NEXT: vmovddup {{.*#+}} xmm7 = mem[0,0]766; AVX512F-NEXT: vmulpd %xmm7, %xmm0, %xmm0767; AVX512F-NEXT: vmovddup {{.*#+}} xmm9 = mem[0,0]768; AVX512F-NEXT: vmulpd %xmm1, %xmm9, %xmm1769; AVX512F-NEXT: vaddpd %xmm1, %xmm0, %xmm0770; AVX512F-NEXT: vmovddup {{.*#+}} xmm1 = mem[0,0]771; AVX512F-NEXT: vmulpd %xmm1, %xmm6, %xmm6772; AVX512F-NEXT: vaddpd %xmm6, %xmm0, %xmm0773; AVX512F-NEXT: vmulsd %xmm7, %xmm2, %xmm2774; AVX512F-NEXT: vmulsd %xmm5, %xmm9, %xmm5775; AVX512F-NEXT: vaddsd %xmm5, %xmm2, %xmm2776; AVX512F-NEXT: vmulsd %xmm1, %xmm8, %xmm1777; AVX512F-NEXT: vaddsd %xmm1, %xmm2, %xmm1778; AVX512F-NEXT: vinsertf64x4 $1, %ymm4, %zmm3, %zmm2779; AVX512F-NEXT: vpmovsxbq {{.*#+}} zmm3 = [0,1,2,4,5,6,8,9]780; AVX512F-NEXT: vpermi2pd %zmm0, %zmm2, %zmm3781; AVX512F-NEXT: vmovsd %xmm1, 64(%rdi)782; AVX512F-NEXT: vmovapd %zmm3, (%rdi)783; AVX512F-NEXT: vzeroupper784; AVX512F-NEXT: retq785;786; AVX512VL-LABEL: test_mul3x3_f64:787; AVX512VL: # %bb.0: # %entry788; AVX512VL-NEXT: movq %rdi, %rax789; AVX512VL-NEXT: vmovsd {{.*#+}} xmm8 = mem[0],zero790; AVX512VL-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]791; AVX512VL-NEXT: vmovddup {{.*#+}} xmm1 = mem[0,0]792; AVX512VL-NEXT: vmulpd %xmm1, %xmm0, %xmm9793; AVX512VL-NEXT: vunpcklpd {{.*#+}} xmm3 = xmm3[0],xmm4[0]794; AVX512VL-NEXT: vmovddup {{.*#+}} xmm4 = mem[0,0]795; AVX512VL-NEXT: vmulpd %xmm4, %xmm3, %xmm10796; AVX512VL-NEXT: vaddpd %xmm10, %xmm9, %xmm9797; AVX512VL-NEXT: vunpcklpd {{.*#+}} xmm6 = xmm6[0],xmm7[0]798; AVX512VL-NEXT: vmovddup {{.*#+}} xmm7 = mem[0,0]799; AVX512VL-NEXT: vmulpd %xmm7, %xmm6, %xmm10800; AVX512VL-NEXT: vaddpd %xmm10, %xmm9, %xmm9801; AVX512VL-NEXT: vmulsd %xmm1, %xmm2, %xmm1802; AVX512VL-NEXT: vmulsd %xmm4, %xmm5, %xmm4803; AVX512VL-NEXT: vaddsd %xmm4, %xmm1, %xmm1804; AVX512VL-NEXT: vmulsd %xmm7, %xmm8, %xmm4805; AVX512VL-NEXT: vaddsd %xmm4, %xmm1, %xmm1806; AVX512VL-NEXT: vinsertf128 $1, %xmm1, %ymm9, %ymm1807; AVX512VL-NEXT: vmovddup {{.*#+}} xmm4 = mem[0,0]808; AVX512VL-NEXT: vmulpd %xmm4, %xmm0, %xmm7809; AVX512VL-NEXT: vmovddup {{.*#+}} xmm9 = mem[0,0]810; AVX512VL-NEXT: vmulpd %xmm3, %xmm9, %xmm10811; AVX512VL-NEXT: vaddpd %xmm7, %xmm10, %xmm7812; AVX512VL-NEXT: vmovddup {{.*#+}} xmm10 = mem[0,0]813; AVX512VL-NEXT: vmulpd %xmm6, %xmm10, %xmm11814; AVX512VL-NEXT: vaddpd %xmm7, %xmm11, %xmm7815; AVX512VL-NEXT: vmulsd %xmm4, %xmm2, %xmm4816; AVX512VL-NEXT: vmulsd %xmm5, %xmm9, %xmm9817; AVX512VL-NEXT: vaddsd %xmm4, %xmm9, %xmm4818; AVX512VL-NEXT: vmulsd %xmm10, %xmm8, %xmm9819; AVX512VL-NEXT: vaddsd %xmm4, %xmm9, %xmm4820; AVX512VL-NEXT: vinsertf128 $1, %xmm4, %ymm7, %ymm4821; AVX512VL-NEXT: vmovddup {{.*#+}} xmm7 = mem[0,0]822; AVX512VL-NEXT: vmulpd %xmm7, %xmm0, %xmm0823; AVX512VL-NEXT: vmovddup {{.*#+}} xmm9 = mem[0,0]824; AVX512VL-NEXT: vmulpd %xmm3, %xmm9, %xmm3825; AVX512VL-NEXT: vaddpd %xmm3, %xmm0, %xmm0826; AVX512VL-NEXT: vmovddup {{.*#+}} xmm3 = mem[0,0]827; AVX512VL-NEXT: vmulpd %xmm3, %xmm6, %xmm6828; AVX512VL-NEXT: vaddpd %xmm6, %xmm0, %xmm0829; AVX512VL-NEXT: vmulsd %xmm7, %xmm2, %xmm2830; AVX512VL-NEXT: vmulsd %xmm5, %xmm9, %xmm5831; AVX512VL-NEXT: vaddsd %xmm5, %xmm2, %xmm2832; AVX512VL-NEXT: vmulsd %xmm3, %xmm8, %xmm3833; AVX512VL-NEXT: vaddsd %xmm3, %xmm2, %xmm2834; AVX512VL-NEXT: vinsertf64x4 $1, %ymm4, %zmm1, %zmm1835; AVX512VL-NEXT: vpmovsxbq {{.*#+}} zmm3 = [0,1,2,4,5,6,8,9]836; AVX512VL-NEXT: vpermi2pd %zmm0, %zmm1, %zmm3837; AVX512VL-NEXT: vmovsd %xmm2, 64(%rdi)838; AVX512VL-NEXT: vmovapd %zmm3, (%rdi)839; AVX512VL-NEXT: vzeroupper840; AVX512VL-NEXT: retq841entry:842 %block = shufflevector <9 x double> %a0, <9 x double> poison, <2 x i32> <i32 0, i32 1>843 %splat.splat = shufflevector <9 x double> %a1, <9 x double> undef, <2 x i32> zeroinitializer844 %0 = fmul <2 x double> %block, %splat.splat845 %block6 = shufflevector <9 x double> %a0, <9 x double> poison, <2 x i32> <i32 3, i32 4>846 %splat.splat8 = shufflevector <9 x double> %a1, <9 x double> undef, <2 x i32> <i32 1, i32 1>847 %1 = fmul <2 x double> %block6, %splat.splat8848 %2 = fadd <2 x double> %0, %1849 %block9 = shufflevector <9 x double> %a0, <9 x double> poison, <2 x i32> <i32 6, i32 7>850 %splat.splat11 = shufflevector <9 x double> %a1, <9 x double> undef, <2 x i32> <i32 2, i32 2>851 %3 = fmul <2 x double> %block9, %splat.splat11852 %4 = fadd <2 x double> %2, %3853 %5 = shufflevector <2 x double> %4, <2 x double> poison, <3 x i32> <i32 0, i32 1, i32 undef>854 %block12 = shufflevector <9 x double> %a0, <9 x double> poison, <1 x i32> <i32 2>855 %splat.splatinsert13 = shufflevector <9 x double> %a1, <9 x double> undef, <1 x i32> zeroinitializer856 %6 = fmul <1 x double> %block12, %splat.splatinsert13857 %block15 = shufflevector <9 x double> %a0, <9 x double> poison, <1 x i32> <i32 5>858 %splat.splatinsert16 = shufflevector <9 x double> %a1, <9 x double> undef, <1 x i32> <i32 1>859 %7 = fmul <1 x double> %block15, %splat.splatinsert16860 %8 = fadd <1 x double> %6, %7861 %block18 = shufflevector <9 x double> %a0, <9 x double> poison, <1 x i32> <i32 8>862 %splat.splatinsert19 = shufflevector <9 x double> %a1, <9 x double> undef, <1 x i32> <i32 2>863 %9 = fmul <1 x double> %block18, %splat.splatinsert19864 %10 = fadd <1 x double> %8, %9865 %11 = shufflevector <1 x double> %10, <1 x double> poison, <3 x i32> <i32 0, i32 undef, i32 undef>866 %12 = shufflevector <3 x double> %5, <3 x double> %11, <3 x i32> <i32 0, i32 1, i32 3>867 %splat.splat23 = shufflevector <9 x double> %a1, <9 x double> undef, <2 x i32> <i32 3, i32 3>868 %13 = fmul <2 x double> %block, %splat.splat23869 %splat.splat26 = shufflevector <9 x double> %a1, <9 x double> undef, <2 x i32> <i32 4, i32 4>870 %14 = fmul <2 x double> %block6, %splat.splat26871 %15 = fadd <2 x double> %13, %14872 %splat.splat29 = shufflevector <9 x double> %a1, <9 x double> undef, <2 x i32> <i32 5, i32 5>873 %16 = fmul <2 x double> %block9, %splat.splat29874 %17 = fadd <2 x double> %15, %16875 %18 = shufflevector <2 x double> %17, <2 x double> poison, <3 x i32> <i32 0, i32 1, i32 undef>876 %splat.splatinsert31 = shufflevector <9 x double> %a1, <9 x double> undef, <1 x i32> <i32 3>877 %19 = fmul <1 x double> %block12, %splat.splatinsert31878 %splat.splatinsert34 = shufflevector <9 x double> %a1, <9 x double> undef, <1 x i32> <i32 4>879 %20 = fmul <1 x double> %block15, %splat.splatinsert34880 %21 = fadd <1 x double> %19, %20881 %splat.splatinsert37 = shufflevector <9 x double> %a1, <9 x double> undef, <1 x i32> <i32 5>882 %22 = fmul <1 x double> %block18, %splat.splatinsert37883 %23 = fadd <1 x double> %21, %22884 %24 = shufflevector <1 x double> %23, <1 x double> poison, <3 x i32> <i32 0, i32 undef, i32 undef>885 %25 = shufflevector <3 x double> %18, <3 x double> %24, <3 x i32> <i32 0, i32 1, i32 3>886 %splat.splat41 = shufflevector <9 x double> %a1, <9 x double> undef, <2 x i32> <i32 6, i32 6>887 %26 = fmul <2 x double> %block, %splat.splat41888 %splat.splat44 = shufflevector <9 x double> %a1, <9 x double> undef, <2 x i32> <i32 7, i32 7>889 %27 = fmul <2 x double> %block6, %splat.splat44890 %28 = fadd <2 x double> %26, %27891 %splat.splat47 = shufflevector <9 x double> %a1, <9 x double> undef, <2 x i32> <i32 8, i32 8>892 %29 = fmul <2 x double> %block9, %splat.splat47893 %30 = fadd <2 x double> %28, %29894 %31 = shufflevector <2 x double> %30, <2 x double> poison, <3 x i32> <i32 0, i32 1, i32 undef>895 %splat.splatinsert49 = shufflevector <9 x double> %a1, <9 x double> undef, <1 x i32> <i32 6>896 %32 = fmul <1 x double> %block12, %splat.splatinsert49897 %splat.splatinsert52 = shufflevector <9 x double> %a1, <9 x double> undef, <1 x i32> <i32 7>898 %33 = fmul <1 x double> %block15, %splat.splatinsert52899 %34 = fadd <1 x double> %32, %33900 %35 = fmul <9 x double> %a0, %a1901 %36 = shufflevector <9 x double> %35, <9 x double> poison, <1 x i32> <i32 8>902 %37 = fadd <1 x double> %34, %36903 %38 = shufflevector <1 x double> %37, <1 x double> poison, <3 x i32> <i32 0, i32 undef, i32 undef>904 %39 = shufflevector <3 x double> %31, <3 x double> %38, <3 x i32> <i32 0, i32 1, i32 3>905 %40 = shufflevector <3 x double> %12, <3 x double> %25, <6 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5>906 %41 = shufflevector <3 x double> %39, <3 x double> poison, <6 x i32> <i32 0, i32 1, i32 2, i32 undef, i32 undef, i32 undef>907 %42 = shufflevector <6 x double> %40, <6 x double> %41, <9 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>908 ret <9 x double> %42909}910 911define <16 x float> @test_mul4x4_f32(<16 x float> %a0, <16 x float> %a1) nounwind {912; SSE-LABEL: test_mul4x4_f32:913; SSE: # %bb.0: # %entry914; SSE-NEXT: movaps %xmm0, %xmm9915; SSE-NEXT: movaps %xmm4, %xmm0916; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,0],xmm4[0,0]917; SSE-NEXT: mulps %xmm9, %xmm0918; SSE-NEXT: movaps %xmm4, %xmm8919; SSE-NEXT: shufps {{.*#+}} xmm8 = xmm8[1,1],xmm4[1,1]920; SSE-NEXT: mulps %xmm1, %xmm8921; SSE-NEXT: addps %xmm0, %xmm8922; SSE-NEXT: movaps %xmm4, %xmm0923; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,2],xmm4[2,2]924; SSE-NEXT: mulps %xmm2, %xmm0925; SSE-NEXT: addps %xmm8, %xmm0926; SSE-NEXT: shufps {{.*#+}} xmm4 = xmm4[3,3,3,3]927; SSE-NEXT: mulps %xmm3, %xmm4928; SSE-NEXT: addps %xmm4, %xmm0929; SSE-NEXT: movaps %xmm5, %xmm4930; SSE-NEXT: shufps {{.*#+}} xmm4 = xmm4[0,0],xmm5[0,0]931; SSE-NEXT: mulps %xmm9, %xmm4932; SSE-NEXT: movaps %xmm5, %xmm10933; SSE-NEXT: shufps {{.*#+}} xmm10 = xmm10[1,1],xmm5[1,1]934; SSE-NEXT: mulps %xmm1, %xmm10935; SSE-NEXT: addps %xmm4, %xmm10936; SSE-NEXT: movaps %xmm5, %xmm8937; SSE-NEXT: shufps {{.*#+}} xmm8 = xmm8[2,2],xmm5[2,2]938; SSE-NEXT: mulps %xmm2, %xmm8939; SSE-NEXT: addps %xmm10, %xmm8940; SSE-NEXT: shufps {{.*#+}} xmm5 = xmm5[3,3,3,3]941; SSE-NEXT: mulps %xmm3, %xmm5942; SSE-NEXT: addps %xmm5, %xmm8943; SSE-NEXT: movaps %xmm6, %xmm4944; SSE-NEXT: shufps {{.*#+}} xmm4 = xmm4[0,0],xmm6[0,0]945; SSE-NEXT: mulps %xmm9, %xmm4946; SSE-NEXT: movaps %xmm6, %xmm10947; SSE-NEXT: shufps {{.*#+}} xmm10 = xmm10[1,1],xmm6[1,1]948; SSE-NEXT: mulps %xmm1, %xmm10949; SSE-NEXT: addps %xmm4, %xmm10950; SSE-NEXT: movaps %xmm6, %xmm5951; SSE-NEXT: shufps {{.*#+}} xmm5 = xmm5[2,2],xmm6[2,2]952; SSE-NEXT: mulps %xmm2, %xmm5953; SSE-NEXT: addps %xmm10, %xmm5954; SSE-NEXT: shufps {{.*#+}} xmm6 = xmm6[3,3,3,3]955; SSE-NEXT: mulps %xmm3, %xmm6956; SSE-NEXT: addps %xmm6, %xmm5957; SSE-NEXT: movaps %xmm7, %xmm4958; SSE-NEXT: shufps {{.*#+}} xmm4 = xmm4[0,0],xmm7[0,0]959; SSE-NEXT: mulps %xmm9, %xmm4960; SSE-NEXT: movaps %xmm7, %xmm6961; SSE-NEXT: shufps {{.*#+}} xmm6 = xmm6[1,1],xmm7[1,1]962; SSE-NEXT: mulps %xmm1, %xmm6963; SSE-NEXT: addps %xmm4, %xmm6964; SSE-NEXT: movaps %xmm7, %xmm1965; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[2,2],xmm7[2,2]966; SSE-NEXT: mulps %xmm2, %xmm1967; SSE-NEXT: addps %xmm6, %xmm1968; SSE-NEXT: shufps {{.*#+}} xmm7 = xmm7[3,3,3,3]969; SSE-NEXT: mulps %xmm7, %xmm3970; SSE-NEXT: addps %xmm1, %xmm3971; SSE-NEXT: movaps %xmm8, %xmm1972; SSE-NEXT: movaps %xmm5, %xmm2973; SSE-NEXT: retq974;975; AVX1-LABEL: test_mul4x4_f32:976; AVX1: # %bb.0: # %entry977; AVX1-NEXT: vshufps {{.*#+}} ymm4 = ymm2[1,1,1,1,5,5,5,5]978; AVX1-NEXT: vperm2f128 {{.*#+}} ymm5 = ymm0[2,3,2,3]979; AVX1-NEXT: vmulps %ymm4, %ymm5, %ymm4980; AVX1-NEXT: vshufps {{.*#+}} ymm6 = ymm2[0,0,0,0,4,4,4,4]981; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm7982; AVX1-NEXT: vmulps %ymm6, %ymm7, %ymm0983; AVX1-NEXT: vaddps %ymm4, %ymm0, %ymm0984; AVX1-NEXT: vshufps {{.*#+}} ymm4 = ymm2[2,2,2,2,6,6,6,6]985; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm1, %ymm6986; AVX1-NEXT: vmulps %ymm4, %ymm6, %ymm4987; AVX1-NEXT: vaddps %ymm4, %ymm0, %ymm0988; AVX1-NEXT: vshufps {{.*#+}} ymm2 = ymm2[3,3,3,3,7,7,7,7]989; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm1[2,3,2,3]990; AVX1-NEXT: vmulps %ymm2, %ymm1, %ymm2991; AVX1-NEXT: vaddps %ymm2, %ymm0, %ymm0992; AVX1-NEXT: vshufps {{.*#+}} ymm2 = ymm3[1,1,1,1,5,5,5,5]993; AVX1-NEXT: vmulps %ymm2, %ymm5, %ymm2994; AVX1-NEXT: vshufps {{.*#+}} ymm4 = ymm3[0,0,0,0,4,4,4,4]995; AVX1-NEXT: vmulps %ymm4, %ymm7, %ymm4996; AVX1-NEXT: vaddps %ymm2, %ymm4, %ymm2997; AVX1-NEXT: vshufps {{.*#+}} ymm4 = ymm3[2,2,2,2,6,6,6,6]998; AVX1-NEXT: vmulps %ymm4, %ymm6, %ymm4999; AVX1-NEXT: vaddps %ymm4, %ymm2, %ymm21000; AVX1-NEXT: vshufps {{.*#+}} ymm3 = ymm3[3,3,3,3,7,7,7,7]1001; AVX1-NEXT: vmulps %ymm3, %ymm1, %ymm11002; AVX1-NEXT: vaddps %ymm1, %ymm2, %ymm11003; AVX1-NEXT: retq1004;1005; AVX2-LABEL: test_mul4x4_f32:1006; AVX2: # %bb.0: # %entry1007; AVX2-NEXT: vshufps {{.*#+}} ymm4 = ymm2[1,1,1,1,5,5,5,5]1008; AVX2-NEXT: vpermpd {{.*#+}} ymm5 = ymm0[2,3,2,3]1009; AVX2-NEXT: vmulps %ymm4, %ymm5, %ymm41010; AVX2-NEXT: vshufps {{.*#+}} ymm6 = ymm2[0,0,0,0,4,4,4,4]1011; AVX2-NEXT: vpermpd {{.*#+}} ymm7 = ymm0[0,1,0,1]1012; AVX2-NEXT: vmulps %ymm6, %ymm7, %ymm01013; AVX2-NEXT: vaddps %ymm4, %ymm0, %ymm01014; AVX2-NEXT: vshufps {{.*#+}} ymm4 = ymm2[2,2,2,2,6,6,6,6]1015; AVX2-NEXT: vpermpd {{.*#+}} ymm6 = ymm1[0,1,0,1]1016; AVX2-NEXT: vmulps %ymm4, %ymm6, %ymm41017; AVX2-NEXT: vaddps %ymm4, %ymm0, %ymm01018; AVX2-NEXT: vshufps {{.*#+}} ymm2 = ymm2[3,3,3,3,7,7,7,7]1019; AVX2-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[2,3,2,3]1020; AVX2-NEXT: vmulps %ymm2, %ymm1, %ymm21021; AVX2-NEXT: vaddps %ymm2, %ymm0, %ymm01022; AVX2-NEXT: vshufps {{.*#+}} ymm2 = ymm3[1,1,1,1,5,5,5,5]1023; AVX2-NEXT: vmulps %ymm2, %ymm5, %ymm21024; AVX2-NEXT: vshufps {{.*#+}} ymm4 = ymm3[0,0,0,0,4,4,4,4]1025; AVX2-NEXT: vmulps %ymm4, %ymm7, %ymm41026; AVX2-NEXT: vaddps %ymm2, %ymm4, %ymm21027; AVX2-NEXT: vshufps {{.*#+}} ymm4 = ymm3[2,2,2,2,6,6,6,6]1028; AVX2-NEXT: vmulps %ymm4, %ymm6, %ymm41029; AVX2-NEXT: vaddps %ymm4, %ymm2, %ymm21030; AVX2-NEXT: vshufps {{.*#+}} ymm3 = ymm3[3,3,3,3,7,7,7,7]1031; AVX2-NEXT: vmulps %ymm3, %ymm1, %ymm11032; AVX2-NEXT: vaddps %ymm1, %ymm2, %ymm11033; AVX2-NEXT: retq1034;1035; AVX512-LABEL: test_mul4x4_f32:1036; AVX512: # %bb.0: # %entry1037; AVX512-NEXT: vshufps {{.*#+}} zmm2 = zmm1[1,1,1,1,5,5,5,5,9,9,9,9,13,13,13,13]1038; AVX512-NEXT: vshuff64x2 {{.*#+}} zmm3 = zmm0[2,3,2,3,2,3,2,3]1039; AVX512-NEXT: vmulps %zmm2, %zmm3, %zmm21040; AVX512-NEXT: vshufps {{.*#+}} zmm3 = zmm1[0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12]1041; AVX512-NEXT: vshuff64x2 {{.*#+}} zmm4 = zmm0[0,1,0,1,0,1,0,1]1042; AVX512-NEXT: vmulps %zmm3, %zmm4, %zmm31043; AVX512-NEXT: vaddps %zmm2, %zmm3, %zmm21044; AVX512-NEXT: vshufps {{.*#+}} zmm3 = zmm1[2,2,2,2,6,6,6,6,10,10,10,10,14,14,14,14]1045; AVX512-NEXT: vshuff64x2 {{.*#+}} zmm4 = zmm0[4,5,4,5,4,5,4,5]1046; AVX512-NEXT: vmulps %zmm3, %zmm4, %zmm31047; AVX512-NEXT: vaddps %zmm3, %zmm2, %zmm21048; AVX512-NEXT: vshufps {{.*#+}} zmm1 = zmm1[3,3,3,3,7,7,7,7,11,11,11,11,15,15,15,15]1049; AVX512-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[6,7,6,7,6,7,6,7]1050; AVX512-NEXT: vmulps %zmm1, %zmm0, %zmm01051; AVX512-NEXT: vaddps %zmm0, %zmm2, %zmm01052; AVX512-NEXT: retq1053entry:1054 %split = shufflevector <16 x float> %a0, <16 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1055 %split1 = shufflevector <16 x float> %a0, <16 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>1056 %split2 = shufflevector <16 x float> %a0, <16 x float> poison, <4 x i32> <i32 8, i32 9, i32 10, i32 11>1057 %split3 = shufflevector <16 x float> %a0, <16 x float> poison, <4 x i32> <i32 12, i32 13, i32 14, i32 15>1058 %splat.splat = shufflevector <16 x float> %a1, <16 x float> undef, <4 x i32> zeroinitializer1059 %0 = fmul <4 x float> %split, %splat.splat1060 %splat.splat10 = shufflevector <16 x float> %a1, <16 x float> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1>1061 %1 = fmul <4 x float> %split1, %splat.splat101062 %2 = fadd <4 x float> %0, %11063 %splat.splat13 = shufflevector <16 x float> %a1, <16 x float> undef, <4 x i32> <i32 2, i32 2, i32 2, i32 2>1064 %3 = fmul <4 x float> %split2, %splat.splat131065 %4 = fadd <4 x float> %2, %31066 %splat.splat16 = shufflevector <16 x float> %a1, <16 x float> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3>1067 %5 = fmul <4 x float> %split3, %splat.splat161068 %6 = fadd <4 x float> %4, %51069 %splat.splat19 = shufflevector <16 x float> %a1, <16 x float> undef, <4 x i32> <i32 4, i32 4, i32 4, i32 4>1070 %7 = fmul <4 x float> %split, %splat.splat191071 %splat.splat22 = shufflevector <16 x float> %a1, <16 x float> undef, <4 x i32> <i32 5, i32 5, i32 5, i32 5>1072 %8 = fmul <4 x float> %split1, %splat.splat221073 %9 = fadd <4 x float> %7, %81074 %splat.splat25 = shufflevector <16 x float> %a1, <16 x float> undef, <4 x i32> <i32 6, i32 6, i32 6, i32 6>1075 %10 = fmul <4 x float> %split2, %splat.splat251076 %11 = fadd <4 x float> %9, %101077 %splat.splat28 = shufflevector <16 x float> %a1, <16 x float> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7>1078 %12 = fmul <4 x float> %split3, %splat.splat281079 %13 = fadd <4 x float> %11, %121080 %splat.splat31 = shufflevector <16 x float> %a1, <16 x float> undef, <4 x i32> <i32 8, i32 8, i32 8, i32 8>1081 %14 = fmul <4 x float> %split, %splat.splat311082 %splat.splat34 = shufflevector <16 x float> %a1, <16 x float> undef, <4 x i32> <i32 9, i32 9, i32 9, i32 9>1083 %15 = fmul <4 x float> %split1, %splat.splat341084 %16 = fadd <4 x float> %14, %151085 %splat.splat37 = shufflevector <16 x float> %a1, <16 x float> undef, <4 x i32> <i32 10, i32 10, i32 10, i32 10>1086 %17 = fmul <4 x float> %split2, %splat.splat371087 %18 = fadd <4 x float> %16, %171088 %splat.splat40 = shufflevector <16 x float> %a1, <16 x float> undef, <4 x i32> <i32 11, i32 11, i32 11, i32 11>1089 %19 = fmul <4 x float> %split3, %splat.splat401090 %20 = fadd <4 x float> %18, %191091 %splat.splat43 = shufflevector <16 x float> %a1, <16 x float> undef, <4 x i32> <i32 12, i32 12, i32 12, i32 12>1092 %21 = fmul <4 x float> %split, %splat.splat431093 %splat.splat46 = shufflevector <16 x float> %a1, <16 x float> undef, <4 x i32> <i32 13, i32 13, i32 13, i32 13>1094 %22 = fmul <4 x float> %split1, %splat.splat461095 %23 = fadd <4 x float> %21, %221096 %splat.splat49 = shufflevector <16 x float> %a1, <16 x float> undef, <4 x i32> <i32 14, i32 14, i32 14, i32 14>1097 %24 = fmul <4 x float> %split2, %splat.splat491098 %25 = fadd <4 x float> %23, %241099 %splat.splat52 = shufflevector <16 x float> %a1, <16 x float> undef, <4 x i32> <i32 15, i32 15, i32 15, i32 15>1100 %26 = fmul <4 x float> %split3, %splat.splat521101 %27 = fadd <4 x float> %25, %261102 %28 = shufflevector <4 x float> %6, <4 x float> %13, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1103 %29 = shufflevector <4 x float> %20, <4 x float> %27, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1104 %30 = shufflevector <8 x float> %28, <8 x float> %29, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>1105 ret <16 x float> %301106}1107 1108define <16 x double> @test_mul4x4_f64(<16 x double> %a0, <16 x double> %a1) nounwind {1109; SSE-LABEL: test_mul4x4_f64:1110; SSE: # %bb.0: # %entry1111; SSE-NEXT: movaps %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1112; SSE-NEXT: movapd %xmm5, %xmm61113; SSE-NEXT: movapd %xmm4, %xmm51114; SSE-NEXT: movq %rdi, %rax1115; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm111116; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm91117; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm121118; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm81119; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm101120; SSE-NEXT: movapd %xmm10, %xmm131121; SSE-NEXT: unpcklpd {{.*#+}} xmm13 = xmm13[0],xmm10[0]1122; SSE-NEXT: movapd %xmm1, %xmm141123; SSE-NEXT: mulpd %xmm13, %xmm141124; SSE-NEXT: mulpd %xmm0, %xmm131125; SSE-NEXT: unpckhpd {{.*#+}} xmm10 = xmm10[1,1]1126; SSE-NEXT: movapd %xmm3, %xmm151127; SSE-NEXT: mulpd %xmm10, %xmm151128; SSE-NEXT: addpd %xmm14, %xmm151129; SSE-NEXT: mulpd %xmm2, %xmm101130; SSE-NEXT: movapd %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1131; SSE-NEXT: addpd %xmm13, %xmm101132; SSE-NEXT: movapd %xmm8, %xmm131133; SSE-NEXT: unpcklpd {{.*#+}} xmm13 = xmm13[0],xmm8[0]1134; SSE-NEXT: movapd %xmm4, %xmm141135; SSE-NEXT: mulpd %xmm13, %xmm141136; SSE-NEXT: addpd %xmm10, %xmm141137; SSE-NEXT: movapd %xmm6, %xmm41138; SSE-NEXT: mulpd %xmm6, %xmm131139; SSE-NEXT: addpd %xmm15, %xmm131140; SSE-NEXT: unpckhpd {{.*#+}} xmm8 = xmm8[1,1]1141; SSE-NEXT: movapd %xmm7, %xmm101142; SSE-NEXT: mulpd %xmm8, %xmm101143; SSE-NEXT: addpd %xmm13, %xmm101144; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload1145; SSE-NEXT: mulpd %xmm6, %xmm81146; SSE-NEXT: addpd %xmm14, %xmm81147; SSE-NEXT: movapd %xmm12, %xmm131148; SSE-NEXT: unpcklpd {{.*#+}} xmm13 = xmm13[0],xmm12[0]1149; SSE-NEXT: movapd %xmm1, %xmm141150; SSE-NEXT: mulpd %xmm13, %xmm141151; SSE-NEXT: mulpd %xmm0, %xmm131152; SSE-NEXT: unpckhpd {{.*#+}} xmm12 = xmm12[1,1]1153; SSE-NEXT: movapd %xmm3, %xmm151154; SSE-NEXT: mulpd %xmm12, %xmm151155; SSE-NEXT: addpd %xmm14, %xmm151156; SSE-NEXT: mulpd %xmm2, %xmm121157; SSE-NEXT: addpd %xmm13, %xmm121158; SSE-NEXT: movapd %xmm9, %xmm131159; SSE-NEXT: unpcklpd {{.*#+}} xmm13 = xmm13[0],xmm9[0]1160; SSE-NEXT: movapd %xmm5, %xmm141161; SSE-NEXT: mulpd %xmm13, %xmm141162; SSE-NEXT: addpd %xmm12, %xmm141163; SSE-NEXT: mulpd %xmm4, %xmm131164; SSE-NEXT: movapd %xmm4, %xmm21165; SSE-NEXT: addpd %xmm15, %xmm131166; SSE-NEXT: unpckhpd {{.*#+}} xmm9 = xmm9[1,1]1167; SSE-NEXT: movapd %xmm7, %xmm121168; SSE-NEXT: mulpd %xmm9, %xmm121169; SSE-NEXT: addpd %xmm13, %xmm121170; SSE-NEXT: mulpd %xmm6, %xmm91171; SSE-NEXT: addpd %xmm14, %xmm91172; SSE-NEXT: movapd %xmm11, %xmm141173; SSE-NEXT: unpcklpd {{.*#+}} xmm14 = xmm14[0],xmm11[0]1174; SSE-NEXT: movapd %xmm1, %xmm131175; SSE-NEXT: mulpd %xmm14, %xmm131176; SSE-NEXT: unpckhpd {{.*#+}} xmm11 = xmm11[1,1]1177; SSE-NEXT: movapd %xmm3, %xmm151178; SSE-NEXT: mulpd %xmm11, %xmm151179; SSE-NEXT: addpd %xmm13, %xmm151180; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm131181; SSE-NEXT: mulpd %xmm0, %xmm141182; SSE-NEXT: movapd %xmm0, %xmm61183; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1184; SSE-NEXT: mulpd %xmm0, %xmm111185; SSE-NEXT: addpd %xmm14, %xmm111186; SSE-NEXT: movapd %xmm13, %xmm141187; SSE-NEXT: unpcklpd {{.*#+}} xmm14 = xmm14[0],xmm13[0]1188; SSE-NEXT: movapd %xmm5, %xmm41189; SSE-NEXT: mulpd %xmm14, %xmm41190; SSE-NEXT: addpd %xmm11, %xmm41191; SSE-NEXT: mulpd %xmm2, %xmm141192; SSE-NEXT: addpd %xmm15, %xmm141193; SSE-NEXT: unpckhpd {{.*#+}} xmm13 = xmm13[1,1]1194; SSE-NEXT: movapd %xmm7, %xmm111195; SSE-NEXT: mulpd %xmm13, %xmm111196; SSE-NEXT: addpd %xmm14, %xmm111197; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm141198; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload1199; SSE-NEXT: mulpd %xmm15, %xmm131200; SSE-NEXT: addpd %xmm4, %xmm131201; SSE-NEXT: movapd %xmm14, %xmm41202; SSE-NEXT: unpcklpd {{.*#+}} xmm4 = xmm4[0],xmm14[0]1203; SSE-NEXT: mulpd %xmm4, %xmm11204; SSE-NEXT: mulpd %xmm6, %xmm41205; SSE-NEXT: unpckhpd {{.*#+}} xmm14 = xmm14[1,1]1206; SSE-NEXT: mulpd %xmm14, %xmm31207; SSE-NEXT: addpd %xmm1, %xmm31208; SSE-NEXT: mulpd %xmm0, %xmm141209; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm01210; SSE-NEXT: addpd %xmm4, %xmm141211; SSE-NEXT: movapd %xmm0, %xmm11212; SSE-NEXT: unpcklpd {{.*#+}} xmm1 = xmm1[0],xmm0[0]1213; SSE-NEXT: mulpd %xmm1, %xmm51214; SSE-NEXT: addpd %xmm14, %xmm51215; SSE-NEXT: mulpd %xmm2, %xmm11216; SSE-NEXT: addpd %xmm3, %xmm11217; SSE-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1,1]1218; SSE-NEXT: mulpd %xmm0, %xmm71219; SSE-NEXT: addpd %xmm1, %xmm71220; SSE-NEXT: mulpd %xmm15, %xmm01221; SSE-NEXT: addpd %xmm5, %xmm01222; SSE-NEXT: movapd %xmm7, 112(%rdi)1223; SSE-NEXT: movapd %xmm0, 96(%rdi)1224; SSE-NEXT: movapd %xmm11, 80(%rdi)1225; SSE-NEXT: movapd %xmm13, 64(%rdi)1226; SSE-NEXT: movapd %xmm12, 48(%rdi)1227; SSE-NEXT: movapd %xmm9, 32(%rdi)1228; SSE-NEXT: movapd %xmm10, 16(%rdi)1229; SSE-NEXT: movapd %xmm8, (%rdi)1230; SSE-NEXT: retq1231;1232; AVX1-LABEL: test_mul4x4_f64:1233; AVX1: # %bb.0: # %entry1234; AVX1-NEXT: vmovddup {{.*#+}} xmm8 = xmm4[0,0]1235; AVX1-NEXT: vinsertf128 $1, %xmm8, %ymm8, %ymm81236; AVX1-NEXT: vmulpd %ymm0, %ymm8, %ymm81237; AVX1-NEXT: vshufpd {{.*#+}} xmm9 = xmm4[1,1]1238; AVX1-NEXT: vinsertf128 $1, %xmm9, %ymm9, %ymm91239; AVX1-NEXT: vmulpd %ymm1, %ymm9, %ymm91240; AVX1-NEXT: vaddpd %ymm9, %ymm8, %ymm81241; AVX1-NEXT: vperm2f128 {{.*#+}} ymm4 = ymm4[2,3,2,3]1242; AVX1-NEXT: vmovddup {{.*#+}} ymm9 = ymm4[0,0,2,2]1243; AVX1-NEXT: vmulpd %ymm2, %ymm9, %ymm91244; AVX1-NEXT: vaddpd %ymm9, %ymm8, %ymm81245; AVX1-NEXT: vshufpd {{.*#+}} ymm4 = ymm4[1,1,3,3]1246; AVX1-NEXT: vmulpd %ymm4, %ymm3, %ymm41247; AVX1-NEXT: vaddpd %ymm4, %ymm8, %ymm41248; AVX1-NEXT: vmovddup {{.*#+}} xmm8 = xmm5[0,0]1249; AVX1-NEXT: vinsertf128 $1, %xmm8, %ymm8, %ymm81250; AVX1-NEXT: vmulpd %ymm0, %ymm8, %ymm81251; AVX1-NEXT: vshufpd {{.*#+}} xmm9 = xmm5[1,1]1252; AVX1-NEXT: vinsertf128 $1, %xmm9, %ymm9, %ymm91253; AVX1-NEXT: vmulpd %ymm1, %ymm9, %ymm91254; AVX1-NEXT: vaddpd %ymm9, %ymm8, %ymm81255; AVX1-NEXT: vperm2f128 {{.*#+}} ymm5 = ymm5[2,3,2,3]1256; AVX1-NEXT: vmovddup {{.*#+}} ymm9 = ymm5[0,0,2,2]1257; AVX1-NEXT: vmulpd %ymm2, %ymm9, %ymm91258; AVX1-NEXT: vaddpd %ymm9, %ymm8, %ymm81259; AVX1-NEXT: vshufpd {{.*#+}} ymm5 = ymm5[1,1,3,3]1260; AVX1-NEXT: vmulpd %ymm5, %ymm3, %ymm51261; AVX1-NEXT: vaddpd %ymm5, %ymm8, %ymm51262; AVX1-NEXT: vmovddup {{.*#+}} xmm8 = xmm6[0,0]1263; AVX1-NEXT: vinsertf128 $1, %xmm8, %ymm8, %ymm81264; AVX1-NEXT: vmulpd %ymm0, %ymm8, %ymm81265; AVX1-NEXT: vshufpd {{.*#+}} xmm9 = xmm6[1,1]1266; AVX1-NEXT: vinsertf128 $1, %xmm9, %ymm9, %ymm91267; AVX1-NEXT: vmulpd %ymm1, %ymm9, %ymm91268; AVX1-NEXT: vaddpd %ymm9, %ymm8, %ymm81269; AVX1-NEXT: vperm2f128 {{.*#+}} ymm6 = ymm6[2,3,2,3]1270; AVX1-NEXT: vmovddup {{.*#+}} ymm9 = ymm6[0,0,2,2]1271; AVX1-NEXT: vmulpd %ymm2, %ymm9, %ymm91272; AVX1-NEXT: vaddpd %ymm9, %ymm8, %ymm81273; AVX1-NEXT: vshufpd {{.*#+}} ymm6 = ymm6[1,1,3,3]1274; AVX1-NEXT: vmulpd %ymm6, %ymm3, %ymm61275; AVX1-NEXT: vaddpd %ymm6, %ymm8, %ymm61276; AVX1-NEXT: vmovddup {{.*#+}} xmm8 = xmm7[0,0]1277; AVX1-NEXT: vinsertf128 $1, %xmm8, %ymm8, %ymm81278; AVX1-NEXT: vmulpd %ymm0, %ymm8, %ymm01279; AVX1-NEXT: vshufpd {{.*#+}} xmm8 = xmm7[1,1]1280; AVX1-NEXT: vinsertf128 $1, %xmm8, %ymm8, %ymm81281; AVX1-NEXT: vmulpd %ymm1, %ymm8, %ymm11282; AVX1-NEXT: vaddpd %ymm1, %ymm0, %ymm01283; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm7[2,3,2,3]1284; AVX1-NEXT: vmovddup {{.*#+}} ymm7 = ymm1[0,0,2,2]1285; AVX1-NEXT: vmulpd %ymm7, %ymm2, %ymm21286; AVX1-NEXT: vaddpd %ymm2, %ymm0, %ymm01287; AVX1-NEXT: vshufpd {{.*#+}} ymm1 = ymm1[1,1,3,3]1288; AVX1-NEXT: vmulpd %ymm1, %ymm3, %ymm11289; AVX1-NEXT: vaddpd %ymm1, %ymm0, %ymm31290; AVX1-NEXT: vmovapd %ymm4, %ymm01291; AVX1-NEXT: vmovapd %ymm5, %ymm11292; AVX1-NEXT: vmovapd %ymm6, %ymm21293; AVX1-NEXT: retq1294;1295; AVX2-LABEL: test_mul4x4_f64:1296; AVX2: # %bb.0: # %entry1297; AVX2-NEXT: vbroadcastsd %xmm4, %ymm81298; AVX2-NEXT: vmulpd %ymm0, %ymm8, %ymm81299; AVX2-NEXT: vpermpd {{.*#+}} ymm9 = ymm4[1,1,1,1]1300; AVX2-NEXT: vmulpd %ymm1, %ymm9, %ymm91301; AVX2-NEXT: vaddpd %ymm9, %ymm8, %ymm81302; AVX2-NEXT: vpermpd {{.*#+}} ymm9 = ymm4[2,2,2,2]1303; AVX2-NEXT: vmulpd %ymm2, %ymm9, %ymm91304; AVX2-NEXT: vaddpd %ymm9, %ymm8, %ymm81305; AVX2-NEXT: vpermpd {{.*#+}} ymm4 = ymm4[3,3,3,3]1306; AVX2-NEXT: vmulpd %ymm4, %ymm3, %ymm41307; AVX2-NEXT: vaddpd %ymm4, %ymm8, %ymm41308; AVX2-NEXT: vbroadcastsd %xmm5, %ymm81309; AVX2-NEXT: vmulpd %ymm0, %ymm8, %ymm81310; AVX2-NEXT: vpermpd {{.*#+}} ymm9 = ymm5[1,1,1,1]1311; AVX2-NEXT: vmulpd %ymm1, %ymm9, %ymm91312; AVX2-NEXT: vaddpd %ymm9, %ymm8, %ymm81313; AVX2-NEXT: vpermpd {{.*#+}} ymm9 = ymm5[2,2,2,2]1314; AVX2-NEXT: vmulpd %ymm2, %ymm9, %ymm91315; AVX2-NEXT: vaddpd %ymm9, %ymm8, %ymm81316; AVX2-NEXT: vpermpd {{.*#+}} ymm5 = ymm5[3,3,3,3]1317; AVX2-NEXT: vmulpd %ymm5, %ymm3, %ymm51318; AVX2-NEXT: vaddpd %ymm5, %ymm8, %ymm51319; AVX2-NEXT: vbroadcastsd %xmm6, %ymm81320; AVX2-NEXT: vmulpd %ymm0, %ymm8, %ymm81321; AVX2-NEXT: vpermpd {{.*#+}} ymm9 = ymm6[1,1,1,1]1322; AVX2-NEXT: vmulpd %ymm1, %ymm9, %ymm91323; AVX2-NEXT: vaddpd %ymm9, %ymm8, %ymm81324; AVX2-NEXT: vpermpd {{.*#+}} ymm9 = ymm6[2,2,2,2]1325; AVX2-NEXT: vmulpd %ymm2, %ymm9, %ymm91326; AVX2-NEXT: vaddpd %ymm9, %ymm8, %ymm81327; AVX2-NEXT: vpermpd {{.*#+}} ymm6 = ymm6[3,3,3,3]1328; AVX2-NEXT: vmulpd %ymm6, %ymm3, %ymm61329; AVX2-NEXT: vaddpd %ymm6, %ymm8, %ymm61330; AVX2-NEXT: vbroadcastsd %xmm7, %ymm81331; AVX2-NEXT: vmulpd %ymm0, %ymm8, %ymm01332; AVX2-NEXT: vpermpd {{.*#+}} ymm8 = ymm7[1,1,1,1]1333; AVX2-NEXT: vmulpd %ymm1, %ymm8, %ymm11334; AVX2-NEXT: vaddpd %ymm1, %ymm0, %ymm01335; AVX2-NEXT: vpermpd {{.*#+}} ymm1 = ymm7[2,2,2,2]1336; AVX2-NEXT: vmulpd %ymm1, %ymm2, %ymm11337; AVX2-NEXT: vaddpd %ymm1, %ymm0, %ymm01338; AVX2-NEXT: vpermpd {{.*#+}} ymm1 = ymm7[3,3,3,3]1339; AVX2-NEXT: vmulpd %ymm1, %ymm3, %ymm11340; AVX2-NEXT: vaddpd %ymm1, %ymm0, %ymm31341; AVX2-NEXT: vmovapd %ymm4, %ymm01342; AVX2-NEXT: vmovapd %ymm5, %ymm11343; AVX2-NEXT: vmovapd %ymm6, %ymm21344; AVX2-NEXT: retq1345;1346; AVX512-LABEL: test_mul4x4_f64:1347; AVX512: # %bb.0: # %entry1348; AVX512-NEXT: vpermpd {{.*#+}} zmm4 = zmm2[1,1,1,1,5,5,5,5]1349; AVX512-NEXT: vshuff64x2 {{.*#+}} zmm5 = zmm0[4,5,6,7,4,5,6,7]1350; AVX512-NEXT: vmulpd %zmm4, %zmm5, %zmm41351; AVX512-NEXT: vpermpd {{.*#+}} zmm6 = zmm2[0,0,0,0,4,4,4,4]1352; AVX512-NEXT: vinsertf64x4 $1, %ymm0, %zmm0, %zmm71353; AVX512-NEXT: vmulpd %zmm6, %zmm7, %zmm01354; AVX512-NEXT: vaddpd %zmm4, %zmm0, %zmm01355; AVX512-NEXT: vpermpd {{.*#+}} zmm4 = zmm2[2,2,2,2,6,6,6,6]1356; AVX512-NEXT: vinsertf64x4 $1, %ymm1, %zmm1, %zmm61357; AVX512-NEXT: vmulpd %zmm4, %zmm6, %zmm41358; AVX512-NEXT: vaddpd %zmm4, %zmm0, %zmm01359; AVX512-NEXT: vpermpd {{.*#+}} zmm2 = zmm2[3,3,3,3,7,7,7,7]1360; AVX512-NEXT: vshuff64x2 {{.*#+}} zmm1 = zmm1[4,5,6,7,4,5,6,7]1361; AVX512-NEXT: vmulpd %zmm2, %zmm1, %zmm21362; AVX512-NEXT: vaddpd %zmm2, %zmm0, %zmm01363; AVX512-NEXT: vpermpd {{.*#+}} zmm2 = zmm3[1,1,1,1,5,5,5,5]1364; AVX512-NEXT: vmulpd %zmm2, %zmm5, %zmm21365; AVX512-NEXT: vpermpd {{.*#+}} zmm4 = zmm3[0,0,0,0,4,4,4,4]1366; AVX512-NEXT: vmulpd %zmm4, %zmm7, %zmm41367; AVX512-NEXT: vaddpd %zmm2, %zmm4, %zmm21368; AVX512-NEXT: vpermpd {{.*#+}} zmm4 = zmm3[2,2,2,2,6,6,6,6]1369; AVX512-NEXT: vmulpd %zmm4, %zmm6, %zmm41370; AVX512-NEXT: vaddpd %zmm4, %zmm2, %zmm21371; AVX512-NEXT: vpermpd {{.*#+}} zmm3 = zmm3[3,3,3,3,7,7,7,7]1372; AVX512-NEXT: vmulpd %zmm3, %zmm1, %zmm11373; AVX512-NEXT: vaddpd %zmm1, %zmm2, %zmm11374; AVX512-NEXT: retq1375entry:1376 %split = shufflevector <16 x double> %a0, <16 x double> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1377 %split1 = shufflevector <16 x double> %a0, <16 x double> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>1378 %split2 = shufflevector <16 x double> %a0, <16 x double> poison, <4 x i32> <i32 8, i32 9, i32 10, i32 11>1379 %split3 = shufflevector <16 x double> %a0, <16 x double> poison, <4 x i32> <i32 12, i32 13, i32 14, i32 15>1380 %splat.splat = shufflevector <16 x double> %a1, <16 x double> undef, <4 x i32> zeroinitializer1381 %0 = fmul <4 x double> %split, %splat.splat1382 %splat.splat10 = shufflevector <16 x double> %a1, <16 x double> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1>1383 %1 = fmul <4 x double> %split1, %splat.splat101384 %2 = fadd <4 x double> %0, %11385 %splat.splat13 = shufflevector <16 x double> %a1, <16 x double> undef, <4 x i32> <i32 2, i32 2, i32 2, i32 2>1386 %3 = fmul <4 x double> %split2, %splat.splat131387 %4 = fadd <4 x double> %2, %31388 %splat.splat16 = shufflevector <16 x double> %a1, <16 x double> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3>1389 %5 = fmul <4 x double> %split3, %splat.splat161390 %6 = fadd <4 x double> %4, %51391 %splat.splat19 = shufflevector <16 x double> %a1, <16 x double> undef, <4 x i32> <i32 4, i32 4, i32 4, i32 4>1392 %7 = fmul <4 x double> %split, %splat.splat191393 %splat.splat22 = shufflevector <16 x double> %a1, <16 x double> undef, <4 x i32> <i32 5, i32 5, i32 5, i32 5>1394 %8 = fmul <4 x double> %split1, %splat.splat221395 %9 = fadd <4 x double> %7, %81396 %splat.splat25 = shufflevector <16 x double> %a1, <16 x double> undef, <4 x i32> <i32 6, i32 6, i32 6, i32 6>1397 %10 = fmul <4 x double> %split2, %splat.splat251398 %11 = fadd <4 x double> %9, %101399 %splat.splat28 = shufflevector <16 x double> %a1, <16 x double> undef, <4 x i32> <i32 7, i32 7, i32 7, i32 7>1400 %12 = fmul <4 x double> %split3, %splat.splat281401 %13 = fadd <4 x double> %11, %121402 %splat.splat31 = shufflevector <16 x double> %a1, <16 x double> undef, <4 x i32> <i32 8, i32 8, i32 8, i32 8>1403 %14 = fmul <4 x double> %split, %splat.splat311404 %splat.splat34 = shufflevector <16 x double> %a1, <16 x double> undef, <4 x i32> <i32 9, i32 9, i32 9, i32 9>1405 %15 = fmul <4 x double> %split1, %splat.splat341406 %16 = fadd <4 x double> %14, %151407 %splat.splat37 = shufflevector <16 x double> %a1, <16 x double> undef, <4 x i32> <i32 10, i32 10, i32 10, i32 10>1408 %17 = fmul <4 x double> %split2, %splat.splat371409 %18 = fadd <4 x double> %16, %171410 %splat.splat40 = shufflevector <16 x double> %a1, <16 x double> undef, <4 x i32> <i32 11, i32 11, i32 11, i32 11>1411 %19 = fmul <4 x double> %split3, %splat.splat401412 %20 = fadd <4 x double> %18, %191413 %splat.splat43 = shufflevector <16 x double> %a1, <16 x double> undef, <4 x i32> <i32 12, i32 12, i32 12, i32 12>1414 %21 = fmul <4 x double> %split, %splat.splat431415 %splat.splat46 = shufflevector <16 x double> %a1, <16 x double> undef, <4 x i32> <i32 13, i32 13, i32 13, i32 13>1416 %22 = fmul <4 x double> %split1, %splat.splat461417 %23 = fadd <4 x double> %21, %221418 %splat.splat49 = shufflevector <16 x double> %a1, <16 x double> undef, <4 x i32> <i32 14, i32 14, i32 14, i32 14>1419 %24 = fmul <4 x double> %split2, %splat.splat491420 %25 = fadd <4 x double> %23, %241421 %splat.splat52 = shufflevector <16 x double> %a1, <16 x double> undef, <4 x i32> <i32 15, i32 15, i32 15, i32 15>1422 %26 = fmul <4 x double> %split3, %splat.splat521423 %27 = fadd <4 x double> %25, %261424 %28 = shufflevector <4 x double> %6, <4 x double> %13, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1425 %29 = shufflevector <4 x double> %20, <4 x double> %27, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1426 %30 = shufflevector <8 x double> %28, <8 x double> %29, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>1427 ret <16 x double> %301428}1429 1430define <64 x float> @test_mul8x8_f32(<64 x float> %a0, <64 x float> %a1) nounwind {1431; SSE-LABEL: test_mul8x8_f32:1432; SSE: # %bb.0: # %entry1433; SSE-NEXT: subq $120, %rsp1434; SSE-NEXT: movaps %xmm5, %xmm111435; SSE-NEXT: movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1436; SSE-NEXT: movaps %xmm1, %xmm91437; SSE-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1438; SSE-NEXT: movq %rdi, %rax1439; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm81440; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm131441; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm141442; SSE-NEXT: movaps %xmm14, %xmm151443; SSE-NEXT: shufps {{.*#+}} xmm15 = xmm15[0,0],xmm14[0,0]1444; SSE-NEXT: movaps %xmm1, %xmm51445; SSE-NEXT: mulps %xmm15, %xmm51446; SSE-NEXT: mulps %xmm0, %xmm151447; SSE-NEXT: movaps %xmm14, %xmm01448; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm14[1,1]1449; SSE-NEXT: movaps %xmm3, %xmm101450; SSE-NEXT: movaps %xmm3, %xmm121451; SSE-NEXT: mulps %xmm0, %xmm101452; SSE-NEXT: addps %xmm5, %xmm101453; SSE-NEXT: mulps %xmm2, %xmm01454; SSE-NEXT: addps %xmm15, %xmm01455; SSE-NEXT: movaps %xmm14, %xmm11456; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[2,2],xmm14[2,2]1457; SSE-NEXT: movaps %xmm4, %xmm21458; SSE-NEXT: movaps %xmm4, %xmm151459; SSE-NEXT: mulps %xmm1, %xmm21460; SSE-NEXT: addps %xmm0, %xmm21461; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm51462; SSE-NEXT: mulps %xmm11, %xmm11463; SSE-NEXT: addps %xmm10, %xmm11464; SSE-NEXT: shufps {{.*#+}} xmm14 = xmm14[3,3,3,3]1465; SSE-NEXT: movaps %xmm7, %xmm31466; SSE-NEXT: mulps %xmm14, %xmm31467; SSE-NEXT: addps %xmm1, %xmm31468; SSE-NEXT: mulps %xmm6, %xmm141469; SSE-NEXT: addps %xmm2, %xmm141470; SSE-NEXT: movaps %xmm5, %xmm11471; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0],xmm5[0,0]1472; SSE-NEXT: movaps %xmm13, %xmm21473; SSE-NEXT: mulps %xmm1, %xmm21474; SSE-NEXT: addps %xmm14, %xmm21475; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm11476; SSE-NEXT: addps %xmm3, %xmm11477; SSE-NEXT: movaps %xmm5, %xmm01478; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm5[1,1]1479; SSE-NEXT: movaps %xmm8, %xmm31480; SSE-NEXT: mulps %xmm0, %xmm31481; SSE-NEXT: addps %xmm1, %xmm31482; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm01483; SSE-NEXT: addps %xmm2, %xmm01484; SSE-NEXT: movaps %xmm5, %xmm11485; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[2,2],xmm5[2,2]1486; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm21487; SSE-NEXT: mulps %xmm1, %xmm21488; SSE-NEXT: addps %xmm0, %xmm21489; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm11490; SSE-NEXT: addps %xmm3, %xmm11491; SSE-NEXT: shufps {{.*#+}} xmm5 = xmm5[3,3,3,3]1492; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm01493; SSE-NEXT: mulps %xmm5, %xmm01494; SSE-NEXT: addps %xmm1, %xmm01495; SSE-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1496; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm51497; SSE-NEXT: addps %xmm2, %xmm51498; SSE-NEXT: movaps %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1499; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm01500; SSE-NEXT: movaps %xmm0, %xmm11501; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[0,0]1502; SSE-NEXT: movaps %xmm9, %xmm21503; SSE-NEXT: mulps %xmm1, %xmm21504; SSE-NEXT: movaps %xmm0, %xmm31505; SSE-NEXT: shufps {{.*#+}} xmm3 = xmm3[1,1],xmm0[1,1]1506; SSE-NEXT: movaps %xmm12, %xmm41507; SSE-NEXT: mulps %xmm3, %xmm41508; SSE-NEXT: addps %xmm2, %xmm41509; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload1510; SSE-NEXT: mulps %xmm10, %xmm11511; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload1512; SSE-NEXT: mulps %xmm13, %xmm31513; SSE-NEXT: addps %xmm1, %xmm31514; SSE-NEXT: movaps %xmm0, %xmm11515; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[2,2],xmm0[2,2]1516; SSE-NEXT: movaps %xmm15, %xmm21517; SSE-NEXT: mulps %xmm1, %xmm21518; SSE-NEXT: addps %xmm3, %xmm21519; SSE-NEXT: movaps %xmm11, %xmm81520; SSE-NEXT: mulps %xmm11, %xmm11521; SSE-NEXT: addps %xmm4, %xmm11522; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1523; SSE-NEXT: movaps %xmm7, %xmm31524; SSE-NEXT: mulps %xmm0, %xmm31525; SSE-NEXT: addps %xmm1, %xmm31526; SSE-NEXT: movaps %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1527; SSE-NEXT: mulps %xmm6, %xmm01528; SSE-NEXT: addps %xmm2, %xmm01529; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm41530; SSE-NEXT: movaps %xmm4, %xmm11531; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0],xmm4[0,0]1532; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm141533; SSE-NEXT: movaps %xmm14, %xmm21534; SSE-NEXT: mulps %xmm1, %xmm21535; SSE-NEXT: addps %xmm0, %xmm21536; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm11537; SSE-NEXT: addps %xmm3, %xmm11538; SSE-NEXT: movaps %xmm4, %xmm01539; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm4[1,1]1540; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm111541; SSE-NEXT: movaps %xmm11, %xmm31542; SSE-NEXT: mulps %xmm0, %xmm31543; SSE-NEXT: addps %xmm1, %xmm31544; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm11545; SSE-NEXT: mulps %xmm1, %xmm01546; SSE-NEXT: addps %xmm2, %xmm01547; SSE-NEXT: movaps %xmm4, %xmm11548; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[2,2],xmm4[2,2]1549; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm21550; SSE-NEXT: mulps %xmm1, %xmm21551; SSE-NEXT: addps %xmm0, %xmm21552; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm11553; SSE-NEXT: addps %xmm3, %xmm11554; SSE-NEXT: shufps {{.*#+}} xmm4 = xmm4[3,3,3,3]1555; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm01556; SSE-NEXT: mulps %xmm4, %xmm01557; SSE-NEXT: addps %xmm1, %xmm01558; SSE-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1559; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm41560; SSE-NEXT: addps %xmm2, %xmm41561; SSE-NEXT: movaps %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1562; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm01563; SSE-NEXT: movaps %xmm0, %xmm11564; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[0,0]1565; SSE-NEXT: movaps %xmm9, %xmm21566; SSE-NEXT: mulps %xmm1, %xmm21567; SSE-NEXT: movaps %xmm0, %xmm31568; SSE-NEXT: shufps {{.*#+}} xmm3 = xmm3[1,1],xmm0[1,1]1569; SSE-NEXT: movaps %xmm12, %xmm41570; SSE-NEXT: mulps %xmm3, %xmm41571; SSE-NEXT: addps %xmm2, %xmm41572; SSE-NEXT: mulps %xmm10, %xmm11573; SSE-NEXT: mulps %xmm13, %xmm31574; SSE-NEXT: addps %xmm1, %xmm31575; SSE-NEXT: movaps %xmm0, %xmm11576; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[2,2],xmm0[2,2]1577; SSE-NEXT: movaps %xmm15, %xmm21578; SSE-NEXT: movaps %xmm15, %xmm51579; SSE-NEXT: mulps %xmm1, %xmm21580; SSE-NEXT: addps %xmm3, %xmm21581; SSE-NEXT: mulps %xmm8, %xmm11582; SSE-NEXT: addps %xmm4, %xmm11583; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1584; SSE-NEXT: movaps %xmm7, %xmm31585; SSE-NEXT: mulps %xmm0, %xmm31586; SSE-NEXT: addps %xmm1, %xmm31587; SSE-NEXT: mulps %xmm6, %xmm01588; SSE-NEXT: addps %xmm2, %xmm01589; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm41590; SSE-NEXT: movaps %xmm4, %xmm11591; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0],xmm4[0,0]1592; SSE-NEXT: movaps %xmm14, %xmm21593; SSE-NEXT: mulps %xmm1, %xmm21594; SSE-NEXT: addps %xmm0, %xmm21595; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm141596; SSE-NEXT: mulps %xmm14, %xmm11597; SSE-NEXT: addps %xmm3, %xmm11598; SSE-NEXT: movaps %xmm4, %xmm01599; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm4[1,1]1600; SSE-NEXT: movaps %xmm11, %xmm31601; SSE-NEXT: mulps %xmm0, %xmm31602; SSE-NEXT: addps %xmm1, %xmm31603; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm01604; SSE-NEXT: addps %xmm2, %xmm01605; SSE-NEXT: movaps %xmm4, %xmm11606; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[2,2],xmm4[2,2]1607; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm21608; SSE-NEXT: mulps %xmm1, %xmm21609; SSE-NEXT: addps %xmm0, %xmm21610; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm111611; SSE-NEXT: mulps %xmm11, %xmm11612; SSE-NEXT: addps %xmm3, %xmm11613; SSE-NEXT: shufps {{.*#+}} xmm4 = xmm4[3,3,3,3]1614; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm01615; SSE-NEXT: mulps %xmm4, %xmm01616; SSE-NEXT: addps %xmm1, %xmm01617; SSE-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1618; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm01619; SSE-NEXT: mulps %xmm0, %xmm41620; SSE-NEXT: addps %xmm2, %xmm41621; SSE-NEXT: movaps %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1622; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm01623; SSE-NEXT: movaps %xmm0, %xmm11624; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[0,0]1625; SSE-NEXT: movaps %xmm9, %xmm21626; SSE-NEXT: mulps %xmm1, %xmm21627; SSE-NEXT: movaps %xmm0, %xmm31628; SSE-NEXT: shufps {{.*#+}} xmm3 = xmm3[1,1],xmm0[1,1]1629; SSE-NEXT: movaps %xmm12, %xmm41630; SSE-NEXT: mulps %xmm3, %xmm41631; SSE-NEXT: addps %xmm2, %xmm41632; SSE-NEXT: movaps %xmm10, %xmm151633; SSE-NEXT: mulps %xmm10, %xmm11634; SSE-NEXT: mulps %xmm13, %xmm31635; SSE-NEXT: addps %xmm1, %xmm31636; SSE-NEXT: movaps %xmm0, %xmm11637; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[2,2],xmm0[2,2]1638; SSE-NEXT: movaps %xmm5, %xmm21639; SSE-NEXT: mulps %xmm1, %xmm21640; SSE-NEXT: addps %xmm3, %xmm21641; SSE-NEXT: mulps %xmm8, %xmm11642; SSE-NEXT: addps %xmm4, %xmm11643; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1644; SSE-NEXT: movaps %xmm7, %xmm41645; SSE-NEXT: movaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1646; SSE-NEXT: movaps %xmm7, %xmm31647; SSE-NEXT: mulps %xmm0, %xmm31648; SSE-NEXT: addps %xmm1, %xmm31649; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload1650; SSE-NEXT: mulps %xmm6, %xmm01651; SSE-NEXT: addps %xmm2, %xmm01652; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm101653; SSE-NEXT: movaps %xmm10, %xmm11654; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0],xmm10[0,0]1655; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm21656; SSE-NEXT: mulps %xmm1, %xmm21657; SSE-NEXT: addps %xmm0, %xmm21658; SSE-NEXT: mulps %xmm14, %xmm11659; SSE-NEXT: addps %xmm3, %xmm11660; SSE-NEXT: movaps %xmm10, %xmm01661; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm10[1,1]1662; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm31663; SSE-NEXT: mulps %xmm0, %xmm31664; SSE-NEXT: addps %xmm1, %xmm31665; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm01666; SSE-NEXT: addps %xmm2, %xmm01667; SSE-NEXT: movaps %xmm10, %xmm11668; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[2,2],xmm10[2,2]1669; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm21670; SSE-NEXT: mulps %xmm1, %xmm21671; SSE-NEXT: addps %xmm0, %xmm21672; SSE-NEXT: mulps %xmm11, %xmm11673; SSE-NEXT: addps %xmm3, %xmm11674; SSE-NEXT: shufps {{.*#+}} xmm10 = xmm10[3,3,3,3]1675; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm111676; SSE-NEXT: movaps %xmm11, %xmm01677; SSE-NEXT: mulps %xmm10, %xmm01678; SSE-NEXT: addps %xmm1, %xmm01679; SSE-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1680; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm101681; SSE-NEXT: addps %xmm2, %xmm101682; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm01683; SSE-NEXT: movaps %xmm0, %xmm11684; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[0,0]1685; SSE-NEXT: movaps %xmm9, %xmm21686; SSE-NEXT: movaps %xmm9, %xmm141687; SSE-NEXT: mulps %xmm1, %xmm21688; SSE-NEXT: movaps %xmm0, %xmm31689; SSE-NEXT: shufps {{.*#+}} xmm3 = xmm3[1,1],xmm0[1,1]1690; SSE-NEXT: movaps %xmm12, %xmm71691; SSE-NEXT: mulps %xmm3, %xmm71692; SSE-NEXT: addps %xmm2, %xmm71693; SSE-NEXT: mulps %xmm15, %xmm11694; SSE-NEXT: mulps %xmm13, %xmm31695; SSE-NEXT: addps %xmm1, %xmm31696; SSE-NEXT: movaps %xmm0, %xmm11697; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[2,2],xmm0[2,2]1698; SSE-NEXT: movaps %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1699; SSE-NEXT: movaps %xmm5, %xmm21700; SSE-NEXT: mulps %xmm1, %xmm21701; SSE-NEXT: addps %xmm3, %xmm21702; SSE-NEXT: movaps %xmm8, %xmm91703; SSE-NEXT: mulps %xmm8, %xmm11704; SSE-NEXT: addps %xmm7, %xmm11705; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1706; SSE-NEXT: movaps %xmm4, %xmm71707; SSE-NEXT: mulps %xmm0, %xmm71708; SSE-NEXT: addps %xmm1, %xmm71709; SSE-NEXT: movaps %xmm6, %xmm31710; SSE-NEXT: mulps %xmm6, %xmm01711; SSE-NEXT: addps %xmm2, %xmm01712; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm41713; SSE-NEXT: movaps %xmm4, %xmm11714; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0],xmm4[0,0]1715; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm21716; SSE-NEXT: mulps %xmm1, %xmm21717; SSE-NEXT: addps %xmm0, %xmm21718; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm11719; SSE-NEXT: addps %xmm7, %xmm11720; SSE-NEXT: movaps %xmm4, %xmm01721; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm4[1,1]1722; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm71723; SSE-NEXT: mulps %xmm0, %xmm71724; SSE-NEXT: addps %xmm1, %xmm71725; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm11726; SSE-NEXT: mulps %xmm1, %xmm01727; SSE-NEXT: addps %xmm2, %xmm01728; SSE-NEXT: movaps %xmm4, %xmm11729; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[2,2],xmm4[2,2]1730; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm21731; SSE-NEXT: mulps %xmm1, %xmm21732; SSE-NEXT: addps %xmm0, %xmm21733; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm11734; SSE-NEXT: addps %xmm7, %xmm11735; SSE-NEXT: shufps {{.*#+}} xmm4 = xmm4[3,3,3,3]1736; SSE-NEXT: movaps %xmm11, %xmm01737; SSE-NEXT: mulps %xmm4, %xmm01738; SSE-NEXT: addps %xmm1, %xmm01739; SSE-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill1740; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm41741; SSE-NEXT: addps %xmm2, %xmm41742; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm01743; SSE-NEXT: movaps %xmm0, %xmm11744; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[0,0]1745; SSE-NEXT: movaps %xmm14, %xmm61746; SSE-NEXT: movaps %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1747; SSE-NEXT: movaps %xmm14, %xmm21748; SSE-NEXT: mulps %xmm1, %xmm21749; SSE-NEXT: movaps %xmm0, %xmm141750; SSE-NEXT: shufps {{.*#+}} xmm14 = xmm14[1,1],xmm0[1,1]1751; SSE-NEXT: movaps %xmm12, %xmm151752; SSE-NEXT: movaps %xmm12, %xmm131753; SSE-NEXT: movaps %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1754; SSE-NEXT: mulps %xmm14, %xmm151755; SSE-NEXT: addps %xmm2, %xmm151756; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload1757; SSE-NEXT: mulps %xmm8, %xmm11758; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm7 # 16-byte Reload1759; SSE-NEXT: mulps %xmm7, %xmm141760; SSE-NEXT: addps %xmm1, %xmm141761; SSE-NEXT: movaps %xmm0, %xmm11762; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[2,2],xmm0[2,2]1763; SSE-NEXT: movaps %xmm5, %xmm21764; SSE-NEXT: mulps %xmm1, %xmm21765; SSE-NEXT: addps %xmm14, %xmm21766; SSE-NEXT: mulps %xmm9, %xmm11767; SSE-NEXT: movaps %xmm9, %xmm111768; SSE-NEXT: addps %xmm15, %xmm11769; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1770; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm5 # 16-byte Reload1771; SSE-NEXT: movaps %xmm5, %xmm141772; SSE-NEXT: mulps %xmm0, %xmm141773; SSE-NEXT: addps %xmm1, %xmm141774; SSE-NEXT: mulps %xmm3, %xmm01775; SSE-NEXT: movaps %xmm3, %xmm121776; SSE-NEXT: addps %xmm2, %xmm01777; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm31778; SSE-NEXT: movaps %xmm3, %xmm11779; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0],xmm3[0,0]1780; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm151781; SSE-NEXT: mulps %xmm1, %xmm151782; SSE-NEXT: addps %xmm0, %xmm151783; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm01784; SSE-NEXT: mulps %xmm0, %xmm11785; SSE-NEXT: addps %xmm14, %xmm11786; SSE-NEXT: movaps %xmm3, %xmm01787; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm3[1,1]1788; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm141789; SSE-NEXT: mulps %xmm0, %xmm141790; SSE-NEXT: addps %xmm1, %xmm141791; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm01792; SSE-NEXT: addps %xmm15, %xmm01793; SSE-NEXT: movaps %xmm3, %xmm11794; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[2,2],xmm3[2,2]1795; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm151796; SSE-NEXT: mulps %xmm1, %xmm151797; SSE-NEXT: addps %xmm0, %xmm151798; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm11799; SSE-NEXT: addps %xmm14, %xmm11800; SSE-NEXT: shufps {{.*#+}} xmm3 = xmm3[3,3,3,3]1801; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm141802; SSE-NEXT: mulps %xmm3, %xmm141803; SSE-NEXT: addps %xmm1, %xmm141804; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm31805; SSE-NEXT: addps %xmm15, %xmm31806; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm01807; SSE-NEXT: movaps %xmm0, %xmm11808; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[0,0]1809; SSE-NEXT: mulps %xmm1, %xmm61810; SSE-NEXT: movaps %xmm0, %xmm151811; SSE-NEXT: shufps {{.*#+}} xmm15 = xmm15[1,1],xmm0[1,1]1812; SSE-NEXT: mulps %xmm15, %xmm131813; SSE-NEXT: addps %xmm6, %xmm131814; SSE-NEXT: mulps %xmm8, %xmm11815; SSE-NEXT: mulps %xmm7, %xmm151816; SSE-NEXT: addps %xmm1, %xmm151817; SSE-NEXT: movaps %xmm0, %xmm11818; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[2,2],xmm0[2,2]1819; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload1820; SSE-NEXT: movaps %xmm6, %xmm21821; SSE-NEXT: mulps %xmm1, %xmm21822; SSE-NEXT: addps %xmm15, %xmm21823; SSE-NEXT: mulps %xmm9, %xmm11824; SSE-NEXT: addps %xmm13, %xmm11825; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1826; SSE-NEXT: movaps %xmm5, %xmm91827; SSE-NEXT: mulps %xmm0, %xmm91828; SSE-NEXT: addps %xmm1, %xmm91829; SSE-NEXT: mulps %xmm12, %xmm01830; SSE-NEXT: movaps %xmm12, %xmm51831; SSE-NEXT: addps %xmm2, %xmm01832; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm11833; SSE-NEXT: movaps %xmm1, %xmm21834; SSE-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,0],xmm1[0,0]1835; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm151836; SSE-NEXT: mulps %xmm2, %xmm151837; SSE-NEXT: addps %xmm0, %xmm151838; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm01839; SSE-NEXT: mulps %xmm0, %xmm21840; SSE-NEXT: addps %xmm9, %xmm21841; SSE-NEXT: movaps %xmm1, %xmm01842; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[1,1]1843; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm91844; SSE-NEXT: mulps %xmm0, %xmm91845; SSE-NEXT: addps %xmm2, %xmm91846; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm01847; SSE-NEXT: addps %xmm15, %xmm01848; SSE-NEXT: movaps %xmm1, %xmm21849; SSE-NEXT: shufps {{.*#+}} xmm2 = xmm2[2,2],xmm1[2,2]1850; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm131851; SSE-NEXT: mulps %xmm2, %xmm131852; SSE-NEXT: addps %xmm0, %xmm131853; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm21854; SSE-NEXT: addps %xmm9, %xmm21855; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3,3,3]1856; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm151857; SSE-NEXT: mulps %xmm1, %xmm151858; SSE-NEXT: addps %xmm2, %xmm151859; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm11860; SSE-NEXT: addps %xmm13, %xmm11861; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm01862; SSE-NEXT: movaps %xmm0, %xmm21863; SSE-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,0],xmm0[0,0]1864; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload1865; SSE-NEXT: mulps %xmm2, %xmm131866; SSE-NEXT: mulps %xmm8, %xmm21867; SSE-NEXT: movaps %xmm0, %xmm91868; SSE-NEXT: shufps {{.*#+}} xmm9 = xmm9[1,1],xmm0[1,1]1869; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload1870; SSE-NEXT: mulps %xmm9, %xmm81871; SSE-NEXT: addps %xmm13, %xmm81872; SSE-NEXT: mulps %xmm7, %xmm91873; SSE-NEXT: addps %xmm2, %xmm91874; SSE-NEXT: movaps %xmm0, %xmm21875; SSE-NEXT: shufps {{.*#+}} xmm2 = xmm2[2,2],xmm0[2,2]1876; SSE-NEXT: mulps %xmm2, %xmm61877; SSE-NEXT: addps %xmm9, %xmm61878; SSE-NEXT: mulps %xmm11, %xmm21879; SSE-NEXT: addps %xmm8, %xmm21880; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]1881; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload1882; SSE-NEXT: mulps %xmm0, %xmm91883; SSE-NEXT: addps %xmm2, %xmm91884; SSE-NEXT: movaps %xmm9, %xmm121885; SSE-NEXT: mulps %xmm5, %xmm01886; SSE-NEXT: addps %xmm6, %xmm01887; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm91888; SSE-NEXT: movaps %xmm9, %xmm21889; SSE-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,0],xmm9[0,0]1890; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm131891; SSE-NEXT: mulps %xmm2, %xmm131892; SSE-NEXT: addps %xmm0, %xmm131893; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm21894; SSE-NEXT: addps %xmm12, %xmm21895; SSE-NEXT: movaps %xmm9, %xmm01896; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm9[1,1]1897; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm121898; SSE-NEXT: mulps %xmm0, %xmm121899; SSE-NEXT: addps %xmm2, %xmm121900; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm01901; SSE-NEXT: addps %xmm13, %xmm01902; SSE-NEXT: movaps %xmm9, %xmm21903; SSE-NEXT: shufps {{.*#+}} xmm2 = xmm2[2,2],xmm9[2,2]1904; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm51905; SSE-NEXT: mulps %xmm2, %xmm51906; SSE-NEXT: addps %xmm0, %xmm51907; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm21908; SSE-NEXT: addps %xmm12, %xmm21909; SSE-NEXT: shufps {{.*#+}} xmm9 = xmm9[3,3,3,3]1910; SSE-NEXT: movaps {{[0-9]+}}(%rsp), %xmm01911; SSE-NEXT: mulps %xmm9, %xmm01912; SSE-NEXT: addps %xmm2, %xmm01913; SSE-NEXT: mulps {{[0-9]+}}(%rsp), %xmm91914; SSE-NEXT: addps %xmm5, %xmm91915; SSE-NEXT: movaps %xmm0, 240(%rdi)1916; SSE-NEXT: movaps %xmm9, 224(%rdi)1917; SSE-NEXT: movaps %xmm15, 208(%rdi)1918; SSE-NEXT: movaps %xmm1, 192(%rdi)1919; SSE-NEXT: movaps %xmm14, 176(%rdi)1920; SSE-NEXT: movaps %xmm3, 160(%rdi)1921; SSE-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload1922; SSE-NEXT: movaps %xmm0, 144(%rdi)1923; SSE-NEXT: movaps %xmm4, 128(%rdi)1924; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1925; SSE-NEXT: movaps %xmm0, 112(%rdi)1926; SSE-NEXT: movaps %xmm10, 96(%rdi)1927; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1928; SSE-NEXT: movaps %xmm0, 80(%rdi)1929; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1930; SSE-NEXT: movaps %xmm0, 64(%rdi)1931; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1932; SSE-NEXT: movaps %xmm0, 48(%rdi)1933; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1934; SSE-NEXT: movaps %xmm0, 32(%rdi)1935; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1936; SSE-NEXT: movaps %xmm0, 16(%rdi)1937; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1938; SSE-NEXT: movaps %xmm0, (%rdi)1939; SSE-NEXT: addq $120, %rsp1940; SSE-NEXT: retq1941;1942; AVX1OR2-LABEL: test_mul8x8_f32:1943; AVX1OR2: # %bb.0: # %entry1944; AVX1OR2-NEXT: pushq %rbp1945; AVX1OR2-NEXT: movq %rsp, %rbp1946; AVX1OR2-NEXT: andq $-32, %rsp1947; AVX1OR2-NEXT: subq $32, %rsp1948; AVX1OR2-NEXT: movq %rdi, %rax1949; AVX1OR2-NEXT: vbroadcastss 16(%rbp), %ymm81950; AVX1OR2-NEXT: vmulps %ymm0, %ymm8, %ymm81951; AVX1OR2-NEXT: vbroadcastss 20(%rbp), %ymm91952; AVX1OR2-NEXT: vmulps %ymm1, %ymm9, %ymm91953; AVX1OR2-NEXT: vaddps %ymm9, %ymm8, %ymm81954; AVX1OR2-NEXT: vbroadcastss 24(%rbp), %ymm91955; AVX1OR2-NEXT: vmulps %ymm2, %ymm9, %ymm91956; AVX1OR2-NEXT: vaddps %ymm9, %ymm8, %ymm81957; AVX1OR2-NEXT: vbroadcastss 28(%rbp), %ymm91958; AVX1OR2-NEXT: vmulps %ymm3, %ymm9, %ymm91959; AVX1OR2-NEXT: vaddps %ymm9, %ymm8, %ymm81960; AVX1OR2-NEXT: vbroadcastss 32(%rbp), %ymm91961; AVX1OR2-NEXT: vmulps %ymm4, %ymm9, %ymm91962; AVX1OR2-NEXT: vaddps %ymm9, %ymm8, %ymm81963; AVX1OR2-NEXT: vbroadcastss 36(%rbp), %ymm91964; AVX1OR2-NEXT: vmulps %ymm5, %ymm9, %ymm91965; AVX1OR2-NEXT: vaddps %ymm9, %ymm8, %ymm81966; AVX1OR2-NEXT: vbroadcastss 40(%rbp), %ymm91967; AVX1OR2-NEXT: vmulps %ymm6, %ymm9, %ymm91968; AVX1OR2-NEXT: vaddps %ymm9, %ymm8, %ymm81969; AVX1OR2-NEXT: vbroadcastss 44(%rbp), %ymm91970; AVX1OR2-NEXT: vmulps %ymm7, %ymm9, %ymm91971; AVX1OR2-NEXT: vaddps %ymm9, %ymm8, %ymm81972; AVX1OR2-NEXT: vbroadcastss 48(%rbp), %ymm91973; AVX1OR2-NEXT: vmulps %ymm0, %ymm9, %ymm91974; AVX1OR2-NEXT: vbroadcastss 52(%rbp), %ymm101975; AVX1OR2-NEXT: vmulps %ymm1, %ymm10, %ymm101976; AVX1OR2-NEXT: vaddps %ymm10, %ymm9, %ymm91977; AVX1OR2-NEXT: vbroadcastss 56(%rbp), %ymm101978; AVX1OR2-NEXT: vmulps %ymm2, %ymm10, %ymm101979; AVX1OR2-NEXT: vaddps %ymm10, %ymm9, %ymm91980; AVX1OR2-NEXT: vbroadcastss 60(%rbp), %ymm101981; AVX1OR2-NEXT: vmulps %ymm3, %ymm10, %ymm101982; AVX1OR2-NEXT: vaddps %ymm10, %ymm9, %ymm91983; AVX1OR2-NEXT: vbroadcastss 64(%rbp), %ymm101984; AVX1OR2-NEXT: vmulps %ymm4, %ymm10, %ymm101985; AVX1OR2-NEXT: vaddps %ymm10, %ymm9, %ymm91986; AVX1OR2-NEXT: vbroadcastss 68(%rbp), %ymm101987; AVX1OR2-NEXT: vmulps %ymm5, %ymm10, %ymm101988; AVX1OR2-NEXT: vaddps %ymm10, %ymm9, %ymm91989; AVX1OR2-NEXT: vbroadcastss 72(%rbp), %ymm101990; AVX1OR2-NEXT: vmulps %ymm6, %ymm10, %ymm101991; AVX1OR2-NEXT: vaddps %ymm10, %ymm9, %ymm91992; AVX1OR2-NEXT: vbroadcastss 76(%rbp), %ymm101993; AVX1OR2-NEXT: vmulps %ymm7, %ymm10, %ymm101994; AVX1OR2-NEXT: vaddps %ymm10, %ymm9, %ymm91995; AVX1OR2-NEXT: vbroadcastss 80(%rbp), %ymm101996; AVX1OR2-NEXT: vmulps %ymm0, %ymm10, %ymm101997; AVX1OR2-NEXT: vbroadcastss 84(%rbp), %ymm111998; AVX1OR2-NEXT: vmulps %ymm1, %ymm11, %ymm111999; AVX1OR2-NEXT: vaddps %ymm11, %ymm10, %ymm102000; AVX1OR2-NEXT: vbroadcastss 88(%rbp), %ymm112001; AVX1OR2-NEXT: vmulps %ymm2, %ymm11, %ymm112002; AVX1OR2-NEXT: vaddps %ymm11, %ymm10, %ymm102003; AVX1OR2-NEXT: vbroadcastss 92(%rbp), %ymm112004; AVX1OR2-NEXT: vmulps %ymm3, %ymm11, %ymm112005; AVX1OR2-NEXT: vaddps %ymm11, %ymm10, %ymm102006; AVX1OR2-NEXT: vbroadcastss 96(%rbp), %ymm112007; AVX1OR2-NEXT: vmulps %ymm4, %ymm11, %ymm112008; AVX1OR2-NEXT: vaddps %ymm11, %ymm10, %ymm102009; AVX1OR2-NEXT: vbroadcastss 100(%rbp), %ymm112010; AVX1OR2-NEXT: vmulps %ymm5, %ymm11, %ymm112011; AVX1OR2-NEXT: vaddps %ymm11, %ymm10, %ymm102012; AVX1OR2-NEXT: vbroadcastss 104(%rbp), %ymm112013; AVX1OR2-NEXT: vmulps %ymm6, %ymm11, %ymm112014; AVX1OR2-NEXT: vaddps %ymm11, %ymm10, %ymm102015; AVX1OR2-NEXT: vbroadcastss 108(%rbp), %ymm112016; AVX1OR2-NEXT: vmulps %ymm7, %ymm11, %ymm112017; AVX1OR2-NEXT: vaddps %ymm11, %ymm10, %ymm102018; AVX1OR2-NEXT: vbroadcastss 112(%rbp), %ymm112019; AVX1OR2-NEXT: vmulps %ymm0, %ymm11, %ymm112020; AVX1OR2-NEXT: vbroadcastss 116(%rbp), %ymm122021; AVX1OR2-NEXT: vmulps %ymm1, %ymm12, %ymm122022; AVX1OR2-NEXT: vaddps %ymm12, %ymm11, %ymm112023; AVX1OR2-NEXT: vbroadcastss 120(%rbp), %ymm122024; AVX1OR2-NEXT: vmulps %ymm2, %ymm12, %ymm122025; AVX1OR2-NEXT: vaddps %ymm12, %ymm11, %ymm112026; AVX1OR2-NEXT: vbroadcastss 124(%rbp), %ymm122027; AVX1OR2-NEXT: vmulps %ymm3, %ymm12, %ymm122028; AVX1OR2-NEXT: vaddps %ymm12, %ymm11, %ymm112029; AVX1OR2-NEXT: vbroadcastss 128(%rbp), %ymm122030; AVX1OR2-NEXT: vmulps %ymm4, %ymm12, %ymm122031; AVX1OR2-NEXT: vaddps %ymm12, %ymm11, %ymm112032; AVX1OR2-NEXT: vbroadcastss 132(%rbp), %ymm122033; AVX1OR2-NEXT: vmulps %ymm5, %ymm12, %ymm122034; AVX1OR2-NEXT: vaddps %ymm12, %ymm11, %ymm112035; AVX1OR2-NEXT: vbroadcastss 136(%rbp), %ymm122036; AVX1OR2-NEXT: vmulps %ymm6, %ymm12, %ymm122037; AVX1OR2-NEXT: vaddps %ymm12, %ymm11, %ymm112038; AVX1OR2-NEXT: vbroadcastss 140(%rbp), %ymm122039; AVX1OR2-NEXT: vmulps %ymm7, %ymm12, %ymm122040; AVX1OR2-NEXT: vaddps %ymm12, %ymm11, %ymm112041; AVX1OR2-NEXT: vbroadcastss 144(%rbp), %ymm122042; AVX1OR2-NEXT: vmulps %ymm0, %ymm12, %ymm122043; AVX1OR2-NEXT: vbroadcastss 148(%rbp), %ymm132044; AVX1OR2-NEXT: vmulps %ymm1, %ymm13, %ymm132045; AVX1OR2-NEXT: vaddps %ymm13, %ymm12, %ymm122046; AVX1OR2-NEXT: vbroadcastss 152(%rbp), %ymm132047; AVX1OR2-NEXT: vmulps %ymm2, %ymm13, %ymm132048; AVX1OR2-NEXT: vaddps %ymm13, %ymm12, %ymm122049; AVX1OR2-NEXT: vbroadcastss 156(%rbp), %ymm132050; AVX1OR2-NEXT: vmulps %ymm3, %ymm13, %ymm132051; AVX1OR2-NEXT: vaddps %ymm13, %ymm12, %ymm122052; AVX1OR2-NEXT: vbroadcastss 160(%rbp), %ymm132053; AVX1OR2-NEXT: vmulps %ymm4, %ymm13, %ymm132054; AVX1OR2-NEXT: vaddps %ymm13, %ymm12, %ymm122055; AVX1OR2-NEXT: vbroadcastss 164(%rbp), %ymm132056; AVX1OR2-NEXT: vmulps %ymm5, %ymm13, %ymm132057; AVX1OR2-NEXT: vaddps %ymm13, %ymm12, %ymm122058; AVX1OR2-NEXT: vbroadcastss 168(%rbp), %ymm132059; AVX1OR2-NEXT: vmulps %ymm6, %ymm13, %ymm132060; AVX1OR2-NEXT: vaddps %ymm13, %ymm12, %ymm122061; AVX1OR2-NEXT: vbroadcastss 172(%rbp), %ymm132062; AVX1OR2-NEXT: vmulps %ymm7, %ymm13, %ymm132063; AVX1OR2-NEXT: vaddps %ymm13, %ymm12, %ymm122064; AVX1OR2-NEXT: vbroadcastss 176(%rbp), %ymm132065; AVX1OR2-NEXT: vmulps %ymm0, %ymm13, %ymm132066; AVX1OR2-NEXT: vbroadcastss 180(%rbp), %ymm142067; AVX1OR2-NEXT: vmulps %ymm1, %ymm14, %ymm142068; AVX1OR2-NEXT: vaddps %ymm14, %ymm13, %ymm132069; AVX1OR2-NEXT: vbroadcastss 184(%rbp), %ymm142070; AVX1OR2-NEXT: vmulps %ymm2, %ymm14, %ymm142071; AVX1OR2-NEXT: vaddps %ymm14, %ymm13, %ymm132072; AVX1OR2-NEXT: vbroadcastss 188(%rbp), %ymm142073; AVX1OR2-NEXT: vmulps %ymm3, %ymm14, %ymm142074; AVX1OR2-NEXT: vaddps %ymm14, %ymm13, %ymm132075; AVX1OR2-NEXT: vbroadcastss 192(%rbp), %ymm142076; AVX1OR2-NEXT: vmulps %ymm4, %ymm14, %ymm142077; AVX1OR2-NEXT: vaddps %ymm14, %ymm13, %ymm132078; AVX1OR2-NEXT: vbroadcastss 196(%rbp), %ymm142079; AVX1OR2-NEXT: vmulps %ymm5, %ymm14, %ymm142080; AVX1OR2-NEXT: vaddps %ymm14, %ymm13, %ymm132081; AVX1OR2-NEXT: vbroadcastss 200(%rbp), %ymm142082; AVX1OR2-NEXT: vmulps %ymm6, %ymm14, %ymm142083; AVX1OR2-NEXT: vaddps %ymm14, %ymm13, %ymm132084; AVX1OR2-NEXT: vbroadcastss 204(%rbp), %ymm142085; AVX1OR2-NEXT: vmulps %ymm7, %ymm14, %ymm142086; AVX1OR2-NEXT: vaddps %ymm14, %ymm13, %ymm132087; AVX1OR2-NEXT: vbroadcastss 208(%rbp), %ymm142088; AVX1OR2-NEXT: vmulps %ymm0, %ymm14, %ymm142089; AVX1OR2-NEXT: vbroadcastss 212(%rbp), %ymm152090; AVX1OR2-NEXT: vmulps %ymm1, %ymm15, %ymm152091; AVX1OR2-NEXT: vaddps %ymm15, %ymm14, %ymm142092; AVX1OR2-NEXT: vbroadcastss 216(%rbp), %ymm152093; AVX1OR2-NEXT: vmulps %ymm2, %ymm15, %ymm152094; AVX1OR2-NEXT: vaddps %ymm15, %ymm14, %ymm142095; AVX1OR2-NEXT: vbroadcastss 220(%rbp), %ymm152096; AVX1OR2-NEXT: vmulps %ymm3, %ymm15, %ymm152097; AVX1OR2-NEXT: vaddps %ymm15, %ymm14, %ymm142098; AVX1OR2-NEXT: vbroadcastss 224(%rbp), %ymm152099; AVX1OR2-NEXT: vmulps %ymm4, %ymm15, %ymm152100; AVX1OR2-NEXT: vaddps %ymm15, %ymm14, %ymm142101; AVX1OR2-NEXT: vbroadcastss 228(%rbp), %ymm152102; AVX1OR2-NEXT: vmulps %ymm5, %ymm15, %ymm152103; AVX1OR2-NEXT: vaddps %ymm15, %ymm14, %ymm142104; AVX1OR2-NEXT: vbroadcastss 232(%rbp), %ymm152105; AVX1OR2-NEXT: vmulps %ymm6, %ymm15, %ymm152106; AVX1OR2-NEXT: vaddps %ymm15, %ymm14, %ymm142107; AVX1OR2-NEXT: vbroadcastss 236(%rbp), %ymm152108; AVX1OR2-NEXT: vmulps %ymm7, %ymm15, %ymm152109; AVX1OR2-NEXT: vaddps %ymm15, %ymm14, %ymm142110; AVX1OR2-NEXT: vbroadcastss 240(%rbp), %ymm152111; AVX1OR2-NEXT: vmulps %ymm0, %ymm15, %ymm02112; AVX1OR2-NEXT: vbroadcastss 244(%rbp), %ymm152113; AVX1OR2-NEXT: vmulps %ymm1, %ymm15, %ymm12114; AVX1OR2-NEXT: vaddps %ymm1, %ymm0, %ymm02115; AVX1OR2-NEXT: vbroadcastss 248(%rbp), %ymm12116; AVX1OR2-NEXT: vmulps %ymm1, %ymm2, %ymm12117; AVX1OR2-NEXT: vaddps %ymm1, %ymm0, %ymm02118; AVX1OR2-NEXT: vbroadcastss 252(%rbp), %ymm12119; AVX1OR2-NEXT: vmulps %ymm1, %ymm3, %ymm12120; AVX1OR2-NEXT: vaddps %ymm1, %ymm0, %ymm02121; AVX1OR2-NEXT: vbroadcastss 256(%rbp), %ymm12122; AVX1OR2-NEXT: vmulps %ymm1, %ymm4, %ymm12123; AVX1OR2-NEXT: vaddps %ymm1, %ymm0, %ymm02124; AVX1OR2-NEXT: vbroadcastss 260(%rbp), %ymm12125; AVX1OR2-NEXT: vmulps %ymm1, %ymm5, %ymm12126; AVX1OR2-NEXT: vaddps %ymm1, %ymm0, %ymm02127; AVX1OR2-NEXT: vbroadcastss 264(%rbp), %ymm12128; AVX1OR2-NEXT: vmulps %ymm1, %ymm6, %ymm12129; AVX1OR2-NEXT: vaddps %ymm1, %ymm0, %ymm02130; AVX1OR2-NEXT: vbroadcastss 268(%rbp), %ymm12131; AVX1OR2-NEXT: vmulps %ymm1, %ymm7, %ymm12132; AVX1OR2-NEXT: vaddps %ymm1, %ymm0, %ymm02133; AVX1OR2-NEXT: vmovaps %ymm0, 224(%rdi)2134; AVX1OR2-NEXT: vmovaps %ymm14, 192(%rdi)2135; AVX1OR2-NEXT: vmovaps %ymm13, 160(%rdi)2136; AVX1OR2-NEXT: vmovaps %ymm12, 128(%rdi)2137; AVX1OR2-NEXT: vmovaps %ymm11, 96(%rdi)2138; AVX1OR2-NEXT: vmovaps %ymm10, 64(%rdi)2139; AVX1OR2-NEXT: vmovaps %ymm9, 32(%rdi)2140; AVX1OR2-NEXT: vmovaps %ymm8, (%rdi)2141; AVX1OR2-NEXT: movq %rbp, %rsp2142; AVX1OR2-NEXT: popq %rbp2143; AVX1OR2-NEXT: vzeroupper2144; AVX1OR2-NEXT: retq2145;2146; AVX512-LABEL: test_mul8x8_f32:2147; AVX512: # %bb.0: # %entry2148; AVX512-NEXT: vshufps {{.*#+}} zmm12 = zmm4[1,1,1,1,5,5,5,5,9,9,9,9,13,13,13,13]2149; AVX512-NEXT: vpermpd {{.*#+}} zmm9 = zmm12[0,1,0,1,4,5,4,5]2150; AVX512-NEXT: vshuff64x2 {{.*#+}} zmm8 = zmm0[4,5,6,7,4,5,6,7]2151; AVX512-NEXT: vmulps %zmm9, %zmm8, %zmm102152; AVX512-NEXT: vshufps {{.*#+}} zmm11 = zmm4[0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12]2153; AVX512-NEXT: vpermpd {{.*#+}} zmm13 = zmm11[0,1,0,1,4,5,4,5]2154; AVX512-NEXT: vinsertf64x4 $1, %ymm0, %zmm0, %zmm92155; AVX512-NEXT: vmulps %zmm13, %zmm9, %zmm02156; AVX512-NEXT: vaddps %zmm10, %zmm0, %zmm02157; AVX512-NEXT: vshufps {{.*#+}} zmm13 = zmm4[2,2,2,2,6,6,6,6,10,10,10,10,14,14,14,14]2158; AVX512-NEXT: vpermpd {{.*#+}} zmm14 = zmm13[0,1,0,1,4,5,4,5]2159; AVX512-NEXT: vinsertf64x4 $1, %ymm1, %zmm1, %zmm102160; AVX512-NEXT: vmulps %zmm14, %zmm10, %zmm142161; AVX512-NEXT: vaddps %zmm14, %zmm0, %zmm02162; AVX512-NEXT: vshufps {{.*#+}} zmm14 = zmm4[3,3,3,3,7,7,7,7,11,11,11,11,15,15,15,15]2163; AVX512-NEXT: vpermpd {{.*#+}} zmm15 = zmm14[0,1,0,1,4,5,4,5]2164; AVX512-NEXT: vshuff64x2 {{.*#+}} zmm4 = zmm1[4,5,6,7,4,5,6,7]2165; AVX512-NEXT: vmulps %zmm15, %zmm4, %zmm12166; AVX512-NEXT: vaddps %zmm1, %zmm0, %zmm02167; AVX512-NEXT: vpermpd {{.*#+}} zmm1 = zmm11[2,3,2,3,6,7,6,7]2168; AVX512-NEXT: vinsertf64x4 $1, %ymm2, %zmm2, %zmm112169; AVX512-NEXT: vmulps %zmm1, %zmm11, %zmm12170; AVX512-NEXT: vaddps %zmm1, %zmm0, %zmm02171; AVX512-NEXT: vpermpd {{.*#+}} zmm1 = zmm12[2,3,2,3,6,7,6,7]2172; AVX512-NEXT: vshuff64x2 {{.*#+}} zmm12 = zmm2[4,5,6,7,4,5,6,7]2173; AVX512-NEXT: vmulps %zmm1, %zmm12, %zmm12174; AVX512-NEXT: vaddps %zmm1, %zmm0, %zmm02175; AVX512-NEXT: vpermpd {{.*#+}} zmm1 = zmm13[2,3,2,3,6,7,6,7]2176; AVX512-NEXT: vinsertf64x4 $1, %ymm3, %zmm3, %zmm132177; AVX512-NEXT: vmulps %zmm1, %zmm13, %zmm12178; AVX512-NEXT: vaddps %zmm1, %zmm0, %zmm02179; AVX512-NEXT: vpermpd {{.*#+}} zmm1 = zmm14[2,3,2,3,6,7,6,7]2180; AVX512-NEXT: vshuff64x2 {{.*#+}} zmm3 = zmm3[4,5,6,7,4,5,6,7]2181; AVX512-NEXT: vmulps %zmm1, %zmm3, %zmm12182; AVX512-NEXT: vaddps %zmm1, %zmm0, %zmm02183; AVX512-NEXT: vshufps {{.*#+}} zmm1 = zmm5[1,1,1,1,5,5,5,5,9,9,9,9,13,13,13,13]2184; AVX512-NEXT: vpermpd {{.*#+}} zmm2 = zmm1[0,1,0,1,4,5,4,5]2185; AVX512-NEXT: vmulps %zmm2, %zmm8, %zmm22186; AVX512-NEXT: vshufps {{.*#+}} zmm14 = zmm5[0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12]2187; AVX512-NEXT: vpermpd {{.*#+}} zmm15 = zmm14[0,1,0,1,4,5,4,5]2188; AVX512-NEXT: vmulps %zmm15, %zmm9, %zmm152189; AVX512-NEXT: vaddps %zmm2, %zmm15, %zmm22190; AVX512-NEXT: vshufps {{.*#+}} zmm15 = zmm5[2,2,2,2,6,6,6,6,10,10,10,10,14,14,14,14]2191; AVX512-NEXT: vpermpd {{.*#+}} zmm16 = zmm15[0,1,0,1,4,5,4,5]2192; AVX512-NEXT: vmulps %zmm16, %zmm10, %zmm162193; AVX512-NEXT: vaddps %zmm16, %zmm2, %zmm22194; AVX512-NEXT: vshufps {{.*#+}} zmm5 = zmm5[3,3,3,3,7,7,7,7,11,11,11,11,15,15,15,15]2195; AVX512-NEXT: vpermpd {{.*#+}} zmm16 = zmm5[0,1,0,1,4,5,4,5]2196; AVX512-NEXT: vmulps %zmm16, %zmm4, %zmm162197; AVX512-NEXT: vaddps %zmm16, %zmm2, %zmm22198; AVX512-NEXT: vpermpd {{.*#+}} zmm14 = zmm14[2,3,2,3,6,7,6,7]2199; AVX512-NEXT: vmulps %zmm14, %zmm11, %zmm142200; AVX512-NEXT: vaddps %zmm14, %zmm2, %zmm22201; AVX512-NEXT: vpermpd {{.*#+}} zmm1 = zmm1[2,3,2,3,6,7,6,7]2202; AVX512-NEXT: vmulps %zmm1, %zmm12, %zmm12203; AVX512-NEXT: vaddps %zmm1, %zmm2, %zmm12204; AVX512-NEXT: vpermpd {{.*#+}} zmm2 = zmm15[2,3,2,3,6,7,6,7]2205; AVX512-NEXT: vmulps %zmm2, %zmm13, %zmm22206; AVX512-NEXT: vaddps %zmm2, %zmm1, %zmm12207; AVX512-NEXT: vpermpd {{.*#+}} zmm2 = zmm5[2,3,2,3,6,7,6,7]2208; AVX512-NEXT: vmulps %zmm2, %zmm3, %zmm22209; AVX512-NEXT: vaddps %zmm2, %zmm1, %zmm12210; AVX512-NEXT: vshufps {{.*#+}} zmm2 = zmm6[1,1,1,1,5,5,5,5,9,9,9,9,13,13,13,13]2211; AVX512-NEXT: vpermpd {{.*#+}} zmm5 = zmm2[0,1,0,1,4,5,4,5]2212; AVX512-NEXT: vmulps %zmm5, %zmm8, %zmm52213; AVX512-NEXT: vshufps {{.*#+}} zmm14 = zmm6[0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12]2214; AVX512-NEXT: vpermpd {{.*#+}} zmm15 = zmm14[0,1,0,1,4,5,4,5]2215; AVX512-NEXT: vmulps %zmm15, %zmm9, %zmm152216; AVX512-NEXT: vaddps %zmm5, %zmm15, %zmm52217; AVX512-NEXT: vshufps {{.*#+}} zmm15 = zmm6[2,2,2,2,6,6,6,6,10,10,10,10,14,14,14,14]2218; AVX512-NEXT: vpermpd {{.*#+}} zmm16 = zmm15[0,1,0,1,4,5,4,5]2219; AVX512-NEXT: vmulps %zmm16, %zmm10, %zmm162220; AVX512-NEXT: vaddps %zmm16, %zmm5, %zmm52221; AVX512-NEXT: vshufps {{.*#+}} zmm6 = zmm6[3,3,3,3,7,7,7,7,11,11,11,11,15,15,15,15]2222; AVX512-NEXT: vpermpd {{.*#+}} zmm16 = zmm6[0,1,0,1,4,5,4,5]2223; AVX512-NEXT: vmulps %zmm16, %zmm4, %zmm162224; AVX512-NEXT: vaddps %zmm16, %zmm5, %zmm52225; AVX512-NEXT: vpermpd {{.*#+}} zmm14 = zmm14[2,3,2,3,6,7,6,7]2226; AVX512-NEXT: vmulps %zmm14, %zmm11, %zmm142227; AVX512-NEXT: vaddps %zmm14, %zmm5, %zmm52228; AVX512-NEXT: vpermpd {{.*#+}} zmm2 = zmm2[2,3,2,3,6,7,6,7]2229; AVX512-NEXT: vmulps %zmm2, %zmm12, %zmm22230; AVX512-NEXT: vaddps %zmm2, %zmm5, %zmm22231; AVX512-NEXT: vpermpd {{.*#+}} zmm5 = zmm15[2,3,2,3,6,7,6,7]2232; AVX512-NEXT: vmulps %zmm5, %zmm13, %zmm52233; AVX512-NEXT: vaddps %zmm5, %zmm2, %zmm22234; AVX512-NEXT: vpermpd {{.*#+}} zmm5 = zmm6[2,3,2,3,6,7,6,7]2235; AVX512-NEXT: vmulps %zmm5, %zmm3, %zmm52236; AVX512-NEXT: vaddps %zmm5, %zmm2, %zmm22237; AVX512-NEXT: vshufps {{.*#+}} zmm5 = zmm7[1,1,1,1,5,5,5,5,9,9,9,9,13,13,13,13]2238; AVX512-NEXT: vpermpd {{.*#+}} zmm6 = zmm5[0,1,0,1,4,5,4,5]2239; AVX512-NEXT: vmulps %zmm6, %zmm8, %zmm62240; AVX512-NEXT: vshufps {{.*#+}} zmm8 = zmm7[0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12]2241; AVX512-NEXT: vpermpd {{.*#+}} zmm14 = zmm8[0,1,0,1,4,5,4,5]2242; AVX512-NEXT: vmulps %zmm14, %zmm9, %zmm92243; AVX512-NEXT: vaddps %zmm6, %zmm9, %zmm62244; AVX512-NEXT: vshufps {{.*#+}} zmm9 = zmm7[2,2,2,2,6,6,6,6,10,10,10,10,14,14,14,14]2245; AVX512-NEXT: vpermpd {{.*#+}} zmm14 = zmm9[0,1,0,1,4,5,4,5]2246; AVX512-NEXT: vmulps %zmm14, %zmm10, %zmm102247; AVX512-NEXT: vaddps %zmm10, %zmm6, %zmm62248; AVX512-NEXT: vshufps {{.*#+}} zmm7 = zmm7[3,3,3,3,7,7,7,7,11,11,11,11,15,15,15,15]2249; AVX512-NEXT: vpermpd {{.*#+}} zmm10 = zmm7[0,1,0,1,4,5,4,5]2250; AVX512-NEXT: vmulps %zmm10, %zmm4, %zmm42251; AVX512-NEXT: vaddps %zmm4, %zmm6, %zmm42252; AVX512-NEXT: vpermpd {{.*#+}} zmm6 = zmm8[2,3,2,3,6,7,6,7]2253; AVX512-NEXT: vmulps %zmm6, %zmm11, %zmm62254; AVX512-NEXT: vaddps %zmm6, %zmm4, %zmm42255; AVX512-NEXT: vpermpd {{.*#+}} zmm5 = zmm5[2,3,2,3,6,7,6,7]2256; AVX512-NEXT: vmulps %zmm5, %zmm12, %zmm52257; AVX512-NEXT: vaddps %zmm5, %zmm4, %zmm42258; AVX512-NEXT: vpermpd {{.*#+}} zmm5 = zmm9[2,3,2,3,6,7,6,7]2259; AVX512-NEXT: vmulps %zmm5, %zmm13, %zmm52260; AVX512-NEXT: vaddps %zmm5, %zmm4, %zmm42261; AVX512-NEXT: vpermpd {{.*#+}} zmm5 = zmm7[2,3,2,3,6,7,6,7]2262; AVX512-NEXT: vmulps %zmm5, %zmm3, %zmm32263; AVX512-NEXT: vaddps %zmm3, %zmm4, %zmm32264; AVX512-NEXT: retq2265entry:2266 %split = shufflevector <64 x float> %a0, <64 x float> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>2267 %split1 = shufflevector <64 x float> %a0, <64 x float> poison, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>2268 %split2 = shufflevector <64 x float> %a0, <64 x float> poison, <8 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23>2269 %split3 = shufflevector <64 x float> %a0, <64 x float> poison, <8 x i32> <i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>2270 %split4 = shufflevector <64 x float> %a0, <64 x float> poison, <8 x i32> <i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39>2271 %split5 = shufflevector <64 x float> %a0, <64 x float> poison, <8 x i32> <i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47>2272 %split6 = shufflevector <64 x float> %a0, <64 x float> poison, <8 x i32> <i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55>2273 %split7 = shufflevector <64 x float> %a0, <64 x float> poison, <8 x i32> <i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63>2274 %splat.splat = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> zeroinitializer2275 %0 = fmul <8 x float> %split, %splat.splat2276 %splat.splat18 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>2277 %1 = fmul <8 x float> %split1, %splat.splat182278 %2 = fadd <8 x float> %0, %12279 %splat.splat21 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>2280 %3 = fmul <8 x float> %split2, %splat.splat212281 %4 = fadd <8 x float> %2, %32282 %splat.splat24 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>2283 %5 = fmul <8 x float> %split3, %splat.splat242284 %6 = fadd <8 x float> %4, %52285 %splat.splat27 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>2286 %7 = fmul <8 x float> %split4, %splat.splat272287 %8 = fadd <8 x float> %6, %72288 %splat.splat30 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>2289 %9 = fmul <8 x float> %split5, %splat.splat302290 %10 = fadd <8 x float> %8, %92291 %splat.splat33 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6>2292 %11 = fmul <8 x float> %split6, %splat.splat332293 %12 = fadd <8 x float> %10, %112294 %splat.splat36 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7>2295 %13 = fmul <8 x float> %split7, %splat.splat362296 %14 = fadd <8 x float> %12, %132297 %splat.splat39 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>2298 %15 = fmul <8 x float> %split, %splat.splat392299 %splat.splat42 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 9>2300 %16 = fmul <8 x float> %split1, %splat.splat422301 %17 = fadd <8 x float> %15, %162302 %splat.splat45 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10>2303 %18 = fmul <8 x float> %split2, %splat.splat452304 %19 = fadd <8 x float> %17, %182305 %splat.splat48 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 11, i32 11, i32 11, i32 11, i32 11, i32 11, i32 11, i32 11>2306 %20 = fmul <8 x float> %split3, %splat.splat482307 %21 = fadd <8 x float> %19, %202308 %splat.splat51 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12>2309 %22 = fmul <8 x float> %split4, %splat.splat512310 %23 = fadd <8 x float> %21, %222311 %splat.splat54 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 13, i32 13, i32 13, i32 13, i32 13, i32 13, i32 13, i32 13>2312 %24 = fmul <8 x float> %split5, %splat.splat542313 %25 = fadd <8 x float> %23, %242314 %splat.splat57 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14>2315 %26 = fmul <8 x float> %split6, %splat.splat572316 %27 = fadd <8 x float> %25, %262317 %splat.splat60 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15>2318 %28 = fmul <8 x float> %split7, %splat.splat602319 %29 = fadd <8 x float> %27, %282320 %splat.splat63 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>2321 %30 = fmul <8 x float> %split, %splat.splat632322 %splat.splat66 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17>2323 %31 = fmul <8 x float> %split1, %splat.splat662324 %32 = fadd <8 x float> %30, %312325 %splat.splat69 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18>2326 %33 = fmul <8 x float> %split2, %splat.splat692327 %34 = fadd <8 x float> %32, %332328 %splat.splat72 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19>2329 %35 = fmul <8 x float> %split3, %splat.splat722330 %36 = fadd <8 x float> %34, %352331 %splat.splat75 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 20, i32 20, i32 20, i32 20, i32 20, i32 20, i32 20, i32 20>2332 %37 = fmul <8 x float> %split4, %splat.splat752333 %38 = fadd <8 x float> %36, %372334 %splat.splat78 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 21, i32 21, i32 21, i32 21, i32 21, i32 21, i32 21, i32 21>2335 %39 = fmul <8 x float> %split5, %splat.splat782336 %40 = fadd <8 x float> %38, %392337 %splat.splat81 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 22, i32 22, i32 22, i32 22, i32 22, i32 22, i32 22, i32 22>2338 %41 = fmul <8 x float> %split6, %splat.splat812339 %42 = fadd <8 x float> %40, %412340 %splat.splat84 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23>2341 %43 = fmul <8 x float> %split7, %splat.splat842342 %44 = fadd <8 x float> %42, %432343 %splat.splat87 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24>2344 %45 = fmul <8 x float> %split, %splat.splat872345 %splat.splat90 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25>2346 %46 = fmul <8 x float> %split1, %splat.splat902347 %47 = fadd <8 x float> %45, %462348 %splat.splat93 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 26, i32 26, i32 26, i32 26, i32 26, i32 26, i32 26, i32 26>2349 %48 = fmul <8 x float> %split2, %splat.splat932350 %49 = fadd <8 x float> %47, %482351 %splat.splat96 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 27, i32 27, i32 27, i32 27, i32 27, i32 27, i32 27, i32 27>2352 %50 = fmul <8 x float> %split3, %splat.splat962353 %51 = fadd <8 x float> %49, %502354 %splat.splat99 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28>2355 %52 = fmul <8 x float> %split4, %splat.splat992356 %53 = fadd <8 x float> %51, %522357 %splat.splat102 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 29, i32 29, i32 29, i32 29, i32 29, i32 29, i32 29, i32 29>2358 %54 = fmul <8 x float> %split5, %splat.splat1022359 %55 = fadd <8 x float> %53, %542360 %splat.splat105 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 30, i32 30, i32 30, i32 30, i32 30, i32 30, i32 30, i32 30>2361 %56 = fmul <8 x float> %split6, %splat.splat1052362 %57 = fadd <8 x float> %55, %562363 %splat.splat108 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31>2364 %58 = fmul <8 x float> %split7, %splat.splat1082365 %59 = fadd <8 x float> %57, %582366 %splat.splat111 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32>2367 %60 = fmul <8 x float> %split, %splat.splat1112368 %splat.splat114 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 33, i32 33, i32 33, i32 33, i32 33, i32 33, i32 33, i32 33>2369 %61 = fmul <8 x float> %split1, %splat.splat1142370 %62 = fadd <8 x float> %60, %612371 %splat.splat117 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 34, i32 34, i32 34, i32 34, i32 34, i32 34, i32 34, i32 34>2372 %63 = fmul <8 x float> %split2, %splat.splat1172373 %64 = fadd <8 x float> %62, %632374 %splat.splat120 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 35, i32 35, i32 35, i32 35, i32 35, i32 35, i32 35, i32 35>2375 %65 = fmul <8 x float> %split3, %splat.splat1202376 %66 = fadd <8 x float> %64, %652377 %splat.splat123 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 36, i32 36, i32 36, i32 36, i32 36, i32 36, i32 36, i32 36>2378 %67 = fmul <8 x float> %split4, %splat.splat1232379 %68 = fadd <8 x float> %66, %672380 %splat.splat126 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 37, i32 37, i32 37, i32 37, i32 37, i32 37, i32 37, i32 37>2381 %69 = fmul <8 x float> %split5, %splat.splat1262382 %70 = fadd <8 x float> %68, %692383 %splat.splat129 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 38, i32 38, i32 38, i32 38, i32 38, i32 38, i32 38, i32 38>2384 %71 = fmul <8 x float> %split6, %splat.splat1292385 %72 = fadd <8 x float> %70, %712386 %splat.splat132 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 39, i32 39, i32 39, i32 39, i32 39, i32 39, i32 39, i32 39>2387 %73 = fmul <8 x float> %split7, %splat.splat1322388 %74 = fadd <8 x float> %72, %732389 %splat.splat135 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 40, i32 40, i32 40, i32 40, i32 40, i32 40, i32 40, i32 40>2390 %75 = fmul <8 x float> %split, %splat.splat1352391 %splat.splat138 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 41, i32 41, i32 41, i32 41, i32 41, i32 41, i32 41, i32 41>2392 %76 = fmul <8 x float> %split1, %splat.splat1382393 %77 = fadd <8 x float> %75, %762394 %splat.splat141 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 42, i32 42, i32 42, i32 42, i32 42, i32 42, i32 42, i32 42>2395 %78 = fmul <8 x float> %split2, %splat.splat1412396 %79 = fadd <8 x float> %77, %782397 %splat.splat144 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 43, i32 43, i32 43, i32 43, i32 43, i32 43, i32 43, i32 43>2398 %80 = fmul <8 x float> %split3, %splat.splat1442399 %81 = fadd <8 x float> %79, %802400 %splat.splat147 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 44, i32 44, i32 44, i32 44, i32 44, i32 44, i32 44, i32 44>2401 %82 = fmul <8 x float> %split4, %splat.splat1472402 %83 = fadd <8 x float> %81, %822403 %splat.splat150 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 45, i32 45, i32 45, i32 45, i32 45, i32 45, i32 45, i32 45>2404 %84 = fmul <8 x float> %split5, %splat.splat1502405 %85 = fadd <8 x float> %83, %842406 %splat.splat153 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 46, i32 46, i32 46, i32 46, i32 46, i32 46, i32 46, i32 46>2407 %86 = fmul <8 x float> %split6, %splat.splat1532408 %87 = fadd <8 x float> %85, %862409 %splat.splat156 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 47, i32 47, i32 47, i32 47, i32 47, i32 47, i32 47, i32 47>2410 %88 = fmul <8 x float> %split7, %splat.splat1562411 %89 = fadd <8 x float> %87, %882412 %splat.splat159 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48>2413 %90 = fmul <8 x float> %split, %splat.splat1592414 %splat.splat162 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 49, i32 49, i32 49, i32 49, i32 49, i32 49, i32 49, i32 49>2415 %91 = fmul <8 x float> %split1, %splat.splat1622416 %92 = fadd <8 x float> %90, %912417 %splat.splat165 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 50, i32 50, i32 50, i32 50, i32 50, i32 50, i32 50, i32 50>2418 %93 = fmul <8 x float> %split2, %splat.splat1652419 %94 = fadd <8 x float> %92, %932420 %splat.splat168 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 51, i32 51, i32 51, i32 51, i32 51, i32 51, i32 51, i32 51>2421 %95 = fmul <8 x float> %split3, %splat.splat1682422 %96 = fadd <8 x float> %94, %952423 %splat.splat171 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 52, i32 52, i32 52, i32 52, i32 52, i32 52, i32 52, i32 52>2424 %97 = fmul <8 x float> %split4, %splat.splat1712425 %98 = fadd <8 x float> %96, %972426 %splat.splat174 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 53, i32 53, i32 53, i32 53, i32 53, i32 53, i32 53, i32 53>2427 %99 = fmul <8 x float> %split5, %splat.splat1742428 %100 = fadd <8 x float> %98, %992429 %splat.splat177 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 54, i32 54, i32 54, i32 54, i32 54, i32 54, i32 54, i32 54>2430 %101 = fmul <8 x float> %split6, %splat.splat1772431 %102 = fadd <8 x float> %100, %1012432 %splat.splat180 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 55, i32 55, i32 55, i32 55, i32 55, i32 55, i32 55, i32 55>2433 %103 = fmul <8 x float> %split7, %splat.splat1802434 %104 = fadd <8 x float> %102, %1032435 %splat.splat183 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 56, i32 56, i32 56, i32 56, i32 56, i32 56, i32 56, i32 56>2436 %105 = fmul <8 x float> %split, %splat.splat1832437 %splat.splat186 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 57, i32 57, i32 57, i32 57, i32 57, i32 57, i32 57, i32 57>2438 %106 = fmul <8 x float> %split1, %splat.splat1862439 %107 = fadd <8 x float> %105, %1062440 %splat.splat189 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 58, i32 58, i32 58, i32 58, i32 58, i32 58, i32 58, i32 58>2441 %108 = fmul <8 x float> %split2, %splat.splat1892442 %109 = fadd <8 x float> %107, %1082443 %splat.splat192 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 59, i32 59, i32 59, i32 59, i32 59, i32 59, i32 59, i32 59>2444 %110 = fmul <8 x float> %split3, %splat.splat1922445 %111 = fadd <8 x float> %109, %1102446 %splat.splat195 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 60, i32 60, i32 60, i32 60, i32 60, i32 60, i32 60, i32 60>2447 %112 = fmul <8 x float> %split4, %splat.splat1952448 %113 = fadd <8 x float> %111, %1122449 %splat.splat198 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 61, i32 61, i32 61, i32 61, i32 61, i32 61, i32 61, i32 61>2450 %114 = fmul <8 x float> %split5, %splat.splat1982451 %115 = fadd <8 x float> %113, %1142452 %splat.splat201 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 62, i32 62, i32 62, i32 62, i32 62, i32 62, i32 62, i32 62>2453 %116 = fmul <8 x float> %split6, %splat.splat2012454 %117 = fadd <8 x float> %115, %1162455 %splat.splat204 = shufflevector <64 x float> %a1, <64 x float> undef, <8 x i32> <i32 63, i32 63, i32 63, i32 63, i32 63, i32 63, i32 63, i32 63>2456 %118 = fmul <8 x float> %split7, %splat.splat2042457 %119 = fadd <8 x float> %117, %1182458 %120 = shufflevector <8 x float> %14, <8 x float> %29, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>2459 %121 = shufflevector <8 x float> %44, <8 x float> %59, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>2460 %122 = shufflevector <8 x float> %74, <8 x float> %89, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>2461 %123 = shufflevector <8 x float> %104, <8 x float> %119, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>2462 %124 = shufflevector <16 x float> %120, <16 x float> %121, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>2463 %125 = shufflevector <16 x float> %122, <16 x float> %123, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>2464 %126 = shufflevector <32 x float> %124, <32 x float> %125, <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63>2465 ret <64 x float> %1262466}2467 2468define <64 x double> @test_mul8x8_f64(<64 x double> %a0, <64 x double> %a1) nounwind {2469; SSE-LABEL: test_mul8x8_f64:2470; SSE: # %bb.0: # %entry2471; SSE-NEXT: subq $328, %rsp # imm = 0x1482472; SSE-NEXT: movapd %xmm7, %xmm152473; SSE-NEXT: movapd %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2474; SSE-NEXT: movapd %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2475; SSE-NEXT: movapd %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2476; SSE-NEXT: movapd %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2477; SSE-NEXT: movapd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2478; SSE-NEXT: movapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2479; SSE-NEXT: movq %rdi, %rax2480; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm142481; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm112482; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm132483; SSE-NEXT: movapd %xmm13, %xmm122484; SSE-NEXT: unpcklpd {{.*#+}} xmm12 = xmm12[0],xmm13[0]2485; SSE-NEXT: movapd %xmm3, %xmm102486; SSE-NEXT: mulpd %xmm12, %xmm102487; SSE-NEXT: movapd %xmm2, %xmm82488; SSE-NEXT: mulpd %xmm12, %xmm82489; SSE-NEXT: movapd %xmm1, %xmm92490; SSE-NEXT: mulpd %xmm12, %xmm92491; SSE-NEXT: mulpd %xmm0, %xmm122492; SSE-NEXT: unpckhpd {{.*#+}} xmm13 = xmm13[1,1]2493; SSE-NEXT: movapd %xmm7, %xmm22494; SSE-NEXT: mulpd %xmm13, %xmm22495; SSE-NEXT: addpd %xmm10, %xmm22496; SSE-NEXT: movapd %xmm6, %xmm72497; SSE-NEXT: movapd %xmm6, %xmm102498; SSE-NEXT: mulpd %xmm13, %xmm72499; SSE-NEXT: addpd %xmm8, %xmm72500; SSE-NEXT: movapd %xmm5, %xmm82501; SSE-NEXT: mulpd %xmm13, %xmm82502; SSE-NEXT: addpd %xmm9, %xmm82503; SSE-NEXT: mulpd %xmm4, %xmm132504; SSE-NEXT: addpd %xmm12, %xmm132505; SSE-NEXT: movapd %xmm11, %xmm62506; SSE-NEXT: unpcklpd {{.*#+}} xmm6 = xmm6[0],xmm11[0]2507; SSE-NEXT: movapd %xmm14, %xmm12508; SSE-NEXT: mulpd %xmm6, %xmm12509; SSE-NEXT: addpd %xmm13, %xmm12510; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm32511; SSE-NEXT: mulpd %xmm6, %xmm32512; SSE-NEXT: addpd %xmm8, %xmm32513; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm52514; SSE-NEXT: mulpd %xmm6, %xmm52515; SSE-NEXT: addpd %xmm7, %xmm52516; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm62517; SSE-NEXT: addpd %xmm2, %xmm62518; SSE-NEXT: unpckhpd {{.*#+}} xmm11 = xmm11[1,1]2519; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm22520; SSE-NEXT: mulpd %xmm11, %xmm22521; SSE-NEXT: addpd %xmm6, %xmm22522; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm42523; SSE-NEXT: mulpd %xmm11, %xmm42524; SSE-NEXT: addpd %xmm5, %xmm42525; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm52526; SSE-NEXT: mulpd %xmm11, %xmm52527; SSE-NEXT: addpd %xmm3, %xmm52528; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm112529; SSE-NEXT: addpd %xmm1, %xmm112530; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12531; SSE-NEXT: movapd %xmm1, %xmm62532; SSE-NEXT: unpcklpd {{.*#+}} xmm6 = xmm6[0],xmm1[0]2533; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm32534; SSE-NEXT: mulpd %xmm6, %xmm32535; SSE-NEXT: addpd %xmm11, %xmm32536; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm72537; SSE-NEXT: mulpd %xmm6, %xmm72538; SSE-NEXT: addpd %xmm5, %xmm72539; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm52540; SSE-NEXT: mulpd %xmm6, %xmm52541; SSE-NEXT: addpd %xmm4, %xmm52542; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm62543; SSE-NEXT: addpd %xmm2, %xmm62544; SSE-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1,1]2545; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02546; SSE-NEXT: mulpd %xmm1, %xmm02547; SSE-NEXT: addpd %xmm6, %xmm02548; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm42549; SSE-NEXT: mulpd %xmm1, %xmm42550; SSE-NEXT: addpd %xmm5, %xmm42551; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm52552; SSE-NEXT: mulpd %xmm1, %xmm52553; SSE-NEXT: addpd %xmm7, %xmm52554; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm12555; SSE-NEXT: addpd %xmm3, %xmm12556; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm62557; SSE-NEXT: movapd %xmm6, %xmm32558; SSE-NEXT: unpcklpd {{.*#+}} xmm3 = xmm3[0],xmm6[0]2559; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm22560; SSE-NEXT: mulpd %xmm3, %xmm22561; SSE-NEXT: addpd %xmm1, %xmm22562; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12563; SSE-NEXT: mulpd %xmm3, %xmm12564; SSE-NEXT: addpd %xmm5, %xmm12565; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm52566; SSE-NEXT: mulpd %xmm3, %xmm52567; SSE-NEXT: addpd %xmm4, %xmm52568; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm32569; SSE-NEXT: addpd %xmm0, %xmm32570; SSE-NEXT: unpckhpd {{.*#+}} xmm6 = xmm6[1,1]2571; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02572; SSE-NEXT: mulpd %xmm6, %xmm02573; SSE-NEXT: addpd %xmm3, %xmm02574; SSE-NEXT: movapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2575; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02576; SSE-NEXT: mulpd %xmm6, %xmm02577; SSE-NEXT: addpd %xmm5, %xmm02578; SSE-NEXT: movapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2579; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02580; SSE-NEXT: mulpd %xmm6, %xmm02581; SSE-NEXT: addpd %xmm1, %xmm02582; SSE-NEXT: movapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2583; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm62584; SSE-NEXT: addpd %xmm2, %xmm62585; SSE-NEXT: movapd %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2586; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12587; SSE-NEXT: movapd %xmm1, %xmm02588; SSE-NEXT: unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]2589; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload2590; SSE-NEXT: movapd %xmm11, %xmm32591; SSE-NEXT: mulpd %xmm0, %xmm32592; SSE-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1,1]2593; SSE-NEXT: movapd %xmm15, %xmm82594; SSE-NEXT: movapd %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2595; SSE-NEXT: movapd %xmm15, %xmm22596; SSE-NEXT: mulpd %xmm1, %xmm22597; SSE-NEXT: addpd %xmm3, %xmm22598; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload2599; SSE-NEXT: movapd %xmm9, %xmm32600; SSE-NEXT: mulpd %xmm0, %xmm32601; SSE-NEXT: movapd %xmm10, %xmm152602; SSE-NEXT: movapd %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2603; SSE-NEXT: movapd %xmm10, %xmm42604; SSE-NEXT: mulpd %xmm1, %xmm42605; SSE-NEXT: addpd %xmm3, %xmm42606; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload2607; SSE-NEXT: movapd %xmm13, %xmm32608; SSE-NEXT: mulpd %xmm0, %xmm32609; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload2610; SSE-NEXT: movapd %xmm10, %xmm52611; SSE-NEXT: mulpd %xmm1, %xmm52612; SSE-NEXT: addpd %xmm3, %xmm52613; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload2614; SSE-NEXT: mulpd %xmm12, %xmm02615; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload2616; SSE-NEXT: mulpd %xmm14, %xmm12617; SSE-NEXT: addpd %xmm0, %xmm12618; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02619; SSE-NEXT: movapd %xmm0, %xmm62620; SSE-NEXT: unpcklpd {{.*#+}} xmm6 = xmm6[0],xmm0[0]2621; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm32622; SSE-NEXT: mulpd %xmm6, %xmm32623; SSE-NEXT: addpd %xmm1, %xmm32624; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12625; SSE-NEXT: mulpd %xmm6, %xmm12626; SSE-NEXT: addpd %xmm5, %xmm12627; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm52628; SSE-NEXT: mulpd %xmm6, %xmm52629; SSE-NEXT: addpd %xmm4, %xmm52630; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm62631; SSE-NEXT: addpd %xmm2, %xmm62632; SSE-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1,1]2633; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm22634; SSE-NEXT: mulpd %xmm0, %xmm22635; SSE-NEXT: addpd %xmm6, %xmm22636; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm42637; SSE-NEXT: mulpd %xmm0, %xmm42638; SSE-NEXT: addpd %xmm5, %xmm42639; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm52640; SSE-NEXT: mulpd %xmm0, %xmm52641; SSE-NEXT: addpd %xmm1, %xmm52642; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12643; SSE-NEXT: mulpd %xmm1, %xmm02644; SSE-NEXT: addpd %xmm3, %xmm02645; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12646; SSE-NEXT: movapd %xmm1, %xmm62647; SSE-NEXT: unpcklpd {{.*#+}} xmm6 = xmm6[0],xmm1[0]2648; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm32649; SSE-NEXT: mulpd %xmm6, %xmm32650; SSE-NEXT: addpd %xmm0, %xmm32651; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm72652; SSE-NEXT: mulpd %xmm6, %xmm72653; SSE-NEXT: addpd %xmm5, %xmm72654; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm52655; SSE-NEXT: mulpd %xmm6, %xmm52656; SSE-NEXT: addpd %xmm4, %xmm52657; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm62658; SSE-NEXT: addpd %xmm2, %xmm62659; SSE-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1,1]2660; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02661; SSE-NEXT: mulpd %xmm1, %xmm02662; SSE-NEXT: addpd %xmm6, %xmm02663; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm42664; SSE-NEXT: mulpd %xmm1, %xmm42665; SSE-NEXT: addpd %xmm5, %xmm42666; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm52667; SSE-NEXT: mulpd %xmm1, %xmm52668; SSE-NEXT: addpd %xmm7, %xmm52669; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm22670; SSE-NEXT: mulpd %xmm2, %xmm12671; SSE-NEXT: addpd %xmm3, %xmm12672; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm62673; SSE-NEXT: movapd %xmm6, %xmm32674; SSE-NEXT: unpcklpd {{.*#+}} xmm3 = xmm3[0],xmm6[0]2675; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm22676; SSE-NEXT: mulpd %xmm3, %xmm22677; SSE-NEXT: addpd %xmm1, %xmm22678; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12679; SSE-NEXT: mulpd %xmm3, %xmm12680; SSE-NEXT: addpd %xmm5, %xmm12681; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm52682; SSE-NEXT: mulpd %xmm3, %xmm52683; SSE-NEXT: addpd %xmm4, %xmm52684; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm32685; SSE-NEXT: addpd %xmm0, %xmm32686; SSE-NEXT: unpckhpd {{.*#+}} xmm6 = xmm6[1,1]2687; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02688; SSE-NEXT: mulpd %xmm6, %xmm02689; SSE-NEXT: addpd %xmm3, %xmm02690; SSE-NEXT: movapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2691; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02692; SSE-NEXT: mulpd %xmm6, %xmm02693; SSE-NEXT: addpd %xmm5, %xmm02694; SSE-NEXT: movapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2695; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02696; SSE-NEXT: mulpd %xmm6, %xmm02697; SSE-NEXT: addpd %xmm1, %xmm02698; SSE-NEXT: movapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2699; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm62700; SSE-NEXT: addpd %xmm2, %xmm62701; SSE-NEXT: movapd %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2702; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12703; SSE-NEXT: movapd %xmm1, %xmm02704; SSE-NEXT: unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]2705; SSE-NEXT: movapd %xmm11, %xmm32706; SSE-NEXT: mulpd %xmm0, %xmm32707; SSE-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1,1]2708; SSE-NEXT: movapd %xmm8, %xmm22709; SSE-NEXT: mulpd %xmm1, %xmm22710; SSE-NEXT: addpd %xmm3, %xmm22711; SSE-NEXT: movapd %xmm9, %xmm32712; SSE-NEXT: mulpd %xmm0, %xmm32713; SSE-NEXT: movapd %xmm15, %xmm42714; SSE-NEXT: mulpd %xmm1, %xmm42715; SSE-NEXT: addpd %xmm3, %xmm42716; SSE-NEXT: movapd %xmm13, %xmm82717; SSE-NEXT: movapd %xmm13, %xmm32718; SSE-NEXT: mulpd %xmm0, %xmm32719; SSE-NEXT: movapd %xmm10, %xmm52720; SSE-NEXT: movapd %xmm10, %xmm152721; SSE-NEXT: mulpd %xmm1, %xmm52722; SSE-NEXT: addpd %xmm3, %xmm52723; SSE-NEXT: movapd %xmm12, %xmm102724; SSE-NEXT: mulpd %xmm12, %xmm02725; SSE-NEXT: movapd %xmm14, %xmm92726; SSE-NEXT: mulpd %xmm14, %xmm12727; SSE-NEXT: addpd %xmm0, %xmm12728; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02729; SSE-NEXT: movapd %xmm0, %xmm62730; SSE-NEXT: unpcklpd {{.*#+}} xmm6 = xmm6[0],xmm0[0]2731; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm32732; SSE-NEXT: mulpd %xmm6, %xmm32733; SSE-NEXT: addpd %xmm1, %xmm32734; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12735; SSE-NEXT: mulpd %xmm6, %xmm12736; SSE-NEXT: addpd %xmm5, %xmm12737; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm52738; SSE-NEXT: mulpd %xmm6, %xmm52739; SSE-NEXT: addpd %xmm4, %xmm52740; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm42741; SSE-NEXT: mulpd %xmm4, %xmm62742; SSE-NEXT: addpd %xmm2, %xmm62743; SSE-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1,1]2744; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm22745; SSE-NEXT: mulpd %xmm0, %xmm22746; SSE-NEXT: addpd %xmm6, %xmm22747; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm42748; SSE-NEXT: mulpd %xmm0, %xmm42749; SSE-NEXT: addpd %xmm5, %xmm42750; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm52751; SSE-NEXT: mulpd %xmm0, %xmm52752; SSE-NEXT: addpd %xmm1, %xmm52753; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm02754; SSE-NEXT: addpd %xmm3, %xmm02755; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12756; SSE-NEXT: movapd %xmm1, %xmm62757; SSE-NEXT: unpcklpd {{.*#+}} xmm6 = xmm6[0],xmm1[0]2758; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm32759; SSE-NEXT: mulpd %xmm6, %xmm32760; SSE-NEXT: addpd %xmm0, %xmm32761; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm72762; SSE-NEXT: mulpd %xmm6, %xmm72763; SSE-NEXT: addpd %xmm5, %xmm72764; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm52765; SSE-NEXT: mulpd %xmm6, %xmm52766; SSE-NEXT: addpd %xmm4, %xmm52767; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm62768; SSE-NEXT: addpd %xmm2, %xmm62769; SSE-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1,1]2770; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02771; SSE-NEXT: mulpd %xmm1, %xmm02772; SSE-NEXT: addpd %xmm6, %xmm02773; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm42774; SSE-NEXT: mulpd %xmm1, %xmm42775; SSE-NEXT: addpd %xmm5, %xmm42776; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm52777; SSE-NEXT: mulpd %xmm1, %xmm52778; SSE-NEXT: addpd %xmm7, %xmm52779; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm22780; SSE-NEXT: mulpd %xmm2, %xmm12781; SSE-NEXT: addpd %xmm3, %xmm12782; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm72783; SSE-NEXT: movapd %xmm7, %xmm32784; SSE-NEXT: unpcklpd {{.*#+}} xmm3 = xmm3[0],xmm7[0]2785; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm22786; SSE-NEXT: mulpd %xmm3, %xmm22787; SSE-NEXT: addpd %xmm1, %xmm22788; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12789; SSE-NEXT: mulpd %xmm3, %xmm12790; SSE-NEXT: addpd %xmm5, %xmm12791; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm52792; SSE-NEXT: mulpd %xmm3, %xmm52793; SSE-NEXT: addpd %xmm4, %xmm52794; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm42795; SSE-NEXT: mulpd %xmm4, %xmm32796; SSE-NEXT: addpd %xmm0, %xmm32797; SSE-NEXT: unpckhpd {{.*#+}} xmm7 = xmm7[1,1]2798; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02799; SSE-NEXT: mulpd %xmm7, %xmm02800; SSE-NEXT: addpd %xmm3, %xmm02801; SSE-NEXT: movapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2802; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02803; SSE-NEXT: mulpd %xmm7, %xmm02804; SSE-NEXT: addpd %xmm5, %xmm02805; SSE-NEXT: movapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2806; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02807; SSE-NEXT: mulpd %xmm7, %xmm02808; SSE-NEXT: addpd %xmm1, %xmm02809; SSE-NEXT: movapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2810; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02811; SSE-NEXT: mulpd %xmm0, %xmm72812; SSE-NEXT: addpd %xmm2, %xmm72813; SSE-NEXT: movapd %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2814; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12815; SSE-NEXT: movapd %xmm1, %xmm02816; SSE-NEXT: unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]2817; SSE-NEXT: movapd %xmm11, %xmm32818; SSE-NEXT: movapd %xmm11, %xmm122819; SSE-NEXT: mulpd %xmm0, %xmm32820; SSE-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1,1]2821; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload2822; SSE-NEXT: movapd %xmm6, %xmm22823; SSE-NEXT: mulpd %xmm1, %xmm22824; SSE-NEXT: addpd %xmm3, %xmm22825; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload2826; SSE-NEXT: movapd %xmm11, %xmm32827; SSE-NEXT: mulpd %xmm0, %xmm32828; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload2829; SSE-NEXT: movapd %xmm13, %xmm42830; SSE-NEXT: mulpd %xmm1, %xmm42831; SSE-NEXT: addpd %xmm3, %xmm42832; SSE-NEXT: movapd %xmm8, %xmm32833; SSE-NEXT: movapd %xmm8, %xmm142834; SSE-NEXT: mulpd %xmm0, %xmm32835; SSE-NEXT: movapd %xmm15, %xmm82836; SSE-NEXT: movapd %xmm15, %xmm52837; SSE-NEXT: mulpd %xmm1, %xmm52838; SSE-NEXT: addpd %xmm3, %xmm52839; SSE-NEXT: mulpd %xmm10, %xmm02840; SSE-NEXT: mulpd %xmm9, %xmm12841; SSE-NEXT: movapd %xmm9, %xmm102842; SSE-NEXT: addpd %xmm0, %xmm12843; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02844; SSE-NEXT: movapd %xmm0, %xmm72845; SSE-NEXT: unpcklpd {{.*#+}} xmm7 = xmm7[0],xmm0[0]2846; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm32847; SSE-NEXT: mulpd %xmm7, %xmm32848; SSE-NEXT: addpd %xmm1, %xmm32849; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12850; SSE-NEXT: mulpd %xmm7, %xmm12851; SSE-NEXT: addpd %xmm5, %xmm12852; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm52853; SSE-NEXT: mulpd %xmm7, %xmm52854; SSE-NEXT: addpd %xmm4, %xmm52855; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm72856; SSE-NEXT: addpd %xmm2, %xmm72857; SSE-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1,1]2858; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm22859; SSE-NEXT: mulpd %xmm0, %xmm22860; SSE-NEXT: addpd %xmm7, %xmm22861; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm42862; SSE-NEXT: mulpd %xmm0, %xmm42863; SSE-NEXT: addpd %xmm5, %xmm42864; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm52865; SSE-NEXT: mulpd %xmm0, %xmm52866; SSE-NEXT: addpd %xmm1, %xmm52867; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12868; SSE-NEXT: mulpd %xmm1, %xmm02869; SSE-NEXT: addpd %xmm3, %xmm02870; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12871; SSE-NEXT: movapd %xmm1, %xmm72872; SSE-NEXT: unpcklpd {{.*#+}} xmm7 = xmm7[0],xmm1[0]2873; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm32874; SSE-NEXT: mulpd %xmm7, %xmm32875; SSE-NEXT: addpd %xmm0, %xmm32876; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm92877; SSE-NEXT: mulpd %xmm7, %xmm92878; SSE-NEXT: addpd %xmm5, %xmm92879; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm52880; SSE-NEXT: mulpd %xmm7, %xmm52881; SSE-NEXT: addpd %xmm4, %xmm52882; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02883; SSE-NEXT: mulpd %xmm0, %xmm72884; SSE-NEXT: addpd %xmm2, %xmm72885; SSE-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1,1]2886; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02887; SSE-NEXT: mulpd %xmm1, %xmm02888; SSE-NEXT: addpd %xmm7, %xmm02889; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm42890; SSE-NEXT: mulpd %xmm1, %xmm42891; SSE-NEXT: addpd %xmm5, %xmm42892; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm72893; SSE-NEXT: mulpd %xmm1, %xmm72894; SSE-NEXT: addpd %xmm9, %xmm72895; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm12896; SSE-NEXT: addpd %xmm3, %xmm12897; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm152898; SSE-NEXT: movapd %xmm15, %xmm32899; SSE-NEXT: unpcklpd {{.*#+}} xmm3 = xmm3[0],xmm15[0]2900; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm22901; SSE-NEXT: mulpd %xmm3, %xmm22902; SSE-NEXT: addpd %xmm1, %xmm22903; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12904; SSE-NEXT: mulpd %xmm3, %xmm12905; SSE-NEXT: addpd %xmm7, %xmm12906; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm72907; SSE-NEXT: mulpd %xmm3, %xmm72908; SSE-NEXT: addpd %xmm4, %xmm72909; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm32910; SSE-NEXT: addpd %xmm0, %xmm32911; SSE-NEXT: unpckhpd {{.*#+}} xmm15 = xmm15[1,1]2912; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02913; SSE-NEXT: mulpd %xmm15, %xmm02914; SSE-NEXT: addpd %xmm3, %xmm02915; SSE-NEXT: movapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2916; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02917; SSE-NEXT: mulpd %xmm15, %xmm02918; SSE-NEXT: addpd %xmm7, %xmm02919; SSE-NEXT: movapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2920; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02921; SSE-NEXT: mulpd %xmm15, %xmm02922; SSE-NEXT: addpd %xmm1, %xmm02923; SSE-NEXT: movapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2924; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm152925; SSE-NEXT: addpd %xmm2, %xmm152926; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12927; SSE-NEXT: movapd %xmm1, %xmm02928; SSE-NEXT: unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]2929; SSE-NEXT: movapd %xmm12, %xmm32930; SSE-NEXT: mulpd %xmm0, %xmm32931; SSE-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1,1]2932; SSE-NEXT: movapd %xmm6, %xmm22933; SSE-NEXT: movapd %xmm6, %xmm122934; SSE-NEXT: mulpd %xmm1, %xmm22935; SSE-NEXT: addpd %xmm3, %xmm22936; SSE-NEXT: mulpd %xmm0, %xmm112937; SSE-NEXT: movapd %xmm13, %xmm62938; SSE-NEXT: movapd %xmm13, %xmm42939; SSE-NEXT: mulpd %xmm1, %xmm42940; SSE-NEXT: addpd %xmm11, %xmm42941; SSE-NEXT: mulpd %xmm0, %xmm142942; SSE-NEXT: movapd %xmm8, %xmm72943; SSE-NEXT: mulpd %xmm1, %xmm72944; SSE-NEXT: addpd %xmm14, %xmm72945; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload2946; SSE-NEXT: mulpd %xmm8, %xmm02947; SSE-NEXT: movapd %xmm10, %xmm52948; SSE-NEXT: mulpd %xmm10, %xmm12949; SSE-NEXT: addpd %xmm0, %xmm12950; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02951; SSE-NEXT: movapd %xmm0, %xmm92952; SSE-NEXT: unpcklpd {{.*#+}} xmm9 = xmm9[0],xmm0[0]2953; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm32954; SSE-NEXT: mulpd %xmm9, %xmm32955; SSE-NEXT: addpd %xmm1, %xmm32956; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12957; SSE-NEXT: mulpd %xmm9, %xmm12958; SSE-NEXT: addpd %xmm7, %xmm12959; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm72960; SSE-NEXT: mulpd %xmm9, %xmm72961; SSE-NEXT: addpd %xmm4, %xmm72962; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm92963; SSE-NEXT: addpd %xmm2, %xmm92964; SSE-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1,1]2965; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm22966; SSE-NEXT: mulpd %xmm0, %xmm22967; SSE-NEXT: addpd %xmm9, %xmm22968; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm42969; SSE-NEXT: mulpd %xmm0, %xmm42970; SSE-NEXT: addpd %xmm7, %xmm42971; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm72972; SSE-NEXT: mulpd %xmm0, %xmm72973; SSE-NEXT: addpd %xmm1, %xmm72974; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm02975; SSE-NEXT: addpd %xmm3, %xmm02976; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm12977; SSE-NEXT: movapd %xmm1, %xmm92978; SSE-NEXT: unpcklpd {{.*#+}} xmm9 = xmm9[0],xmm1[0]2979; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm32980; SSE-NEXT: mulpd %xmm9, %xmm32981; SSE-NEXT: addpd %xmm0, %xmm32982; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm102983; SSE-NEXT: mulpd %xmm9, %xmm102984; SSE-NEXT: addpd %xmm7, %xmm102985; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm72986; SSE-NEXT: mulpd %xmm9, %xmm72987; SSE-NEXT: addpd %xmm4, %xmm72988; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm92989; SSE-NEXT: addpd %xmm2, %xmm92990; SSE-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1,1]2991; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm02992; SSE-NEXT: mulpd %xmm1, %xmm02993; SSE-NEXT: addpd %xmm9, %xmm02994; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm92995; SSE-NEXT: mulpd %xmm1, %xmm92996; SSE-NEXT: addpd %xmm7, %xmm92997; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm72998; SSE-NEXT: mulpd %xmm1, %xmm72999; SSE-NEXT: addpd %xmm10, %xmm73000; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm13001; SSE-NEXT: addpd %xmm3, %xmm13002; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm113003; SSE-NEXT: movapd %xmm11, %xmm33004; SSE-NEXT: unpcklpd {{.*#+}} xmm3 = xmm3[0],xmm11[0]3005; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm23006; SSE-NEXT: mulpd %xmm3, %xmm23007; SSE-NEXT: addpd %xmm1, %xmm23008; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm13009; SSE-NEXT: mulpd %xmm3, %xmm13010; SSE-NEXT: addpd %xmm7, %xmm13011; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm73012; SSE-NEXT: mulpd %xmm3, %xmm73013; SSE-NEXT: addpd %xmm9, %xmm73014; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm33015; SSE-NEXT: addpd %xmm0, %xmm33016; SSE-NEXT: unpckhpd {{.*#+}} xmm11 = xmm11[1,1]3017; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03018; SSE-NEXT: mulpd %xmm11, %xmm03019; SSE-NEXT: addpd %xmm3, %xmm03020; SSE-NEXT: movapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3021; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03022; SSE-NEXT: mulpd %xmm11, %xmm03023; SSE-NEXT: addpd %xmm7, %xmm03024; SSE-NEXT: movapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3025; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03026; SSE-NEXT: mulpd %xmm11, %xmm03027; SSE-NEXT: addpd %xmm1, %xmm03028; SSE-NEXT: movapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3029; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm113030; SSE-NEXT: addpd %xmm2, %xmm113031; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm13032; SSE-NEXT: movapd %xmm1, %xmm03033; SSE-NEXT: unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]3034; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload3035; SSE-NEXT: movapd %xmm13, %xmm33036; SSE-NEXT: mulpd %xmm0, %xmm33037; SSE-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1,1]3038; SSE-NEXT: movapd %xmm12, %xmm23039; SSE-NEXT: mulpd %xmm1, %xmm23040; SSE-NEXT: addpd %xmm3, %xmm23041; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload3042; SSE-NEXT: movapd %xmm14, %xmm33043; SSE-NEXT: mulpd %xmm0, %xmm33044; SSE-NEXT: movapd %xmm6, %xmm73045; SSE-NEXT: mulpd %xmm1, %xmm73046; SSE-NEXT: addpd %xmm3, %xmm73047; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload3048; SSE-NEXT: movapd %xmm4, %xmm33049; SSE-NEXT: mulpd %xmm0, %xmm33050; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload3051; SSE-NEXT: movapd %xmm6, %xmm93052; SSE-NEXT: mulpd %xmm1, %xmm93053; SSE-NEXT: addpd %xmm3, %xmm93054; SSE-NEXT: mulpd %xmm8, %xmm03055; SSE-NEXT: mulpd %xmm5, %xmm13056; SSE-NEXT: addpd %xmm0, %xmm13057; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03058; SSE-NEXT: movapd %xmm0, %xmm103059; SSE-NEXT: unpcklpd {{.*#+}} xmm10 = xmm10[0],xmm0[0]3060; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm33061; SSE-NEXT: mulpd %xmm10, %xmm33062; SSE-NEXT: addpd %xmm1, %xmm33063; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm123064; SSE-NEXT: mulpd %xmm10, %xmm123065; SSE-NEXT: addpd %xmm9, %xmm123066; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm93067; SSE-NEXT: mulpd %xmm10, %xmm93068; SSE-NEXT: addpd %xmm7, %xmm93069; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm103070; SSE-NEXT: addpd %xmm2, %xmm103071; SSE-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1,1]3072; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm13073; SSE-NEXT: mulpd %xmm0, %xmm13074; SSE-NEXT: addpd %xmm10, %xmm13075; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm103076; SSE-NEXT: mulpd %xmm0, %xmm103077; SSE-NEXT: addpd %xmm9, %xmm103078; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm93079; SSE-NEXT: mulpd %xmm0, %xmm93080; SSE-NEXT: addpd %xmm12, %xmm93081; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm23082; SSE-NEXT: mulpd %xmm2, %xmm03083; SSE-NEXT: addpd %xmm3, %xmm03084; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm73085; SSE-NEXT: movapd %xmm7, %xmm33086; SSE-NEXT: unpcklpd {{.*#+}} xmm3 = xmm3[0],xmm7[0]3087; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm23088; SSE-NEXT: mulpd %xmm3, %xmm23089; SSE-NEXT: addpd %xmm0, %xmm23090; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm123091; SSE-NEXT: mulpd %xmm3, %xmm123092; SSE-NEXT: addpd %xmm9, %xmm123093; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm93094; SSE-NEXT: mulpd %xmm3, %xmm93095; SSE-NEXT: addpd %xmm10, %xmm93096; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03097; SSE-NEXT: mulpd %xmm0, %xmm33098; SSE-NEXT: addpd %xmm1, %xmm33099; SSE-NEXT: unpckhpd {{.*#+}} xmm7 = xmm7[1,1]3100; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03101; SSE-NEXT: mulpd %xmm7, %xmm03102; SSE-NEXT: addpd %xmm3, %xmm03103; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm103104; SSE-NEXT: mulpd %xmm7, %xmm103105; SSE-NEXT: addpd %xmm9, %xmm103106; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm93107; SSE-NEXT: mulpd %xmm7, %xmm93108; SSE-NEXT: addpd %xmm12, %xmm93109; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm73110; SSE-NEXT: addpd %xmm2, %xmm73111; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm83112; SSE-NEXT: movapd %xmm8, %xmm23113; SSE-NEXT: unpcklpd {{.*#+}} xmm2 = xmm2[0],xmm8[0]3114; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm13115; SSE-NEXT: mulpd %xmm2, %xmm13116; SSE-NEXT: addpd %xmm7, %xmm13117; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm123118; SSE-NEXT: mulpd %xmm2, %xmm123119; SSE-NEXT: addpd %xmm9, %xmm123120; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm73121; SSE-NEXT: mulpd %xmm2, %xmm73122; SSE-NEXT: addpd %xmm10, %xmm73123; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm33124; SSE-NEXT: mulpd %xmm3, %xmm23125; SSE-NEXT: addpd %xmm0, %xmm23126; SSE-NEXT: unpckhpd {{.*#+}} xmm8 = xmm8[1,1]3127; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03128; SSE-NEXT: mulpd %xmm8, %xmm03129; SSE-NEXT: addpd %xmm2, %xmm03130; SSE-NEXT: movapd %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill3131; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03132; SSE-NEXT: mulpd %xmm8, %xmm03133; SSE-NEXT: addpd %xmm7, %xmm03134; SSE-NEXT: movapd %xmm0, (%rsp) # 16-byte Spill3135; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm93136; SSE-NEXT: mulpd %xmm8, %xmm93137; SSE-NEXT: addpd %xmm12, %xmm93138; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03139; SSE-NEXT: mulpd %xmm0, %xmm83140; SSE-NEXT: addpd %xmm1, %xmm83141; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm13142; SSE-NEXT: movapd %xmm1, %xmm03143; SSE-NEXT: unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]3144; SSE-NEXT: movapd %xmm13, %xmm123145; SSE-NEXT: mulpd %xmm0, %xmm123146; SSE-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1,1]3147; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload3148; SSE-NEXT: mulpd %xmm1, %xmm33149; SSE-NEXT: addpd %xmm12, %xmm33150; SSE-NEXT: movapd %xmm14, %xmm123151; SSE-NEXT: movapd %xmm14, %xmm53152; SSE-NEXT: mulpd %xmm0, %xmm123153; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload3154; SSE-NEXT: mulpd %xmm1, %xmm133155; SSE-NEXT: addpd %xmm12, %xmm133156; SSE-NEXT: mulpd %xmm0, %xmm43157; SSE-NEXT: movapd %xmm6, %xmm143158; SSE-NEXT: mulpd %xmm1, %xmm143159; SSE-NEXT: addpd %xmm4, %xmm143160; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm6 # 16-byte Reload3161; SSE-NEXT: mulpd %xmm6, %xmm03162; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload3163; SSE-NEXT: mulpd %xmm10, %xmm13164; SSE-NEXT: addpd %xmm0, %xmm13165; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm23166; SSE-NEXT: movapd %xmm2, %xmm03167; SSE-NEXT: unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm2[0]3168; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm123169; SSE-NEXT: mulpd %xmm0, %xmm123170; SSE-NEXT: addpd %xmm1, %xmm123171; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm13172; SSE-NEXT: mulpd %xmm0, %xmm13173; SSE-NEXT: addpd %xmm14, %xmm13174; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm143175; SSE-NEXT: mulpd %xmm0, %xmm143176; SSE-NEXT: addpd %xmm13, %xmm143177; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm03178; SSE-NEXT: addpd %xmm3, %xmm03179; SSE-NEXT: unpckhpd {{.*#+}} xmm2 = xmm2[1,1]3180; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm133181; SSE-NEXT: mulpd %xmm2, %xmm133182; SSE-NEXT: addpd %xmm0, %xmm133183; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03184; SSE-NEXT: mulpd %xmm2, %xmm03185; SSE-NEXT: addpd %xmm14, %xmm03186; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm143187; SSE-NEXT: mulpd %xmm2, %xmm143188; SSE-NEXT: addpd %xmm1, %xmm143189; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm13190; SSE-NEXT: mulpd %xmm1, %xmm23191; SSE-NEXT: addpd %xmm12, %xmm23192; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm123193; SSE-NEXT: movapd %xmm12, %xmm13194; SSE-NEXT: unpcklpd {{.*#+}} xmm1 = xmm1[0],xmm12[0]3195; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm33196; SSE-NEXT: mulpd %xmm1, %xmm33197; SSE-NEXT: addpd %xmm2, %xmm33198; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm23199; SSE-NEXT: mulpd %xmm1, %xmm23200; SSE-NEXT: addpd %xmm14, %xmm23201; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm143202; SSE-NEXT: mulpd %xmm1, %xmm143203; SSE-NEXT: addpd %xmm0, %xmm143204; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03205; SSE-NEXT: mulpd %xmm0, %xmm13206; SSE-NEXT: addpd %xmm13, %xmm13207; SSE-NEXT: unpckhpd {{.*#+}} xmm12 = xmm12[1,1]3208; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm43209; SSE-NEXT: mulpd %xmm12, %xmm43210; SSE-NEXT: addpd %xmm1, %xmm43211; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm133212; SSE-NEXT: mulpd %xmm12, %xmm133213; SSE-NEXT: addpd %xmm14, %xmm133214; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm143215; SSE-NEXT: mulpd %xmm12, %xmm143216; SSE-NEXT: addpd %xmm2, %xmm143217; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm123218; SSE-NEXT: addpd %xmm3, %xmm123219; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm23220; SSE-NEXT: movapd %xmm2, %xmm33221; SSE-NEXT: unpcklpd {{.*#+}} xmm3 = xmm3[0],xmm2[0]3222; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm13223; SSE-NEXT: mulpd %xmm3, %xmm13224; SSE-NEXT: addpd %xmm12, %xmm13225; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm123226; SSE-NEXT: mulpd %xmm3, %xmm123227; SSE-NEXT: addpd %xmm14, %xmm123228; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03229; SSE-NEXT: mulpd %xmm3, %xmm03230; SSE-NEXT: addpd %xmm13, %xmm03231; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm73232; SSE-NEXT: mulpd %xmm7, %xmm33233; SSE-NEXT: addpd %xmm4, %xmm33234; SSE-NEXT: unpckhpd {{.*#+}} xmm2 = xmm2[1,1]3235; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm143236; SSE-NEXT: mulpd %xmm2, %xmm143237; SSE-NEXT: addpd %xmm3, %xmm143238; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm133239; SSE-NEXT: mulpd %xmm2, %xmm133240; SSE-NEXT: addpd %xmm0, %xmm133241; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm73242; SSE-NEXT: mulpd %xmm2, %xmm73243; SSE-NEXT: addpd %xmm12, %xmm73244; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03245; SSE-NEXT: mulpd %xmm0, %xmm23246; SSE-NEXT: addpd %xmm1, %xmm23247; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm13248; SSE-NEXT: movapd %xmm1, %xmm03249; SSE-NEXT: unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]3250; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload3251; SSE-NEXT: mulpd %xmm0, %xmm123252; SSE-NEXT: mulpd %xmm0, %xmm53253; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload3254; SSE-NEXT: mulpd %xmm0, %xmm33255; SSE-NEXT: mulpd %xmm6, %xmm03256; SSE-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1,1]3257; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload3258; SSE-NEXT: mulpd %xmm1, %xmm43259; SSE-NEXT: addpd %xmm12, %xmm43260; SSE-NEXT: movapd %xmm4, %xmm123261; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload3262; SSE-NEXT: mulpd %xmm1, %xmm43263; SSE-NEXT: addpd %xmm5, %xmm43264; SSE-NEXT: movapd %xmm4, %xmm53265; SSE-NEXT: movapd {{[-0-9]+}}(%r{{[sb]}}p), %xmm4 # 16-byte Reload3266; SSE-NEXT: mulpd %xmm1, %xmm43267; SSE-NEXT: addpd %xmm3, %xmm43268; SSE-NEXT: movapd %xmm4, %xmm33269; SSE-NEXT: mulpd %xmm10, %xmm13270; SSE-NEXT: addpd %xmm0, %xmm13271; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03272; SSE-NEXT: movapd %xmm0, %xmm43273; SSE-NEXT: unpcklpd {{.*#+}} xmm4 = xmm4[0],xmm0[0]3274; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm103275; SSE-NEXT: mulpd %xmm4, %xmm103276; SSE-NEXT: addpd %xmm1, %xmm103277; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm13278; SSE-NEXT: mulpd %xmm4, %xmm13279; SSE-NEXT: addpd %xmm3, %xmm13280; SSE-NEXT: movapd %xmm1, %xmm33281; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm13282; SSE-NEXT: mulpd %xmm4, %xmm13283; SSE-NEXT: addpd %xmm5, %xmm13284; SSE-NEXT: movapd %xmm1, %xmm53285; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm43286; SSE-NEXT: addpd %xmm12, %xmm43287; SSE-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1,1]3288; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm13289; SSE-NEXT: mulpd %xmm0, %xmm13290; SSE-NEXT: addpd %xmm4, %xmm13291; SSE-NEXT: movapd %xmm1, %xmm123292; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm63293; SSE-NEXT: mulpd %xmm0, %xmm63294; SSE-NEXT: addpd %xmm5, %xmm63295; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm13296; SSE-NEXT: mulpd %xmm0, %xmm13297; SSE-NEXT: addpd %xmm3, %xmm13298; SSE-NEXT: movapd %xmm1, %xmm33299; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm03300; SSE-NEXT: addpd %xmm10, %xmm03301; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm13302; SSE-NEXT: movapd %xmm1, %xmm43303; SSE-NEXT: unpcklpd {{.*#+}} xmm4 = xmm4[0],xmm1[0]3304; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm53305; SSE-NEXT: mulpd %xmm4, %xmm53306; SSE-NEXT: addpd %xmm0, %xmm53307; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03308; SSE-NEXT: mulpd %xmm4, %xmm03309; SSE-NEXT: addpd %xmm3, %xmm03310; SSE-NEXT: movapd %xmm0, %xmm103311; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03312; SSE-NEXT: mulpd %xmm4, %xmm03313; SSE-NEXT: addpd %xmm6, %xmm03314; SSE-NEXT: movapd %xmm0, %xmm63315; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm43316; SSE-NEXT: addpd %xmm12, %xmm43317; SSE-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1,1]3318; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03319; SSE-NEXT: mulpd %xmm1, %xmm03320; SSE-NEXT: addpd %xmm4, %xmm03321; SSE-NEXT: movapd %xmm0, %xmm33322; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03323; SSE-NEXT: mulpd %xmm1, %xmm03324; SSE-NEXT: addpd %xmm6, %xmm03325; SSE-NEXT: movapd %xmm0, %xmm63326; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03327; SSE-NEXT: mulpd %xmm1, %xmm03328; SSE-NEXT: addpd %xmm10, %xmm03329; SSE-NEXT: movapd %xmm0, %xmm103330; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm13331; SSE-NEXT: addpd %xmm5, %xmm13332; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm03333; SSE-NEXT: movapd %xmm0, %xmm43334; SSE-NEXT: unpcklpd {{.*#+}} xmm4 = xmm4[0],xmm0[0]3335; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm53336; SSE-NEXT: mulpd %xmm4, %xmm53337; SSE-NEXT: addpd %xmm1, %xmm53338; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm13339; SSE-NEXT: mulpd %xmm4, %xmm13340; SSE-NEXT: addpd %xmm10, %xmm13341; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm103342; SSE-NEXT: mulpd %xmm4, %xmm103343; SSE-NEXT: addpd %xmm6, %xmm103344; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm43345; SSE-NEXT: addpd %xmm3, %xmm43346; SSE-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1,1]3347; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm33348; SSE-NEXT: mulpd %xmm0, %xmm33349; SSE-NEXT: addpd %xmm4, %xmm33350; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm43351; SSE-NEXT: mulpd %xmm0, %xmm43352; SSE-NEXT: addpd %xmm10, %xmm43353; SSE-NEXT: movapd {{[0-9]+}}(%rsp), %xmm63354; SSE-NEXT: mulpd %xmm0, %xmm63355; SSE-NEXT: addpd %xmm1, %xmm63356; SSE-NEXT: mulpd {{[0-9]+}}(%rsp), %xmm03357; SSE-NEXT: addpd %xmm5, %xmm03358; SSE-NEXT: movapd %xmm3, 496(%rdi)3359; SSE-NEXT: movapd %xmm4, 480(%rdi)3360; SSE-NEXT: movapd %xmm6, 464(%rdi)3361; SSE-NEXT: movapd %xmm0, 448(%rdi)3362; SSE-NEXT: movapd %xmm14, 432(%rdi)3363; SSE-NEXT: movapd %xmm13, 416(%rdi)3364; SSE-NEXT: movapd %xmm7, 400(%rdi)3365; SSE-NEXT: movapd %xmm2, 384(%rdi)3366; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3367; SSE-NEXT: movaps %xmm0, 368(%rdi)3368; SSE-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload3369; SSE-NEXT: movaps %xmm0, 352(%rdi)3370; SSE-NEXT: movapd %xmm9, 336(%rdi)3371; SSE-NEXT: movapd %xmm8, 320(%rdi)3372; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3373; SSE-NEXT: movaps %xmm0, 304(%rdi)3374; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3375; SSE-NEXT: movaps %xmm0, 288(%rdi)3376; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3377; SSE-NEXT: movaps %xmm0, 272(%rdi)3378; SSE-NEXT: movapd %xmm11, 256(%rdi)3379; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3380; SSE-NEXT: movaps %xmm0, 240(%rdi)3381; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3382; SSE-NEXT: movaps %xmm0, 224(%rdi)3383; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3384; SSE-NEXT: movaps %xmm0, 208(%rdi)3385; SSE-NEXT: movapd %xmm15, 192(%rdi)3386; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3387; SSE-NEXT: movaps %xmm0, 176(%rdi)3388; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3389; SSE-NEXT: movaps %xmm0, 160(%rdi)3390; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3391; SSE-NEXT: movaps %xmm0, 144(%rdi)3392; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3393; SSE-NEXT: movaps %xmm0, 128(%rdi)3394; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3395; SSE-NEXT: movaps %xmm0, 112(%rdi)3396; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3397; SSE-NEXT: movaps %xmm0, 96(%rdi)3398; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3399; SSE-NEXT: movaps %xmm0, 80(%rdi)3400; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3401; SSE-NEXT: movaps %xmm0, 64(%rdi)3402; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3403; SSE-NEXT: movaps %xmm0, 48(%rdi)3404; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3405; SSE-NEXT: movaps %xmm0, 32(%rdi)3406; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3407; SSE-NEXT: movaps %xmm0, 16(%rdi)3408; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload3409; SSE-NEXT: movaps %xmm0, (%rdi)3410; SSE-NEXT: addq $328, %rsp # imm = 0x1483411; SSE-NEXT: retq3412;3413; AVX1OR2-LABEL: test_mul8x8_f64:3414; AVX1OR2: # %bb.0: # %entry3415; AVX1OR2-NEXT: pushq %rbp3416; AVX1OR2-NEXT: movq %rsp, %rbp3417; AVX1OR2-NEXT: andq $-32, %rsp3418; AVX1OR2-NEXT: subq $448, %rsp # imm = 0x1C03419; AVX1OR2-NEXT: vmovapd %ymm2, %ymm123420; AVX1OR2-NEXT: vmovapd %ymm0, (%rsp) # 32-byte Spill3421; AVX1OR2-NEXT: movq %rdi, %rax3422; AVX1OR2-NEXT: vmovapd 144(%rbp), %ymm133423; AVX1OR2-NEXT: vmovapd 112(%rbp), %ymm143424; AVX1OR2-NEXT: vbroadcastsd 272(%rbp), %ymm103425; AVX1OR2-NEXT: vmulpd %ymm1, %ymm10, %ymm83426; AVX1OR2-NEXT: vmovapd %ymm1, %ymm93427; AVX1OR2-NEXT: vmulpd %ymm0, %ymm10, %ymm03428; AVX1OR2-NEXT: vbroadcastsd 280(%rbp), %ymm103429; AVX1OR2-NEXT: vmulpd %ymm3, %ymm10, %ymm113430; AVX1OR2-NEXT: vaddpd %ymm11, %ymm8, %ymm13431; AVX1OR2-NEXT: vmulpd %ymm2, %ymm10, %ymm103432; AVX1OR2-NEXT: vaddpd %ymm0, %ymm10, %ymm03433; AVX1OR2-NEXT: vbroadcastsd 288(%rbp), %ymm103434; AVX1OR2-NEXT: vmulpd %ymm4, %ymm10, %ymm113435; AVX1OR2-NEXT: vaddpd %ymm0, %ymm11, %ymm03436; AVX1OR2-NEXT: vmulpd %ymm5, %ymm10, %ymm103437; AVX1OR2-NEXT: vaddpd %ymm1, %ymm10, %ymm13438; AVX1OR2-NEXT: vbroadcastsd 296(%rbp), %ymm103439; AVX1OR2-NEXT: vmulpd %ymm7, %ymm10, %ymm113440; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13441; AVX1OR2-NEXT: vmulpd %ymm6, %ymm10, %ymm103442; AVX1OR2-NEXT: vaddpd %ymm0, %ymm10, %ymm03443; AVX1OR2-NEXT: vbroadcastsd 304(%rbp), %ymm103444; AVX1OR2-NEXT: vmulpd 16(%rbp), %ymm10, %ymm113445; AVX1OR2-NEXT: vaddpd %ymm0, %ymm11, %ymm03446; AVX1OR2-NEXT: vmulpd 48(%rbp), %ymm10, %ymm103447; AVX1OR2-NEXT: vaddpd %ymm1, %ymm10, %ymm13448; AVX1OR2-NEXT: vbroadcastsd 312(%rbp), %ymm103449; AVX1OR2-NEXT: vmulpd %ymm10, %ymm14, %ymm113450; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13451; AVX1OR2-NEXT: vmulpd 80(%rbp), %ymm10, %ymm103452; AVX1OR2-NEXT: vaddpd %ymm0, %ymm10, %ymm03453; AVX1OR2-NEXT: vbroadcastsd 320(%rbp), %ymm103454; AVX1OR2-NEXT: vmulpd %ymm10, %ymm13, %ymm113455; AVX1OR2-NEXT: vaddpd %ymm0, %ymm11, %ymm03456; AVX1OR2-NEXT: vmulpd 176(%rbp), %ymm10, %ymm103457; AVX1OR2-NEXT: vaddpd %ymm1, %ymm10, %ymm13458; AVX1OR2-NEXT: vbroadcastsd 328(%rbp), %ymm103459; AVX1OR2-NEXT: vmulpd 240(%rbp), %ymm10, %ymm113460; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13461; AVX1OR2-NEXT: vmovapd %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3462; AVX1OR2-NEXT: vmulpd 208(%rbp), %ymm10, %ymm13463; AVX1OR2-NEXT: vaddpd %ymm1, %ymm0, %ymm03464; AVX1OR2-NEXT: vmovapd %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3465; AVX1OR2-NEXT: vbroadcastsd 336(%rbp), %ymm03466; AVX1OR2-NEXT: vmulpd %ymm0, %ymm9, %ymm13467; AVX1OR2-NEXT: vbroadcastsd 344(%rbp), %ymm103468; AVX1OR2-NEXT: vmulpd %ymm3, %ymm10, %ymm113469; AVX1OR2-NEXT: vmovapd %ymm3, %ymm83470; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13471; AVX1OR2-NEXT: vmovapd (%rsp), %ymm15 # 32-byte Reload3472; AVX1OR2-NEXT: vmulpd %ymm0, %ymm15, %ymm03473; AVX1OR2-NEXT: vmulpd %ymm2, %ymm10, %ymm103474; AVX1OR2-NEXT: vaddpd %ymm0, %ymm10, %ymm03475; AVX1OR2-NEXT: vbroadcastsd 352(%rbp), %ymm103476; AVX1OR2-NEXT: vmulpd %ymm4, %ymm10, %ymm113477; AVX1OR2-NEXT: vaddpd %ymm0, %ymm11, %ymm03478; AVX1OR2-NEXT: vmulpd %ymm5, %ymm10, %ymm103479; AVX1OR2-NEXT: vmovapd %ymm5, %ymm33480; AVX1OR2-NEXT: vaddpd %ymm1, %ymm10, %ymm13481; AVX1OR2-NEXT: vbroadcastsd 360(%rbp), %ymm103482; AVX1OR2-NEXT: vmulpd %ymm7, %ymm10, %ymm113483; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13484; AVX1OR2-NEXT: vmulpd %ymm6, %ymm10, %ymm103485; AVX1OR2-NEXT: vaddpd %ymm0, %ymm10, %ymm03486; AVX1OR2-NEXT: vbroadcastsd 368(%rbp), %ymm103487; AVX1OR2-NEXT: vmovapd 16(%rbp), %ymm23488; AVX1OR2-NEXT: vmulpd %ymm2, %ymm10, %ymm113489; AVX1OR2-NEXT: vaddpd %ymm0, %ymm11, %ymm03490; AVX1OR2-NEXT: vmulpd 48(%rbp), %ymm10, %ymm103491; AVX1OR2-NEXT: vaddpd %ymm1, %ymm10, %ymm13492; AVX1OR2-NEXT: vbroadcastsd 376(%rbp), %ymm103493; AVX1OR2-NEXT: vmulpd %ymm10, %ymm14, %ymm113494; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13495; AVX1OR2-NEXT: vmovapd 80(%rbp), %ymm23496; AVX1OR2-NEXT: vmulpd %ymm2, %ymm10, %ymm103497; AVX1OR2-NEXT: vaddpd %ymm0, %ymm10, %ymm03498; AVX1OR2-NEXT: vbroadcastsd 384(%rbp), %ymm103499; AVX1OR2-NEXT: vmulpd %ymm10, %ymm13, %ymm113500; AVX1OR2-NEXT: vaddpd %ymm0, %ymm11, %ymm03501; AVX1OR2-NEXT: vmovapd 176(%rbp), %ymm143502; AVX1OR2-NEXT: vmulpd %ymm10, %ymm14, %ymm103503; AVX1OR2-NEXT: vaddpd %ymm1, %ymm10, %ymm13504; AVX1OR2-NEXT: vbroadcastsd 392(%rbp), %ymm103505; AVX1OR2-NEXT: vmovapd 240(%rbp), %ymm23506; AVX1OR2-NEXT: vmulpd %ymm2, %ymm10, %ymm113507; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13508; AVX1OR2-NEXT: vmovapd %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3509; AVX1OR2-NEXT: vmulpd 208(%rbp), %ymm10, %ymm13510; AVX1OR2-NEXT: vaddpd %ymm1, %ymm0, %ymm03511; AVX1OR2-NEXT: vmovapd %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3512; AVX1OR2-NEXT: vbroadcastsd 400(%rbp), %ymm03513; AVX1OR2-NEXT: vmulpd %ymm0, %ymm9, %ymm13514; AVX1OR2-NEXT: vbroadcastsd 408(%rbp), %ymm103515; AVX1OR2-NEXT: vmovapd %ymm8, %ymm53516; AVX1OR2-NEXT: vmulpd %ymm10, %ymm8, %ymm113517; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13518; AVX1OR2-NEXT: vmulpd %ymm0, %ymm15, %ymm03519; AVX1OR2-NEXT: vmulpd %ymm10, %ymm12, %ymm103520; AVX1OR2-NEXT: vaddpd %ymm0, %ymm10, %ymm03521; AVX1OR2-NEXT: vbroadcastsd 416(%rbp), %ymm103522; AVX1OR2-NEXT: vmulpd %ymm4, %ymm10, %ymm113523; AVX1OR2-NEXT: vaddpd %ymm0, %ymm11, %ymm03524; AVX1OR2-NEXT: vmulpd %ymm3, %ymm10, %ymm103525; AVX1OR2-NEXT: vmovapd %ymm3, %ymm23526; AVX1OR2-NEXT: vaddpd %ymm1, %ymm10, %ymm13527; AVX1OR2-NEXT: vbroadcastsd 424(%rbp), %ymm103528; AVX1OR2-NEXT: vmulpd %ymm7, %ymm10, %ymm113529; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13530; AVX1OR2-NEXT: vmulpd %ymm6, %ymm10, %ymm103531; AVX1OR2-NEXT: vaddpd %ymm0, %ymm10, %ymm03532; AVX1OR2-NEXT: vbroadcastsd 432(%rbp), %ymm103533; AVX1OR2-NEXT: vmulpd 16(%rbp), %ymm10, %ymm113534; AVX1OR2-NEXT: vaddpd %ymm0, %ymm11, %ymm03535; AVX1OR2-NEXT: vmulpd 48(%rbp), %ymm10, %ymm103536; AVX1OR2-NEXT: vaddpd %ymm1, %ymm10, %ymm13537; AVX1OR2-NEXT: vbroadcastsd 440(%rbp), %ymm103538; AVX1OR2-NEXT: vmulpd 112(%rbp), %ymm10, %ymm113539; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13540; AVX1OR2-NEXT: vmulpd 80(%rbp), %ymm10, %ymm103541; AVX1OR2-NEXT: vaddpd %ymm0, %ymm10, %ymm03542; AVX1OR2-NEXT: vbroadcastsd 448(%rbp), %ymm103543; AVX1OR2-NEXT: vmulpd %ymm10, %ymm13, %ymm113544; AVX1OR2-NEXT: vaddpd %ymm0, %ymm11, %ymm03545; AVX1OR2-NEXT: vmulpd %ymm10, %ymm14, %ymm103546; AVX1OR2-NEXT: vaddpd %ymm1, %ymm10, %ymm13547; AVX1OR2-NEXT: vbroadcastsd 456(%rbp), %ymm103548; AVX1OR2-NEXT: vmulpd 240(%rbp), %ymm10, %ymm113549; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13550; AVX1OR2-NEXT: vmovapd %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3551; AVX1OR2-NEXT: vmulpd 208(%rbp), %ymm10, %ymm13552; AVX1OR2-NEXT: vaddpd %ymm1, %ymm0, %ymm03553; AVX1OR2-NEXT: vmovapd %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3554; AVX1OR2-NEXT: vbroadcastsd 464(%rbp), %ymm03555; AVX1OR2-NEXT: vmulpd %ymm0, %ymm9, %ymm13556; AVX1OR2-NEXT: vmovapd %ymm9, %ymm133557; AVX1OR2-NEXT: vbroadcastsd 472(%rbp), %ymm103558; AVX1OR2-NEXT: vmulpd %ymm10, %ymm8, %ymm113559; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13560; AVX1OR2-NEXT: vmulpd %ymm0, %ymm15, %ymm03561; AVX1OR2-NEXT: vmovapd %ymm15, %ymm93562; AVX1OR2-NEXT: vmulpd %ymm10, %ymm12, %ymm103563; AVX1OR2-NEXT: vaddpd %ymm0, %ymm10, %ymm03564; AVX1OR2-NEXT: vbroadcastsd 480(%rbp), %ymm103565; AVX1OR2-NEXT: vmulpd %ymm4, %ymm10, %ymm113566; AVX1OR2-NEXT: vmovapd %ymm4, %ymm33567; AVX1OR2-NEXT: vaddpd %ymm0, %ymm11, %ymm03568; AVX1OR2-NEXT: vmovapd %ymm2, %ymm153569; AVX1OR2-NEXT: vmulpd %ymm2, %ymm10, %ymm103570; AVX1OR2-NEXT: vaddpd %ymm1, %ymm10, %ymm13571; AVX1OR2-NEXT: vbroadcastsd 488(%rbp), %ymm103572; AVX1OR2-NEXT: vmovapd %ymm7, %ymm83573; AVX1OR2-NEXT: vmulpd %ymm7, %ymm10, %ymm113574; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13575; AVX1OR2-NEXT: vmovapd %ymm6, %ymm73576; AVX1OR2-NEXT: vmulpd %ymm6, %ymm10, %ymm103577; AVX1OR2-NEXT: vaddpd %ymm0, %ymm10, %ymm03578; AVX1OR2-NEXT: vbroadcastsd 496(%rbp), %ymm103579; AVX1OR2-NEXT: vmulpd 16(%rbp), %ymm10, %ymm113580; AVX1OR2-NEXT: vaddpd %ymm0, %ymm11, %ymm03581; AVX1OR2-NEXT: vmovapd 48(%rbp), %ymm43582; AVX1OR2-NEXT: vmulpd %ymm4, %ymm10, %ymm103583; AVX1OR2-NEXT: vaddpd %ymm1, %ymm10, %ymm13584; AVX1OR2-NEXT: vbroadcastsd 504(%rbp), %ymm103585; AVX1OR2-NEXT: vmovapd 112(%rbp), %ymm23586; AVX1OR2-NEXT: vmulpd %ymm2, %ymm10, %ymm113587; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13588; AVX1OR2-NEXT: vmovapd 80(%rbp), %ymm143589; AVX1OR2-NEXT: vmulpd %ymm10, %ymm14, %ymm103590; AVX1OR2-NEXT: vaddpd %ymm0, %ymm10, %ymm03591; AVX1OR2-NEXT: vbroadcastsd 512(%rbp), %ymm103592; AVX1OR2-NEXT: vmulpd 144(%rbp), %ymm10, %ymm113593; AVX1OR2-NEXT: vaddpd %ymm0, %ymm11, %ymm03594; AVX1OR2-NEXT: vmovapd 176(%rbp), %ymm23595; AVX1OR2-NEXT: vmulpd %ymm2, %ymm10, %ymm103596; AVX1OR2-NEXT: vaddpd %ymm1, %ymm10, %ymm13597; AVX1OR2-NEXT: vbroadcastsd 520(%rbp), %ymm103598; AVX1OR2-NEXT: vmulpd 240(%rbp), %ymm10, %ymm113599; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13600; AVX1OR2-NEXT: vmovapd %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3601; AVX1OR2-NEXT: vmulpd 208(%rbp), %ymm10, %ymm13602; AVX1OR2-NEXT: vaddpd %ymm1, %ymm0, %ymm03603; AVX1OR2-NEXT: vmovapd %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3604; AVX1OR2-NEXT: vbroadcastsd 528(%rbp), %ymm03605; AVX1OR2-NEXT: vmulpd %ymm0, %ymm13, %ymm13606; AVX1OR2-NEXT: vbroadcastsd 536(%rbp), %ymm103607; AVX1OR2-NEXT: vmulpd %ymm5, %ymm10, %ymm113608; AVX1OR2-NEXT: vmovapd %ymm5, %ymm63609; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13610; AVX1OR2-NEXT: vmulpd %ymm0, %ymm9, %ymm03611; AVX1OR2-NEXT: vmulpd %ymm10, %ymm12, %ymm103612; AVX1OR2-NEXT: vmovapd %ymm12, %ymm53613; AVX1OR2-NEXT: vaddpd %ymm0, %ymm10, %ymm03614; AVX1OR2-NEXT: vbroadcastsd 544(%rbp), %ymm103615; AVX1OR2-NEXT: vmulpd %ymm3, %ymm10, %ymm113616; AVX1OR2-NEXT: vmovapd %ymm3, %ymm123617; AVX1OR2-NEXT: vaddpd %ymm0, %ymm11, %ymm03618; AVX1OR2-NEXT: vmulpd %ymm10, %ymm15, %ymm103619; AVX1OR2-NEXT: vaddpd %ymm1, %ymm10, %ymm13620; AVX1OR2-NEXT: vbroadcastsd 552(%rbp), %ymm103621; AVX1OR2-NEXT: vmulpd %ymm10, %ymm8, %ymm113622; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13623; AVX1OR2-NEXT: vmulpd %ymm7, %ymm10, %ymm103624; AVX1OR2-NEXT: vaddpd %ymm0, %ymm10, %ymm03625; AVX1OR2-NEXT: vbroadcastsd 560(%rbp), %ymm103626; AVX1OR2-NEXT: vmulpd 16(%rbp), %ymm10, %ymm113627; AVX1OR2-NEXT: vaddpd %ymm0, %ymm11, %ymm03628; AVX1OR2-NEXT: vmulpd %ymm4, %ymm10, %ymm103629; AVX1OR2-NEXT: vmovapd %ymm4, %ymm33630; AVX1OR2-NEXT: vaddpd %ymm1, %ymm10, %ymm13631; AVX1OR2-NEXT: vbroadcastsd 568(%rbp), %ymm103632; AVX1OR2-NEXT: vmulpd 112(%rbp), %ymm10, %ymm113633; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13634; AVX1OR2-NEXT: vmulpd %ymm10, %ymm14, %ymm103635; AVX1OR2-NEXT: vaddpd %ymm0, %ymm10, %ymm03636; AVX1OR2-NEXT: vbroadcastsd 576(%rbp), %ymm103637; AVX1OR2-NEXT: vmovapd 144(%rbp), %ymm43638; AVX1OR2-NEXT: vmulpd %ymm4, %ymm10, %ymm113639; AVX1OR2-NEXT: vaddpd %ymm0, %ymm11, %ymm03640; AVX1OR2-NEXT: vmulpd %ymm2, %ymm10, %ymm103641; AVX1OR2-NEXT: vaddpd %ymm1, %ymm10, %ymm13642; AVX1OR2-NEXT: vbroadcastsd 584(%rbp), %ymm103643; AVX1OR2-NEXT: vmovapd 240(%rbp), %ymm143644; AVX1OR2-NEXT: vmulpd %ymm10, %ymm14, %ymm113645; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13646; AVX1OR2-NEXT: vmovapd %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3647; AVX1OR2-NEXT: vmovapd 208(%rbp), %ymm23648; AVX1OR2-NEXT: vmulpd %ymm2, %ymm10, %ymm13649; AVX1OR2-NEXT: vaddpd %ymm1, %ymm0, %ymm03650; AVX1OR2-NEXT: vmovapd %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3651; AVX1OR2-NEXT: vbroadcastsd 592(%rbp), %ymm03652; AVX1OR2-NEXT: vmulpd %ymm0, %ymm13, %ymm13653; AVX1OR2-NEXT: vbroadcastsd 600(%rbp), %ymm103654; AVX1OR2-NEXT: vmulpd %ymm6, %ymm10, %ymm113655; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13656; AVX1OR2-NEXT: vmulpd %ymm0, %ymm9, %ymm03657; AVX1OR2-NEXT: vmulpd %ymm5, %ymm10, %ymm103658; AVX1OR2-NEXT: vaddpd %ymm0, %ymm10, %ymm03659; AVX1OR2-NEXT: vbroadcastsd 608(%rbp), %ymm103660; AVX1OR2-NEXT: vmulpd %ymm10, %ymm12, %ymm113661; AVX1OR2-NEXT: vaddpd %ymm0, %ymm11, %ymm03662; AVX1OR2-NEXT: vmulpd %ymm10, %ymm15, %ymm103663; AVX1OR2-NEXT: vaddpd %ymm1, %ymm10, %ymm13664; AVX1OR2-NEXT: vbroadcastsd 616(%rbp), %ymm103665; AVX1OR2-NEXT: vmulpd %ymm10, %ymm8, %ymm113666; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13667; AVX1OR2-NEXT: vmulpd %ymm7, %ymm10, %ymm103668; AVX1OR2-NEXT: vaddpd %ymm0, %ymm10, %ymm03669; AVX1OR2-NEXT: vbroadcastsd 624(%rbp), %ymm103670; AVX1OR2-NEXT: vmulpd 16(%rbp), %ymm10, %ymm113671; AVX1OR2-NEXT: vaddpd %ymm0, %ymm11, %ymm03672; AVX1OR2-NEXT: vmulpd %ymm3, %ymm10, %ymm103673; AVX1OR2-NEXT: vaddpd %ymm1, %ymm10, %ymm13674; AVX1OR2-NEXT: vbroadcastsd 632(%rbp), %ymm103675; AVX1OR2-NEXT: vmovapd 112(%rbp), %ymm33676; AVX1OR2-NEXT: vmulpd %ymm3, %ymm10, %ymm113677; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13678; AVX1OR2-NEXT: vmovapd 80(%rbp), %ymm33679; AVX1OR2-NEXT: vmulpd %ymm3, %ymm10, %ymm103680; AVX1OR2-NEXT: vaddpd %ymm0, %ymm10, %ymm03681; AVX1OR2-NEXT: vbroadcastsd 640(%rbp), %ymm103682; AVX1OR2-NEXT: vmulpd %ymm4, %ymm10, %ymm113683; AVX1OR2-NEXT: vaddpd %ymm0, %ymm11, %ymm03684; AVX1OR2-NEXT: vmovapd 176(%rbp), %ymm33685; AVX1OR2-NEXT: vmulpd %ymm3, %ymm10, %ymm103686; AVX1OR2-NEXT: vaddpd %ymm1, %ymm10, %ymm13687; AVX1OR2-NEXT: vbroadcastsd 648(%rbp), %ymm103688; AVX1OR2-NEXT: vmovapd %ymm14, %ymm43689; AVX1OR2-NEXT: vmulpd %ymm10, %ymm14, %ymm113690; AVX1OR2-NEXT: vaddpd %ymm1, %ymm11, %ymm13691; AVX1OR2-NEXT: vmovapd %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3692; AVX1OR2-NEXT: vmulpd %ymm2, %ymm10, %ymm13693; AVX1OR2-NEXT: vaddpd %ymm1, %ymm0, %ymm03694; AVX1OR2-NEXT: vmovapd %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill3695; AVX1OR2-NEXT: vbroadcastsd 656(%rbp), %ymm23696; AVX1OR2-NEXT: vmovapd %ymm13, %ymm33697; AVX1OR2-NEXT: vmulpd %ymm2, %ymm13, %ymm13698; AVX1OR2-NEXT: vbroadcastsd 664(%rbp), %ymm03699; AVX1OR2-NEXT: vmulpd %ymm0, %ymm6, %ymm143700; AVX1OR2-NEXT: vmovapd %ymm6, %ymm103701; AVX1OR2-NEXT: vaddpd %ymm1, %ymm14, %ymm13702; AVX1OR2-NEXT: vmulpd %ymm2, %ymm9, %ymm23703; AVX1OR2-NEXT: vmulpd %ymm0, %ymm5, %ymm03704; AVX1OR2-NEXT: vmovapd %ymm5, %ymm63705; AVX1OR2-NEXT: vaddpd %ymm0, %ymm2, %ymm03706; AVX1OR2-NEXT: vbroadcastsd 672(%rbp), %ymm23707; AVX1OR2-NEXT: vmulpd %ymm2, %ymm12, %ymm143708; AVX1OR2-NEXT: vaddpd %ymm0, %ymm14, %ymm03709; AVX1OR2-NEXT: vmulpd %ymm2, %ymm15, %ymm23710; AVX1OR2-NEXT: vaddpd %ymm2, %ymm1, %ymm13711; AVX1OR2-NEXT: vbroadcastsd 680(%rbp), %ymm23712; AVX1OR2-NEXT: vmulpd %ymm2, %ymm8, %ymm143713; AVX1OR2-NEXT: vaddpd %ymm1, %ymm14, %ymm13714; AVX1OR2-NEXT: vmulpd %ymm2, %ymm7, %ymm23715; AVX1OR2-NEXT: vaddpd %ymm2, %ymm0, %ymm03716; AVX1OR2-NEXT: vbroadcastsd 688(%rbp), %ymm23717; AVX1OR2-NEXT: vmovapd 16(%rbp), %ymm113718; AVX1OR2-NEXT: vmulpd %ymm2, %ymm11, %ymm143719; AVX1OR2-NEXT: vaddpd %ymm0, %ymm14, %ymm03720; AVX1OR2-NEXT: vmulpd 48(%rbp), %ymm2, %ymm23721; AVX1OR2-NEXT: vaddpd %ymm2, %ymm1, %ymm13722; AVX1OR2-NEXT: vbroadcastsd 696(%rbp), %ymm23723; AVX1OR2-NEXT: vmovapd 112(%rbp), %ymm53724; AVX1OR2-NEXT: vmulpd %ymm2, %ymm5, %ymm143725; AVX1OR2-NEXT: vaddpd %ymm1, %ymm14, %ymm13726; AVX1OR2-NEXT: vmovapd 80(%rbp), %ymm53727; AVX1OR2-NEXT: vmulpd %ymm2, %ymm5, %ymm23728; AVX1OR2-NEXT: vaddpd %ymm2, %ymm0, %ymm03729; AVX1OR2-NEXT: vbroadcastsd 704(%rbp), %ymm23730; AVX1OR2-NEXT: vmulpd 144(%rbp), %ymm2, %ymm143731; AVX1OR2-NEXT: vaddpd %ymm0, %ymm14, %ymm03732; AVX1OR2-NEXT: vmovapd 176(%rbp), %ymm133733; AVX1OR2-NEXT: vmulpd %ymm2, %ymm13, %ymm23734; AVX1OR2-NEXT: vaddpd %ymm2, %ymm1, %ymm13735; AVX1OR2-NEXT: vbroadcastsd 712(%rbp), %ymm23736; AVX1OR2-NEXT: vmulpd %ymm2, %ymm4, %ymm143737; AVX1OR2-NEXT: vaddpd %ymm1, %ymm14, %ymm13738; AVX1OR2-NEXT: vmovapd 208(%rbp), %ymm143739; AVX1OR2-NEXT: vmulpd %ymm2, %ymm14, %ymm23740; AVX1OR2-NEXT: vaddpd %ymm2, %ymm0, %ymm03741; AVX1OR2-NEXT: vbroadcastsd 720(%rbp), %ymm23742; AVX1OR2-NEXT: vmulpd %ymm2, %ymm3, %ymm33743; AVX1OR2-NEXT: vmulpd %ymm2, %ymm9, %ymm23744; AVX1OR2-NEXT: vbroadcastsd 728(%rbp), %ymm43745; AVX1OR2-NEXT: vmulpd %ymm4, %ymm10, %ymm53746; AVX1OR2-NEXT: vaddpd %ymm5, %ymm3, %ymm33747; AVX1OR2-NEXT: vmulpd %ymm4, %ymm6, %ymm43748; AVX1OR2-NEXT: vaddpd %ymm4, %ymm2, %ymm23749; AVX1OR2-NEXT: vbroadcastsd 736(%rbp), %ymm43750; AVX1OR2-NEXT: vmulpd %ymm4, %ymm12, %ymm53751; AVX1OR2-NEXT: vaddpd %ymm5, %ymm2, %ymm23752; AVX1OR2-NEXT: vmulpd %ymm4, %ymm15, %ymm43753; AVX1OR2-NEXT: vaddpd %ymm4, %ymm3, %ymm33754; AVX1OR2-NEXT: vbroadcastsd 744(%rbp), %ymm43755; AVX1OR2-NEXT: vmulpd %ymm4, %ymm8, %ymm53756; AVX1OR2-NEXT: vaddpd %ymm5, %ymm3, %ymm33757; AVX1OR2-NEXT: vmulpd %ymm4, %ymm7, %ymm43758; AVX1OR2-NEXT: vaddpd %ymm4, %ymm2, %ymm23759; AVX1OR2-NEXT: vbroadcastsd 752(%rbp), %ymm43760; AVX1OR2-NEXT: vmulpd %ymm4, %ymm11, %ymm53761; AVX1OR2-NEXT: vaddpd %ymm5, %ymm2, %ymm23762; AVX1OR2-NEXT: vmulpd 48(%rbp), %ymm4, %ymm43763; AVX1OR2-NEXT: vaddpd %ymm4, %ymm3, %ymm33764; AVX1OR2-NEXT: vbroadcastsd 760(%rbp), %ymm43765; AVX1OR2-NEXT: vmulpd 112(%rbp), %ymm4, %ymm53766; AVX1OR2-NEXT: vaddpd %ymm5, %ymm3, %ymm33767; AVX1OR2-NEXT: vmulpd 80(%rbp), %ymm4, %ymm43768; AVX1OR2-NEXT: vaddpd %ymm4, %ymm2, %ymm23769; AVX1OR2-NEXT: vbroadcastsd 768(%rbp), %ymm43770; AVX1OR2-NEXT: vmulpd 144(%rbp), %ymm4, %ymm53771; AVX1OR2-NEXT: vaddpd %ymm5, %ymm2, %ymm23772; AVX1OR2-NEXT: vmulpd %ymm4, %ymm13, %ymm43773; AVX1OR2-NEXT: vaddpd %ymm4, %ymm3, %ymm33774; AVX1OR2-NEXT: vbroadcastsd 776(%rbp), %ymm43775; AVX1OR2-NEXT: vmulpd 240(%rbp), %ymm4, %ymm53776; AVX1OR2-NEXT: vaddpd %ymm5, %ymm3, %ymm33777; AVX1OR2-NEXT: vmulpd %ymm4, %ymm14, %ymm43778; AVX1OR2-NEXT: vaddpd %ymm4, %ymm2, %ymm23779; AVX1OR2-NEXT: vmovapd %ymm3, 480(%rdi)3780; AVX1OR2-NEXT: vmovapd %ymm2, 448(%rdi)3781; AVX1OR2-NEXT: vmovapd %ymm1, 416(%rdi)3782; AVX1OR2-NEXT: vmovapd %ymm0, 384(%rdi)3783; AVX1OR2-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3784; AVX1OR2-NEXT: vmovaps %ymm0, 352(%rdi)3785; AVX1OR2-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3786; AVX1OR2-NEXT: vmovaps %ymm0, 320(%rdi)3787; AVX1OR2-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3788; AVX1OR2-NEXT: vmovaps %ymm0, 288(%rdi)3789; AVX1OR2-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3790; AVX1OR2-NEXT: vmovaps %ymm0, 256(%rdi)3791; AVX1OR2-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3792; AVX1OR2-NEXT: vmovaps %ymm0, 224(%rdi)3793; AVX1OR2-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3794; AVX1OR2-NEXT: vmovaps %ymm0, 192(%rdi)3795; AVX1OR2-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3796; AVX1OR2-NEXT: vmovaps %ymm0, 160(%rdi)3797; AVX1OR2-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3798; AVX1OR2-NEXT: vmovaps %ymm0, 128(%rdi)3799; AVX1OR2-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3800; AVX1OR2-NEXT: vmovaps %ymm0, 96(%rdi)3801; AVX1OR2-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3802; AVX1OR2-NEXT: vmovaps %ymm0, 64(%rdi)3803; AVX1OR2-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3804; AVX1OR2-NEXT: vmovaps %ymm0, 32(%rdi)3805; AVX1OR2-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload3806; AVX1OR2-NEXT: vmovaps %ymm0, (%rdi)3807; AVX1OR2-NEXT: movq %rbp, %rsp3808; AVX1OR2-NEXT: popq %rbp3809; AVX1OR2-NEXT: vzeroupper3810; AVX1OR2-NEXT: retq3811;3812; AVX512-LABEL: test_mul8x8_f64:3813; AVX512: # %bb.0: # %entry3814; AVX512-NEXT: pushq %rbp3815; AVX512-NEXT: movq %rsp, %rbp3816; AVX512-NEXT: andq $-64, %rsp3817; AVX512-NEXT: subq $64, %rsp3818; AVX512-NEXT: movq %rdi, %rax3819; AVX512-NEXT: vmulpd 16(%rbp){1to8}, %zmm0, %zmm83820; AVX512-NEXT: vmulpd 24(%rbp){1to8}, %zmm1, %zmm93821; AVX512-NEXT: vaddpd %zmm9, %zmm8, %zmm83822; AVX512-NEXT: vmulpd 32(%rbp){1to8}, %zmm2, %zmm93823; AVX512-NEXT: vaddpd %zmm9, %zmm8, %zmm83824; AVX512-NEXT: vmulpd 40(%rbp){1to8}, %zmm3, %zmm93825; AVX512-NEXT: vaddpd %zmm9, %zmm8, %zmm83826; AVX512-NEXT: vmulpd 48(%rbp){1to8}, %zmm4, %zmm93827; AVX512-NEXT: vaddpd %zmm9, %zmm8, %zmm83828; AVX512-NEXT: vmulpd 56(%rbp){1to8}, %zmm5, %zmm93829; AVX512-NEXT: vaddpd %zmm9, %zmm8, %zmm83830; AVX512-NEXT: vmulpd 64(%rbp){1to8}, %zmm6, %zmm93831; AVX512-NEXT: vaddpd %zmm9, %zmm8, %zmm83832; AVX512-NEXT: vmulpd 72(%rbp){1to8}, %zmm7, %zmm93833; AVX512-NEXT: vaddpd %zmm9, %zmm8, %zmm83834; AVX512-NEXT: vmulpd 80(%rbp){1to8}, %zmm0, %zmm93835; AVX512-NEXT: vmulpd 88(%rbp){1to8}, %zmm1, %zmm103836; AVX512-NEXT: vaddpd %zmm10, %zmm9, %zmm93837; AVX512-NEXT: vmulpd 96(%rbp){1to8}, %zmm2, %zmm103838; AVX512-NEXT: vaddpd %zmm10, %zmm9, %zmm93839; AVX512-NEXT: vmulpd 104(%rbp){1to8}, %zmm3, %zmm103840; AVX512-NEXT: vaddpd %zmm10, %zmm9, %zmm93841; AVX512-NEXT: vmulpd 112(%rbp){1to8}, %zmm4, %zmm103842; AVX512-NEXT: vaddpd %zmm10, %zmm9, %zmm93843; AVX512-NEXT: vmulpd 120(%rbp){1to8}, %zmm5, %zmm103844; AVX512-NEXT: vaddpd %zmm10, %zmm9, %zmm93845; AVX512-NEXT: vmulpd 128(%rbp){1to8}, %zmm6, %zmm103846; AVX512-NEXT: vaddpd %zmm10, %zmm9, %zmm93847; AVX512-NEXT: vmulpd 136(%rbp){1to8}, %zmm7, %zmm103848; AVX512-NEXT: vaddpd %zmm10, %zmm9, %zmm93849; AVX512-NEXT: vmulpd 144(%rbp){1to8}, %zmm0, %zmm103850; AVX512-NEXT: vmulpd 152(%rbp){1to8}, %zmm1, %zmm113851; AVX512-NEXT: vaddpd %zmm11, %zmm10, %zmm103852; AVX512-NEXT: vmulpd 160(%rbp){1to8}, %zmm2, %zmm113853; AVX512-NEXT: vaddpd %zmm11, %zmm10, %zmm103854; AVX512-NEXT: vmulpd 168(%rbp){1to8}, %zmm3, %zmm113855; AVX512-NEXT: vaddpd %zmm11, %zmm10, %zmm103856; AVX512-NEXT: vmulpd 176(%rbp){1to8}, %zmm4, %zmm113857; AVX512-NEXT: vaddpd %zmm11, %zmm10, %zmm103858; AVX512-NEXT: vmulpd 184(%rbp){1to8}, %zmm5, %zmm113859; AVX512-NEXT: vaddpd %zmm11, %zmm10, %zmm103860; AVX512-NEXT: vmulpd 192(%rbp){1to8}, %zmm6, %zmm113861; AVX512-NEXT: vaddpd %zmm11, %zmm10, %zmm103862; AVX512-NEXT: vmulpd 200(%rbp){1to8}, %zmm7, %zmm113863; AVX512-NEXT: vaddpd %zmm11, %zmm10, %zmm103864; AVX512-NEXT: vmulpd 208(%rbp){1to8}, %zmm0, %zmm113865; AVX512-NEXT: vmulpd 216(%rbp){1to8}, %zmm1, %zmm123866; AVX512-NEXT: vaddpd %zmm12, %zmm11, %zmm113867; AVX512-NEXT: vmulpd 224(%rbp){1to8}, %zmm2, %zmm123868; AVX512-NEXT: vaddpd %zmm12, %zmm11, %zmm113869; AVX512-NEXT: vmulpd 232(%rbp){1to8}, %zmm3, %zmm123870; AVX512-NEXT: vaddpd %zmm12, %zmm11, %zmm113871; AVX512-NEXT: vmulpd 240(%rbp){1to8}, %zmm4, %zmm123872; AVX512-NEXT: vaddpd %zmm12, %zmm11, %zmm113873; AVX512-NEXT: vmulpd 248(%rbp){1to8}, %zmm5, %zmm123874; AVX512-NEXT: vaddpd %zmm12, %zmm11, %zmm113875; AVX512-NEXT: vmulpd 256(%rbp){1to8}, %zmm6, %zmm123876; AVX512-NEXT: vaddpd %zmm12, %zmm11, %zmm113877; AVX512-NEXT: vmulpd 264(%rbp){1to8}, %zmm7, %zmm123878; AVX512-NEXT: vaddpd %zmm12, %zmm11, %zmm113879; AVX512-NEXT: vmulpd 272(%rbp){1to8}, %zmm0, %zmm123880; AVX512-NEXT: vmulpd 280(%rbp){1to8}, %zmm1, %zmm133881; AVX512-NEXT: vaddpd %zmm13, %zmm12, %zmm123882; AVX512-NEXT: vmulpd 288(%rbp){1to8}, %zmm2, %zmm133883; AVX512-NEXT: vaddpd %zmm13, %zmm12, %zmm123884; AVX512-NEXT: vmulpd 296(%rbp){1to8}, %zmm3, %zmm133885; AVX512-NEXT: vaddpd %zmm13, %zmm12, %zmm123886; AVX512-NEXT: vmulpd 304(%rbp){1to8}, %zmm4, %zmm133887; AVX512-NEXT: vaddpd %zmm13, %zmm12, %zmm123888; AVX512-NEXT: vmulpd 312(%rbp){1to8}, %zmm5, %zmm133889; AVX512-NEXT: vaddpd %zmm13, %zmm12, %zmm123890; AVX512-NEXT: vmulpd 320(%rbp){1to8}, %zmm6, %zmm133891; AVX512-NEXT: vaddpd %zmm13, %zmm12, %zmm123892; AVX512-NEXT: vmulpd 328(%rbp){1to8}, %zmm7, %zmm133893; AVX512-NEXT: vaddpd %zmm13, %zmm12, %zmm123894; AVX512-NEXT: vmulpd 336(%rbp){1to8}, %zmm0, %zmm133895; AVX512-NEXT: vmulpd 344(%rbp){1to8}, %zmm1, %zmm143896; AVX512-NEXT: vaddpd %zmm14, %zmm13, %zmm133897; AVX512-NEXT: vmulpd 352(%rbp){1to8}, %zmm2, %zmm143898; AVX512-NEXT: vaddpd %zmm14, %zmm13, %zmm133899; AVX512-NEXT: vmulpd 360(%rbp){1to8}, %zmm3, %zmm143900; AVX512-NEXT: vaddpd %zmm14, %zmm13, %zmm133901; AVX512-NEXT: vmulpd 368(%rbp){1to8}, %zmm4, %zmm143902; AVX512-NEXT: vaddpd %zmm14, %zmm13, %zmm133903; AVX512-NEXT: vmulpd 376(%rbp){1to8}, %zmm5, %zmm143904; AVX512-NEXT: vaddpd %zmm14, %zmm13, %zmm133905; AVX512-NEXT: vmulpd 384(%rbp){1to8}, %zmm6, %zmm143906; AVX512-NEXT: vaddpd %zmm14, %zmm13, %zmm133907; AVX512-NEXT: vmulpd 392(%rbp){1to8}, %zmm7, %zmm143908; AVX512-NEXT: vaddpd %zmm14, %zmm13, %zmm133909; AVX512-NEXT: vmulpd 400(%rbp){1to8}, %zmm0, %zmm143910; AVX512-NEXT: vmulpd 408(%rbp){1to8}, %zmm1, %zmm153911; AVX512-NEXT: vaddpd %zmm15, %zmm14, %zmm143912; AVX512-NEXT: vmulpd 416(%rbp){1to8}, %zmm2, %zmm153913; AVX512-NEXT: vaddpd %zmm15, %zmm14, %zmm143914; AVX512-NEXT: vmulpd 424(%rbp){1to8}, %zmm3, %zmm153915; AVX512-NEXT: vaddpd %zmm15, %zmm14, %zmm143916; AVX512-NEXT: vmulpd 432(%rbp){1to8}, %zmm4, %zmm153917; AVX512-NEXT: vaddpd %zmm15, %zmm14, %zmm143918; AVX512-NEXT: vmulpd 440(%rbp){1to8}, %zmm5, %zmm153919; AVX512-NEXT: vaddpd %zmm15, %zmm14, %zmm143920; AVX512-NEXT: vmulpd 448(%rbp){1to8}, %zmm6, %zmm153921; AVX512-NEXT: vaddpd %zmm15, %zmm14, %zmm143922; AVX512-NEXT: vmulpd 456(%rbp){1to8}, %zmm7, %zmm153923; AVX512-NEXT: vaddpd %zmm15, %zmm14, %zmm143924; AVX512-NEXT: vmulpd 464(%rbp){1to8}, %zmm0, %zmm03925; AVX512-NEXT: vmulpd 472(%rbp){1to8}, %zmm1, %zmm13926; AVX512-NEXT: vaddpd %zmm1, %zmm0, %zmm03927; AVX512-NEXT: vmulpd 480(%rbp){1to8}, %zmm2, %zmm13928; AVX512-NEXT: vaddpd %zmm1, %zmm0, %zmm03929; AVX512-NEXT: vmulpd 488(%rbp){1to8}, %zmm3, %zmm13930; AVX512-NEXT: vaddpd %zmm1, %zmm0, %zmm03931; AVX512-NEXT: vmulpd 496(%rbp){1to8}, %zmm4, %zmm13932; AVX512-NEXT: vaddpd %zmm1, %zmm0, %zmm03933; AVX512-NEXT: vmulpd 504(%rbp){1to8}, %zmm5, %zmm13934; AVX512-NEXT: vaddpd %zmm1, %zmm0, %zmm03935; AVX512-NEXT: vmulpd 512(%rbp){1to8}, %zmm6, %zmm13936; AVX512-NEXT: vaddpd %zmm1, %zmm0, %zmm03937; AVX512-NEXT: vmulpd 520(%rbp){1to8}, %zmm7, %zmm13938; AVX512-NEXT: vaddpd %zmm1, %zmm0, %zmm03939; AVX512-NEXT: vmovapd %zmm0, 448(%rdi)3940; AVX512-NEXT: vmovapd %zmm14, 384(%rdi)3941; AVX512-NEXT: vmovapd %zmm13, 320(%rdi)3942; AVX512-NEXT: vmovapd %zmm12, 256(%rdi)3943; AVX512-NEXT: vmovapd %zmm11, 192(%rdi)3944; AVX512-NEXT: vmovapd %zmm10, 128(%rdi)3945; AVX512-NEXT: vmovapd %zmm9, 64(%rdi)3946; AVX512-NEXT: vmovapd %zmm8, (%rdi)3947; AVX512-NEXT: movq %rbp, %rsp3948; AVX512-NEXT: popq %rbp3949; AVX512-NEXT: vzeroupper3950; AVX512-NEXT: retq3951entry:3952 %split = shufflevector <64 x double> %a0, <64 x double> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>3953 %split1 = shufflevector <64 x double> %a0, <64 x double> poison, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>3954 %split2 = shufflevector <64 x double> %a0, <64 x double> poison, <8 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23>3955 %split3 = shufflevector <64 x double> %a0, <64 x double> poison, <8 x i32> <i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>3956 %split4 = shufflevector <64 x double> %a0, <64 x double> poison, <8 x i32> <i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39>3957 %split5 = shufflevector <64 x double> %a0, <64 x double> poison, <8 x i32> <i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47>3958 %split6 = shufflevector <64 x double> %a0, <64 x double> poison, <8 x i32> <i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55>3959 %split7 = shufflevector <64 x double> %a0, <64 x double> poison, <8 x i32> <i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63>3960 %splat.splat = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> zeroinitializer3961 %0 = fmul <8 x double> %split, %splat.splat3962 %splat.splat18 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>3963 %1 = fmul <8 x double> %split1, %splat.splat183964 %2 = fadd <8 x double> %0, %13965 %splat.splat21 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>3966 %3 = fmul <8 x double> %split2, %splat.splat213967 %4 = fadd <8 x double> %2, %33968 %splat.splat24 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>3969 %5 = fmul <8 x double> %split3, %splat.splat243970 %6 = fadd <8 x double> %4, %53971 %splat.splat27 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>3972 %7 = fmul <8 x double> %split4, %splat.splat273973 %8 = fadd <8 x double> %6, %73974 %splat.splat30 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>3975 %9 = fmul <8 x double> %split5, %splat.splat303976 %10 = fadd <8 x double> %8, %93977 %splat.splat33 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6>3978 %11 = fmul <8 x double> %split6, %splat.splat333979 %12 = fadd <8 x double> %10, %113980 %splat.splat36 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7>3981 %13 = fmul <8 x double> %split7, %splat.splat363982 %14 = fadd <8 x double> %12, %133983 %splat.splat39 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>3984 %15 = fmul <8 x double> %split, %splat.splat393985 %splat.splat42 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 9, i32 9>3986 %16 = fmul <8 x double> %split1, %splat.splat423987 %17 = fadd <8 x double> %15, %163988 %splat.splat45 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10>3989 %18 = fmul <8 x double> %split2, %splat.splat453990 %19 = fadd <8 x double> %17, %183991 %splat.splat48 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 11, i32 11, i32 11, i32 11, i32 11, i32 11, i32 11, i32 11>3992 %20 = fmul <8 x double> %split3, %splat.splat483993 %21 = fadd <8 x double> %19, %203994 %splat.splat51 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12>3995 %22 = fmul <8 x double> %split4, %splat.splat513996 %23 = fadd <8 x double> %21, %223997 %splat.splat54 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 13, i32 13, i32 13, i32 13, i32 13, i32 13, i32 13, i32 13>3998 %24 = fmul <8 x double> %split5, %splat.splat543999 %25 = fadd <8 x double> %23, %244000 %splat.splat57 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14, i32 14>4001 %26 = fmul <8 x double> %split6, %splat.splat574002 %27 = fadd <8 x double> %25, %264003 %splat.splat60 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15>4004 %28 = fmul <8 x double> %split7, %splat.splat604005 %29 = fadd <8 x double> %27, %284006 %splat.splat63 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>4007 %30 = fmul <8 x double> %split, %splat.splat634008 %splat.splat66 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17>4009 %31 = fmul <8 x double> %split1, %splat.splat664010 %32 = fadd <8 x double> %30, %314011 %splat.splat69 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18>4012 %33 = fmul <8 x double> %split2, %splat.splat694013 %34 = fadd <8 x double> %32, %334014 %splat.splat72 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19>4015 %35 = fmul <8 x double> %split3, %splat.splat724016 %36 = fadd <8 x double> %34, %354017 %splat.splat75 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 20, i32 20, i32 20, i32 20, i32 20, i32 20, i32 20, i32 20>4018 %37 = fmul <8 x double> %split4, %splat.splat754019 %38 = fadd <8 x double> %36, %374020 %splat.splat78 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 21, i32 21, i32 21, i32 21, i32 21, i32 21, i32 21, i32 21>4021 %39 = fmul <8 x double> %split5, %splat.splat784022 %40 = fadd <8 x double> %38, %394023 %splat.splat81 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 22, i32 22, i32 22, i32 22, i32 22, i32 22, i32 22, i32 22>4024 %41 = fmul <8 x double> %split6, %splat.splat814025 %42 = fadd <8 x double> %40, %414026 %splat.splat84 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23>4027 %43 = fmul <8 x double> %split7, %splat.splat844028 %44 = fadd <8 x double> %42, %434029 %splat.splat87 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24>4030 %45 = fmul <8 x double> %split, %splat.splat874031 %splat.splat90 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25>4032 %46 = fmul <8 x double> %split1, %splat.splat904033 %47 = fadd <8 x double> %45, %464034 %splat.splat93 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 26, i32 26, i32 26, i32 26, i32 26, i32 26, i32 26, i32 26>4035 %48 = fmul <8 x double> %split2, %splat.splat934036 %49 = fadd <8 x double> %47, %484037 %splat.splat96 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 27, i32 27, i32 27, i32 27, i32 27, i32 27, i32 27, i32 27>4038 %50 = fmul <8 x double> %split3, %splat.splat964039 %51 = fadd <8 x double> %49, %504040 %splat.splat99 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28>4041 %52 = fmul <8 x double> %split4, %splat.splat994042 %53 = fadd <8 x double> %51, %524043 %splat.splat102 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 29, i32 29, i32 29, i32 29, i32 29, i32 29, i32 29, i32 29>4044 %54 = fmul <8 x double> %split5, %splat.splat1024045 %55 = fadd <8 x double> %53, %544046 %splat.splat105 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 30, i32 30, i32 30, i32 30, i32 30, i32 30, i32 30, i32 30>4047 %56 = fmul <8 x double> %split6, %splat.splat1054048 %57 = fadd <8 x double> %55, %564049 %splat.splat108 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31>4050 %58 = fmul <8 x double> %split7, %splat.splat1084051 %59 = fadd <8 x double> %57, %584052 %splat.splat111 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32>4053 %60 = fmul <8 x double> %split, %splat.splat1114054 %splat.splat114 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 33, i32 33, i32 33, i32 33, i32 33, i32 33, i32 33, i32 33>4055 %61 = fmul <8 x double> %split1, %splat.splat1144056 %62 = fadd <8 x double> %60, %614057 %splat.splat117 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 34, i32 34, i32 34, i32 34, i32 34, i32 34, i32 34, i32 34>4058 %63 = fmul <8 x double> %split2, %splat.splat1174059 %64 = fadd <8 x double> %62, %634060 %splat.splat120 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 35, i32 35, i32 35, i32 35, i32 35, i32 35, i32 35, i32 35>4061 %65 = fmul <8 x double> %split3, %splat.splat1204062 %66 = fadd <8 x double> %64, %654063 %splat.splat123 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 36, i32 36, i32 36, i32 36, i32 36, i32 36, i32 36, i32 36>4064 %67 = fmul <8 x double> %split4, %splat.splat1234065 %68 = fadd <8 x double> %66, %674066 %splat.splat126 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 37, i32 37, i32 37, i32 37, i32 37, i32 37, i32 37, i32 37>4067 %69 = fmul <8 x double> %split5, %splat.splat1264068 %70 = fadd <8 x double> %68, %694069 %splat.splat129 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 38, i32 38, i32 38, i32 38, i32 38, i32 38, i32 38, i32 38>4070 %71 = fmul <8 x double> %split6, %splat.splat1294071 %72 = fadd <8 x double> %70, %714072 %splat.splat132 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 39, i32 39, i32 39, i32 39, i32 39, i32 39, i32 39, i32 39>4073 %73 = fmul <8 x double> %split7, %splat.splat1324074 %74 = fadd <8 x double> %72, %734075 %splat.splat135 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 40, i32 40, i32 40, i32 40, i32 40, i32 40, i32 40, i32 40>4076 %75 = fmul <8 x double> %split, %splat.splat1354077 %splat.splat138 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 41, i32 41, i32 41, i32 41, i32 41, i32 41, i32 41, i32 41>4078 %76 = fmul <8 x double> %split1, %splat.splat1384079 %77 = fadd <8 x double> %75, %764080 %splat.splat141 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 42, i32 42, i32 42, i32 42, i32 42, i32 42, i32 42, i32 42>4081 %78 = fmul <8 x double> %split2, %splat.splat1414082 %79 = fadd <8 x double> %77, %784083 %splat.splat144 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 43, i32 43, i32 43, i32 43, i32 43, i32 43, i32 43, i32 43>4084 %80 = fmul <8 x double> %split3, %splat.splat1444085 %81 = fadd <8 x double> %79, %804086 %splat.splat147 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 44, i32 44, i32 44, i32 44, i32 44, i32 44, i32 44, i32 44>4087 %82 = fmul <8 x double> %split4, %splat.splat1474088 %83 = fadd <8 x double> %81, %824089 %splat.splat150 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 45, i32 45, i32 45, i32 45, i32 45, i32 45, i32 45, i32 45>4090 %84 = fmul <8 x double> %split5, %splat.splat1504091 %85 = fadd <8 x double> %83, %844092 %splat.splat153 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 46, i32 46, i32 46, i32 46, i32 46, i32 46, i32 46, i32 46>4093 %86 = fmul <8 x double> %split6, %splat.splat1534094 %87 = fadd <8 x double> %85, %864095 %splat.splat156 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 47, i32 47, i32 47, i32 47, i32 47, i32 47, i32 47, i32 47>4096 %88 = fmul <8 x double> %split7, %splat.splat1564097 %89 = fadd <8 x double> %87, %884098 %splat.splat159 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48>4099 %90 = fmul <8 x double> %split, %splat.splat1594100 %splat.splat162 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 49, i32 49, i32 49, i32 49, i32 49, i32 49, i32 49, i32 49>4101 %91 = fmul <8 x double> %split1, %splat.splat1624102 %92 = fadd <8 x double> %90, %914103 %splat.splat165 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 50, i32 50, i32 50, i32 50, i32 50, i32 50, i32 50, i32 50>4104 %93 = fmul <8 x double> %split2, %splat.splat1654105 %94 = fadd <8 x double> %92, %934106 %splat.splat168 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 51, i32 51, i32 51, i32 51, i32 51, i32 51, i32 51, i32 51>4107 %95 = fmul <8 x double> %split3, %splat.splat1684108 %96 = fadd <8 x double> %94, %954109 %splat.splat171 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 52, i32 52, i32 52, i32 52, i32 52, i32 52, i32 52, i32 52>4110 %97 = fmul <8 x double> %split4, %splat.splat1714111 %98 = fadd <8 x double> %96, %974112 %splat.splat174 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 53, i32 53, i32 53, i32 53, i32 53, i32 53, i32 53, i32 53>4113 %99 = fmul <8 x double> %split5, %splat.splat1744114 %100 = fadd <8 x double> %98, %994115 %splat.splat177 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 54, i32 54, i32 54, i32 54, i32 54, i32 54, i32 54, i32 54>4116 %101 = fmul <8 x double> %split6, %splat.splat1774117 %102 = fadd <8 x double> %100, %1014118 %splat.splat180 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 55, i32 55, i32 55, i32 55, i32 55, i32 55, i32 55, i32 55>4119 %103 = fmul <8 x double> %split7, %splat.splat1804120 %104 = fadd <8 x double> %102, %1034121 %splat.splat183 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 56, i32 56, i32 56, i32 56, i32 56, i32 56, i32 56, i32 56>4122 %105 = fmul <8 x double> %split, %splat.splat1834123 %splat.splat186 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 57, i32 57, i32 57, i32 57, i32 57, i32 57, i32 57, i32 57>4124 %106 = fmul <8 x double> %split1, %splat.splat1864125 %107 = fadd <8 x double> %105, %1064126 %splat.splat189 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 58, i32 58, i32 58, i32 58, i32 58, i32 58, i32 58, i32 58>4127 %108 = fmul <8 x double> %split2, %splat.splat1894128 %109 = fadd <8 x double> %107, %1084129 %splat.splat192 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 59, i32 59, i32 59, i32 59, i32 59, i32 59, i32 59, i32 59>4130 %110 = fmul <8 x double> %split3, %splat.splat1924131 %111 = fadd <8 x double> %109, %1104132 %splat.splat195 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 60, i32 60, i32 60, i32 60, i32 60, i32 60, i32 60, i32 60>4133 %112 = fmul <8 x double> %split4, %splat.splat1954134 %113 = fadd <8 x double> %111, %1124135 %splat.splat198 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 61, i32 61, i32 61, i32 61, i32 61, i32 61, i32 61, i32 61>4136 %114 = fmul <8 x double> %split5, %splat.splat1984137 %115 = fadd <8 x double> %113, %1144138 %splat.splat201 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 62, i32 62, i32 62, i32 62, i32 62, i32 62, i32 62, i32 62>4139 %116 = fmul <8 x double> %split6, %splat.splat2014140 %117 = fadd <8 x double> %115, %1164141 %splat.splat204 = shufflevector <64 x double> %a1, <64 x double> undef, <8 x i32> <i32 63, i32 63, i32 63, i32 63, i32 63, i32 63, i32 63, i32 63>4142 %118 = fmul <8 x double> %split7, %splat.splat2044143 %119 = fadd <8 x double> %117, %1184144 %120 = shufflevector <8 x double> %14, <8 x double> %29, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>4145 %121 = shufflevector <8 x double> %44, <8 x double> %59, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>4146 %122 = shufflevector <8 x double> %74, <8 x double> %89, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>4147 %123 = shufflevector <8 x double> %104, <8 x double> %119, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>4148 %124 = shufflevector <16 x double> %120, <16 x double> %121, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>4149 %125 = shufflevector <16 x double> %122, <16 x double> %123, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>4150 %126 = shufflevector <32 x double> %124, <32 x double> %125, <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63>4151 ret <64 x double> %1264152}4153