1849 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX-RECIP4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx,+fma | FileCheck %s --check-prefixes=AVX,FMA-RECIP5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=bdver2 | FileCheck %s --check-prefixes=AVX,BDVER26; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=btver2 | FileCheck %s --check-prefixes=AVX,BTVER27; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=sandybridge | FileCheck %s --check-prefixes=AVX,SANDY8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=haswell | FileCheck %s --check-prefixes=AVX,HASWELL9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=haswell -mattr=-fma | FileCheck %s --check-prefixes=AVX,HASWELL-NO-FMA10; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl | FileCheck %s --check-prefixes=AVX,AVX512,KNL11; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skx | FileCheck %s --check-prefixes=AVX,AVX512,SKX12 13; It's the extra tests coverage for recip as discussed on D26855.14 15define float @f32_no_step_2(float %x) #3 {16; SSE-LABEL: f32_no_step_2:17; SSE: # %bb.0:18; SSE-NEXT: rcpss %xmm0, %xmm019; SSE-NEXT: mulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm020; SSE-NEXT: retq21;22; AVX-LABEL: f32_no_step_2:23; AVX: # %bb.0:24; AVX-NEXT: vrcpss %xmm0, %xmm0, %xmm025; AVX-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm026; AVX-NEXT: retq27 %div = fdiv fast float 1234.0, %x28 ret float %div29}30 31define float @f32_one_step_2(float %x) #1 {32; SSE-LABEL: f32_one_step_2:33; SSE: # %bb.0:34; SSE-NEXT: rcpss %xmm0, %xmm235; SSE-NEXT: movss {{.*#+}} xmm1 = [3.456E+3,0.0E+0,0.0E+0,0.0E+0]36; SSE-NEXT: movaps %xmm2, %xmm337; SSE-NEXT: mulss %xmm1, %xmm338; SSE-NEXT: mulss %xmm3, %xmm039; SSE-NEXT: subss %xmm0, %xmm140; SSE-NEXT: mulss %xmm2, %xmm141; SSE-NEXT: addss %xmm3, %xmm142; SSE-NEXT: movaps %xmm1, %xmm043; SSE-NEXT: retq44;45; AVX-RECIP-LABEL: f32_one_step_2:46; AVX-RECIP: # %bb.0:47; AVX-RECIP-NEXT: vrcpss %xmm0, %xmm0, %xmm148; AVX-RECIP-NEXT: vmovss {{.*#+}} xmm2 = [3.456E+3,0.0E+0,0.0E+0,0.0E+0]49; AVX-RECIP-NEXT: vmulss %xmm2, %xmm1, %xmm350; AVX-RECIP-NEXT: vmulss %xmm3, %xmm0, %xmm051; AVX-RECIP-NEXT: vsubss %xmm0, %xmm2, %xmm052; AVX-RECIP-NEXT: vmulss %xmm0, %xmm1, %xmm053; AVX-RECIP-NEXT: vaddss %xmm0, %xmm3, %xmm054; AVX-RECIP-NEXT: retq55;56; FMA-RECIP-LABEL: f32_one_step_2:57; FMA-RECIP: # %bb.0:58; FMA-RECIP-NEXT: vrcpss %xmm0, %xmm0, %xmm159; FMA-RECIP-NEXT: vmovss {{.*#+}} xmm2 = [3.456E+3,0.0E+0,0.0E+0,0.0E+0]60; FMA-RECIP-NEXT: vmulss %xmm2, %xmm1, %xmm361; FMA-RECIP-NEXT: vfmsub213ss {{.*#+}} xmm0 = (xmm3 * xmm0) - xmm262; FMA-RECIP-NEXT: vfnmadd213ss {{.*#+}} xmm0 = -(xmm1 * xmm0) + xmm363; FMA-RECIP-NEXT: retq64;65; BDVER2-LABEL: f32_one_step_2:66; BDVER2: # %bb.0:67; BDVER2-NEXT: vrcpss %xmm0, %xmm0, %xmm168; BDVER2-NEXT: vmovss {{.*#+}} xmm2 = [3.456E+3,0.0E+0,0.0E+0,0.0E+0]69; BDVER2-NEXT: vmulss %xmm2, %xmm1, %xmm370; BDVER2-NEXT: vfmsubss {{.*#+}} xmm0 = (xmm0 * xmm3) - xmm271; BDVER2-NEXT: vfnmaddss {{.*#+}} xmm0 = -(xmm1 * xmm0) + xmm372; BDVER2-NEXT: retq73;74; BTVER2-LABEL: f32_one_step_2:75; BTVER2: # %bb.0:76; BTVER2-NEXT: vmovss {{.*#+}} xmm2 = [3.456E+3,0.0E+0,0.0E+0,0.0E+0]77; BTVER2-NEXT: vrcpss %xmm0, %xmm0, %xmm178; BTVER2-NEXT: vmulss %xmm2, %xmm1, %xmm379; BTVER2-NEXT: vmulss %xmm3, %xmm0, %xmm080; BTVER2-NEXT: vsubss %xmm0, %xmm2, %xmm081; BTVER2-NEXT: vmulss %xmm0, %xmm1, %xmm082; BTVER2-NEXT: vaddss %xmm0, %xmm3, %xmm083; BTVER2-NEXT: retq84;85; SANDY-LABEL: f32_one_step_2:86; SANDY: # %bb.0:87; SANDY-NEXT: vrcpss %xmm0, %xmm0, %xmm188; SANDY-NEXT: vmovss {{.*#+}} xmm2 = [3.456E+3,0.0E+0,0.0E+0,0.0E+0]89; SANDY-NEXT: vmulss %xmm2, %xmm1, %xmm390; SANDY-NEXT: vmulss %xmm3, %xmm0, %xmm091; SANDY-NEXT: vsubss %xmm0, %xmm2, %xmm092; SANDY-NEXT: vmulss %xmm0, %xmm1, %xmm093; SANDY-NEXT: vaddss %xmm0, %xmm3, %xmm094; SANDY-NEXT: retq95;96; HASWELL-LABEL: f32_one_step_2:97; HASWELL: # %bb.0:98; HASWELL-NEXT: vrcpss %xmm0, %xmm0, %xmm199; HASWELL-NEXT: vmovss {{.*#+}} xmm2 = [3.456E+3,0.0E+0,0.0E+0,0.0E+0]100; HASWELL-NEXT: vmulss %xmm2, %xmm1, %xmm3101; HASWELL-NEXT: vfmsub213ss {{.*#+}} xmm0 = (xmm3 * xmm0) - xmm2102; HASWELL-NEXT: vfnmadd213ss {{.*#+}} xmm0 = -(xmm1 * xmm0) + xmm3103; HASWELL-NEXT: retq104;105; HASWELL-NO-FMA-LABEL: f32_one_step_2:106; HASWELL-NO-FMA: # %bb.0:107; HASWELL-NO-FMA-NEXT: vrcpss %xmm0, %xmm0, %xmm1108; HASWELL-NO-FMA-NEXT: vmovss {{.*#+}} xmm2 = [3.456E+3,0.0E+0,0.0E+0,0.0E+0]109; HASWELL-NO-FMA-NEXT: vmulss %xmm2, %xmm1, %xmm3110; HASWELL-NO-FMA-NEXT: vmulss %xmm3, %xmm0, %xmm0111; HASWELL-NO-FMA-NEXT: vsubss %xmm0, %xmm2, %xmm0112; HASWELL-NO-FMA-NEXT: vmulss %xmm0, %xmm1, %xmm0113; HASWELL-NO-FMA-NEXT: vaddss %xmm0, %xmm3, %xmm0114; HASWELL-NO-FMA-NEXT: retq115;116; AVX512-LABEL: f32_one_step_2:117; AVX512: # %bb.0:118; AVX512-NEXT: vrcpss %xmm0, %xmm0, %xmm1119; AVX512-NEXT: vmovss {{.*#+}} xmm2 = [3.456E+3,0.0E+0,0.0E+0,0.0E+0]120; AVX512-NEXT: vmulss %xmm2, %xmm1, %xmm3121; AVX512-NEXT: vfmsub213ss {{.*#+}} xmm0 = (xmm3 * xmm0) - xmm2122; AVX512-NEXT: vfnmadd213ss {{.*#+}} xmm0 = -(xmm1 * xmm0) + xmm3123; AVX512-NEXT: retq124 %div = fdiv fast float 3456.0, %x125 ret float %div126}127 128define float @f32_one_step_2_divs(float %x) #1 {129; SSE-LABEL: f32_one_step_2_divs:130; SSE: # %bb.0:131; SSE-NEXT: rcpss %xmm0, %xmm1132; SSE-NEXT: mulss %xmm1, %xmm0133; SSE-NEXT: movss {{.*#+}} xmm2 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]134; SSE-NEXT: subss %xmm0, %xmm2135; SSE-NEXT: mulss %xmm1, %xmm2136; SSE-NEXT: addss %xmm1, %xmm2137; SSE-NEXT: movss {{.*#+}} xmm0 = [3.456E+3,0.0E+0,0.0E+0,0.0E+0]138; SSE-NEXT: mulss %xmm2, %xmm0139; SSE-NEXT: mulss %xmm2, %xmm0140; SSE-NEXT: retq141;142; AVX-RECIP-LABEL: f32_one_step_2_divs:143; AVX-RECIP: # %bb.0:144; AVX-RECIP-NEXT: vrcpss %xmm0, %xmm0, %xmm1145; AVX-RECIP-NEXT: vmulss %xmm1, %xmm0, %xmm0146; AVX-RECIP-NEXT: vmovss {{.*#+}} xmm2 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]147; AVX-RECIP-NEXT: vsubss %xmm0, %xmm2, %xmm0148; AVX-RECIP-NEXT: vmulss %xmm0, %xmm1, %xmm0149; AVX-RECIP-NEXT: vaddss %xmm0, %xmm1, %xmm0150; AVX-RECIP-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1151; AVX-RECIP-NEXT: vmulss %xmm0, %xmm1, %xmm0152; AVX-RECIP-NEXT: retq153;154; FMA-RECIP-LABEL: f32_one_step_2_divs:155; FMA-RECIP: # %bb.0:156; FMA-RECIP-NEXT: vrcpss %xmm0, %xmm0, %xmm1157; FMA-RECIP-NEXT: vfmsub213ss {{.*#+}} xmm0 = (xmm1 * xmm0) - mem158; FMA-RECIP-NEXT: vfnmadd132ss {{.*#+}} xmm0 = -(xmm0 * xmm1) + xmm1159; FMA-RECIP-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1160; FMA-RECIP-NEXT: vmulss %xmm0, %xmm1, %xmm0161; FMA-RECIP-NEXT: retq162;163; BDVER2-LABEL: f32_one_step_2_divs:164; BDVER2: # %bb.0:165; BDVER2-NEXT: vrcpss %xmm0, %xmm0, %xmm1166; BDVER2-NEXT: vfmsubss {{.*#+}} xmm0 = (xmm0 * xmm1) - mem167; BDVER2-NEXT: vfnmaddss {{.*#+}} xmm0 = -(xmm1 * xmm0) + xmm1168; BDVER2-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1169; BDVER2-NEXT: vmulss %xmm0, %xmm1, %xmm0170; BDVER2-NEXT: retq171;172; BTVER2-LABEL: f32_one_step_2_divs:173; BTVER2: # %bb.0:174; BTVER2-NEXT: vmovss {{.*#+}} xmm2 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]175; BTVER2-NEXT: vrcpss %xmm0, %xmm0, %xmm1176; BTVER2-NEXT: vmulss %xmm1, %xmm0, %xmm0177; BTVER2-NEXT: vsubss %xmm0, %xmm2, %xmm0178; BTVER2-NEXT: vmulss %xmm0, %xmm1, %xmm0179; BTVER2-NEXT: vaddss %xmm0, %xmm1, %xmm0180; BTVER2-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1181; BTVER2-NEXT: vmulss %xmm0, %xmm1, %xmm0182; BTVER2-NEXT: retq183;184; SANDY-LABEL: f32_one_step_2_divs:185; SANDY: # %bb.0:186; SANDY-NEXT: vrcpss %xmm0, %xmm0, %xmm1187; SANDY-NEXT: vmulss %xmm1, %xmm0, %xmm0188; SANDY-NEXT: vmovss {{.*#+}} xmm2 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]189; SANDY-NEXT: vsubss %xmm0, %xmm2, %xmm0190; SANDY-NEXT: vmulss %xmm0, %xmm1, %xmm0191; SANDY-NEXT: vaddss %xmm0, %xmm1, %xmm0192; SANDY-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1193; SANDY-NEXT: vmulss %xmm0, %xmm1, %xmm0194; SANDY-NEXT: retq195;196; HASWELL-LABEL: f32_one_step_2_divs:197; HASWELL: # %bb.0:198; HASWELL-NEXT: vrcpss %xmm0, %xmm0, %xmm1199; HASWELL-NEXT: vfmsub213ss {{.*#+}} xmm0 = (xmm1 * xmm0) - mem200; HASWELL-NEXT: vfnmadd132ss {{.*#+}} xmm0 = -(xmm0 * xmm1) + xmm1201; HASWELL-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1202; HASWELL-NEXT: vmulss %xmm0, %xmm1, %xmm0203; HASWELL-NEXT: retq204;205; HASWELL-NO-FMA-LABEL: f32_one_step_2_divs:206; HASWELL-NO-FMA: # %bb.0:207; HASWELL-NO-FMA-NEXT: vrcpss %xmm0, %xmm0, %xmm1208; HASWELL-NO-FMA-NEXT: vmulss %xmm1, %xmm0, %xmm0209; HASWELL-NO-FMA-NEXT: vmovss {{.*#+}} xmm2 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]210; HASWELL-NO-FMA-NEXT: vsubss %xmm0, %xmm2, %xmm0211; HASWELL-NO-FMA-NEXT: vmulss %xmm0, %xmm1, %xmm0212; HASWELL-NO-FMA-NEXT: vaddss %xmm0, %xmm1, %xmm0213; HASWELL-NO-FMA-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1214; HASWELL-NO-FMA-NEXT: vmulss %xmm0, %xmm1, %xmm0215; HASWELL-NO-FMA-NEXT: retq216;217; AVX512-LABEL: f32_one_step_2_divs:218; AVX512: # %bb.0:219; AVX512-NEXT: vrcpss %xmm0, %xmm0, %xmm1220; AVX512-NEXT: vfmsub213ss {{.*#+}} xmm0 = (xmm1 * xmm0) - mem221; AVX512-NEXT: vfnmadd132ss {{.*#+}} xmm0 = -(xmm0 * xmm1) + xmm1222; AVX512-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1223; AVX512-NEXT: vmulss %xmm0, %xmm1, %xmm0224; AVX512-NEXT: retq225 %div = fdiv fast float 3456.0, %x226 %div2 = fdiv fast float %div, %x227 ret float %div2228}229 230define float @f32_two_step_2(float %x) #2 {231; SSE-LABEL: f32_two_step_2:232; SSE: # %bb.0:233; SSE-NEXT: rcpss %xmm0, %xmm1234; SSE-NEXT: movaps %xmm0, %xmm2235; SSE-NEXT: mulss %xmm1, %xmm2236; SSE-NEXT: movss {{.*#+}} xmm3 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]237; SSE-NEXT: subss %xmm2, %xmm3238; SSE-NEXT: mulss %xmm1, %xmm3239; SSE-NEXT: addss %xmm1, %xmm3240; SSE-NEXT: movss {{.*#+}} xmm1 = [6.789E+3,0.0E+0,0.0E+0,0.0E+0]241; SSE-NEXT: movaps %xmm3, %xmm2242; SSE-NEXT: mulss %xmm1, %xmm2243; SSE-NEXT: mulss %xmm2, %xmm0244; SSE-NEXT: subss %xmm0, %xmm1245; SSE-NEXT: mulss %xmm3, %xmm1246; SSE-NEXT: addss %xmm2, %xmm1247; SSE-NEXT: movaps %xmm1, %xmm0248; SSE-NEXT: retq249;250; AVX-RECIP-LABEL: f32_two_step_2:251; AVX-RECIP: # %bb.0:252; AVX-RECIP-NEXT: vrcpss %xmm0, %xmm0, %xmm1253; AVX-RECIP-NEXT: vmulss %xmm1, %xmm0, %xmm2254; AVX-RECIP-NEXT: vmovss {{.*#+}} xmm3 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]255; AVX-RECIP-NEXT: vsubss %xmm2, %xmm3, %xmm2256; AVX-RECIP-NEXT: vmulss %xmm2, %xmm1, %xmm2257; AVX-RECIP-NEXT: vaddss %xmm2, %xmm1, %xmm1258; AVX-RECIP-NEXT: vmovss {{.*#+}} xmm2 = [6.789E+3,0.0E+0,0.0E+0,0.0E+0]259; AVX-RECIP-NEXT: vmulss %xmm2, %xmm1, %xmm3260; AVX-RECIP-NEXT: vmulss %xmm3, %xmm0, %xmm0261; AVX-RECIP-NEXT: vsubss %xmm0, %xmm2, %xmm0262; AVX-RECIP-NEXT: vmulss %xmm0, %xmm1, %xmm0263; AVX-RECIP-NEXT: vaddss %xmm0, %xmm3, %xmm0264; AVX-RECIP-NEXT: retq265;266; FMA-RECIP-LABEL: f32_two_step_2:267; FMA-RECIP: # %bb.0:268; FMA-RECIP-NEXT: vrcpss %xmm0, %xmm0, %xmm1269; FMA-RECIP-NEXT: vmovss {{.*#+}} xmm2 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]270; FMA-RECIP-NEXT: vfmsub231ss {{.*#+}} xmm2 = (xmm0 * xmm1) - xmm2271; FMA-RECIP-NEXT: vfnmadd132ss {{.*#+}} xmm2 = -(xmm2 * xmm1) + xmm1272; FMA-RECIP-NEXT: vmovss {{.*#+}} xmm1 = [6.789E+3,0.0E+0,0.0E+0,0.0E+0]273; FMA-RECIP-NEXT: vmulss %xmm1, %xmm2, %xmm3274; FMA-RECIP-NEXT: vfmsub213ss {{.*#+}} xmm0 = (xmm3 * xmm0) - xmm1275; FMA-RECIP-NEXT: vfnmadd213ss {{.*#+}} xmm0 = -(xmm2 * xmm0) + xmm3276; FMA-RECIP-NEXT: retq277;278; BDVER2-LABEL: f32_two_step_2:279; BDVER2: # %bb.0:280; BDVER2-NEXT: vrcpss %xmm0, %xmm0, %xmm1281; BDVER2-NEXT: vfmsubss {{.*#+}} xmm2 = (xmm0 * xmm1) - mem282; BDVER2-NEXT: vmovss {{.*#+}} xmm4 = [6.789E+3,0.0E+0,0.0E+0,0.0E+0]283; BDVER2-NEXT: vfnmaddss {{.*#+}} xmm1 = -(xmm1 * xmm2) + xmm1284; BDVER2-NEXT: vmulss %xmm4, %xmm1, %xmm3285; BDVER2-NEXT: vfmsubss {{.*#+}} xmm0 = (xmm0 * xmm3) - xmm4286; BDVER2-NEXT: vfnmaddss {{.*#+}} xmm0 = -(xmm1 * xmm0) + xmm3287; BDVER2-NEXT: retq288;289; BTVER2-LABEL: f32_two_step_2:290; BTVER2: # %bb.0:291; BTVER2-NEXT: vmovss {{.*#+}} xmm3 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]292; BTVER2-NEXT: vrcpss %xmm0, %xmm0, %xmm1293; BTVER2-NEXT: vmovss {{.*#+}} xmm4 = [6.789E+3,0.0E+0,0.0E+0,0.0E+0]294; BTVER2-NEXT: vmulss %xmm1, %xmm0, %xmm2295; BTVER2-NEXT: vsubss %xmm2, %xmm3, %xmm2296; BTVER2-NEXT: vmulss %xmm2, %xmm1, %xmm2297; BTVER2-NEXT: vaddss %xmm2, %xmm1, %xmm1298; BTVER2-NEXT: vmulss %xmm4, %xmm1, %xmm3299; BTVER2-NEXT: vmulss %xmm3, %xmm0, %xmm0300; BTVER2-NEXT: vsubss %xmm0, %xmm4, %xmm0301; BTVER2-NEXT: vmulss %xmm0, %xmm1, %xmm0302; BTVER2-NEXT: vaddss %xmm0, %xmm3, %xmm0303; BTVER2-NEXT: retq304;305; SANDY-LABEL: f32_two_step_2:306; SANDY: # %bb.0:307; SANDY-NEXT: vrcpss %xmm0, %xmm0, %xmm1308; SANDY-NEXT: vmulss %xmm1, %xmm0, %xmm2309; SANDY-NEXT: vmovss {{.*#+}} xmm3 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]310; SANDY-NEXT: vsubss %xmm2, %xmm3, %xmm2311; SANDY-NEXT: vmulss %xmm2, %xmm1, %xmm2312; SANDY-NEXT: vaddss %xmm2, %xmm1, %xmm1313; SANDY-NEXT: vmovss {{.*#+}} xmm2 = [6.789E+3,0.0E+0,0.0E+0,0.0E+0]314; SANDY-NEXT: vmulss %xmm2, %xmm1, %xmm3315; SANDY-NEXT: vmulss %xmm3, %xmm0, %xmm0316; SANDY-NEXT: vsubss %xmm0, %xmm2, %xmm0317; SANDY-NEXT: vmulss %xmm0, %xmm1, %xmm0318; SANDY-NEXT: vaddss %xmm0, %xmm3, %xmm0319; SANDY-NEXT: retq320;321; HASWELL-LABEL: f32_two_step_2:322; HASWELL: # %bb.0:323; HASWELL-NEXT: vrcpss %xmm0, %xmm0, %xmm1324; HASWELL-NEXT: vmovss {{.*#+}} xmm2 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]325; HASWELL-NEXT: vfmsub231ss {{.*#+}} xmm2 = (xmm0 * xmm1) - xmm2326; HASWELL-NEXT: vfnmadd132ss {{.*#+}} xmm2 = -(xmm2 * xmm1) + xmm1327; HASWELL-NEXT: vmovss {{.*#+}} xmm1 = [6.789E+3,0.0E+0,0.0E+0,0.0E+0]328; HASWELL-NEXT: vmulss %xmm1, %xmm2, %xmm3329; HASWELL-NEXT: vfmsub213ss {{.*#+}} xmm0 = (xmm3 * xmm0) - xmm1330; HASWELL-NEXT: vfnmadd213ss {{.*#+}} xmm0 = -(xmm2 * xmm0) + xmm3331; HASWELL-NEXT: retq332;333; HASWELL-NO-FMA-LABEL: f32_two_step_2:334; HASWELL-NO-FMA: # %bb.0:335; HASWELL-NO-FMA-NEXT: vrcpss %xmm0, %xmm0, %xmm1336; HASWELL-NO-FMA-NEXT: vmulss %xmm1, %xmm0, %xmm2337; HASWELL-NO-FMA-NEXT: vmovss {{.*#+}} xmm3 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]338; HASWELL-NO-FMA-NEXT: vsubss %xmm2, %xmm3, %xmm2339; HASWELL-NO-FMA-NEXT: vmulss %xmm2, %xmm1, %xmm2340; HASWELL-NO-FMA-NEXT: vaddss %xmm2, %xmm1, %xmm1341; HASWELL-NO-FMA-NEXT: vmovss {{.*#+}} xmm2 = [6.789E+3,0.0E+0,0.0E+0,0.0E+0]342; HASWELL-NO-FMA-NEXT: vmulss %xmm2, %xmm1, %xmm3343; HASWELL-NO-FMA-NEXT: vmulss %xmm3, %xmm0, %xmm0344; HASWELL-NO-FMA-NEXT: vsubss %xmm0, %xmm2, %xmm0345; HASWELL-NO-FMA-NEXT: vmulss %xmm0, %xmm1, %xmm0346; HASWELL-NO-FMA-NEXT: vaddss %xmm0, %xmm3, %xmm0347; HASWELL-NO-FMA-NEXT: retq348;349; AVX512-LABEL: f32_two_step_2:350; AVX512: # %bb.0:351; AVX512-NEXT: vrcpss %xmm0, %xmm0, %xmm1352; AVX512-NEXT: vmovss {{.*#+}} xmm2 = [1.0E+0,0.0E+0,0.0E+0,0.0E+0]353; AVX512-NEXT: vfmsub231ss {{.*#+}} xmm2 = (xmm0 * xmm1) - xmm2354; AVX512-NEXT: vfnmadd132ss {{.*#+}} xmm2 = -(xmm2 * xmm1) + xmm1355; AVX512-NEXT: vmovss {{.*#+}} xmm1 = [6.789E+3,0.0E+0,0.0E+0,0.0E+0]356; AVX512-NEXT: vmulss %xmm1, %xmm2, %xmm3357; AVX512-NEXT: vfmsub213ss {{.*#+}} xmm0 = (xmm3 * xmm0) - xmm1358; AVX512-NEXT: vfnmadd213ss {{.*#+}} xmm0 = -(xmm2 * xmm0) + xmm3359; AVX512-NEXT: retq360 %div = fdiv fast float 6789.0, %x361 ret float %div362}363 364define <4 x float> @v4f32_one_step2(<4 x float> %x) #1 {365; SSE-LABEL: v4f32_one_step2:366; SSE: # %bb.0:367; SSE-NEXT: rcpps %xmm0, %xmm2368; SSE-NEXT: movaps {{.*#+}} xmm1 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]369; SSE-NEXT: movaps %xmm2, %xmm3370; SSE-NEXT: mulps %xmm1, %xmm3371; SSE-NEXT: mulps %xmm3, %xmm0372; SSE-NEXT: subps %xmm0, %xmm1373; SSE-NEXT: mulps %xmm2, %xmm1374; SSE-NEXT: addps %xmm3, %xmm1375; SSE-NEXT: movaps %xmm1, %xmm0376; SSE-NEXT: retq377;378; AVX-RECIP-LABEL: v4f32_one_step2:379; AVX-RECIP: # %bb.0:380; AVX-RECIP-NEXT: vrcpps %xmm0, %xmm1381; AVX-RECIP-NEXT: vmovaps {{.*#+}} xmm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]382; AVX-RECIP-NEXT: vmulps %xmm2, %xmm1, %xmm3383; AVX-RECIP-NEXT: vmulps %xmm3, %xmm0, %xmm0384; AVX-RECIP-NEXT: vsubps %xmm0, %xmm2, %xmm0385; AVX-RECIP-NEXT: vmulps %xmm0, %xmm1, %xmm0386; AVX-RECIP-NEXT: vaddps %xmm0, %xmm3, %xmm0387; AVX-RECIP-NEXT: retq388;389; FMA-RECIP-LABEL: v4f32_one_step2:390; FMA-RECIP: # %bb.0:391; FMA-RECIP-NEXT: vrcpps %xmm0, %xmm1392; FMA-RECIP-NEXT: vmovaps {{.*#+}} xmm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]393; FMA-RECIP-NEXT: vmulps %xmm2, %xmm1, %xmm3394; FMA-RECIP-NEXT: vfmsub213ps {{.*#+}} xmm0 = (xmm3 * xmm0) - xmm2395; FMA-RECIP-NEXT: vfnmadd213ps {{.*#+}} xmm0 = -(xmm1 * xmm0) + xmm3396; FMA-RECIP-NEXT: retq397;398; BDVER2-LABEL: v4f32_one_step2:399; BDVER2: # %bb.0:400; BDVER2-NEXT: vrcpps %xmm0, %xmm1401; BDVER2-NEXT: vmovaps {{.*#+}} xmm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]402; BDVER2-NEXT: vmulps %xmm2, %xmm1, %xmm3403; BDVER2-NEXT: vfmsubps {{.*#+}} xmm0 = (xmm0 * xmm3) - xmm2404; BDVER2-NEXT: vfnmaddps {{.*#+}} xmm0 = -(xmm1 * xmm0) + xmm3405; BDVER2-NEXT: retq406;407; BTVER2-LABEL: v4f32_one_step2:408; BTVER2: # %bb.0:409; BTVER2-NEXT: vmovaps {{.*#+}} xmm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]410; BTVER2-NEXT: vrcpps %xmm0, %xmm1411; BTVER2-NEXT: vmulps %xmm2, %xmm1, %xmm3412; BTVER2-NEXT: vmulps %xmm3, %xmm0, %xmm0413; BTVER2-NEXT: vsubps %xmm0, %xmm2, %xmm0414; BTVER2-NEXT: vmulps %xmm0, %xmm1, %xmm0415; BTVER2-NEXT: vaddps %xmm0, %xmm3, %xmm0416; BTVER2-NEXT: retq417;418; SANDY-LABEL: v4f32_one_step2:419; SANDY: # %bb.0:420; SANDY-NEXT: vrcpps %xmm0, %xmm1421; SANDY-NEXT: vmovaps {{.*#+}} xmm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]422; SANDY-NEXT: vmulps %xmm2, %xmm1, %xmm3423; SANDY-NEXT: vmulps %xmm3, %xmm0, %xmm0424; SANDY-NEXT: vsubps %xmm0, %xmm2, %xmm0425; SANDY-NEXT: vmulps %xmm0, %xmm1, %xmm0426; SANDY-NEXT: vaddps %xmm0, %xmm3, %xmm0427; SANDY-NEXT: retq428;429; HASWELL-LABEL: v4f32_one_step2:430; HASWELL: # %bb.0:431; HASWELL-NEXT: vrcpps %xmm0, %xmm1432; HASWELL-NEXT: vmovaps {{.*#+}} xmm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]433; HASWELL-NEXT: vmulps %xmm2, %xmm1, %xmm3434; HASWELL-NEXT: vfmsub213ps {{.*#+}} xmm0 = (xmm3 * xmm0) - xmm2435; HASWELL-NEXT: vfnmadd213ps {{.*#+}} xmm0 = -(xmm1 * xmm0) + xmm3436; HASWELL-NEXT: retq437;438; HASWELL-NO-FMA-LABEL: v4f32_one_step2:439; HASWELL-NO-FMA: # %bb.0:440; HASWELL-NO-FMA-NEXT: vrcpps %xmm0, %xmm1441; HASWELL-NO-FMA-NEXT: vmovaps {{.*#+}} xmm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]442; HASWELL-NO-FMA-NEXT: vmulps %xmm2, %xmm1, %xmm3443; HASWELL-NO-FMA-NEXT: vmulps %xmm3, %xmm0, %xmm0444; HASWELL-NO-FMA-NEXT: vsubps %xmm0, %xmm2, %xmm0445; HASWELL-NO-FMA-NEXT: vmulps %xmm0, %xmm1, %xmm0446; HASWELL-NO-FMA-NEXT: vaddps %xmm0, %xmm3, %xmm0447; HASWELL-NO-FMA-NEXT: retq448;449; AVX512-LABEL: v4f32_one_step2:450; AVX512: # %bb.0:451; AVX512-NEXT: vrcpps %xmm0, %xmm1452; AVX512-NEXT: vmovaps {{.*#+}} xmm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]453; AVX512-NEXT: vmulps %xmm2, %xmm1, %xmm3454; AVX512-NEXT: vfmsub213ps {{.*#+}} xmm0 = (xmm3 * xmm0) - xmm2455; AVX512-NEXT: vfnmadd213ps {{.*#+}} xmm0 = -(xmm1 * xmm0) + xmm3456; AVX512-NEXT: retq457 %div = fdiv fast <4 x float> <float 1.0, float 2.0, float 3.0, float 4.0>, %x458 ret <4 x float> %div459}460 461define <4 x float> @v4f32_one_step_2_divs(<4 x float> %x) #1 {462; SSE-LABEL: v4f32_one_step_2_divs:463; SSE: # %bb.0:464; SSE-NEXT: rcpps %xmm0, %xmm1465; SSE-NEXT: mulps %xmm1, %xmm0466; SSE-NEXT: movaps {{.*#+}} xmm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]467; SSE-NEXT: subps %xmm0, %xmm2468; SSE-NEXT: mulps %xmm1, %xmm2469; SSE-NEXT: addps %xmm1, %xmm2470; SSE-NEXT: movaps {{.*#+}} xmm0 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]471; SSE-NEXT: mulps %xmm2, %xmm0472; SSE-NEXT: mulps %xmm2, %xmm0473; SSE-NEXT: retq474;475; AVX-RECIP-LABEL: v4f32_one_step_2_divs:476; AVX-RECIP: # %bb.0:477; AVX-RECIP-NEXT: vrcpps %xmm0, %xmm1478; AVX-RECIP-NEXT: vmulps %xmm1, %xmm0, %xmm0479; AVX-RECIP-NEXT: vbroadcastss {{.*#+}} xmm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]480; AVX-RECIP-NEXT: vsubps %xmm0, %xmm2, %xmm0481; AVX-RECIP-NEXT: vmulps %xmm0, %xmm1, %xmm0482; AVX-RECIP-NEXT: vaddps %xmm0, %xmm1, %xmm0483; AVX-RECIP-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1484; AVX-RECIP-NEXT: vmulps %xmm0, %xmm1, %xmm0485; AVX-RECIP-NEXT: retq486;487; FMA-RECIP-LABEL: v4f32_one_step_2_divs:488; FMA-RECIP: # %bb.0:489; FMA-RECIP-NEXT: vrcpps %xmm0, %xmm1490; FMA-RECIP-NEXT: vfmsub213ps {{.*#+}} xmm0 = (xmm1 * xmm0) - mem491; FMA-RECIP-NEXT: vfnmadd132ps {{.*#+}} xmm0 = -(xmm0 * xmm1) + xmm1492; FMA-RECIP-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1493; FMA-RECIP-NEXT: vmulps %xmm0, %xmm1, %xmm0494; FMA-RECIP-NEXT: retq495;496; BDVER2-LABEL: v4f32_one_step_2_divs:497; BDVER2: # %bb.0:498; BDVER2-NEXT: vrcpps %xmm0, %xmm1499; BDVER2-NEXT: vfmsubps {{.*#+}} xmm0 = (xmm0 * xmm1) - mem500; BDVER2-NEXT: vfnmaddps {{.*#+}} xmm0 = -(xmm1 * xmm0) + xmm1501; BDVER2-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1502; BDVER2-NEXT: vmulps %xmm0, %xmm1, %xmm0503; BDVER2-NEXT: retq504;505; BTVER2-LABEL: v4f32_one_step_2_divs:506; BTVER2: # %bb.0:507; BTVER2-NEXT: vmovaps {{.*#+}} xmm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]508; BTVER2-NEXT: vrcpps %xmm0, %xmm1509; BTVER2-NEXT: vmulps %xmm1, %xmm0, %xmm0510; BTVER2-NEXT: vsubps %xmm0, %xmm2, %xmm0511; BTVER2-NEXT: vmulps %xmm0, %xmm1, %xmm0512; BTVER2-NEXT: vaddps %xmm0, %xmm1, %xmm0513; BTVER2-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1514; BTVER2-NEXT: vmulps %xmm0, %xmm1, %xmm0515; BTVER2-NEXT: retq516;517; SANDY-LABEL: v4f32_one_step_2_divs:518; SANDY: # %bb.0:519; SANDY-NEXT: vrcpps %xmm0, %xmm1520; SANDY-NEXT: vmulps %xmm1, %xmm0, %xmm0521; SANDY-NEXT: vbroadcastss {{.*#+}} xmm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]522; SANDY-NEXT: vsubps %xmm0, %xmm2, %xmm0523; SANDY-NEXT: vmulps %xmm0, %xmm1, %xmm0524; SANDY-NEXT: vaddps %xmm0, %xmm1, %xmm0525; SANDY-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1526; SANDY-NEXT: vmulps %xmm0, %xmm1, %xmm0527; SANDY-NEXT: retq528;529; HASWELL-LABEL: v4f32_one_step_2_divs:530; HASWELL: # %bb.0:531; HASWELL-NEXT: vrcpps %xmm0, %xmm1532; HASWELL-NEXT: vbroadcastss {{.*#+}} xmm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]533; HASWELL-NEXT: vfmsub231ps {{.*#+}} xmm2 = (xmm1 * xmm0) - xmm2534; HASWELL-NEXT: vfnmadd132ps {{.*#+}} xmm2 = -(xmm2 * xmm1) + xmm1535; HASWELL-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm0536; HASWELL-NEXT: vmulps %xmm2, %xmm0, %xmm0537; HASWELL-NEXT: retq538;539; HASWELL-NO-FMA-LABEL: v4f32_one_step_2_divs:540; HASWELL-NO-FMA: # %bb.0:541; HASWELL-NO-FMA-NEXT: vrcpps %xmm0, %xmm1542; HASWELL-NO-FMA-NEXT: vmulps %xmm1, %xmm0, %xmm0543; HASWELL-NO-FMA-NEXT: vbroadcastss {{.*#+}} xmm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]544; HASWELL-NO-FMA-NEXT: vsubps %xmm0, %xmm2, %xmm0545; HASWELL-NO-FMA-NEXT: vmulps %xmm0, %xmm1, %xmm0546; HASWELL-NO-FMA-NEXT: vaddps %xmm0, %xmm1, %xmm0547; HASWELL-NO-FMA-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1548; HASWELL-NO-FMA-NEXT: vmulps %xmm0, %xmm1, %xmm0549; HASWELL-NO-FMA-NEXT: retq550;551; KNL-LABEL: v4f32_one_step_2_divs:552; KNL: # %bb.0:553; KNL-NEXT: vrcpps %xmm0, %xmm1554; KNL-NEXT: vbroadcastss {{.*#+}} xmm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]555; KNL-NEXT: vfmsub231ps {{.*#+}} xmm2 = (xmm1 * xmm0) - xmm2556; KNL-NEXT: vfnmadd132ps {{.*#+}} xmm2 = -(xmm2 * xmm1) + xmm1557; KNL-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm0558; KNL-NEXT: vmulps %xmm2, %xmm0, %xmm0559; KNL-NEXT: retq560;561; SKX-LABEL: v4f32_one_step_2_divs:562; SKX: # %bb.0:563; SKX-NEXT: vrcpps %xmm0, %xmm1564; SKX-NEXT: vfmsub213ps {{.*#+}} xmm0 = (xmm1 * xmm0) - mem565; SKX-NEXT: vfnmadd132ps {{.*#+}} xmm0 = -(xmm0 * xmm1) + xmm1566; SKX-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1567; SKX-NEXT: vmulps %xmm0, %xmm1, %xmm0568; SKX-NEXT: retq569 %div = fdiv fast <4 x float> <float 1.0, float 2.0, float 3.0, float 4.0>, %x570 %div2 = fdiv fast <4 x float> %div, %x571 ret <4 x float> %div2572}573 574define <4 x float> @v4f32_two_step2(<4 x float> %x) #2 {575; SSE-LABEL: v4f32_two_step2:576; SSE: # %bb.0:577; SSE-NEXT: rcpps %xmm0, %xmm1578; SSE-NEXT: movaps %xmm0, %xmm2579; SSE-NEXT: mulps %xmm1, %xmm2580; SSE-NEXT: movaps {{.*#+}} xmm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]581; SSE-NEXT: subps %xmm2, %xmm3582; SSE-NEXT: mulps %xmm1, %xmm3583; SSE-NEXT: addps %xmm1, %xmm3584; SSE-NEXT: movaps {{.*#+}} xmm1 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]585; SSE-NEXT: movaps %xmm3, %xmm2586; SSE-NEXT: mulps %xmm1, %xmm2587; SSE-NEXT: mulps %xmm2, %xmm0588; SSE-NEXT: subps %xmm0, %xmm1589; SSE-NEXT: mulps %xmm3, %xmm1590; SSE-NEXT: addps %xmm2, %xmm1591; SSE-NEXT: movaps %xmm1, %xmm0592; SSE-NEXT: retq593;594; AVX-RECIP-LABEL: v4f32_two_step2:595; AVX-RECIP: # %bb.0:596; AVX-RECIP-NEXT: vrcpps %xmm0, %xmm1597; AVX-RECIP-NEXT: vmulps %xmm1, %xmm0, %xmm2598; AVX-RECIP-NEXT: vbroadcastss {{.*#+}} xmm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]599; AVX-RECIP-NEXT: vsubps %xmm2, %xmm3, %xmm2600; AVX-RECIP-NEXT: vmulps %xmm2, %xmm1, %xmm2601; AVX-RECIP-NEXT: vaddps %xmm2, %xmm1, %xmm1602; AVX-RECIP-NEXT: vmovaps {{.*#+}} xmm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]603; AVX-RECIP-NEXT: vmulps %xmm2, %xmm1, %xmm3604; AVX-RECIP-NEXT: vmulps %xmm3, %xmm0, %xmm0605; AVX-RECIP-NEXT: vsubps %xmm0, %xmm2, %xmm0606; AVX-RECIP-NEXT: vmulps %xmm0, %xmm1, %xmm0607; AVX-RECIP-NEXT: vaddps %xmm0, %xmm3, %xmm0608; AVX-RECIP-NEXT: retq609;610; FMA-RECIP-LABEL: v4f32_two_step2:611; FMA-RECIP: # %bb.0:612; FMA-RECIP-NEXT: vrcpps %xmm0, %xmm1613; FMA-RECIP-NEXT: vbroadcastss {{.*#+}} xmm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]614; FMA-RECIP-NEXT: vfmsub231ps {{.*#+}} xmm2 = (xmm0 * xmm1) - xmm2615; FMA-RECIP-NEXT: vfnmadd132ps {{.*#+}} xmm2 = -(xmm2 * xmm1) + xmm1616; FMA-RECIP-NEXT: vmovaps {{.*#+}} xmm1 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]617; FMA-RECIP-NEXT: vmulps %xmm1, %xmm2, %xmm3618; FMA-RECIP-NEXT: vfmsub213ps {{.*#+}} xmm0 = (xmm3 * xmm0) - xmm1619; FMA-RECIP-NEXT: vfnmadd213ps {{.*#+}} xmm0 = -(xmm2 * xmm0) + xmm3620; FMA-RECIP-NEXT: retq621;622; BDVER2-LABEL: v4f32_two_step2:623; BDVER2: # %bb.0:624; BDVER2-NEXT: vrcpps %xmm0, %xmm1625; BDVER2-NEXT: vfmsubps {{.*#+}} xmm2 = (xmm0 * xmm1) - mem626; BDVER2-NEXT: vmovaps {{.*#+}} xmm4 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]627; BDVER2-NEXT: vfnmaddps {{.*#+}} xmm1 = -(xmm1 * xmm2) + xmm1628; BDVER2-NEXT: vmulps %xmm4, %xmm1, %xmm3629; BDVER2-NEXT: vfmsubps {{.*#+}} xmm0 = (xmm0 * xmm3) - xmm4630; BDVER2-NEXT: vfnmaddps {{.*#+}} xmm0 = -(xmm1 * xmm0) + xmm3631; BDVER2-NEXT: retq632;633; BTVER2-LABEL: v4f32_two_step2:634; BTVER2: # %bb.0:635; BTVER2-NEXT: vmovaps {{.*#+}} xmm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]636; BTVER2-NEXT: vrcpps %xmm0, %xmm1637; BTVER2-NEXT: vmovaps {{.*#+}} xmm4 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]638; BTVER2-NEXT: vmulps %xmm1, %xmm0, %xmm2639; BTVER2-NEXT: vsubps %xmm2, %xmm3, %xmm2640; BTVER2-NEXT: vmulps %xmm2, %xmm1, %xmm2641; BTVER2-NEXT: vaddps %xmm2, %xmm1, %xmm1642; BTVER2-NEXT: vmulps %xmm4, %xmm1, %xmm3643; BTVER2-NEXT: vmulps %xmm3, %xmm0, %xmm0644; BTVER2-NEXT: vsubps %xmm0, %xmm4, %xmm0645; BTVER2-NEXT: vmulps %xmm0, %xmm1, %xmm0646; BTVER2-NEXT: vaddps %xmm0, %xmm3, %xmm0647; BTVER2-NEXT: retq648;649; SANDY-LABEL: v4f32_two_step2:650; SANDY: # %bb.0:651; SANDY-NEXT: vrcpps %xmm0, %xmm1652; SANDY-NEXT: vmulps %xmm1, %xmm0, %xmm2653; SANDY-NEXT: vbroadcastss {{.*#+}} xmm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]654; SANDY-NEXT: vsubps %xmm2, %xmm3, %xmm2655; SANDY-NEXT: vmulps %xmm2, %xmm1, %xmm2656; SANDY-NEXT: vaddps %xmm2, %xmm1, %xmm1657; SANDY-NEXT: vmovaps {{.*#+}} xmm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]658; SANDY-NEXT: vmulps %xmm2, %xmm1, %xmm3659; SANDY-NEXT: vmulps %xmm3, %xmm0, %xmm0660; SANDY-NEXT: vsubps %xmm0, %xmm2, %xmm0661; SANDY-NEXT: vmulps %xmm0, %xmm1, %xmm0662; SANDY-NEXT: vaddps %xmm0, %xmm3, %xmm0663; SANDY-NEXT: retq664;665; HASWELL-LABEL: v4f32_two_step2:666; HASWELL: # %bb.0:667; HASWELL-NEXT: vrcpps %xmm0, %xmm1668; HASWELL-NEXT: vbroadcastss {{.*#+}} xmm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]669; HASWELL-NEXT: vfmsub231ps {{.*#+}} xmm2 = (xmm0 * xmm1) - xmm2670; HASWELL-NEXT: vfnmadd132ps {{.*#+}} xmm2 = -(xmm2 * xmm1) + xmm1671; HASWELL-NEXT: vmovaps {{.*#+}} xmm1 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]672; HASWELL-NEXT: vmulps %xmm1, %xmm2, %xmm3673; HASWELL-NEXT: vfmsub213ps {{.*#+}} xmm0 = (xmm3 * xmm0) - xmm1674; HASWELL-NEXT: vfnmadd213ps {{.*#+}} xmm0 = -(xmm2 * xmm0) + xmm3675; HASWELL-NEXT: retq676;677; HASWELL-NO-FMA-LABEL: v4f32_two_step2:678; HASWELL-NO-FMA: # %bb.0:679; HASWELL-NO-FMA-NEXT: vrcpps %xmm0, %xmm1680; HASWELL-NO-FMA-NEXT: vmulps %xmm1, %xmm0, %xmm2681; HASWELL-NO-FMA-NEXT: vbroadcastss {{.*#+}} xmm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]682; HASWELL-NO-FMA-NEXT: vsubps %xmm2, %xmm3, %xmm2683; HASWELL-NO-FMA-NEXT: vmulps %xmm2, %xmm1, %xmm2684; HASWELL-NO-FMA-NEXT: vaddps %xmm2, %xmm1, %xmm1685; HASWELL-NO-FMA-NEXT: vmovaps {{.*#+}} xmm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]686; HASWELL-NO-FMA-NEXT: vmulps %xmm2, %xmm1, %xmm3687; HASWELL-NO-FMA-NEXT: vmulps %xmm3, %xmm0, %xmm0688; HASWELL-NO-FMA-NEXT: vsubps %xmm0, %xmm2, %xmm0689; HASWELL-NO-FMA-NEXT: vmulps %xmm0, %xmm1, %xmm0690; HASWELL-NO-FMA-NEXT: vaddps %xmm0, %xmm3, %xmm0691; HASWELL-NO-FMA-NEXT: retq692;693; AVX512-LABEL: v4f32_two_step2:694; AVX512: # %bb.0:695; AVX512-NEXT: vrcpps %xmm0, %xmm1696; AVX512-NEXT: vbroadcastss {{.*#+}} xmm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]697; AVX512-NEXT: vfmsub231ps {{.*#+}} xmm2 = (xmm0 * xmm1) - xmm2698; AVX512-NEXT: vfnmadd132ps {{.*#+}} xmm2 = -(xmm2 * xmm1) + xmm1699; AVX512-NEXT: vmovaps {{.*#+}} xmm1 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]700; AVX512-NEXT: vmulps %xmm1, %xmm2, %xmm3701; AVX512-NEXT: vfmsub213ps {{.*#+}} xmm0 = (xmm3 * xmm0) - xmm1702; AVX512-NEXT: vfnmadd213ps {{.*#+}} xmm0 = -(xmm2 * xmm0) + xmm3703; AVX512-NEXT: retq704 %div = fdiv fast <4 x float> <float 1.0, float 2.0, float 3.0, float 4.0>, %x705 ret <4 x float> %div706}707 708define <8 x float> @v8f32_one_step2(<8 x float> %x) #1 {709; SSE-LABEL: v8f32_one_step2:710; SSE: # %bb.0:711; SSE-NEXT: rcpps %xmm0, %xmm3712; SSE-NEXT: movaps {{.*#+}} xmm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]713; SSE-NEXT: movaps %xmm3, %xmm4714; SSE-NEXT: mulps %xmm2, %xmm4715; SSE-NEXT: mulps %xmm4, %xmm0716; SSE-NEXT: subps %xmm0, %xmm2717; SSE-NEXT: mulps %xmm3, %xmm2718; SSE-NEXT: addps %xmm4, %xmm2719; SSE-NEXT: rcpps %xmm1, %xmm0720; SSE-NEXT: movaps {{.*#+}} xmm3 = [5.0E+0,6.0E+0,7.0E+0,8.0E+0]721; SSE-NEXT: movaps %xmm0, %xmm4722; SSE-NEXT: mulps %xmm3, %xmm4723; SSE-NEXT: mulps %xmm4, %xmm1724; SSE-NEXT: subps %xmm1, %xmm3725; SSE-NEXT: mulps %xmm0, %xmm3726; SSE-NEXT: addps %xmm4, %xmm3727; SSE-NEXT: movaps %xmm2, %xmm0728; SSE-NEXT: movaps %xmm3, %xmm1729; SSE-NEXT: retq730;731; AVX-RECIP-LABEL: v8f32_one_step2:732; AVX-RECIP: # %bb.0:733; AVX-RECIP-NEXT: vrcpps %ymm0, %ymm1734; AVX-RECIP-NEXT: vmovaps {{.*#+}} ymm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]735; AVX-RECIP-NEXT: vmulps %ymm2, %ymm1, %ymm3736; AVX-RECIP-NEXT: vmulps %ymm3, %ymm0, %ymm0737; AVX-RECIP-NEXT: vsubps %ymm0, %ymm2, %ymm0738; AVX-RECIP-NEXT: vmulps %ymm0, %ymm1, %ymm0739; AVX-RECIP-NEXT: vaddps %ymm0, %ymm3, %ymm0740; AVX-RECIP-NEXT: retq741;742; FMA-RECIP-LABEL: v8f32_one_step2:743; FMA-RECIP: # %bb.0:744; FMA-RECIP-NEXT: vrcpps %ymm0, %ymm1745; FMA-RECIP-NEXT: vmovaps {{.*#+}} ymm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]746; FMA-RECIP-NEXT: vmulps %ymm2, %ymm1, %ymm3747; FMA-RECIP-NEXT: vfmsub213ps {{.*#+}} ymm0 = (ymm3 * ymm0) - ymm2748; FMA-RECIP-NEXT: vfnmadd213ps {{.*#+}} ymm0 = -(ymm1 * ymm0) + ymm3749; FMA-RECIP-NEXT: retq750;751; BDVER2-LABEL: v8f32_one_step2:752; BDVER2: # %bb.0:753; BDVER2-NEXT: vrcpps %ymm0, %ymm1754; BDVER2-NEXT: vmovaps {{.*#+}} ymm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]755; BDVER2-NEXT: vmulps %ymm2, %ymm1, %ymm3756; BDVER2-NEXT: vfmsubps {{.*#+}} ymm0 = (ymm0 * ymm3) - ymm2757; BDVER2-NEXT: vfnmaddps {{.*#+}} ymm0 = -(ymm1 * ymm0) + ymm3758; BDVER2-NEXT: retq759;760; BTVER2-LABEL: v8f32_one_step2:761; BTVER2: # %bb.0:762; BTVER2-NEXT: vmovaps {{.*#+}} ymm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]763; BTVER2-NEXT: vrcpps %ymm0, %ymm1764; BTVER2-NEXT: vmulps %ymm2, %ymm1, %ymm3765; BTVER2-NEXT: vmulps %ymm3, %ymm0, %ymm0766; BTVER2-NEXT: vsubps %ymm0, %ymm2, %ymm0767; BTVER2-NEXT: vmulps %ymm0, %ymm1, %ymm0768; BTVER2-NEXT: vaddps %ymm0, %ymm3, %ymm0769; BTVER2-NEXT: retq770;771; SANDY-LABEL: v8f32_one_step2:772; SANDY: # %bb.0:773; SANDY-NEXT: vrcpps %ymm0, %ymm1774; SANDY-NEXT: vmovaps {{.*#+}} ymm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]775; SANDY-NEXT: vmulps %ymm2, %ymm1, %ymm3776; SANDY-NEXT: vmulps %ymm3, %ymm0, %ymm0777; SANDY-NEXT: vsubps %ymm0, %ymm2, %ymm0778; SANDY-NEXT: vmulps %ymm0, %ymm1, %ymm0779; SANDY-NEXT: vaddps %ymm0, %ymm3, %ymm0780; SANDY-NEXT: retq781;782; HASWELL-LABEL: v8f32_one_step2:783; HASWELL: # %bb.0:784; HASWELL-NEXT: vrcpps %ymm0, %ymm1785; HASWELL-NEXT: vmovaps {{.*#+}} ymm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]786; HASWELL-NEXT: vmulps %ymm2, %ymm1, %ymm3787; HASWELL-NEXT: vfmsub213ps {{.*#+}} ymm0 = (ymm3 * ymm0) - ymm2788; HASWELL-NEXT: vfnmadd213ps {{.*#+}} ymm0 = -(ymm1 * ymm0) + ymm3789; HASWELL-NEXT: retq790;791; HASWELL-NO-FMA-LABEL: v8f32_one_step2:792; HASWELL-NO-FMA: # %bb.0:793; HASWELL-NO-FMA-NEXT: vrcpps %ymm0, %ymm1794; HASWELL-NO-FMA-NEXT: vmovaps {{.*#+}} ymm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]795; HASWELL-NO-FMA-NEXT: vmulps %ymm2, %ymm1, %ymm3796; HASWELL-NO-FMA-NEXT: vmulps %ymm3, %ymm0, %ymm0797; HASWELL-NO-FMA-NEXT: vsubps %ymm0, %ymm2, %ymm0798; HASWELL-NO-FMA-NEXT: vmulps %ymm0, %ymm1, %ymm0799; HASWELL-NO-FMA-NEXT: vaddps %ymm0, %ymm3, %ymm0800; HASWELL-NO-FMA-NEXT: retq801;802; AVX512-LABEL: v8f32_one_step2:803; AVX512: # %bb.0:804; AVX512-NEXT: vrcpps %ymm0, %ymm1805; AVX512-NEXT: vmovaps {{.*#+}} ymm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]806; AVX512-NEXT: vmulps %ymm2, %ymm1, %ymm3807; AVX512-NEXT: vfmsub213ps {{.*#+}} ymm0 = (ymm3 * ymm0) - ymm2808; AVX512-NEXT: vfnmadd213ps {{.*#+}} ymm0 = -(ymm1 * ymm0) + ymm3809; AVX512-NEXT: retq810 %div = fdiv fast <8 x float> <float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, float 6.0, float 7.0, float 8.0>, %x811 ret <8 x float> %div812}813 814define <8 x float> @v8f32_one_step_2_divs(<8 x float> %x) #1 {815; SSE-LABEL: v8f32_one_step_2_divs:816; SSE: # %bb.0:817; SSE-NEXT: rcpps %xmm0, %xmm2818; SSE-NEXT: mulps %xmm2, %xmm0819; SSE-NEXT: movaps {{.*#+}} xmm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]820; SSE-NEXT: movaps %xmm3, %xmm4821; SSE-NEXT: subps %xmm0, %xmm4822; SSE-NEXT: mulps %xmm2, %xmm4823; SSE-NEXT: addps %xmm2, %xmm4824; SSE-NEXT: rcpps %xmm1, %xmm0825; SSE-NEXT: mulps %xmm0, %xmm1826; SSE-NEXT: subps %xmm1, %xmm3827; SSE-NEXT: mulps %xmm0, %xmm3828; SSE-NEXT: addps %xmm0, %xmm3829; SSE-NEXT: movaps {{.*#+}} xmm1 = [5.0E+0,6.0E+0,7.0E+0,8.0E+0]830; SSE-NEXT: mulps %xmm3, %xmm1831; SSE-NEXT: movaps {{.*#+}} xmm0 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]832; SSE-NEXT: mulps %xmm4, %xmm0833; SSE-NEXT: mulps %xmm4, %xmm0834; SSE-NEXT: mulps %xmm3, %xmm1835; SSE-NEXT: retq836;837; AVX-RECIP-LABEL: v8f32_one_step_2_divs:838; AVX-RECIP: # %bb.0:839; AVX-RECIP-NEXT: vrcpps %ymm0, %ymm1840; AVX-RECIP-NEXT: vmulps %ymm1, %ymm0, %ymm0841; AVX-RECIP-NEXT: vbroadcastss {{.*#+}} ymm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]842; AVX-RECIP-NEXT: vsubps %ymm0, %ymm2, %ymm0843; AVX-RECIP-NEXT: vmulps %ymm0, %ymm1, %ymm0844; AVX-RECIP-NEXT: vaddps %ymm0, %ymm1, %ymm0845; AVX-RECIP-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1846; AVX-RECIP-NEXT: vmulps %ymm0, %ymm1, %ymm0847; AVX-RECIP-NEXT: retq848;849; FMA-RECIP-LABEL: v8f32_one_step_2_divs:850; FMA-RECIP: # %bb.0:851; FMA-RECIP-NEXT: vrcpps %ymm0, %ymm1852; FMA-RECIP-NEXT: vfmsub213ps {{.*#+}} ymm0 = (ymm1 * ymm0) - mem853; FMA-RECIP-NEXT: vfnmadd132ps {{.*#+}} ymm0 = -(ymm0 * ymm1) + ymm1854; FMA-RECIP-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1855; FMA-RECIP-NEXT: vmulps %ymm0, %ymm1, %ymm0856; FMA-RECIP-NEXT: retq857;858; BDVER2-LABEL: v8f32_one_step_2_divs:859; BDVER2: # %bb.0:860; BDVER2-NEXT: vrcpps %ymm0, %ymm1861; BDVER2-NEXT: vfmsubps {{.*#+}} ymm0 = (ymm0 * ymm1) - mem862; BDVER2-NEXT: vfnmaddps {{.*#+}} ymm0 = -(ymm1 * ymm0) + ymm1863; BDVER2-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1864; BDVER2-NEXT: vmulps %ymm0, %ymm1, %ymm0865; BDVER2-NEXT: retq866;867; BTVER2-LABEL: v8f32_one_step_2_divs:868; BTVER2: # %bb.0:869; BTVER2-NEXT: vbroadcastss {{.*#+}} ymm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]870; BTVER2-NEXT: vrcpps %ymm0, %ymm1871; BTVER2-NEXT: vmulps %ymm1, %ymm0, %ymm0872; BTVER2-NEXT: vsubps %ymm0, %ymm2, %ymm0873; BTVER2-NEXT: vmulps %ymm0, %ymm1, %ymm0874; BTVER2-NEXT: vaddps %ymm0, %ymm1, %ymm0875; BTVER2-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1876; BTVER2-NEXT: vmulps %ymm0, %ymm1, %ymm0877; BTVER2-NEXT: retq878;879; SANDY-LABEL: v8f32_one_step_2_divs:880; SANDY: # %bb.0:881; SANDY-NEXT: vrcpps %ymm0, %ymm1882; SANDY-NEXT: vmulps %ymm1, %ymm0, %ymm0883; SANDY-NEXT: vmovaps {{.*#+}} ymm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]884; SANDY-NEXT: vsubps %ymm0, %ymm2, %ymm0885; SANDY-NEXT: vmulps %ymm0, %ymm1, %ymm0886; SANDY-NEXT: vaddps %ymm0, %ymm1, %ymm0887; SANDY-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1888; SANDY-NEXT: vmulps %ymm0, %ymm1, %ymm0889; SANDY-NEXT: retq890;891; HASWELL-LABEL: v8f32_one_step_2_divs:892; HASWELL: # %bb.0:893; HASWELL-NEXT: vrcpps %ymm0, %ymm1894; HASWELL-NEXT: vbroadcastss {{.*#+}} ymm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]895; HASWELL-NEXT: vfmsub231ps {{.*#+}} ymm2 = (ymm1 * ymm0) - ymm2896; HASWELL-NEXT: vfnmadd132ps {{.*#+}} ymm2 = -(ymm2 * ymm1) + ymm1897; HASWELL-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm0898; HASWELL-NEXT: vmulps %ymm2, %ymm0, %ymm0899; HASWELL-NEXT: retq900;901; HASWELL-NO-FMA-LABEL: v8f32_one_step_2_divs:902; HASWELL-NO-FMA: # %bb.0:903; HASWELL-NO-FMA-NEXT: vrcpps %ymm0, %ymm1904; HASWELL-NO-FMA-NEXT: vmulps %ymm1, %ymm0, %ymm0905; HASWELL-NO-FMA-NEXT: vbroadcastss {{.*#+}} ymm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]906; HASWELL-NO-FMA-NEXT: vsubps %ymm0, %ymm2, %ymm0907; HASWELL-NO-FMA-NEXT: vmulps %ymm0, %ymm1, %ymm0908; HASWELL-NO-FMA-NEXT: vaddps %ymm0, %ymm1, %ymm0909; HASWELL-NO-FMA-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1910; HASWELL-NO-FMA-NEXT: vmulps %ymm0, %ymm1, %ymm0911; HASWELL-NO-FMA-NEXT: retq912;913; KNL-LABEL: v8f32_one_step_2_divs:914; KNL: # %bb.0:915; KNL-NEXT: vrcpps %ymm0, %ymm1916; KNL-NEXT: vbroadcastss {{.*#+}} ymm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]917; KNL-NEXT: vfmsub231ps {{.*#+}} ymm2 = (ymm1 * ymm0) - ymm2918; KNL-NEXT: vfnmadd132ps {{.*#+}} ymm2 = -(ymm2 * ymm1) + ymm1919; KNL-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm0920; KNL-NEXT: vmulps %ymm2, %ymm0, %ymm0921; KNL-NEXT: retq922;923; SKX-LABEL: v8f32_one_step_2_divs:924; SKX: # %bb.0:925; SKX-NEXT: vrcpps %ymm0, %ymm1926; SKX-NEXT: vfmsub213ps {{.*#+}} ymm0 = (ymm1 * ymm0) - mem927; SKX-NEXT: vfnmadd132ps {{.*#+}} ymm0 = -(ymm0 * ymm1) + ymm1928; SKX-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1929; SKX-NEXT: vmulps %ymm0, %ymm1, %ymm0930; SKX-NEXT: retq931 %div = fdiv fast <8 x float> <float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, float 6.0, float 7.0, float 8.0>, %x932 %div2 = fdiv fast <8 x float> %div, %x933 ret <8 x float> %div2934}935 936define <8 x float> @v8f32_two_step2(<8 x float> %x) #2 {937; SSE-LABEL: v8f32_two_step2:938; SSE: # %bb.0:939; SSE-NEXT: rcpps %xmm0, %xmm2940; SSE-NEXT: movaps %xmm0, %xmm3941; SSE-NEXT: mulps %xmm2, %xmm3942; SSE-NEXT: movaps {{.*#+}} xmm4 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]943; SSE-NEXT: movaps %xmm4, %xmm5944; SSE-NEXT: subps %xmm3, %xmm5945; SSE-NEXT: mulps %xmm2, %xmm5946; SSE-NEXT: addps %xmm2, %xmm5947; SSE-NEXT: movaps {{.*#+}} xmm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]948; SSE-NEXT: movaps %xmm5, %xmm3949; SSE-NEXT: mulps %xmm2, %xmm3950; SSE-NEXT: mulps %xmm3, %xmm0951; SSE-NEXT: subps %xmm0, %xmm2952; SSE-NEXT: mulps %xmm5, %xmm2953; SSE-NEXT: addps %xmm3, %xmm2954; SSE-NEXT: rcpps %xmm1, %xmm0955; SSE-NEXT: movaps %xmm1, %xmm3956; SSE-NEXT: mulps %xmm0, %xmm3957; SSE-NEXT: subps %xmm3, %xmm4958; SSE-NEXT: mulps %xmm0, %xmm4959; SSE-NEXT: addps %xmm0, %xmm4960; SSE-NEXT: movaps {{.*#+}} xmm3 = [5.0E+0,6.0E+0,7.0E+0,8.0E+0]961; SSE-NEXT: movaps %xmm4, %xmm0962; SSE-NEXT: mulps %xmm3, %xmm0963; SSE-NEXT: mulps %xmm0, %xmm1964; SSE-NEXT: subps %xmm1, %xmm3965; SSE-NEXT: mulps %xmm4, %xmm3966; SSE-NEXT: addps %xmm0, %xmm3967; SSE-NEXT: movaps %xmm2, %xmm0968; SSE-NEXT: movaps %xmm3, %xmm1969; SSE-NEXT: retq970;971; AVX-RECIP-LABEL: v8f32_two_step2:972; AVX-RECIP: # %bb.0:973; AVX-RECIP-NEXT: vrcpps %ymm0, %ymm1974; AVX-RECIP-NEXT: vmulps %ymm1, %ymm0, %ymm2975; AVX-RECIP-NEXT: vbroadcastss {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]976; AVX-RECIP-NEXT: vsubps %ymm2, %ymm3, %ymm2977; AVX-RECIP-NEXT: vmulps %ymm2, %ymm1, %ymm2978; AVX-RECIP-NEXT: vaddps %ymm2, %ymm1, %ymm1979; AVX-RECIP-NEXT: vmovaps {{.*#+}} ymm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]980; AVX-RECIP-NEXT: vmulps %ymm2, %ymm1, %ymm3981; AVX-RECIP-NEXT: vmulps %ymm3, %ymm0, %ymm0982; AVX-RECIP-NEXT: vsubps %ymm0, %ymm2, %ymm0983; AVX-RECIP-NEXT: vmulps %ymm0, %ymm1, %ymm0984; AVX-RECIP-NEXT: vaddps %ymm0, %ymm3, %ymm0985; AVX-RECIP-NEXT: retq986;987; FMA-RECIP-LABEL: v8f32_two_step2:988; FMA-RECIP: # %bb.0:989; FMA-RECIP-NEXT: vrcpps %ymm0, %ymm1990; FMA-RECIP-NEXT: vbroadcastss {{.*#+}} ymm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]991; FMA-RECIP-NEXT: vfmsub231ps {{.*#+}} ymm2 = (ymm0 * ymm1) - ymm2992; FMA-RECIP-NEXT: vfnmadd132ps {{.*#+}} ymm2 = -(ymm2 * ymm1) + ymm1993; FMA-RECIP-NEXT: vmovaps {{.*#+}} ymm1 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]994; FMA-RECIP-NEXT: vmulps %ymm1, %ymm2, %ymm3995; FMA-RECIP-NEXT: vfmsub213ps {{.*#+}} ymm0 = (ymm3 * ymm0) - ymm1996; FMA-RECIP-NEXT: vfnmadd213ps {{.*#+}} ymm0 = -(ymm2 * ymm0) + ymm3997; FMA-RECIP-NEXT: retq998;999; BDVER2-LABEL: v8f32_two_step2:1000; BDVER2: # %bb.0:1001; BDVER2-NEXT: vrcpps %ymm0, %ymm11002; BDVER2-NEXT: vfmsubps {{.*#+}} ymm2 = (ymm0 * ymm1) - mem1003; BDVER2-NEXT: vmovaps {{.*#+}} ymm4 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1004; BDVER2-NEXT: vfnmaddps {{.*#+}} ymm1 = -(ymm1 * ymm2) + ymm11005; BDVER2-NEXT: vmulps %ymm4, %ymm1, %ymm31006; BDVER2-NEXT: vfmsubps {{.*#+}} ymm0 = (ymm0 * ymm3) - ymm41007; BDVER2-NEXT: vfnmaddps {{.*#+}} ymm0 = -(ymm1 * ymm0) + ymm31008; BDVER2-NEXT: retq1009;1010; BTVER2-LABEL: v8f32_two_step2:1011; BTVER2: # %bb.0:1012; BTVER2-NEXT: vbroadcastss {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1013; BTVER2-NEXT: vrcpps %ymm0, %ymm11014; BTVER2-NEXT: vmovaps {{.*#+}} ymm4 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1015; BTVER2-NEXT: vmulps %ymm1, %ymm0, %ymm21016; BTVER2-NEXT: vsubps %ymm2, %ymm3, %ymm21017; BTVER2-NEXT: vmulps %ymm2, %ymm1, %ymm21018; BTVER2-NEXT: vaddps %ymm2, %ymm1, %ymm11019; BTVER2-NEXT: vmulps %ymm4, %ymm1, %ymm31020; BTVER2-NEXT: vmulps %ymm3, %ymm0, %ymm01021; BTVER2-NEXT: vsubps %ymm0, %ymm4, %ymm01022; BTVER2-NEXT: vmulps %ymm0, %ymm1, %ymm01023; BTVER2-NEXT: vaddps %ymm0, %ymm3, %ymm01024; BTVER2-NEXT: retq1025;1026; SANDY-LABEL: v8f32_two_step2:1027; SANDY: # %bb.0:1028; SANDY-NEXT: vrcpps %ymm0, %ymm11029; SANDY-NEXT: vmulps %ymm1, %ymm0, %ymm21030; SANDY-NEXT: vmovaps {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1031; SANDY-NEXT: vsubps %ymm2, %ymm3, %ymm21032; SANDY-NEXT: vmulps %ymm2, %ymm1, %ymm21033; SANDY-NEXT: vaddps %ymm2, %ymm1, %ymm11034; SANDY-NEXT: vmovaps {{.*#+}} ymm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1035; SANDY-NEXT: vmulps %ymm2, %ymm1, %ymm31036; SANDY-NEXT: vmulps %ymm3, %ymm0, %ymm01037; SANDY-NEXT: vsubps %ymm0, %ymm2, %ymm01038; SANDY-NEXT: vmulps %ymm0, %ymm1, %ymm01039; SANDY-NEXT: vaddps %ymm0, %ymm3, %ymm01040; SANDY-NEXT: retq1041;1042; HASWELL-LABEL: v8f32_two_step2:1043; HASWELL: # %bb.0:1044; HASWELL-NEXT: vrcpps %ymm0, %ymm11045; HASWELL-NEXT: vbroadcastss {{.*#+}} ymm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1046; HASWELL-NEXT: vfmsub231ps {{.*#+}} ymm2 = (ymm0 * ymm1) - ymm21047; HASWELL-NEXT: vfnmadd132ps {{.*#+}} ymm2 = -(ymm2 * ymm1) + ymm11048; HASWELL-NEXT: vmovaps {{.*#+}} ymm1 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1049; HASWELL-NEXT: vmulps %ymm1, %ymm2, %ymm31050; HASWELL-NEXT: vfmsub213ps {{.*#+}} ymm0 = (ymm3 * ymm0) - ymm11051; HASWELL-NEXT: vfnmadd213ps {{.*#+}} ymm0 = -(ymm2 * ymm0) + ymm31052; HASWELL-NEXT: retq1053;1054; HASWELL-NO-FMA-LABEL: v8f32_two_step2:1055; HASWELL-NO-FMA: # %bb.0:1056; HASWELL-NO-FMA-NEXT: vrcpps %ymm0, %ymm11057; HASWELL-NO-FMA-NEXT: vmulps %ymm1, %ymm0, %ymm21058; HASWELL-NO-FMA-NEXT: vbroadcastss {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1059; HASWELL-NO-FMA-NEXT: vsubps %ymm2, %ymm3, %ymm21060; HASWELL-NO-FMA-NEXT: vmulps %ymm2, %ymm1, %ymm21061; HASWELL-NO-FMA-NEXT: vaddps %ymm2, %ymm1, %ymm11062; HASWELL-NO-FMA-NEXT: vmovaps {{.*#+}} ymm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1063; HASWELL-NO-FMA-NEXT: vmulps %ymm2, %ymm1, %ymm31064; HASWELL-NO-FMA-NEXT: vmulps %ymm3, %ymm0, %ymm01065; HASWELL-NO-FMA-NEXT: vsubps %ymm0, %ymm2, %ymm01066; HASWELL-NO-FMA-NEXT: vmulps %ymm0, %ymm1, %ymm01067; HASWELL-NO-FMA-NEXT: vaddps %ymm0, %ymm3, %ymm01068; HASWELL-NO-FMA-NEXT: retq1069;1070; AVX512-LABEL: v8f32_two_step2:1071; AVX512: # %bb.0:1072; AVX512-NEXT: vrcpps %ymm0, %ymm11073; AVX512-NEXT: vbroadcastss {{.*#+}} ymm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1074; AVX512-NEXT: vfmsub231ps {{.*#+}} ymm2 = (ymm0 * ymm1) - ymm21075; AVX512-NEXT: vfnmadd132ps {{.*#+}} ymm2 = -(ymm2 * ymm1) + ymm11076; AVX512-NEXT: vmovaps {{.*#+}} ymm1 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1077; AVX512-NEXT: vmulps %ymm1, %ymm2, %ymm31078; AVX512-NEXT: vfmsub213ps {{.*#+}} ymm0 = (ymm3 * ymm0) - ymm11079; AVX512-NEXT: vfnmadd213ps {{.*#+}} ymm0 = -(ymm2 * ymm0) + ymm31080; AVX512-NEXT: retq1081 %div = fdiv fast <8 x float> <float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, float 6.0, float 7.0, float 8.0>, %x1082 ret <8 x float> %div1083}1084 1085define <8 x float> @v8f32_no_step(<8 x float> %x) #3 {1086; SSE-LABEL: v8f32_no_step:1087; SSE: # %bb.0:1088; SSE-NEXT: rcpps %xmm0, %xmm01089; SSE-NEXT: rcpps %xmm1, %xmm11090; SSE-NEXT: retq1091;1092; AVX-LABEL: v8f32_no_step:1093; AVX: # %bb.0:1094; AVX-NEXT: vrcpps %ymm0, %ymm01095; AVX-NEXT: retq1096 %div = fdiv fast <8 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>, %x1097 ret <8 x float> %div1098}1099 1100define <8 x float> @v8f32_no_step2(<8 x float> %x) #3 {1101; SSE-LABEL: v8f32_no_step2:1102; SSE: # %bb.0:1103; SSE-NEXT: rcpps %xmm0, %xmm01104; SSE-NEXT: mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01105; SSE-NEXT: rcpps %xmm1, %xmm11106; SSE-NEXT: mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11107; SSE-NEXT: retq1108;1109; AVX-LABEL: v8f32_no_step2:1110; AVX: # %bb.0:1111; AVX-NEXT: vrcpps %ymm0, %ymm01112; AVX-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01113; AVX-NEXT: retq1114 %div = fdiv fast <8 x float> <float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, float 6.0, float 7.0, float 8.0>, %x1115 ret <8 x float> %div1116}1117 1118define <16 x float> @v16f32_one_step2(<16 x float> %x) #1 {1119; SSE-LABEL: v16f32_one_step2:1120; SSE: # %bb.0:1121; SSE-NEXT: movaps %xmm1, %xmm41122; SSE-NEXT: movaps %xmm0, %xmm11123; SSE-NEXT: rcpps %xmm0, %xmm51124; SSE-NEXT: movaps {{.*#+}} xmm0 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]1125; SSE-NEXT: movaps %xmm5, %xmm61126; SSE-NEXT: mulps %xmm0, %xmm61127; SSE-NEXT: mulps %xmm6, %xmm11128; SSE-NEXT: subps %xmm1, %xmm01129; SSE-NEXT: mulps %xmm5, %xmm01130; SSE-NEXT: addps %xmm6, %xmm01131; SSE-NEXT: rcpps %xmm4, %xmm51132; SSE-NEXT: movaps {{.*#+}} xmm1 = [5.0E+0,6.0E+0,7.0E+0,8.0E+0]1133; SSE-NEXT: movaps %xmm5, %xmm61134; SSE-NEXT: mulps %xmm1, %xmm61135; SSE-NEXT: mulps %xmm6, %xmm41136; SSE-NEXT: subps %xmm4, %xmm11137; SSE-NEXT: mulps %xmm5, %xmm11138; SSE-NEXT: addps %xmm6, %xmm11139; SSE-NEXT: rcpps %xmm2, %xmm51140; SSE-NEXT: movaps {{.*#+}} xmm4 = [9.0E+0,1.0E+1,1.1E+1,1.2E+1]1141; SSE-NEXT: movaps %xmm5, %xmm61142; SSE-NEXT: mulps %xmm4, %xmm61143; SSE-NEXT: mulps %xmm6, %xmm21144; SSE-NEXT: subps %xmm2, %xmm41145; SSE-NEXT: mulps %xmm5, %xmm41146; SSE-NEXT: addps %xmm6, %xmm41147; SSE-NEXT: rcpps %xmm3, %xmm21148; SSE-NEXT: movaps {{.*#+}} xmm5 = [1.3E+1,1.4E+1,1.5E+1,1.6E+1]1149; SSE-NEXT: movaps %xmm2, %xmm61150; SSE-NEXT: mulps %xmm5, %xmm61151; SSE-NEXT: mulps %xmm6, %xmm31152; SSE-NEXT: subps %xmm3, %xmm51153; SSE-NEXT: mulps %xmm2, %xmm51154; SSE-NEXT: addps %xmm6, %xmm51155; SSE-NEXT: movaps %xmm4, %xmm21156; SSE-NEXT: movaps %xmm5, %xmm31157; SSE-NEXT: retq1158;1159; AVX-RECIP-LABEL: v16f32_one_step2:1160; AVX-RECIP: # %bb.0:1161; AVX-RECIP-NEXT: vrcpps %ymm0, %ymm21162; AVX-RECIP-NEXT: vmovaps {{.*#+}} ymm3 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1163; AVX-RECIP-NEXT: vmulps %ymm3, %ymm2, %ymm41164; AVX-RECIP-NEXT: vmulps %ymm4, %ymm0, %ymm01165; AVX-RECIP-NEXT: vsubps %ymm0, %ymm3, %ymm01166; AVX-RECIP-NEXT: vmulps %ymm0, %ymm2, %ymm01167; AVX-RECIP-NEXT: vaddps %ymm0, %ymm4, %ymm01168; AVX-RECIP-NEXT: vrcpps %ymm1, %ymm21169; AVX-RECIP-NEXT: vmovaps {{.*#+}} ymm3 = [9.0E+0,1.0E+1,1.1E+1,1.2E+1,1.3E+1,1.4E+1,1.5E+1,1.6E+1]1170; AVX-RECIP-NEXT: vmulps %ymm3, %ymm2, %ymm41171; AVX-RECIP-NEXT: vmulps %ymm4, %ymm1, %ymm11172; AVX-RECIP-NEXT: vsubps %ymm1, %ymm3, %ymm11173; AVX-RECIP-NEXT: vmulps %ymm1, %ymm2, %ymm11174; AVX-RECIP-NEXT: vaddps %ymm1, %ymm4, %ymm11175; AVX-RECIP-NEXT: retq1176;1177; FMA-RECIP-LABEL: v16f32_one_step2:1178; FMA-RECIP: # %bb.0:1179; FMA-RECIP-NEXT: vrcpps %ymm0, %ymm21180; FMA-RECIP-NEXT: vmovaps {{.*#+}} ymm3 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1181; FMA-RECIP-NEXT: vmulps %ymm3, %ymm2, %ymm41182; FMA-RECIP-NEXT: vfmsub213ps {{.*#+}} ymm0 = (ymm4 * ymm0) - ymm31183; FMA-RECIP-NEXT: vfnmadd213ps {{.*#+}} ymm0 = -(ymm2 * ymm0) + ymm41184; FMA-RECIP-NEXT: vrcpps %ymm1, %ymm21185; FMA-RECIP-NEXT: vmovaps {{.*#+}} ymm3 = [9.0E+0,1.0E+1,1.1E+1,1.2E+1,1.3E+1,1.4E+1,1.5E+1,1.6E+1]1186; FMA-RECIP-NEXT: vmulps %ymm3, %ymm2, %ymm41187; FMA-RECIP-NEXT: vfmsub213ps {{.*#+}} ymm1 = (ymm4 * ymm1) - ymm31188; FMA-RECIP-NEXT: vfnmadd213ps {{.*#+}} ymm1 = -(ymm2 * ymm1) + ymm41189; FMA-RECIP-NEXT: retq1190;1191; BDVER2-LABEL: v16f32_one_step2:1192; BDVER2: # %bb.0:1193; BDVER2-NEXT: vrcpps %ymm0, %ymm21194; BDVER2-NEXT: vmovaps {{.*#+}} ymm3 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1195; BDVER2-NEXT: vrcpps %ymm1, %ymm51196; BDVER2-NEXT: vmulps %ymm3, %ymm2, %ymm41197; BDVER2-NEXT: vfmsubps {{.*#+}} ymm0 = (ymm0 * ymm4) - ymm31198; BDVER2-NEXT: vmovaps {{.*#+}} ymm3 = [9.0E+0,1.0E+1,1.1E+1,1.2E+1,1.3E+1,1.4E+1,1.5E+1,1.6E+1]1199; BDVER2-NEXT: vfnmaddps {{.*#+}} ymm0 = -(ymm2 * ymm0) + ymm41200; BDVER2-NEXT: vmulps %ymm3, %ymm5, %ymm41201; BDVER2-NEXT: vfmsubps {{.*#+}} ymm1 = (ymm1 * ymm4) - ymm31202; BDVER2-NEXT: vfnmaddps {{.*#+}} ymm1 = -(ymm5 * ymm1) + ymm41203; BDVER2-NEXT: retq1204;1205; BTVER2-LABEL: v16f32_one_step2:1206; BTVER2: # %bb.0:1207; BTVER2-NEXT: vmovaps {{.*#+}} ymm3 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1208; BTVER2-NEXT: vrcpps %ymm0, %ymm21209; BTVER2-NEXT: vmulps %ymm3, %ymm2, %ymm41210; BTVER2-NEXT: vmulps %ymm4, %ymm0, %ymm01211; BTVER2-NEXT: vsubps %ymm0, %ymm3, %ymm01212; BTVER2-NEXT: vmovaps {{.*#+}} ymm3 = [9.0E+0,1.0E+1,1.1E+1,1.2E+1,1.3E+1,1.4E+1,1.5E+1,1.6E+1]1213; BTVER2-NEXT: vmulps %ymm0, %ymm2, %ymm01214; BTVER2-NEXT: vrcpps %ymm1, %ymm21215; BTVER2-NEXT: vmulps %ymm3, %ymm2, %ymm51216; BTVER2-NEXT: vaddps %ymm0, %ymm4, %ymm01217; BTVER2-NEXT: vmulps %ymm5, %ymm1, %ymm11218; BTVER2-NEXT: vsubps %ymm1, %ymm3, %ymm11219; BTVER2-NEXT: vmulps %ymm1, %ymm2, %ymm11220; BTVER2-NEXT: vaddps %ymm1, %ymm5, %ymm11221; BTVER2-NEXT: retq1222;1223; SANDY-LABEL: v16f32_one_step2:1224; SANDY: # %bb.0:1225; SANDY-NEXT: vrcpps %ymm0, %ymm21226; SANDY-NEXT: vmovaps {{.*#+}} ymm3 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1227; SANDY-NEXT: vmulps %ymm3, %ymm2, %ymm41228; SANDY-NEXT: vmulps %ymm4, %ymm0, %ymm01229; SANDY-NEXT: vsubps %ymm0, %ymm3, %ymm01230; SANDY-NEXT: vmulps %ymm0, %ymm2, %ymm01231; SANDY-NEXT: vaddps %ymm0, %ymm4, %ymm01232; SANDY-NEXT: vrcpps %ymm1, %ymm21233; SANDY-NEXT: vmovaps {{.*#+}} ymm3 = [9.0E+0,1.0E+1,1.1E+1,1.2E+1,1.3E+1,1.4E+1,1.5E+1,1.6E+1]1234; SANDY-NEXT: vmulps %ymm3, %ymm2, %ymm41235; SANDY-NEXT: vmulps %ymm4, %ymm1, %ymm11236; SANDY-NEXT: vsubps %ymm1, %ymm3, %ymm11237; SANDY-NEXT: vmulps %ymm1, %ymm2, %ymm11238; SANDY-NEXT: vaddps %ymm1, %ymm4, %ymm11239; SANDY-NEXT: retq1240;1241; HASWELL-LABEL: v16f32_one_step2:1242; HASWELL: # %bb.0:1243; HASWELL-NEXT: vrcpps %ymm0, %ymm21244; HASWELL-NEXT: vmovaps {{.*#+}} ymm3 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1245; HASWELL-NEXT: vmulps %ymm3, %ymm2, %ymm41246; HASWELL-NEXT: vfmsub213ps {{.*#+}} ymm0 = (ymm4 * ymm0) - ymm31247; HASWELL-NEXT: vfnmadd213ps {{.*#+}} ymm0 = -(ymm2 * ymm0) + ymm41248; HASWELL-NEXT: vrcpps %ymm1, %ymm21249; HASWELL-NEXT: vmovaps {{.*#+}} ymm3 = [9.0E+0,1.0E+1,1.1E+1,1.2E+1,1.3E+1,1.4E+1,1.5E+1,1.6E+1]1250; HASWELL-NEXT: vmulps %ymm3, %ymm2, %ymm41251; HASWELL-NEXT: vfmsub213ps {{.*#+}} ymm1 = (ymm4 * ymm1) - ymm31252; HASWELL-NEXT: vfnmadd213ps {{.*#+}} ymm1 = -(ymm2 * ymm1) + ymm41253; HASWELL-NEXT: retq1254;1255; HASWELL-NO-FMA-LABEL: v16f32_one_step2:1256; HASWELL-NO-FMA: # %bb.0:1257; HASWELL-NO-FMA-NEXT: vrcpps %ymm0, %ymm21258; HASWELL-NO-FMA-NEXT: vmovaps {{.*#+}} ymm3 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1259; HASWELL-NO-FMA-NEXT: vmulps %ymm3, %ymm2, %ymm41260; HASWELL-NO-FMA-NEXT: vmulps %ymm4, %ymm0, %ymm01261; HASWELL-NO-FMA-NEXT: vsubps %ymm0, %ymm3, %ymm01262; HASWELL-NO-FMA-NEXT: vrcpps %ymm1, %ymm31263; HASWELL-NO-FMA-NEXT: vmulps %ymm0, %ymm2, %ymm01264; HASWELL-NO-FMA-NEXT: vaddps %ymm0, %ymm4, %ymm01265; HASWELL-NO-FMA-NEXT: vmovaps {{.*#+}} ymm2 = [9.0E+0,1.0E+1,1.1E+1,1.2E+1,1.3E+1,1.4E+1,1.5E+1,1.6E+1]1266; HASWELL-NO-FMA-NEXT: vmulps %ymm2, %ymm3, %ymm41267; HASWELL-NO-FMA-NEXT: vmulps %ymm4, %ymm1, %ymm11268; HASWELL-NO-FMA-NEXT: vsubps %ymm1, %ymm2, %ymm11269; HASWELL-NO-FMA-NEXT: vmulps %ymm1, %ymm3, %ymm11270; HASWELL-NO-FMA-NEXT: vaddps %ymm1, %ymm4, %ymm11271; HASWELL-NO-FMA-NEXT: retq1272;1273; AVX512-LABEL: v16f32_one_step2:1274; AVX512: # %bb.0:1275; AVX512-NEXT: vrcp14ps %zmm0, %zmm11276; AVX512-NEXT: vmovaps {{.*#+}} zmm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0,9.0E+0,1.0E+1,1.1E+1,1.2E+1,1.3E+1,1.4E+1,1.5E+1,1.6E+1]1277; AVX512-NEXT: vmulps %zmm2, %zmm1, %zmm31278; AVX512-NEXT: vfmsub213ps {{.*#+}} zmm0 = (zmm3 * zmm0) - zmm21279; AVX512-NEXT: vfnmadd213ps {{.*#+}} zmm0 = -(zmm1 * zmm0) + zmm31280; AVX512-NEXT: retq1281 %div = fdiv fast <16 x float> <float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, float 11.0, float 12.0, float 13.0, float 14.0, float 15.0, float 16.0>, %x1282 ret <16 x float> %div1283}1284 1285define <16 x float> @v16f32_one_step_2_divs(<16 x float> %x) #1 {1286; SSE-LABEL: v16f32_one_step_2_divs:1287; SSE: # %bb.0:1288; SSE-NEXT: rcpps %xmm0, %xmm61289; SSE-NEXT: mulps %xmm6, %xmm01290; SSE-NEXT: movaps {{.*#+}} xmm4 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]1291; SSE-NEXT: movaps %xmm4, %xmm51292; SSE-NEXT: subps %xmm0, %xmm51293; SSE-NEXT: mulps %xmm6, %xmm51294; SSE-NEXT: addps %xmm6, %xmm51295; SSE-NEXT: rcpps %xmm1, %xmm01296; SSE-NEXT: mulps %xmm0, %xmm11297; SSE-NEXT: movaps %xmm4, %xmm61298; SSE-NEXT: subps %xmm1, %xmm61299; SSE-NEXT: mulps %xmm0, %xmm61300; SSE-NEXT: addps %xmm0, %xmm61301; SSE-NEXT: rcpps %xmm2, %xmm01302; SSE-NEXT: mulps %xmm0, %xmm21303; SSE-NEXT: movaps %xmm4, %xmm71304; SSE-NEXT: subps %xmm2, %xmm71305; SSE-NEXT: mulps %xmm0, %xmm71306; SSE-NEXT: addps %xmm0, %xmm71307; SSE-NEXT: rcpps %xmm3, %xmm01308; SSE-NEXT: mulps %xmm0, %xmm31309; SSE-NEXT: subps %xmm3, %xmm41310; SSE-NEXT: mulps %xmm0, %xmm41311; SSE-NEXT: addps %xmm0, %xmm41312; SSE-NEXT: movaps {{.*#+}} xmm3 = [1.3E+1,1.4E+1,1.5E+1,1.6E+1]1313; SSE-NEXT: mulps %xmm4, %xmm31314; SSE-NEXT: movaps {{.*#+}} xmm2 = [9.0E+0,1.0E+1,1.1E+1,1.2E+1]1315; SSE-NEXT: mulps %xmm7, %xmm21316; SSE-NEXT: movaps {{.*#+}} xmm1 = [5.0E+0,6.0E+0,7.0E+0,8.0E+0]1317; SSE-NEXT: mulps %xmm6, %xmm11318; SSE-NEXT: movaps {{.*#+}} xmm0 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]1319; SSE-NEXT: mulps %xmm5, %xmm01320; SSE-NEXT: mulps %xmm5, %xmm01321; SSE-NEXT: mulps %xmm6, %xmm11322; SSE-NEXT: mulps %xmm7, %xmm21323; SSE-NEXT: mulps %xmm4, %xmm31324; SSE-NEXT: retq1325;1326; AVX-RECIP-LABEL: v16f32_one_step_2_divs:1327; AVX-RECIP: # %bb.0:1328; AVX-RECIP-NEXT: vrcpps %ymm0, %ymm21329; AVX-RECIP-NEXT: vmulps %ymm2, %ymm0, %ymm01330; AVX-RECIP-NEXT: vbroadcastss {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1331; AVX-RECIP-NEXT: vsubps %ymm0, %ymm3, %ymm01332; AVX-RECIP-NEXT: vmulps %ymm0, %ymm2, %ymm01333; AVX-RECIP-NEXT: vaddps %ymm0, %ymm2, %ymm01334; AVX-RECIP-NEXT: vrcpps %ymm1, %ymm21335; AVX-RECIP-NEXT: vmulps %ymm2, %ymm1, %ymm11336; AVX-RECIP-NEXT: vsubps %ymm1, %ymm3, %ymm11337; AVX-RECIP-NEXT: vmulps %ymm1, %ymm2, %ymm11338; AVX-RECIP-NEXT: vaddps %ymm1, %ymm2, %ymm11339; AVX-RECIP-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm21340; AVX-RECIP-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm31341; AVX-RECIP-NEXT: vmulps %ymm0, %ymm3, %ymm01342; AVX-RECIP-NEXT: vmulps %ymm1, %ymm2, %ymm11343; AVX-RECIP-NEXT: retq1344;1345; FMA-RECIP-LABEL: v16f32_one_step_2_divs:1346; FMA-RECIP: # %bb.0:1347; FMA-RECIP-NEXT: vrcpps %ymm0, %ymm21348; FMA-RECIP-NEXT: vbroadcastss {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1349; FMA-RECIP-NEXT: vfmsub213ps {{.*#+}} ymm0 = (ymm2 * ymm0) - ymm31350; FMA-RECIP-NEXT: vfnmadd132ps {{.*#+}} ymm0 = -(ymm0 * ymm2) + ymm21351; FMA-RECIP-NEXT: vrcpps %ymm1, %ymm21352; FMA-RECIP-NEXT: vfmsub213ps {{.*#+}} ymm1 = (ymm2 * ymm1) - ymm31353; FMA-RECIP-NEXT: vfnmadd132ps {{.*#+}} ymm1 = -(ymm1 * ymm2) + ymm21354; FMA-RECIP-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm21355; FMA-RECIP-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm31356; FMA-RECIP-NEXT: vmulps %ymm0, %ymm3, %ymm01357; FMA-RECIP-NEXT: vmulps %ymm1, %ymm2, %ymm11358; FMA-RECIP-NEXT: retq1359;1360; BDVER2-LABEL: v16f32_one_step_2_divs:1361; BDVER2: # %bb.0:1362; BDVER2-NEXT: vrcpps %ymm0, %ymm21363; BDVER2-NEXT: vmovaps {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1364; BDVER2-NEXT: vfmsubps {{.*#+}} ymm0 = (ymm0 * ymm2) - ymm31365; BDVER2-NEXT: vfnmaddps {{.*#+}} ymm0 = -(ymm2 * ymm0) + ymm21366; BDVER2-NEXT: vrcpps %ymm1, %ymm21367; BDVER2-NEXT: vfmsubps {{.*#+}} ymm1 = (ymm1 * ymm2) - ymm31368; BDVER2-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm31369; BDVER2-NEXT: vfnmaddps {{.*#+}} ymm1 = -(ymm2 * ymm1) + ymm21370; BDVER2-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm21371; BDVER2-NEXT: vmulps %ymm0, %ymm3, %ymm01372; BDVER2-NEXT: vmulps %ymm1, %ymm2, %ymm11373; BDVER2-NEXT: retq1374;1375; BTVER2-LABEL: v16f32_one_step_2_divs:1376; BTVER2: # %bb.0:1377; BTVER2-NEXT: vbroadcastss {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1378; BTVER2-NEXT: vrcpps %ymm0, %ymm21379; BTVER2-NEXT: vmulps %ymm2, %ymm0, %ymm01380; BTVER2-NEXT: vsubps %ymm0, %ymm3, %ymm01381; BTVER2-NEXT: vmulps %ymm0, %ymm2, %ymm01382; BTVER2-NEXT: vaddps %ymm0, %ymm2, %ymm01383; BTVER2-NEXT: vrcpps %ymm1, %ymm21384; BTVER2-NEXT: vmulps %ymm2, %ymm1, %ymm11385; BTVER2-NEXT: vsubps %ymm1, %ymm3, %ymm11386; BTVER2-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm31387; BTVER2-NEXT: vmulps %ymm1, %ymm2, %ymm11388; BTVER2-NEXT: vaddps %ymm1, %ymm2, %ymm11389; BTVER2-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm21390; BTVER2-NEXT: vmulps %ymm0, %ymm3, %ymm01391; BTVER2-NEXT: vmulps %ymm1, %ymm2, %ymm11392; BTVER2-NEXT: retq1393;1394; SANDY-LABEL: v16f32_one_step_2_divs:1395; SANDY: # %bb.0:1396; SANDY-NEXT: vrcpps %ymm0, %ymm21397; SANDY-NEXT: vmulps %ymm2, %ymm0, %ymm01398; SANDY-NEXT: vmovaps {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1399; SANDY-NEXT: vsubps %ymm0, %ymm3, %ymm01400; SANDY-NEXT: vmulps %ymm0, %ymm2, %ymm01401; SANDY-NEXT: vaddps %ymm0, %ymm2, %ymm01402; SANDY-NEXT: vrcpps %ymm1, %ymm21403; SANDY-NEXT: vmulps %ymm2, %ymm1, %ymm11404; SANDY-NEXT: vsubps %ymm1, %ymm3, %ymm11405; SANDY-NEXT: vmulps %ymm1, %ymm2, %ymm11406; SANDY-NEXT: vaddps %ymm1, %ymm2, %ymm11407; SANDY-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm21408; SANDY-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm31409; SANDY-NEXT: vmulps %ymm0, %ymm3, %ymm01410; SANDY-NEXT: vmulps %ymm1, %ymm2, %ymm11411; SANDY-NEXT: retq1412;1413; HASWELL-LABEL: v16f32_one_step_2_divs:1414; HASWELL: # %bb.0:1415; HASWELL-NEXT: vrcpps %ymm0, %ymm21416; HASWELL-NEXT: vbroadcastss {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1417; HASWELL-NEXT: vfmsub213ps {{.*#+}} ymm0 = (ymm2 * ymm0) - ymm31418; HASWELL-NEXT: vfnmadd132ps {{.*#+}} ymm0 = -(ymm0 * ymm2) + ymm21419; HASWELL-NEXT: vrcpps %ymm1, %ymm21420; HASWELL-NEXT: vfmsub213ps {{.*#+}} ymm1 = (ymm2 * ymm1) - ymm31421; HASWELL-NEXT: vfnmadd132ps {{.*#+}} ymm1 = -(ymm1 * ymm2) + ymm21422; HASWELL-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm21423; HASWELL-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm31424; HASWELL-NEXT: vmulps %ymm0, %ymm3, %ymm01425; HASWELL-NEXT: vmulps %ymm1, %ymm2, %ymm11426; HASWELL-NEXT: retq1427;1428; HASWELL-NO-FMA-LABEL: v16f32_one_step_2_divs:1429; HASWELL-NO-FMA: # %bb.0:1430; HASWELL-NO-FMA-NEXT: vrcpps %ymm0, %ymm21431; HASWELL-NO-FMA-NEXT: vmulps %ymm2, %ymm0, %ymm01432; HASWELL-NO-FMA-NEXT: vbroadcastss {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1433; HASWELL-NO-FMA-NEXT: vsubps %ymm0, %ymm3, %ymm01434; HASWELL-NO-FMA-NEXT: vrcpps %ymm1, %ymm41435; HASWELL-NO-FMA-NEXT: vmulps %ymm0, %ymm2, %ymm01436; HASWELL-NO-FMA-NEXT: vaddps %ymm0, %ymm2, %ymm01437; HASWELL-NO-FMA-NEXT: vmulps %ymm4, %ymm1, %ymm11438; HASWELL-NO-FMA-NEXT: vsubps %ymm1, %ymm3, %ymm11439; HASWELL-NO-FMA-NEXT: vmulps %ymm1, %ymm4, %ymm11440; HASWELL-NO-FMA-NEXT: vaddps %ymm1, %ymm4, %ymm11441; HASWELL-NO-FMA-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm21442; HASWELL-NO-FMA-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm31443; HASWELL-NO-FMA-NEXT: vmulps %ymm0, %ymm3, %ymm01444; HASWELL-NO-FMA-NEXT: vmulps %ymm1, %ymm2, %ymm11445; HASWELL-NO-FMA-NEXT: retq1446;1447; AVX512-LABEL: v16f32_one_step_2_divs:1448; AVX512: # %bb.0:1449; AVX512-NEXT: vrcp14ps %zmm0, %zmm11450; AVX512-NEXT: vfmsub213ps {{.*#+}} zmm0 = (zmm1 * zmm0) - mem1451; AVX512-NEXT: vfnmadd132ps {{.*#+}} zmm0 = -(zmm0 * zmm1) + zmm11452; AVX512-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm11453; AVX512-NEXT: vmulps %zmm0, %zmm1, %zmm01454; AVX512-NEXT: retq1455 %div = fdiv fast <16 x float> <float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, float 11.0, float 12.0, float 13.0, float 14.0, float 15.0, float 16.0>, %x1456 %div2 = fdiv fast <16 x float> %div, %x1457 ret <16 x float> %div21458}1459 1460define <16 x float> @v16f32_two_step2(<16 x float> %x) #2 {1461; SSE-LABEL: v16f32_two_step2:1462; SSE: # %bb.0:1463; SSE-NEXT: movaps %xmm1, %xmm41464; SSE-NEXT: movaps %xmm0, %xmm11465; SSE-NEXT: rcpps %xmm0, %xmm01466; SSE-NEXT: movaps %xmm1, %xmm51467; SSE-NEXT: mulps %xmm0, %xmm51468; SSE-NEXT: movaps {{.*#+}} xmm6 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0]1469; SSE-NEXT: movaps %xmm6, %xmm71470; SSE-NEXT: subps %xmm5, %xmm71471; SSE-NEXT: mulps %xmm0, %xmm71472; SSE-NEXT: addps %xmm0, %xmm71473; SSE-NEXT: movaps {{.*#+}} xmm0 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0]1474; SSE-NEXT: movaps %xmm7, %xmm51475; SSE-NEXT: mulps %xmm0, %xmm51476; SSE-NEXT: mulps %xmm5, %xmm11477; SSE-NEXT: subps %xmm1, %xmm01478; SSE-NEXT: mulps %xmm7, %xmm01479; SSE-NEXT: addps %xmm5, %xmm01480; SSE-NEXT: rcpps %xmm4, %xmm11481; SSE-NEXT: movaps %xmm4, %xmm51482; SSE-NEXT: mulps %xmm1, %xmm51483; SSE-NEXT: movaps %xmm6, %xmm71484; SSE-NEXT: subps %xmm5, %xmm71485; SSE-NEXT: mulps %xmm1, %xmm71486; SSE-NEXT: addps %xmm1, %xmm71487; SSE-NEXT: movaps {{.*#+}} xmm1 = [5.0E+0,6.0E+0,7.0E+0,8.0E+0]1488; SSE-NEXT: movaps %xmm7, %xmm51489; SSE-NEXT: mulps %xmm1, %xmm51490; SSE-NEXT: mulps %xmm5, %xmm41491; SSE-NEXT: subps %xmm4, %xmm11492; SSE-NEXT: mulps %xmm7, %xmm11493; SSE-NEXT: addps %xmm5, %xmm11494; SSE-NEXT: rcpps %xmm2, %xmm41495; SSE-NEXT: movaps %xmm2, %xmm51496; SSE-NEXT: mulps %xmm4, %xmm51497; SSE-NEXT: movaps %xmm6, %xmm71498; SSE-NEXT: subps %xmm5, %xmm71499; SSE-NEXT: mulps %xmm4, %xmm71500; SSE-NEXT: addps %xmm4, %xmm71501; SSE-NEXT: movaps {{.*#+}} xmm4 = [9.0E+0,1.0E+1,1.1E+1,1.2E+1]1502; SSE-NEXT: movaps %xmm7, %xmm51503; SSE-NEXT: mulps %xmm4, %xmm51504; SSE-NEXT: mulps %xmm5, %xmm21505; SSE-NEXT: subps %xmm2, %xmm41506; SSE-NEXT: mulps %xmm7, %xmm41507; SSE-NEXT: addps %xmm5, %xmm41508; SSE-NEXT: rcpps %xmm3, %xmm21509; SSE-NEXT: movaps %xmm3, %xmm51510; SSE-NEXT: mulps %xmm2, %xmm51511; SSE-NEXT: subps %xmm5, %xmm61512; SSE-NEXT: mulps %xmm2, %xmm61513; SSE-NEXT: addps %xmm2, %xmm61514; SSE-NEXT: movaps {{.*#+}} xmm5 = [1.3E+1,1.4E+1,1.5E+1,1.6E+1]1515; SSE-NEXT: movaps %xmm6, %xmm21516; SSE-NEXT: mulps %xmm5, %xmm21517; SSE-NEXT: mulps %xmm2, %xmm31518; SSE-NEXT: subps %xmm3, %xmm51519; SSE-NEXT: mulps %xmm6, %xmm51520; SSE-NEXT: addps %xmm2, %xmm51521; SSE-NEXT: movaps %xmm4, %xmm21522; SSE-NEXT: movaps %xmm5, %xmm31523; SSE-NEXT: retq1524;1525; AVX-RECIP-LABEL: v16f32_two_step2:1526; AVX-RECIP: # %bb.0:1527; AVX-RECIP-NEXT: vrcpps %ymm0, %ymm21528; AVX-RECIP-NEXT: vmulps %ymm2, %ymm0, %ymm31529; AVX-RECIP-NEXT: vbroadcastss {{.*#+}} ymm4 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1530; AVX-RECIP-NEXT: vsubps %ymm3, %ymm4, %ymm31531; AVX-RECIP-NEXT: vmulps %ymm3, %ymm2, %ymm31532; AVX-RECIP-NEXT: vaddps %ymm3, %ymm2, %ymm21533; AVX-RECIP-NEXT: vmovaps {{.*#+}} ymm3 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1534; AVX-RECIP-NEXT: vmulps %ymm3, %ymm2, %ymm51535; AVX-RECIP-NEXT: vmulps %ymm5, %ymm0, %ymm01536; AVX-RECIP-NEXT: vsubps %ymm0, %ymm3, %ymm01537; AVX-RECIP-NEXT: vmulps %ymm0, %ymm2, %ymm01538; AVX-RECIP-NEXT: vaddps %ymm0, %ymm5, %ymm01539; AVX-RECIP-NEXT: vrcpps %ymm1, %ymm21540; AVX-RECIP-NEXT: vmulps %ymm2, %ymm1, %ymm31541; AVX-RECIP-NEXT: vsubps %ymm3, %ymm4, %ymm31542; AVX-RECIP-NEXT: vmulps %ymm3, %ymm2, %ymm31543; AVX-RECIP-NEXT: vaddps %ymm3, %ymm2, %ymm21544; AVX-RECIP-NEXT: vmovaps {{.*#+}} ymm3 = [9.0E+0,1.0E+1,1.1E+1,1.2E+1,1.3E+1,1.4E+1,1.5E+1,1.6E+1]1545; AVX-RECIP-NEXT: vmulps %ymm3, %ymm2, %ymm41546; AVX-RECIP-NEXT: vmulps %ymm4, %ymm1, %ymm11547; AVX-RECIP-NEXT: vsubps %ymm1, %ymm3, %ymm11548; AVX-RECIP-NEXT: vmulps %ymm1, %ymm2, %ymm11549; AVX-RECIP-NEXT: vaddps %ymm1, %ymm4, %ymm11550; AVX-RECIP-NEXT: retq1551;1552; FMA-RECIP-LABEL: v16f32_two_step2:1553; FMA-RECIP: # %bb.0:1554; FMA-RECIP-NEXT: vrcpps %ymm0, %ymm21555; FMA-RECIP-NEXT: vbroadcastss {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1556; FMA-RECIP-NEXT: vmovaps %ymm2, %ymm41557; FMA-RECIP-NEXT: vfmsub213ps {{.*#+}} ymm4 = (ymm0 * ymm4) - ymm31558; FMA-RECIP-NEXT: vfnmadd132ps {{.*#+}} ymm4 = -(ymm4 * ymm2) + ymm21559; FMA-RECIP-NEXT: vmovaps {{.*#+}} ymm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1560; FMA-RECIP-NEXT: vmulps %ymm2, %ymm4, %ymm51561; FMA-RECIP-NEXT: vfmsub213ps {{.*#+}} ymm0 = (ymm5 * ymm0) - ymm21562; FMA-RECIP-NEXT: vfnmadd213ps {{.*#+}} ymm0 = -(ymm4 * ymm0) + ymm51563; FMA-RECIP-NEXT: vrcpps %ymm1, %ymm21564; FMA-RECIP-NEXT: vfmsub231ps {{.*#+}} ymm3 = (ymm1 * ymm2) - ymm31565; FMA-RECIP-NEXT: vfnmadd132ps {{.*#+}} ymm3 = -(ymm3 * ymm2) + ymm21566; FMA-RECIP-NEXT: vmovaps {{.*#+}} ymm2 = [9.0E+0,1.0E+1,1.1E+1,1.2E+1,1.3E+1,1.4E+1,1.5E+1,1.6E+1]1567; FMA-RECIP-NEXT: vmulps %ymm2, %ymm3, %ymm41568; FMA-RECIP-NEXT: vfmsub213ps {{.*#+}} ymm1 = (ymm4 * ymm1) - ymm21569; FMA-RECIP-NEXT: vfnmadd213ps {{.*#+}} ymm1 = -(ymm3 * ymm1) + ymm41570; FMA-RECIP-NEXT: retq1571;1572; BDVER2-LABEL: v16f32_two_step2:1573; BDVER2: # %bb.0:1574; BDVER2-NEXT: vrcpps %ymm0, %ymm21575; BDVER2-NEXT: vmovaps {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1576; BDVER2-NEXT: vfmsubps {{.*#+}} ymm4 = (ymm0 * ymm2) - ymm31577; BDVER2-NEXT: vfnmaddps {{.*#+}} ymm2 = -(ymm2 * ymm4) + ymm21578; BDVER2-NEXT: vmovaps {{.*#+}} ymm4 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1579; BDVER2-NEXT: vmulps %ymm4, %ymm2, %ymm51580; BDVER2-NEXT: vfmsubps {{.*#+}} ymm0 = (ymm0 * ymm5) - ymm41581; BDVER2-NEXT: vfnmaddps {{.*#+}} ymm0 = -(ymm2 * ymm0) + ymm51582; BDVER2-NEXT: vrcpps %ymm1, %ymm21583; BDVER2-NEXT: vmovaps {{.*#+}} ymm5 = [9.0E+0,1.0E+1,1.1E+1,1.2E+1,1.3E+1,1.4E+1,1.5E+1,1.6E+1]1584; BDVER2-NEXT: vfmsubps {{.*#+}} ymm3 = (ymm1 * ymm2) - ymm31585; BDVER2-NEXT: vfnmaddps {{.*#+}} ymm2 = -(ymm2 * ymm3) + ymm21586; BDVER2-NEXT: vmulps %ymm5, %ymm2, %ymm41587; BDVER2-NEXT: vfmsubps {{.*#+}} ymm1 = (ymm1 * ymm4) - ymm51588; BDVER2-NEXT: vfnmaddps {{.*#+}} ymm1 = -(ymm2 * ymm1) + ymm41589; BDVER2-NEXT: retq1590;1591; BTVER2-LABEL: v16f32_two_step2:1592; BTVER2: # %bb.0:1593; BTVER2-NEXT: vbroadcastss {{.*#+}} ymm4 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1594; BTVER2-NEXT: vrcpps %ymm0, %ymm21595; BTVER2-NEXT: vmulps %ymm2, %ymm0, %ymm31596; BTVER2-NEXT: vsubps %ymm3, %ymm4, %ymm31597; BTVER2-NEXT: vmulps %ymm3, %ymm2, %ymm31598; BTVER2-NEXT: vaddps %ymm3, %ymm2, %ymm21599; BTVER2-NEXT: vmovaps {{.*#+}} ymm3 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1600; BTVER2-NEXT: vmulps %ymm3, %ymm2, %ymm51601; BTVER2-NEXT: vmulps %ymm5, %ymm0, %ymm01602; BTVER2-NEXT: vsubps %ymm0, %ymm3, %ymm01603; BTVER2-NEXT: vmulps %ymm0, %ymm2, %ymm01604; BTVER2-NEXT: vrcpps %ymm1, %ymm21605; BTVER2-NEXT: vmulps %ymm2, %ymm1, %ymm31606; BTVER2-NEXT: vaddps %ymm0, %ymm5, %ymm01607; BTVER2-NEXT: vmovaps {{.*#+}} ymm5 = [9.0E+0,1.0E+1,1.1E+1,1.2E+1,1.3E+1,1.4E+1,1.5E+1,1.6E+1]1608; BTVER2-NEXT: vsubps %ymm3, %ymm4, %ymm31609; BTVER2-NEXT: vmulps %ymm3, %ymm2, %ymm31610; BTVER2-NEXT: vaddps %ymm3, %ymm2, %ymm21611; BTVER2-NEXT: vmulps %ymm5, %ymm2, %ymm41612; BTVER2-NEXT: vmulps %ymm4, %ymm1, %ymm11613; BTVER2-NEXT: vsubps %ymm1, %ymm5, %ymm11614; BTVER2-NEXT: vmulps %ymm1, %ymm2, %ymm11615; BTVER2-NEXT: vaddps %ymm1, %ymm4, %ymm11616; BTVER2-NEXT: retq1617;1618; SANDY-LABEL: v16f32_two_step2:1619; SANDY: # %bb.0:1620; SANDY-NEXT: vrcpps %ymm0, %ymm21621; SANDY-NEXT: vmulps %ymm2, %ymm0, %ymm31622; SANDY-NEXT: vmovaps {{.*#+}} ymm4 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1623; SANDY-NEXT: vsubps %ymm3, %ymm4, %ymm31624; SANDY-NEXT: vmulps %ymm3, %ymm2, %ymm31625; SANDY-NEXT: vaddps %ymm3, %ymm2, %ymm21626; SANDY-NEXT: vmovaps {{.*#+}} ymm3 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1627; SANDY-NEXT: vmulps %ymm3, %ymm2, %ymm51628; SANDY-NEXT: vmulps %ymm5, %ymm0, %ymm01629; SANDY-NEXT: vsubps %ymm0, %ymm3, %ymm01630; SANDY-NEXT: vmulps %ymm0, %ymm2, %ymm01631; SANDY-NEXT: vaddps %ymm0, %ymm5, %ymm01632; SANDY-NEXT: vrcpps %ymm1, %ymm21633; SANDY-NEXT: vmulps %ymm2, %ymm1, %ymm31634; SANDY-NEXT: vsubps %ymm3, %ymm4, %ymm31635; SANDY-NEXT: vmulps %ymm3, %ymm2, %ymm31636; SANDY-NEXT: vaddps %ymm3, %ymm2, %ymm21637; SANDY-NEXT: vmovaps {{.*#+}} ymm3 = [9.0E+0,1.0E+1,1.1E+1,1.2E+1,1.3E+1,1.4E+1,1.5E+1,1.6E+1]1638; SANDY-NEXT: vmulps %ymm3, %ymm2, %ymm41639; SANDY-NEXT: vmulps %ymm4, %ymm1, %ymm11640; SANDY-NEXT: vsubps %ymm1, %ymm3, %ymm11641; SANDY-NEXT: vmulps %ymm1, %ymm2, %ymm11642; SANDY-NEXT: vaddps %ymm1, %ymm4, %ymm11643; SANDY-NEXT: retq1644;1645; HASWELL-LABEL: v16f32_two_step2:1646; HASWELL: # %bb.0:1647; HASWELL-NEXT: vrcpps %ymm0, %ymm21648; HASWELL-NEXT: vbroadcastss {{.*#+}} ymm3 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1649; HASWELL-NEXT: vmovaps %ymm2, %ymm41650; HASWELL-NEXT: vfmsub213ps {{.*#+}} ymm4 = (ymm0 * ymm4) - ymm31651; HASWELL-NEXT: vfnmadd132ps {{.*#+}} ymm4 = -(ymm4 * ymm2) + ymm21652; HASWELL-NEXT: vmovaps {{.*#+}} ymm2 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1653; HASWELL-NEXT: vmulps %ymm2, %ymm4, %ymm51654; HASWELL-NEXT: vrcpps %ymm1, %ymm61655; HASWELL-NEXT: vfmsub213ps {{.*#+}} ymm0 = (ymm5 * ymm0) - ymm21656; HASWELL-NEXT: vfnmadd213ps {{.*#+}} ymm0 = -(ymm4 * ymm0) + ymm51657; HASWELL-NEXT: vfmsub231ps {{.*#+}} ymm3 = (ymm1 * ymm6) - ymm31658; HASWELL-NEXT: vfnmadd132ps {{.*#+}} ymm3 = -(ymm3 * ymm6) + ymm61659; HASWELL-NEXT: vmovaps {{.*#+}} ymm2 = [9.0E+0,1.0E+1,1.1E+1,1.2E+1,1.3E+1,1.4E+1,1.5E+1,1.6E+1]1660; HASWELL-NEXT: vmulps %ymm2, %ymm3, %ymm41661; HASWELL-NEXT: vfmsub213ps {{.*#+}} ymm1 = (ymm4 * ymm1) - ymm21662; HASWELL-NEXT: vfnmadd213ps {{.*#+}} ymm1 = -(ymm3 * ymm1) + ymm41663; HASWELL-NEXT: retq1664;1665; HASWELL-NO-FMA-LABEL: v16f32_two_step2:1666; HASWELL-NO-FMA: # %bb.0:1667; HASWELL-NO-FMA-NEXT: vrcpps %ymm0, %ymm21668; HASWELL-NO-FMA-NEXT: vmulps %ymm2, %ymm0, %ymm31669; HASWELL-NO-FMA-NEXT: vbroadcastss {{.*#+}} ymm4 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1670; HASWELL-NO-FMA-NEXT: vsubps %ymm3, %ymm4, %ymm31671; HASWELL-NO-FMA-NEXT: vmulps %ymm3, %ymm2, %ymm31672; HASWELL-NO-FMA-NEXT: vaddps %ymm3, %ymm2, %ymm21673; HASWELL-NO-FMA-NEXT: vmovaps {{.*#+}} ymm3 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0]1674; HASWELL-NO-FMA-NEXT: vmulps %ymm3, %ymm2, %ymm51675; HASWELL-NO-FMA-NEXT: vmulps %ymm5, %ymm0, %ymm01676; HASWELL-NO-FMA-NEXT: vsubps %ymm0, %ymm3, %ymm01677; HASWELL-NO-FMA-NEXT: vrcpps %ymm1, %ymm31678; HASWELL-NO-FMA-NEXT: vmulps %ymm0, %ymm2, %ymm01679; HASWELL-NO-FMA-NEXT: vaddps %ymm0, %ymm5, %ymm01680; HASWELL-NO-FMA-NEXT: vmulps %ymm3, %ymm1, %ymm21681; HASWELL-NO-FMA-NEXT: vsubps %ymm2, %ymm4, %ymm21682; HASWELL-NO-FMA-NEXT: vmulps %ymm2, %ymm3, %ymm21683; HASWELL-NO-FMA-NEXT: vaddps %ymm2, %ymm3, %ymm21684; HASWELL-NO-FMA-NEXT: vmovaps {{.*#+}} ymm3 = [9.0E+0,1.0E+1,1.1E+1,1.2E+1,1.3E+1,1.4E+1,1.5E+1,1.6E+1]1685; HASWELL-NO-FMA-NEXT: vmulps %ymm3, %ymm2, %ymm41686; HASWELL-NO-FMA-NEXT: vmulps %ymm4, %ymm1, %ymm11687; HASWELL-NO-FMA-NEXT: vsubps %ymm1, %ymm3, %ymm11688; HASWELL-NO-FMA-NEXT: vmulps %ymm1, %ymm2, %ymm11689; HASWELL-NO-FMA-NEXT: vaddps %ymm1, %ymm4, %ymm11690; HASWELL-NO-FMA-NEXT: retq1691;1692; AVX512-LABEL: v16f32_two_step2:1693; AVX512: # %bb.0:1694; AVX512-NEXT: vrcp14ps %zmm0, %zmm11695; AVX512-NEXT: vbroadcastss {{.*#+}} zmm2 = [1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0,1.0E+0]1696; AVX512-NEXT: vfmsub231ps {{.*#+}} zmm2 = (zmm0 * zmm1) - zmm21697; AVX512-NEXT: vfnmadd132ps {{.*#+}} zmm2 = -(zmm2 * zmm1) + zmm11698; AVX512-NEXT: vmovaps {{.*#+}} zmm1 = [1.0E+0,2.0E+0,3.0E+0,4.0E+0,5.0E+0,6.0E+0,7.0E+0,8.0E+0,9.0E+0,1.0E+1,1.1E+1,1.2E+1,1.3E+1,1.4E+1,1.5E+1,1.6E+1]1699; AVX512-NEXT: vmulps %zmm1, %zmm2, %zmm31700; AVX512-NEXT: vfmsub213ps {{.*#+}} zmm0 = (zmm3 * zmm0) - zmm11701; AVX512-NEXT: vfnmadd213ps {{.*#+}} zmm0 = -(zmm2 * zmm0) + zmm31702; AVX512-NEXT: retq1703 %div = fdiv fast <16 x float> <float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, float 11.0, float 12.0, float 13.0, float 14.0, float 15.0, float 16.0>, %x1704 ret <16 x float> %div1705}1706 1707define <16 x float> @v16f32_no_step(<16 x float> %x) #3 {1708; SSE-LABEL: v16f32_no_step:1709; SSE: # %bb.0:1710; SSE-NEXT: rcpps %xmm0, %xmm01711; SSE-NEXT: rcpps %xmm1, %xmm11712; SSE-NEXT: rcpps %xmm2, %xmm21713; SSE-NEXT: rcpps %xmm3, %xmm31714; SSE-NEXT: retq1715;1716; AVX-RECIP-LABEL: v16f32_no_step:1717; AVX-RECIP: # %bb.0:1718; AVX-RECIP-NEXT: vrcpps %ymm0, %ymm01719; AVX-RECIP-NEXT: vrcpps %ymm1, %ymm11720; AVX-RECIP-NEXT: retq1721;1722; FMA-RECIP-LABEL: v16f32_no_step:1723; FMA-RECIP: # %bb.0:1724; FMA-RECIP-NEXT: vrcpps %ymm0, %ymm01725; FMA-RECIP-NEXT: vrcpps %ymm1, %ymm11726; FMA-RECIP-NEXT: retq1727;1728; BDVER2-LABEL: v16f32_no_step:1729; BDVER2: # %bb.0:1730; BDVER2-NEXT: vrcpps %ymm0, %ymm01731; BDVER2-NEXT: vrcpps %ymm1, %ymm11732; BDVER2-NEXT: retq1733;1734; BTVER2-LABEL: v16f32_no_step:1735; BTVER2: # %bb.0:1736; BTVER2-NEXT: vrcpps %ymm0, %ymm01737; BTVER2-NEXT: vrcpps %ymm1, %ymm11738; BTVER2-NEXT: retq1739;1740; SANDY-LABEL: v16f32_no_step:1741; SANDY: # %bb.0:1742; SANDY-NEXT: vrcpps %ymm0, %ymm01743; SANDY-NEXT: vrcpps %ymm1, %ymm11744; SANDY-NEXT: retq1745;1746; HASWELL-LABEL: v16f32_no_step:1747; HASWELL: # %bb.0:1748; HASWELL-NEXT: vrcpps %ymm0, %ymm01749; HASWELL-NEXT: vrcpps %ymm1, %ymm11750; HASWELL-NEXT: retq1751;1752; HASWELL-NO-FMA-LABEL: v16f32_no_step:1753; HASWELL-NO-FMA: # %bb.0:1754; HASWELL-NO-FMA-NEXT: vrcpps %ymm0, %ymm01755; HASWELL-NO-FMA-NEXT: vrcpps %ymm1, %ymm11756; HASWELL-NO-FMA-NEXT: retq1757;1758; AVX512-LABEL: v16f32_no_step:1759; AVX512: # %bb.0:1760; AVX512-NEXT: vrcp14ps %zmm0, %zmm01761; AVX512-NEXT: retq1762 %div = fdiv fast <16 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>, %x1763 ret <16 x float> %div1764}1765 1766define <16 x float> @v16f32_no_step2(<16 x float> %x) #3 {1767; SSE-LABEL: v16f32_no_step2:1768; SSE: # %bb.0:1769; SSE-NEXT: rcpps %xmm0, %xmm01770; SSE-NEXT: mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm01771; SSE-NEXT: rcpps %xmm1, %xmm11772; SSE-NEXT: mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm11773; SSE-NEXT: rcpps %xmm2, %xmm21774; SSE-NEXT: mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm21775; SSE-NEXT: rcpps %xmm3, %xmm31776; SSE-NEXT: mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm31777; SSE-NEXT: retq1778;1779; AVX-RECIP-LABEL: v16f32_no_step2:1780; AVX-RECIP: # %bb.0:1781; AVX-RECIP-NEXT: vrcpps %ymm0, %ymm01782; AVX-RECIP-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01783; AVX-RECIP-NEXT: vrcpps %ymm1, %ymm11784; AVX-RECIP-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11785; AVX-RECIP-NEXT: retq1786;1787; FMA-RECIP-LABEL: v16f32_no_step2:1788; FMA-RECIP: # %bb.0:1789; FMA-RECIP-NEXT: vrcpps %ymm0, %ymm01790; FMA-RECIP-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01791; FMA-RECIP-NEXT: vrcpps %ymm1, %ymm11792; FMA-RECIP-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11793; FMA-RECIP-NEXT: retq1794;1795; BDVER2-LABEL: v16f32_no_step2:1796; BDVER2: # %bb.0:1797; BDVER2-NEXT: vrcpps %ymm0, %ymm01798; BDVER2-NEXT: vrcpps %ymm1, %ymm11799; BDVER2-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01800; BDVER2-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11801; BDVER2-NEXT: retq1802;1803; BTVER2-LABEL: v16f32_no_step2:1804; BTVER2: # %bb.0:1805; BTVER2-NEXT: vrcpps %ymm0, %ymm01806; BTVER2-NEXT: vrcpps %ymm1, %ymm11807; BTVER2-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01808; BTVER2-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11809; BTVER2-NEXT: retq1810;1811; SANDY-LABEL: v16f32_no_step2:1812; SANDY: # %bb.0:1813; SANDY-NEXT: vrcpps %ymm0, %ymm01814; SANDY-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01815; SANDY-NEXT: vrcpps %ymm1, %ymm11816; SANDY-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11817; SANDY-NEXT: retq1818;1819; HASWELL-LABEL: v16f32_no_step2:1820; HASWELL: # %bb.0:1821; HASWELL-NEXT: vrcpps %ymm0, %ymm01822; HASWELL-NEXT: vrcpps %ymm1, %ymm11823; HASWELL-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01824; HASWELL-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11825; HASWELL-NEXT: retq1826;1827; HASWELL-NO-FMA-LABEL: v16f32_no_step2:1828; HASWELL-NO-FMA: # %bb.0:1829; HASWELL-NO-FMA-NEXT: vrcpps %ymm0, %ymm01830; HASWELL-NO-FMA-NEXT: vrcpps %ymm1, %ymm11831; HASWELL-NO-FMA-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm01832; HASWELL-NO-FMA-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm11833; HASWELL-NO-FMA-NEXT: retq1834;1835; AVX512-LABEL: v16f32_no_step2:1836; AVX512: # %bb.0:1837; AVX512-NEXT: vrcp14ps %zmm0, %zmm01838; AVX512-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm01839; AVX512-NEXT: retq1840 %div = fdiv fast <16 x float> <float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, float 6.0, float 7.0, float 8.0, float 9.0, float 10.0, float 11.0, float 12.0, float 13.0, float 14.0, float 15.0, float 16.0>, %x1841 ret <16 x float> %div1842}1843 1844attributes #0 = { "reciprocal-estimates"="!divf,!vec-divf" }1845attributes #1 = { "reciprocal-estimates"="divf,vec-divf" }1846attributes #2 = { "reciprocal-estimates"="divf:2,vec-divf:2" }1847attributes #3 = { "reciprocal-estimates"="divf:0,vec-divf:0" }1848 1849