367 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefix=GFX9 %s3; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx900 -fp-contract=fast < %s | FileCheck -check-prefix=GFX9-CONTRACT %s4; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx900 --denormal-fp-math=preserve-sign < %s | FileCheck -check-prefix=GFX9-DENORM %s5; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1010 < %s | FileCheck -check-prefix=GFX10 %s6; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1010 -fp-contract=fast < %s | FileCheck -check-prefix=GFX10-CONTRACT %s7; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1010 --denormal-fp-math=preserve-sign < %s | FileCheck -check-prefix=GFX10-DENORM %s8 9; fold (fsub (fneg (fmul, x, y)), z) -> (fma (fneg x), y, (fneg z))10define float @test_f32_sub_ext_neg_mul(float %x, float %y, float %z) {11; GFX9-LABEL: test_f32_sub_ext_neg_mul:12; GFX9: ; %bb.0: ; %entry13; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14; GFX9-NEXT: v_mul_f32_e64 v0, v0, -v115; GFX9-NEXT: v_sub_f32_e32 v0, v0, v216; GFX9-NEXT: s_setpc_b64 s[30:31]17;18; GFX9-CONTRACT-LABEL: test_f32_sub_ext_neg_mul:19; GFX9-CONTRACT: ; %bb.0: ; %entry20; GFX9-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)21; GFX9-CONTRACT-NEXT: v_fma_f32 v0, v0, -v1, -v222; GFX9-CONTRACT-NEXT: s_setpc_b64 s[30:31]23;24; GFX9-DENORM-LABEL: test_f32_sub_ext_neg_mul:25; GFX9-DENORM: ; %bb.0: ; %entry26; GFX9-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)27; GFX9-DENORM-NEXT: v_mad_f32 v0, v0, -v1, -v228; GFX9-DENORM-NEXT: s_setpc_b64 s[30:31]29;30; GFX10-LABEL: test_f32_sub_ext_neg_mul:31; GFX10: ; %bb.0: ; %entry32; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)33; GFX10-NEXT: v_mul_f32_e64 v0, v0, -v134; GFX10-NEXT: v_sub_f32_e32 v0, v0, v235; GFX10-NEXT: s_setpc_b64 s[30:31]36;37; GFX10-CONTRACT-LABEL: test_f32_sub_ext_neg_mul:38; GFX10-CONTRACT: ; %bb.0: ; %entry39; GFX10-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)40; GFX10-CONTRACT-NEXT: v_fma_f32 v0, v0, -v1, -v241; GFX10-CONTRACT-NEXT: s_setpc_b64 s[30:31]42;43; GFX10-DENORM-LABEL: test_f32_sub_ext_neg_mul:44; GFX10-DENORM: ; %bb.0: ; %entry45; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)46; GFX10-DENORM-NEXT: v_mad_f32 v0, v0, -v1, -v247; GFX10-DENORM-NEXT: s_setpc_b64 s[30:31]48entry:49 %a = fmul float %x, %y50 %b = fneg float %a51 %c = fsub float %b, %z52 ret float %c53}54 55define half @test_f16_sub_ext_neg_mul(half %x, half %y, half %z) {56; GFX9-LABEL: test_f16_sub_ext_neg_mul:57; GFX9: ; %bb.0: ; %entry58; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)59; GFX9-NEXT: v_mul_f16_e64 v0, v0, -v160; GFX9-NEXT: v_sub_f16_e32 v0, v0, v261; GFX9-NEXT: s_setpc_b64 s[30:31]62;63; GFX9-CONTRACT-LABEL: test_f16_sub_ext_neg_mul:64; GFX9-CONTRACT: ; %bb.0: ; %entry65; GFX9-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)66; GFX9-CONTRACT-NEXT: v_fma_f16 v0, v0, -v1, -v267; GFX9-CONTRACT-NEXT: s_setpc_b64 s[30:31]68;69; GFX9-DENORM-LABEL: test_f16_sub_ext_neg_mul:70; GFX9-DENORM: ; %bb.0: ; %entry71; GFX9-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)72; GFX9-DENORM-NEXT: v_mad_legacy_f16 v0, v0, -v1, -v273; GFX9-DENORM-NEXT: s_setpc_b64 s[30:31]74;75; GFX10-LABEL: test_f16_sub_ext_neg_mul:76; GFX10: ; %bb.0: ; %entry77; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)78; GFX10-NEXT: v_mul_f16_e64 v0, v0, -v179; GFX10-NEXT: v_sub_f16_e32 v0, v0, v280; GFX10-NEXT: s_setpc_b64 s[30:31]81;82; GFX10-CONTRACT-LABEL: test_f16_sub_ext_neg_mul:83; GFX10-CONTRACT: ; %bb.0: ; %entry84; GFX10-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)85; GFX10-CONTRACT-NEXT: v_fma_f16 v0, v0, -v1, -v286; GFX10-CONTRACT-NEXT: s_setpc_b64 s[30:31]87;88; GFX10-DENORM-LABEL: test_f16_sub_ext_neg_mul:89; GFX10-DENORM: ; %bb.0: ; %entry90; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)91; GFX10-DENORM-NEXT: v_mul_f16_e64 v0, v0, -v192; GFX10-DENORM-NEXT: v_sub_f16_e32 v0, v0, v293; GFX10-DENORM-NEXT: s_setpc_b64 s[30:31]94entry:95 %a = fmul half %x, %y96 %b = fneg half %a97 %c = fsub half %b, %z98 ret half %c99}100 101define double @test_f64_sub_ext_neg_mul(double %x, double %y, double %z) {102; GFX9-LABEL: test_f64_sub_ext_neg_mul:103; GFX9: ; %bb.0: ; %entry104; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)105; GFX9-NEXT: v_mul_f64 v[0:1], v[0:1], v[2:3]106; GFX9-NEXT: v_add_f64 v[0:1], -v[0:1], -v[4:5]107; GFX9-NEXT: s_setpc_b64 s[30:31]108;109; GFX9-CONTRACT-LABEL: test_f64_sub_ext_neg_mul:110; GFX9-CONTRACT: ; %bb.0: ; %entry111; GFX9-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)112; GFX9-CONTRACT-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], -v[4:5]113; GFX9-CONTRACT-NEXT: s_setpc_b64 s[30:31]114;115; GFX9-DENORM-LABEL: test_f64_sub_ext_neg_mul:116; GFX9-DENORM: ; %bb.0: ; %entry117; GFX9-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)118; GFX9-DENORM-NEXT: v_mul_f64 v[0:1], v[0:1], v[2:3]119; GFX9-DENORM-NEXT: v_add_f64 v[0:1], -v[0:1], -v[4:5]120; GFX9-DENORM-NEXT: s_setpc_b64 s[30:31]121;122; GFX10-LABEL: test_f64_sub_ext_neg_mul:123; GFX10: ; %bb.0: ; %entry124; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)125; GFX10-NEXT: v_mul_f64 v[0:1], v[0:1], v[2:3]126; GFX10-NEXT: v_add_f64 v[0:1], -v[0:1], -v[4:5]127; GFX10-NEXT: s_setpc_b64 s[30:31]128;129; GFX10-CONTRACT-LABEL: test_f64_sub_ext_neg_mul:130; GFX10-CONTRACT: ; %bb.0: ; %entry131; GFX10-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)132; GFX10-CONTRACT-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], -v[4:5]133; GFX10-CONTRACT-NEXT: s_setpc_b64 s[30:31]134;135; GFX10-DENORM-LABEL: test_f64_sub_ext_neg_mul:136; GFX10-DENORM: ; %bb.0: ; %entry137; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)138; GFX10-DENORM-NEXT: v_mul_f64 v[0:1], v[0:1], v[2:3]139; GFX10-DENORM-NEXT: v_add_f64 v[0:1], -v[0:1], -v[4:5]140; GFX10-DENORM-NEXT: s_setpc_b64 s[30:31]141entry:142 %a = fmul double %x, %y143 %b = fneg double %a144 %c = fsub double %b, %z145 ret double %c146}147 148; fold (fsub (fneg (fmul, x, y)), z) -> (fma (fneg x), y, (fneg z))149define <4 x float> @test_v4f32_sub_ext_neg_mul(<4 x float> %x, <4 x float> %y, <4 x float> %z) {150; GFX9-LABEL: test_v4f32_sub_ext_neg_mul:151; GFX9: ; %bb.0: ; %entry152; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)153; GFX9-NEXT: v_mul_f32_e64 v0, v0, -v4154; GFX9-NEXT: v_mul_f32_e64 v1, v1, -v5155; GFX9-NEXT: v_mul_f32_e64 v2, v2, -v6156; GFX9-NEXT: v_mul_f32_e64 v3, v3, -v7157; GFX9-NEXT: v_sub_f32_e32 v0, v0, v8158; GFX9-NEXT: v_sub_f32_e32 v1, v1, v9159; GFX9-NEXT: v_sub_f32_e32 v2, v2, v10160; GFX9-NEXT: v_sub_f32_e32 v3, v3, v11161; GFX9-NEXT: s_setpc_b64 s[30:31]162;163; GFX9-CONTRACT-LABEL: test_v4f32_sub_ext_neg_mul:164; GFX9-CONTRACT: ; %bb.0: ; %entry165; GFX9-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)166; GFX9-CONTRACT-NEXT: v_fma_f32 v0, v0, -v4, -v8167; GFX9-CONTRACT-NEXT: v_fma_f32 v1, v1, -v5, -v9168; GFX9-CONTRACT-NEXT: v_fma_f32 v2, v2, -v6, -v10169; GFX9-CONTRACT-NEXT: v_fma_f32 v3, v3, -v7, -v11170; GFX9-CONTRACT-NEXT: s_setpc_b64 s[30:31]171;172; GFX9-DENORM-LABEL: test_v4f32_sub_ext_neg_mul:173; GFX9-DENORM: ; %bb.0: ; %entry174; GFX9-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)175; GFX9-DENORM-NEXT: v_mad_f32 v0, v0, -v4, -v8176; GFX9-DENORM-NEXT: v_mad_f32 v1, v1, -v5, -v9177; GFX9-DENORM-NEXT: v_mad_f32 v2, v2, -v6, -v10178; GFX9-DENORM-NEXT: v_mad_f32 v3, v3, -v7, -v11179; GFX9-DENORM-NEXT: s_setpc_b64 s[30:31]180;181; GFX10-LABEL: test_v4f32_sub_ext_neg_mul:182; GFX10: ; %bb.0: ; %entry183; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)184; GFX10-NEXT: v_mul_f32_e64 v0, v0, -v4185; GFX10-NEXT: v_mul_f32_e64 v1, v1, -v5186; GFX10-NEXT: v_mul_f32_e64 v2, v2, -v6187; GFX10-NEXT: v_mul_f32_e64 v3, v3, -v7188; GFX10-NEXT: v_sub_f32_e32 v0, v0, v8189; GFX10-NEXT: v_sub_f32_e32 v1, v1, v9190; GFX10-NEXT: v_sub_f32_e32 v2, v2, v10191; GFX10-NEXT: v_sub_f32_e32 v3, v3, v11192; GFX10-NEXT: s_setpc_b64 s[30:31]193;194; GFX10-CONTRACT-LABEL: test_v4f32_sub_ext_neg_mul:195; GFX10-CONTRACT: ; %bb.0: ; %entry196; GFX10-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)197; GFX10-CONTRACT-NEXT: v_fma_f32 v0, v0, -v4, -v8198; GFX10-CONTRACT-NEXT: v_fma_f32 v1, v1, -v5, -v9199; GFX10-CONTRACT-NEXT: v_fma_f32 v2, v2, -v6, -v10200; GFX10-CONTRACT-NEXT: v_fma_f32 v3, v3, -v7, -v11201; GFX10-CONTRACT-NEXT: s_setpc_b64 s[30:31]202;203; GFX10-DENORM-LABEL: test_v4f32_sub_ext_neg_mul:204; GFX10-DENORM: ; %bb.0: ; %entry205; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)206; GFX10-DENORM-NEXT: v_mad_f32 v0, v0, -v4, -v8207; GFX10-DENORM-NEXT: v_mad_f32 v1, v1, -v5, -v9208; GFX10-DENORM-NEXT: v_mad_f32 v2, v2, -v6, -v10209; GFX10-DENORM-NEXT: v_mad_f32 v3, v3, -v7, -v11210; GFX10-DENORM-NEXT: s_setpc_b64 s[30:31]211entry:212 %a = fmul <4 x float> %x, %y213 %b = fneg <4 x float> %a214 %c = fsub <4 x float> %b, %z215 ret <4 x float> %c216}217 218define <4 x half> @test_v4f16_sub_ext_neg_mul(<4 x half> %x, <4 x half> %y, <4 x half> %z) {219; GFX9-LABEL: test_v4f16_sub_ext_neg_mul:220; GFX9: ; %bb.0: ; %entry221; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)222; GFX9-NEXT: v_pk_mul_f16 v0, v0, v2 neg_lo:[0,1] neg_hi:[0,1]223; GFX9-NEXT: v_pk_mul_f16 v1, v1, v3 neg_lo:[0,1] neg_hi:[0,1]224; GFX9-NEXT: v_sub_f16_e32 v2, v0, v4225; GFX9-NEXT: v_sub_f16_sdwa v0, v0, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1226; GFX9-NEXT: v_sub_f16_e32 v3, v1, v5227; GFX9-NEXT: v_sub_f16_sdwa v1, v1, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1228; GFX9-NEXT: v_pack_b32_f16 v0, v2, v0229; GFX9-NEXT: v_pack_b32_f16 v1, v3, v1230; GFX9-NEXT: s_setpc_b64 s[30:31]231;232; GFX9-CONTRACT-LABEL: test_v4f16_sub_ext_neg_mul:233; GFX9-CONTRACT: ; %bb.0: ; %entry234; GFX9-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)235; GFX9-CONTRACT-NEXT: v_pk_fma_f16 v0, v0, v2, v4 neg_lo:[0,1,1] neg_hi:[0,1,1]236; GFX9-CONTRACT-NEXT: v_pk_fma_f16 v1, v1, v3, v5 neg_lo:[0,1,1] neg_hi:[0,1,1]237; GFX9-CONTRACT-NEXT: s_setpc_b64 s[30:31]238;239; GFX9-DENORM-LABEL: test_v4f16_sub_ext_neg_mul:240; GFX9-DENORM: ; %bb.0: ; %entry241; GFX9-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)242; GFX9-DENORM-NEXT: v_pk_mul_f16 v0, v0, v2 neg_lo:[0,1] neg_hi:[0,1]243; GFX9-DENORM-NEXT: v_pk_mul_f16 v1, v1, v3 neg_lo:[0,1] neg_hi:[0,1]244; GFX9-DENORM-NEXT: v_sub_f16_e32 v2, v0, v4245; GFX9-DENORM-NEXT: v_sub_f16_sdwa v0, v0, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1246; GFX9-DENORM-NEXT: v_sub_f16_e32 v3, v1, v5247; GFX9-DENORM-NEXT: v_sub_f16_sdwa v1, v1, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1248; GFX9-DENORM-NEXT: v_pack_b32_f16 v0, v2, v0249; GFX9-DENORM-NEXT: v_pack_b32_f16 v1, v3, v1250; GFX9-DENORM-NEXT: s_setpc_b64 s[30:31]251;252; GFX10-LABEL: test_v4f16_sub_ext_neg_mul:253; GFX10: ; %bb.0: ; %entry254; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)255; GFX10-NEXT: v_pk_mul_f16 v0, v0, v2 neg_lo:[0,1] neg_hi:[0,1]256; GFX10-NEXT: v_pk_mul_f16 v1, v1, v3 neg_lo:[0,1] neg_hi:[0,1]257; GFX10-NEXT: v_sub_f16_e32 v2, v0, v4258; GFX10-NEXT: v_sub_f16_sdwa v0, v0, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1259; GFX10-NEXT: v_sub_f16_e32 v3, v1, v5260; GFX10-NEXT: v_sub_f16_sdwa v1, v1, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1261; GFX10-NEXT: v_pack_b32_f16 v0, v2, v0262; GFX10-NEXT: v_pack_b32_f16 v1, v3, v1263; GFX10-NEXT: s_setpc_b64 s[30:31]264;265; GFX10-CONTRACT-LABEL: test_v4f16_sub_ext_neg_mul:266; GFX10-CONTRACT: ; %bb.0: ; %entry267; GFX10-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)268; GFX10-CONTRACT-NEXT: v_pk_fma_f16 v0, v0, v2, v4 neg_lo:[0,1,1] neg_hi:[0,1,1]269; GFX10-CONTRACT-NEXT: v_pk_fma_f16 v1, v1, v3, v5 neg_lo:[0,1,1] neg_hi:[0,1,1]270; GFX10-CONTRACT-NEXT: s_setpc_b64 s[30:31]271;272; GFX10-DENORM-LABEL: test_v4f16_sub_ext_neg_mul:273; GFX10-DENORM: ; %bb.0: ; %entry274; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)275; GFX10-DENORM-NEXT: v_pk_mul_f16 v0, v0, v2 neg_lo:[0,1] neg_hi:[0,1]276; GFX10-DENORM-NEXT: v_pk_mul_f16 v1, v1, v3 neg_lo:[0,1] neg_hi:[0,1]277; GFX10-DENORM-NEXT: v_sub_f16_e32 v2, v0, v4278; GFX10-DENORM-NEXT: v_sub_f16_sdwa v0, v0, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1279; GFX10-DENORM-NEXT: v_sub_f16_e32 v3, v1, v5280; GFX10-DENORM-NEXT: v_sub_f16_sdwa v1, v1, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1281; GFX10-DENORM-NEXT: v_pack_b32_f16 v0, v2, v0282; GFX10-DENORM-NEXT: v_pack_b32_f16 v1, v3, v1283; GFX10-DENORM-NEXT: s_setpc_b64 s[30:31]284entry:285 %a = fmul <4 x half> %x, %y286 %b = fneg <4 x half> %a287 %c = fsub <4 x half> %b, %z288 ret <4 x half> %c289}290 291define <4 x double> @test_v4f64_sub_ext_neg_mul(<4 x double> %x, <4 x double> %y, <4 x double> %z) {292; GFX9-LABEL: test_v4f64_sub_ext_neg_mul:293; GFX9: ; %bb.0: ; %entry294; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)295; GFX9-NEXT: v_mul_f64 v[0:1], v[0:1], v[8:9]296; GFX9-NEXT: v_mul_f64 v[2:3], v[2:3], v[10:11]297; GFX9-NEXT: v_mul_f64 v[4:5], v[4:5], v[12:13]298; GFX9-NEXT: v_mul_f64 v[6:7], v[6:7], v[14:15]299; GFX9-NEXT: v_add_f64 v[0:1], -v[0:1], -v[16:17]300; GFX9-NEXT: v_add_f64 v[2:3], -v[2:3], -v[18:19]301; GFX9-NEXT: v_add_f64 v[4:5], -v[4:5], -v[20:21]302; GFX9-NEXT: v_add_f64 v[6:7], -v[6:7], -v[22:23]303; GFX9-NEXT: s_setpc_b64 s[30:31]304;305; GFX9-CONTRACT-LABEL: test_v4f64_sub_ext_neg_mul:306; GFX9-CONTRACT: ; %bb.0: ; %entry307; GFX9-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)308; GFX9-CONTRACT-NEXT: v_fma_f64 v[0:1], -v[0:1], v[8:9], -v[16:17]309; GFX9-CONTRACT-NEXT: v_fma_f64 v[2:3], -v[2:3], v[10:11], -v[18:19]310; GFX9-CONTRACT-NEXT: v_fma_f64 v[4:5], -v[4:5], v[12:13], -v[20:21]311; GFX9-CONTRACT-NEXT: v_fma_f64 v[6:7], -v[6:7], v[14:15], -v[22:23]312; GFX9-CONTRACT-NEXT: s_setpc_b64 s[30:31]313;314; GFX9-DENORM-LABEL: test_v4f64_sub_ext_neg_mul:315; GFX9-DENORM: ; %bb.0: ; %entry316; GFX9-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)317; GFX9-DENORM-NEXT: v_mul_f64 v[0:1], v[0:1], v[8:9]318; GFX9-DENORM-NEXT: v_mul_f64 v[2:3], v[2:3], v[10:11]319; GFX9-DENORM-NEXT: v_mul_f64 v[4:5], v[4:5], v[12:13]320; GFX9-DENORM-NEXT: v_mul_f64 v[6:7], v[6:7], v[14:15]321; GFX9-DENORM-NEXT: v_add_f64 v[0:1], -v[0:1], -v[16:17]322; GFX9-DENORM-NEXT: v_add_f64 v[2:3], -v[2:3], -v[18:19]323; GFX9-DENORM-NEXT: v_add_f64 v[4:5], -v[4:5], -v[20:21]324; GFX9-DENORM-NEXT: v_add_f64 v[6:7], -v[6:7], -v[22:23]325; GFX9-DENORM-NEXT: s_setpc_b64 s[30:31]326;327; GFX10-LABEL: test_v4f64_sub_ext_neg_mul:328; GFX10: ; %bb.0: ; %entry329; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)330; GFX10-NEXT: v_mul_f64 v[0:1], v[0:1], v[8:9]331; GFX10-NEXT: v_mul_f64 v[2:3], v[2:3], v[10:11]332; GFX10-NEXT: v_mul_f64 v[4:5], v[4:5], v[12:13]333; GFX10-NEXT: v_mul_f64 v[6:7], v[6:7], v[14:15]334; GFX10-NEXT: v_add_f64 v[0:1], -v[0:1], -v[16:17]335; GFX10-NEXT: v_add_f64 v[2:3], -v[2:3], -v[18:19]336; GFX10-NEXT: v_add_f64 v[4:5], -v[4:5], -v[20:21]337; GFX10-NEXT: v_add_f64 v[6:7], -v[6:7], -v[22:23]338; GFX10-NEXT: s_setpc_b64 s[30:31]339;340; GFX10-CONTRACT-LABEL: test_v4f64_sub_ext_neg_mul:341; GFX10-CONTRACT: ; %bb.0: ; %entry342; GFX10-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)343; GFX10-CONTRACT-NEXT: v_fma_f64 v[0:1], -v[0:1], v[8:9], -v[16:17]344; GFX10-CONTRACT-NEXT: v_fma_f64 v[2:3], -v[2:3], v[10:11], -v[18:19]345; GFX10-CONTRACT-NEXT: v_fma_f64 v[4:5], -v[4:5], v[12:13], -v[20:21]346; GFX10-CONTRACT-NEXT: v_fma_f64 v[6:7], -v[6:7], v[14:15], -v[22:23]347; GFX10-CONTRACT-NEXT: s_setpc_b64 s[30:31]348;349; GFX10-DENORM-LABEL: test_v4f64_sub_ext_neg_mul:350; GFX10-DENORM: ; %bb.0: ; %entry351; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)352; GFX10-DENORM-NEXT: v_mul_f64 v[0:1], v[0:1], v[8:9]353; GFX10-DENORM-NEXT: v_mul_f64 v[2:3], v[2:3], v[10:11]354; GFX10-DENORM-NEXT: v_mul_f64 v[4:5], v[4:5], v[12:13]355; GFX10-DENORM-NEXT: v_mul_f64 v[6:7], v[6:7], v[14:15]356; GFX10-DENORM-NEXT: v_add_f64 v[0:1], -v[0:1], -v[16:17]357; GFX10-DENORM-NEXT: v_add_f64 v[2:3], -v[2:3], -v[18:19]358; GFX10-DENORM-NEXT: v_add_f64 v[4:5], -v[4:5], -v[20:21]359; GFX10-DENORM-NEXT: v_add_f64 v[6:7], -v[6:7], -v[22:23]360; GFX10-DENORM-NEXT: s_setpc_b64 s[30:31]361entry:362 %a = fmul <4 x double> %x, %y363 %b = fneg <4 x double> %a364 %c = fsub <4 x double> %b, %z365 ret <4 x double> %c366}367