939 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; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -fp-contract=fast < %s | FileCheck -check-prefixes=GFX11-CONTRACT %s9; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 --denormal-fp-math=preserve-sign < %s | FileCheck -check-prefixes=GFX11-DENORM %s10 11; fold (fsub (fmul x, y), z) -> (fma x, y, (fneg z))12; fold (fsub x, (fmul y, z)) -> (fma (fneg y), z, x)13 14define float @test_f32_sub_mul(float %x, float %y, float %z) {15; GFX9-LABEL: test_f32_sub_mul:16; GFX9: ; %bb.0: ; %.entry17; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)18; GFX9-NEXT: v_mul_f32_e32 v0, v0, v119; GFX9-NEXT: v_sub_f32_e32 v0, v0, v220; GFX9-NEXT: s_setpc_b64 s[30:31]21;22; GFX9-CONTRACT-LABEL: test_f32_sub_mul:23; GFX9-CONTRACT: ; %bb.0: ; %.entry24; GFX9-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)25; GFX9-CONTRACT-NEXT: v_fma_f32 v0, v0, v1, -v226; GFX9-CONTRACT-NEXT: s_setpc_b64 s[30:31]27;28; GFX9-DENORM-LABEL: test_f32_sub_mul:29; GFX9-DENORM: ; %bb.0: ; %.entry30; GFX9-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)31; GFX9-DENORM-NEXT: v_mad_f32 v0, v0, v1, -v232; GFX9-DENORM-NEXT: s_setpc_b64 s[30:31]33;34; GFX10-LABEL: test_f32_sub_mul:35; GFX10: ; %bb.0: ; %.entry36; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)37; GFX10-NEXT: v_mul_f32_e32 v0, v0, v138; GFX10-NEXT: v_sub_f32_e32 v0, v0, v239; GFX10-NEXT: s_setpc_b64 s[30:31]40;41; GFX10-CONTRACT-LABEL: test_f32_sub_mul:42; GFX10-CONTRACT: ; %bb.0: ; %.entry43; GFX10-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)44; GFX10-CONTRACT-NEXT: v_fma_f32 v0, v0, v1, -v245; GFX10-CONTRACT-NEXT: s_setpc_b64 s[30:31]46;47; GFX10-DENORM-LABEL: test_f32_sub_mul:48; GFX10-DENORM: ; %bb.0: ; %.entry49; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)50; GFX10-DENORM-NEXT: v_mad_f32 v0, v0, v1, -v251; GFX10-DENORM-NEXT: s_setpc_b64 s[30:31]52;53; GFX11-CONTRACT-LABEL: test_f32_sub_mul:54; GFX11-CONTRACT: ; %bb.0: ; %.entry55; GFX11-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)56; GFX11-CONTRACT-NEXT: v_fma_f32 v0, v0, v1, -v257; GFX11-CONTRACT-NEXT: s_setpc_b64 s[30:31]58;59; GFX11-DENORM-LABEL: test_f32_sub_mul:60; GFX11-DENORM: ; %bb.0: ; %.entry61; GFX11-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)62; GFX11-DENORM-NEXT: v_mul_f32_e32 v0, v0, v163; GFX11-DENORM-NEXT: s_delay_alu instid0(VALU_DEP_1)64; GFX11-DENORM-NEXT: v_sub_f32_e32 v0, v0, v265; GFX11-DENORM-NEXT: s_setpc_b64 s[30:31]66.entry:67 %a = fmul float %x, %y68 %b = fsub float %a, %z69 ret float %b70}71 72define float @test_f32_sub_mul_rhs(float %x, float %y, float %z) {73; GFX9-LABEL: test_f32_sub_mul_rhs:74; GFX9: ; %bb.0: ; %.entry75; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)76; GFX9-NEXT: v_mul_f32_e32 v0, v0, v177; GFX9-NEXT: v_sub_f32_e32 v0, v2, v078; GFX9-NEXT: s_setpc_b64 s[30:31]79;80; GFX9-CONTRACT-LABEL: test_f32_sub_mul_rhs:81; GFX9-CONTRACT: ; %bb.0: ; %.entry82; GFX9-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)83; GFX9-CONTRACT-NEXT: v_fma_f32 v0, -v0, v1, v284; GFX9-CONTRACT-NEXT: s_setpc_b64 s[30:31]85;86; GFX9-DENORM-LABEL: test_f32_sub_mul_rhs:87; GFX9-DENORM: ; %bb.0: ; %.entry88; GFX9-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)89; GFX9-DENORM-NEXT: v_mad_f32 v0, -v0, v1, v290; GFX9-DENORM-NEXT: s_setpc_b64 s[30:31]91;92; GFX10-LABEL: test_f32_sub_mul_rhs:93; GFX10: ; %bb.0: ; %.entry94; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)95; GFX10-NEXT: v_mul_f32_e32 v0, v0, v196; GFX10-NEXT: v_sub_f32_e32 v0, v2, v097; GFX10-NEXT: s_setpc_b64 s[30:31]98;99; GFX10-CONTRACT-LABEL: test_f32_sub_mul_rhs:100; GFX10-CONTRACT: ; %bb.0: ; %.entry101; GFX10-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)102; GFX10-CONTRACT-NEXT: v_fma_f32 v0, -v0, v1, v2103; GFX10-CONTRACT-NEXT: s_setpc_b64 s[30:31]104;105; GFX10-DENORM-LABEL: test_f32_sub_mul_rhs:106; GFX10-DENORM: ; %bb.0: ; %.entry107; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)108; GFX10-DENORM-NEXT: v_mad_f32 v0, -v0, v1, v2109; GFX10-DENORM-NEXT: s_setpc_b64 s[30:31]110;111; GFX11-CONTRACT-LABEL: test_f32_sub_mul_rhs:112; GFX11-CONTRACT: ; %bb.0: ; %.entry113; GFX11-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)114; GFX11-CONTRACT-NEXT: v_fma_f32 v0, -v0, v1, v2115; GFX11-CONTRACT-NEXT: s_setpc_b64 s[30:31]116;117; GFX11-DENORM-LABEL: test_f32_sub_mul_rhs:118; GFX11-DENORM: ; %bb.0: ; %.entry119; GFX11-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)120; GFX11-DENORM-NEXT: v_mul_f32_e32 v0, v0, v1121; GFX11-DENORM-NEXT: s_delay_alu instid0(VALU_DEP_1)122; GFX11-DENORM-NEXT: v_sub_f32_e32 v0, v2, v0123; GFX11-DENORM-NEXT: s_setpc_b64 s[30:31]124.entry:125 %a = fmul float %x, %y126 %b = fsub float %z, %a127 ret float %b128}129 130define half @test_half_sub_mul(half %x, half %y, half %z) {131; GFX9-LABEL: test_half_sub_mul:132; GFX9: ; %bb.0: ; %.entry133; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)134; GFX9-NEXT: v_mul_f16_e32 v0, v0, v1135; GFX9-NEXT: v_sub_f16_e32 v0, v0, v2136; GFX9-NEXT: s_setpc_b64 s[30:31]137;138; GFX9-CONTRACT-LABEL: test_half_sub_mul:139; GFX9-CONTRACT: ; %bb.0: ; %.entry140; GFX9-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)141; GFX9-CONTRACT-NEXT: v_fma_f16 v0, v0, v1, -v2142; GFX9-CONTRACT-NEXT: s_setpc_b64 s[30:31]143;144; GFX9-DENORM-LABEL: test_half_sub_mul:145; GFX9-DENORM: ; %bb.0: ; %.entry146; GFX9-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)147; GFX9-DENORM-NEXT: v_mad_legacy_f16 v0, v0, v1, -v2148; GFX9-DENORM-NEXT: s_setpc_b64 s[30:31]149;150; GFX10-LABEL: test_half_sub_mul:151; GFX10: ; %bb.0: ; %.entry152; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)153; GFX10-NEXT: v_mul_f16_e32 v0, v0, v1154; GFX10-NEXT: v_sub_f16_e32 v0, v0, v2155; GFX10-NEXT: s_setpc_b64 s[30:31]156;157; GFX10-CONTRACT-LABEL: test_half_sub_mul:158; GFX10-CONTRACT: ; %bb.0: ; %.entry159; GFX10-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)160; GFX10-CONTRACT-NEXT: v_fma_f16 v0, v0, v1, -v2161; GFX10-CONTRACT-NEXT: s_setpc_b64 s[30:31]162;163; GFX10-DENORM-LABEL: test_half_sub_mul:164; GFX10-DENORM: ; %bb.0: ; %.entry165; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)166; GFX10-DENORM-NEXT: v_mul_f16_e32 v0, v0, v1167; GFX10-DENORM-NEXT: v_sub_f16_e32 v0, v0, v2168; GFX10-DENORM-NEXT: s_setpc_b64 s[30:31]169;170; GFX11-CONTRACT-LABEL: test_half_sub_mul:171; GFX11-CONTRACT: ; %bb.0: ; %.entry172; GFX11-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)173; GFX11-CONTRACT-NEXT: v_fma_f16 v0, v0, v1, -v2174; GFX11-CONTRACT-NEXT: s_setpc_b64 s[30:31]175;176; GFX11-DENORM-LABEL: test_half_sub_mul:177; GFX11-DENORM: ; %bb.0: ; %.entry178; GFX11-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)179; GFX11-DENORM-NEXT: v_mul_f16_e32 v0, v0, v1180; GFX11-DENORM-NEXT: s_delay_alu instid0(VALU_DEP_1)181; GFX11-DENORM-NEXT: v_sub_f16_e32 v0, v0, v2182; GFX11-DENORM-NEXT: s_setpc_b64 s[30:31]183.entry:184 %a = fmul half %x, %y185 %b = fsub half %a, %z186 ret half %b187}188 189define half @test_half_sub_mul_rhs(half %x, half %y, half %z) {190; GFX9-LABEL: test_half_sub_mul_rhs:191; GFX9: ; %bb.0: ; %.entry192; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)193; GFX9-NEXT: v_mul_f16_e32 v0, v0, v1194; GFX9-NEXT: v_sub_f16_e32 v0, v2, v0195; GFX9-NEXT: s_setpc_b64 s[30:31]196;197; GFX9-CONTRACT-LABEL: test_half_sub_mul_rhs:198; GFX9-CONTRACT: ; %bb.0: ; %.entry199; GFX9-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)200; GFX9-CONTRACT-NEXT: v_fma_f16 v0, -v0, v1, v2201; GFX9-CONTRACT-NEXT: s_setpc_b64 s[30:31]202;203; GFX9-DENORM-LABEL: test_half_sub_mul_rhs:204; GFX9-DENORM: ; %bb.0: ; %.entry205; GFX9-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)206; GFX9-DENORM-NEXT: v_mad_legacy_f16 v0, -v0, v1, v2207; GFX9-DENORM-NEXT: s_setpc_b64 s[30:31]208;209; GFX10-LABEL: test_half_sub_mul_rhs:210; GFX10: ; %bb.0: ; %.entry211; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)212; GFX10-NEXT: v_mul_f16_e32 v0, v0, v1213; GFX10-NEXT: v_sub_f16_e32 v0, v2, v0214; GFX10-NEXT: s_setpc_b64 s[30:31]215;216; GFX10-CONTRACT-LABEL: test_half_sub_mul_rhs:217; GFX10-CONTRACT: ; %bb.0: ; %.entry218; GFX10-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)219; GFX10-CONTRACT-NEXT: v_fma_f16 v0, -v0, v1, v2220; GFX10-CONTRACT-NEXT: s_setpc_b64 s[30:31]221;222; GFX10-DENORM-LABEL: test_half_sub_mul_rhs:223; GFX10-DENORM: ; %bb.0: ; %.entry224; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)225; GFX10-DENORM-NEXT: v_mul_f16_e32 v0, v0, v1226; GFX10-DENORM-NEXT: v_sub_f16_e32 v0, v2, v0227; GFX10-DENORM-NEXT: s_setpc_b64 s[30:31]228;229; GFX11-CONTRACT-LABEL: test_half_sub_mul_rhs:230; GFX11-CONTRACT: ; %bb.0: ; %.entry231; GFX11-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)232; GFX11-CONTRACT-NEXT: v_fma_f16 v0, -v0, v1, v2233; GFX11-CONTRACT-NEXT: s_setpc_b64 s[30:31]234;235; GFX11-DENORM-LABEL: test_half_sub_mul_rhs:236; GFX11-DENORM: ; %bb.0: ; %.entry237; GFX11-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)238; GFX11-DENORM-NEXT: v_mul_f16_e32 v0, v0, v1239; GFX11-DENORM-NEXT: s_delay_alu instid0(VALU_DEP_1)240; GFX11-DENORM-NEXT: v_sub_f16_e32 v0, v2, v0241; GFX11-DENORM-NEXT: s_setpc_b64 s[30:31]242.entry:243 %a = fmul half %x, %y244 %b = fsub half %z, %a245 ret half %b246}247 248define double @test_double_sub_mul(double %x, double %y, double %z) {249; GFX9-LABEL: test_double_sub_mul:250; GFX9: ; %bb.0: ; %.entry251; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)252; GFX9-NEXT: v_mul_f64 v[0:1], v[0:1], v[2:3]253; GFX9-NEXT: v_add_f64 v[0:1], v[0:1], -v[4:5]254; GFX9-NEXT: s_setpc_b64 s[30:31]255;256; GFX9-CONTRACT-LABEL: test_double_sub_mul:257; GFX9-CONTRACT: ; %bb.0: ; %.entry258; GFX9-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)259; GFX9-CONTRACT-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], -v[4:5]260; GFX9-CONTRACT-NEXT: s_setpc_b64 s[30:31]261;262; GFX9-DENORM-LABEL: test_double_sub_mul:263; GFX9-DENORM: ; %bb.0: ; %.entry264; GFX9-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)265; GFX9-DENORM-NEXT: v_mul_f64 v[0:1], v[0:1], v[2:3]266; GFX9-DENORM-NEXT: v_add_f64 v[0:1], v[0:1], -v[4:5]267; GFX9-DENORM-NEXT: s_setpc_b64 s[30:31]268;269; GFX10-LABEL: test_double_sub_mul:270; GFX10: ; %bb.0: ; %.entry271; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)272; GFX10-NEXT: v_mul_f64 v[0:1], v[0:1], v[2:3]273; GFX10-NEXT: v_add_f64 v[0:1], v[0:1], -v[4:5]274; GFX10-NEXT: s_setpc_b64 s[30:31]275;276; GFX10-CONTRACT-LABEL: test_double_sub_mul:277; GFX10-CONTRACT: ; %bb.0: ; %.entry278; GFX10-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)279; GFX10-CONTRACT-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], -v[4:5]280; GFX10-CONTRACT-NEXT: s_setpc_b64 s[30:31]281;282; GFX10-DENORM-LABEL: test_double_sub_mul:283; GFX10-DENORM: ; %bb.0: ; %.entry284; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)285; GFX10-DENORM-NEXT: v_mul_f64 v[0:1], v[0:1], v[2:3]286; GFX10-DENORM-NEXT: v_add_f64 v[0:1], v[0:1], -v[4:5]287; GFX10-DENORM-NEXT: s_setpc_b64 s[30:31]288;289; GFX11-CONTRACT-LABEL: test_double_sub_mul:290; GFX11-CONTRACT: ; %bb.0: ; %.entry291; GFX11-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)292; GFX11-CONTRACT-NEXT: v_fma_f64 v[0:1], v[0:1], v[2:3], -v[4:5]293; GFX11-CONTRACT-NEXT: s_setpc_b64 s[30:31]294;295; GFX11-DENORM-LABEL: test_double_sub_mul:296; GFX11-DENORM: ; %bb.0: ; %.entry297; GFX11-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)298; GFX11-DENORM-NEXT: v_mul_f64 v[0:1], v[0:1], v[2:3]299; GFX11-DENORM-NEXT: s_delay_alu instid0(VALU_DEP_1)300; GFX11-DENORM-NEXT: v_add_f64 v[0:1], v[0:1], -v[4:5]301; GFX11-DENORM-NEXT: s_setpc_b64 s[30:31]302.entry:303 %a = fmul double %x, %y304 %b = fsub double %a, %z305 ret double %b306}307 308define double @test_double_sub_mul_rhs(double %x, double %y, double %z) {309; GFX9-LABEL: test_double_sub_mul_rhs:310; GFX9: ; %bb.0: ; %.entry311; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)312; GFX9-NEXT: v_mul_f64 v[0:1], v[0:1], v[2:3]313; GFX9-NEXT: v_add_f64 v[0:1], v[4:5], -v[0:1]314; GFX9-NEXT: s_setpc_b64 s[30:31]315;316; GFX9-CONTRACT-LABEL: test_double_sub_mul_rhs:317; GFX9-CONTRACT: ; %bb.0: ; %.entry318; GFX9-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)319; GFX9-CONTRACT-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], v[4:5]320; GFX9-CONTRACT-NEXT: s_setpc_b64 s[30:31]321;322; GFX9-DENORM-LABEL: test_double_sub_mul_rhs:323; GFX9-DENORM: ; %bb.0: ; %.entry324; GFX9-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)325; GFX9-DENORM-NEXT: v_mul_f64 v[0:1], v[0:1], v[2:3]326; GFX9-DENORM-NEXT: v_add_f64 v[0:1], v[4:5], -v[0:1]327; GFX9-DENORM-NEXT: s_setpc_b64 s[30:31]328;329; GFX10-LABEL: test_double_sub_mul_rhs:330; GFX10: ; %bb.0: ; %.entry331; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)332; GFX10-NEXT: v_mul_f64 v[0:1], v[0:1], v[2:3]333; GFX10-NEXT: v_add_f64 v[0:1], v[4:5], -v[0:1]334; GFX10-NEXT: s_setpc_b64 s[30:31]335;336; GFX10-CONTRACT-LABEL: test_double_sub_mul_rhs:337; GFX10-CONTRACT: ; %bb.0: ; %.entry338; GFX10-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)339; GFX10-CONTRACT-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], v[4:5]340; GFX10-CONTRACT-NEXT: s_setpc_b64 s[30:31]341;342; GFX10-DENORM-LABEL: test_double_sub_mul_rhs:343; GFX10-DENORM: ; %bb.0: ; %.entry344; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)345; GFX10-DENORM-NEXT: v_mul_f64 v[0:1], v[0:1], v[2:3]346; GFX10-DENORM-NEXT: v_add_f64 v[0:1], v[4:5], -v[0:1]347; GFX10-DENORM-NEXT: s_setpc_b64 s[30:31]348;349; GFX11-CONTRACT-LABEL: test_double_sub_mul_rhs:350; GFX11-CONTRACT: ; %bb.0: ; %.entry351; GFX11-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)352; GFX11-CONTRACT-NEXT: v_fma_f64 v[0:1], -v[0:1], v[2:3], v[4:5]353; GFX11-CONTRACT-NEXT: s_setpc_b64 s[30:31]354;355; GFX11-DENORM-LABEL: test_double_sub_mul_rhs:356; GFX11-DENORM: ; %bb.0: ; %.entry357; GFX11-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)358; GFX11-DENORM-NEXT: v_mul_f64 v[0:1], v[0:1], v[2:3]359; GFX11-DENORM-NEXT: s_delay_alu instid0(VALU_DEP_1)360; GFX11-DENORM-NEXT: v_add_f64 v[0:1], v[4:5], -v[0:1]361; GFX11-DENORM-NEXT: s_setpc_b64 s[30:31]362.entry:363 %a = fmul double %x, %y364 %b = fsub double %z, %a365 ret double %b366}367 368define <4 x float> @test_v4f32_sub_mul(<4 x float> %x, <4 x float> %y, <4 x float> %z) {369; GFX9-LABEL: test_v4f32_sub_mul:370; GFX9: ; %bb.0: ; %.entry371; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)372; GFX9-NEXT: v_mul_f32_e32 v0, v0, v4373; GFX9-NEXT: v_mul_f32_e32 v1, v1, v5374; GFX9-NEXT: v_mul_f32_e32 v2, v2, v6375; GFX9-NEXT: v_mul_f32_e32 v3, v3, v7376; GFX9-NEXT: v_sub_f32_e32 v0, v0, v8377; GFX9-NEXT: v_sub_f32_e32 v1, v1, v9378; GFX9-NEXT: v_sub_f32_e32 v2, v2, v10379; GFX9-NEXT: v_sub_f32_e32 v3, v3, v11380; GFX9-NEXT: s_setpc_b64 s[30:31]381;382; GFX9-CONTRACT-LABEL: test_v4f32_sub_mul:383; GFX9-CONTRACT: ; %bb.0: ; %.entry384; GFX9-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)385; GFX9-CONTRACT-NEXT: v_fma_f32 v0, v0, v4, -v8386; GFX9-CONTRACT-NEXT: v_fma_f32 v1, v1, v5, -v9387; GFX9-CONTRACT-NEXT: v_fma_f32 v2, v2, v6, -v10388; GFX9-CONTRACT-NEXT: v_fma_f32 v3, v3, v7, -v11389; GFX9-CONTRACT-NEXT: s_setpc_b64 s[30:31]390;391; GFX9-DENORM-LABEL: test_v4f32_sub_mul:392; GFX9-DENORM: ; %bb.0: ; %.entry393; GFX9-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)394; GFX9-DENORM-NEXT: v_mad_f32 v0, v0, v4, -v8395; GFX9-DENORM-NEXT: v_mad_f32 v1, v1, v5, -v9396; GFX9-DENORM-NEXT: v_mad_f32 v2, v2, v6, -v10397; GFX9-DENORM-NEXT: v_mad_f32 v3, v3, v7, -v11398; GFX9-DENORM-NEXT: s_setpc_b64 s[30:31]399;400; GFX10-LABEL: test_v4f32_sub_mul:401; GFX10: ; %bb.0: ; %.entry402; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)403; GFX10-NEXT: v_mul_f32_e32 v0, v0, v4404; GFX10-NEXT: v_mul_f32_e32 v1, v1, v5405; GFX10-NEXT: v_mul_f32_e32 v2, v2, v6406; GFX10-NEXT: v_mul_f32_e32 v3, v3, v7407; GFX10-NEXT: v_sub_f32_e32 v0, v0, v8408; GFX10-NEXT: v_sub_f32_e32 v1, v1, v9409; GFX10-NEXT: v_sub_f32_e32 v2, v2, v10410; GFX10-NEXT: v_sub_f32_e32 v3, v3, v11411; GFX10-NEXT: s_setpc_b64 s[30:31]412;413; GFX10-CONTRACT-LABEL: test_v4f32_sub_mul:414; GFX10-CONTRACT: ; %bb.0: ; %.entry415; GFX10-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)416; GFX10-CONTRACT-NEXT: v_fma_f32 v0, v0, v4, -v8417; GFX10-CONTRACT-NEXT: v_fma_f32 v1, v1, v5, -v9418; GFX10-CONTRACT-NEXT: v_fma_f32 v2, v2, v6, -v10419; GFX10-CONTRACT-NEXT: v_fma_f32 v3, v3, v7, -v11420; GFX10-CONTRACT-NEXT: s_setpc_b64 s[30:31]421;422; GFX10-DENORM-LABEL: test_v4f32_sub_mul:423; GFX10-DENORM: ; %bb.0: ; %.entry424; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)425; GFX10-DENORM-NEXT: v_mad_f32 v0, v0, v4, -v8426; GFX10-DENORM-NEXT: v_mad_f32 v1, v1, v5, -v9427; GFX10-DENORM-NEXT: v_mad_f32 v2, v2, v6, -v10428; GFX10-DENORM-NEXT: v_mad_f32 v3, v3, v7, -v11429; GFX10-DENORM-NEXT: s_setpc_b64 s[30:31]430;431; GFX11-CONTRACT-LABEL: test_v4f32_sub_mul:432; GFX11-CONTRACT: ; %bb.0: ; %.entry433; GFX11-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)434; GFX11-CONTRACT-NEXT: v_fma_f32 v0, v0, v4, -v8435; GFX11-CONTRACT-NEXT: v_fma_f32 v1, v1, v5, -v9436; GFX11-CONTRACT-NEXT: v_fma_f32 v2, v2, v6, -v10437; GFX11-CONTRACT-NEXT: v_fma_f32 v3, v3, v7, -v11438; GFX11-CONTRACT-NEXT: s_setpc_b64 s[30:31]439;440; GFX11-DENORM-LABEL: test_v4f32_sub_mul:441; GFX11-DENORM: ; %bb.0: ; %.entry442; GFX11-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)443; GFX11-DENORM-NEXT: v_dual_mul_f32 v0, v0, v4 :: v_dual_mul_f32 v1, v1, v5444; GFX11-DENORM-NEXT: v_dual_mul_f32 v2, v2, v6 :: v_dual_mul_f32 v3, v3, v7445; GFX11-DENORM-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)446; GFX11-DENORM-NEXT: v_dual_sub_f32 v0, v0, v8 :: v_dual_sub_f32 v1, v1, v9447; GFX11-DENORM-NEXT: v_dual_sub_f32 v2, v2, v10 :: v_dual_sub_f32 v3, v3, v11448; GFX11-DENORM-NEXT: s_setpc_b64 s[30:31]449.entry:450 %a = fmul <4 x float> %x, %y451 %b = fsub <4 x float> %a, %z452 ret <4 x float> %b453}454 455define <4 x float> @test_v4f32_sub_mul_rhs(<4 x float> %x, <4 x float> %y, <4 x float> %z) {456; GFX9-LABEL: test_v4f32_sub_mul_rhs:457; GFX9: ; %bb.0: ; %.entry458; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)459; GFX9-NEXT: v_mul_f32_e32 v0, v0, v4460; GFX9-NEXT: v_mul_f32_e32 v1, v1, v5461; GFX9-NEXT: v_mul_f32_e32 v2, v2, v6462; GFX9-NEXT: v_mul_f32_e32 v3, v3, v7463; GFX9-NEXT: v_sub_f32_e32 v0, v8, v0464; GFX9-NEXT: v_sub_f32_e32 v1, v9, v1465; GFX9-NEXT: v_sub_f32_e32 v2, v10, v2466; GFX9-NEXT: v_sub_f32_e32 v3, v11, v3467; GFX9-NEXT: s_setpc_b64 s[30:31]468;469; GFX9-CONTRACT-LABEL: test_v4f32_sub_mul_rhs:470; GFX9-CONTRACT: ; %bb.0: ; %.entry471; GFX9-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)472; GFX9-CONTRACT-NEXT: v_fma_f32 v0, -v0, v4, v8473; GFX9-CONTRACT-NEXT: v_fma_f32 v1, -v1, v5, v9474; GFX9-CONTRACT-NEXT: v_fma_f32 v2, -v2, v6, v10475; GFX9-CONTRACT-NEXT: v_fma_f32 v3, -v3, v7, v11476; GFX9-CONTRACT-NEXT: s_setpc_b64 s[30:31]477;478; GFX9-DENORM-LABEL: test_v4f32_sub_mul_rhs:479; GFX9-DENORM: ; %bb.0: ; %.entry480; GFX9-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)481; GFX9-DENORM-NEXT: v_mad_f32 v0, -v0, v4, v8482; GFX9-DENORM-NEXT: v_mad_f32 v1, -v1, v5, v9483; GFX9-DENORM-NEXT: v_mad_f32 v2, -v2, v6, v10484; GFX9-DENORM-NEXT: v_mad_f32 v3, -v3, v7, v11485; GFX9-DENORM-NEXT: s_setpc_b64 s[30:31]486;487; GFX10-LABEL: test_v4f32_sub_mul_rhs:488; GFX10: ; %bb.0: ; %.entry489; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)490; GFX10-NEXT: v_mul_f32_e32 v0, v0, v4491; GFX10-NEXT: v_mul_f32_e32 v1, v1, v5492; GFX10-NEXT: v_mul_f32_e32 v2, v2, v6493; GFX10-NEXT: v_mul_f32_e32 v3, v3, v7494; GFX10-NEXT: v_sub_f32_e32 v0, v8, v0495; GFX10-NEXT: v_sub_f32_e32 v1, v9, v1496; GFX10-NEXT: v_sub_f32_e32 v2, v10, v2497; GFX10-NEXT: v_sub_f32_e32 v3, v11, v3498; GFX10-NEXT: s_setpc_b64 s[30:31]499;500; GFX10-CONTRACT-LABEL: test_v4f32_sub_mul_rhs:501; GFX10-CONTRACT: ; %bb.0: ; %.entry502; GFX10-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)503; GFX10-CONTRACT-NEXT: v_fma_f32 v0, -v0, v4, v8504; GFX10-CONTRACT-NEXT: v_fma_f32 v1, -v1, v5, v9505; GFX10-CONTRACT-NEXT: v_fma_f32 v2, -v2, v6, v10506; GFX10-CONTRACT-NEXT: v_fma_f32 v3, -v3, v7, v11507; GFX10-CONTRACT-NEXT: s_setpc_b64 s[30:31]508;509; GFX10-DENORM-LABEL: test_v4f32_sub_mul_rhs:510; GFX10-DENORM: ; %bb.0: ; %.entry511; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)512; GFX10-DENORM-NEXT: v_mad_f32 v0, -v0, v4, v8513; GFX10-DENORM-NEXT: v_mad_f32 v1, -v1, v5, v9514; GFX10-DENORM-NEXT: v_mad_f32 v2, -v2, v6, v10515; GFX10-DENORM-NEXT: v_mad_f32 v3, -v3, v7, v11516; GFX10-DENORM-NEXT: s_setpc_b64 s[30:31]517;518; GFX11-CONTRACT-LABEL: test_v4f32_sub_mul_rhs:519; GFX11-CONTRACT: ; %bb.0: ; %.entry520; GFX11-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)521; GFX11-CONTRACT-NEXT: v_fma_f32 v0, -v0, v4, v8522; GFX11-CONTRACT-NEXT: v_fma_f32 v1, -v1, v5, v9523; GFX11-CONTRACT-NEXT: v_fma_f32 v2, -v2, v6, v10524; GFX11-CONTRACT-NEXT: v_fma_f32 v3, -v3, v7, v11525; GFX11-CONTRACT-NEXT: s_setpc_b64 s[30:31]526;527; GFX11-DENORM-LABEL: test_v4f32_sub_mul_rhs:528; GFX11-DENORM: ; %bb.0: ; %.entry529; GFX11-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)530; GFX11-DENORM-NEXT: v_dual_mul_f32 v0, v0, v4 :: v_dual_mul_f32 v1, v1, v5531; GFX11-DENORM-NEXT: v_dual_mul_f32 v2, v2, v6 :: v_dual_mul_f32 v3, v3, v7532; GFX11-DENORM-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)533; GFX11-DENORM-NEXT: v_dual_sub_f32 v0, v8, v0 :: v_dual_sub_f32 v1, v9, v1534; GFX11-DENORM-NEXT: v_dual_sub_f32 v2, v10, v2 :: v_dual_sub_f32 v3, v11, v3535; GFX11-DENORM-NEXT: s_setpc_b64 s[30:31]536.entry:537 %a = fmul <4 x float> %x, %y538 %b = fsub <4 x float> %z, %a539 ret <4 x float> %b540}541 542define <4 x half> @test_v4f16_sub_mul(<4 x half> %x, <4 x half> %y, <4 x half> %z) {543; GFX9-LABEL: test_v4f16_sub_mul:544; GFX9: ; %bb.0: ; %.entry545; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)546; GFX9-NEXT: v_pk_mul_f16 v0, v0, v2547; GFX9-NEXT: v_pk_mul_f16 v1, v1, v3548; GFX9-NEXT: v_sub_f16_e32 v2, v0, v4549; GFX9-NEXT: v_sub_f16_sdwa v0, v0, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1550; GFX9-NEXT: v_sub_f16_e32 v3, v1, v5551; GFX9-NEXT: v_sub_f16_sdwa v1, v1, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1552; GFX9-NEXT: v_pack_b32_f16 v0, v2, v0553; GFX9-NEXT: v_pack_b32_f16 v1, v3, v1554; GFX9-NEXT: s_setpc_b64 s[30:31]555;556; GFX9-CONTRACT-LABEL: test_v4f16_sub_mul:557; GFX9-CONTRACT: ; %bb.0: ; %.entry558; GFX9-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)559; GFX9-CONTRACT-NEXT: v_pk_fma_f16 v0, v0, v2, v4 neg_lo:[0,0,1] neg_hi:[0,0,1]560; GFX9-CONTRACT-NEXT: v_pk_fma_f16 v1, v1, v3, v5 neg_lo:[0,0,1] neg_hi:[0,0,1]561; GFX9-CONTRACT-NEXT: s_setpc_b64 s[30:31]562;563; GFX9-DENORM-LABEL: test_v4f16_sub_mul:564; GFX9-DENORM: ; %bb.0: ; %.entry565; GFX9-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)566; GFX9-DENORM-NEXT: v_pk_mul_f16 v0, v0, v2567; GFX9-DENORM-NEXT: v_pk_mul_f16 v1, v1, v3568; GFX9-DENORM-NEXT: v_sub_f16_e32 v2, v0, v4569; GFX9-DENORM-NEXT: v_sub_f16_sdwa v0, v0, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1570; GFX9-DENORM-NEXT: v_sub_f16_e32 v3, v1, v5571; GFX9-DENORM-NEXT: v_sub_f16_sdwa v1, v1, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1572; GFX9-DENORM-NEXT: v_pack_b32_f16 v0, v2, v0573; GFX9-DENORM-NEXT: v_pack_b32_f16 v1, v3, v1574; GFX9-DENORM-NEXT: s_setpc_b64 s[30:31]575;576; GFX10-LABEL: test_v4f16_sub_mul:577; GFX10: ; %bb.0: ; %.entry578; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)579; GFX10-NEXT: v_pk_mul_f16 v0, v0, v2580; GFX10-NEXT: v_pk_mul_f16 v1, v1, v3581; GFX10-NEXT: v_sub_f16_e32 v2, v0, v4582; GFX10-NEXT: v_sub_f16_sdwa v0, v0, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1583; GFX10-NEXT: v_sub_f16_e32 v3, v1, v5584; GFX10-NEXT: v_sub_f16_sdwa v1, v1, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1585; GFX10-NEXT: v_pack_b32_f16 v0, v2, v0586; GFX10-NEXT: v_pack_b32_f16 v1, v3, v1587; GFX10-NEXT: s_setpc_b64 s[30:31]588;589; GFX10-CONTRACT-LABEL: test_v4f16_sub_mul:590; GFX10-CONTRACT: ; %bb.0: ; %.entry591; GFX10-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)592; GFX10-CONTRACT-NEXT: v_pk_fma_f16 v0, v0, v2, v4 neg_lo:[0,0,1] neg_hi:[0,0,1]593; GFX10-CONTRACT-NEXT: v_pk_fma_f16 v1, v1, v3, v5 neg_lo:[0,0,1] neg_hi:[0,0,1]594; GFX10-CONTRACT-NEXT: s_setpc_b64 s[30:31]595;596; GFX10-DENORM-LABEL: test_v4f16_sub_mul:597; GFX10-DENORM: ; %bb.0: ; %.entry598; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)599; GFX10-DENORM-NEXT: v_pk_mul_f16 v0, v0, v2600; GFX10-DENORM-NEXT: v_pk_mul_f16 v1, v1, v3601; GFX10-DENORM-NEXT: v_sub_f16_e32 v2, v0, v4602; GFX10-DENORM-NEXT: v_sub_f16_sdwa v0, v0, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1603; GFX10-DENORM-NEXT: v_sub_f16_e32 v3, v1, v5604; GFX10-DENORM-NEXT: v_sub_f16_sdwa v1, v1, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1605; GFX10-DENORM-NEXT: v_pack_b32_f16 v0, v2, v0606; GFX10-DENORM-NEXT: v_pack_b32_f16 v1, v3, v1607; GFX10-DENORM-NEXT: s_setpc_b64 s[30:31]608;609; GFX11-CONTRACT-LABEL: test_v4f16_sub_mul:610; GFX11-CONTRACT: ; %bb.0: ; %.entry611; GFX11-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)612; GFX11-CONTRACT-NEXT: v_pk_fma_f16 v0, v0, v2, v4 neg_lo:[0,0,1] neg_hi:[0,0,1]613; GFX11-CONTRACT-NEXT: v_pk_fma_f16 v1, v1, v3, v5 neg_lo:[0,0,1] neg_hi:[0,0,1]614; GFX11-CONTRACT-NEXT: s_setpc_b64 s[30:31]615;616; GFX11-DENORM-LABEL: test_v4f16_sub_mul:617; GFX11-DENORM: ; %bb.0: ; %.entry618; GFX11-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)619; GFX11-DENORM-NEXT: v_pk_mul_f16 v0, v0, v2620; GFX11-DENORM-NEXT: v_pk_mul_f16 v1, v1, v3621; GFX11-DENORM-NEXT: v_lshrrev_b32_e32 v2, 16, v4622; GFX11-DENORM-NEXT: v_lshrrev_b32_e32 v3, 16, v5623; GFX11-DENORM-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)624; GFX11-DENORM-NEXT: v_lshrrev_b32_e32 v6, 16, v0625; GFX11-DENORM-NEXT: v_lshrrev_b32_e32 v7, 16, v1626; GFX11-DENORM-NEXT: v_sub_f16_e32 v0, v0, v4627; GFX11-DENORM-NEXT: v_sub_f16_e32 v1, v1, v5628; GFX11-DENORM-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)629; GFX11-DENORM-NEXT: v_sub_f16_e32 v2, v6, v2630; GFX11-DENORM-NEXT: v_sub_f16_e32 v3, v7, v3631; GFX11-DENORM-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)632; GFX11-DENORM-NEXT: v_pack_b32_f16 v0, v0, v2633; GFX11-DENORM-NEXT: v_pack_b32_f16 v1, v1, v3634; GFX11-DENORM-NEXT: s_setpc_b64 s[30:31]635.entry:636 %a = fmul <4 x half> %x, %y637 %b = fsub <4 x half> %a, %z638 ret <4 x half> %b639}640 641define <4 x half> @test_v4f16_sub_mul_rhs(<4 x half> %x, <4 x half> %y, <4 x half> %z) {642; GFX9-LABEL: test_v4f16_sub_mul_rhs:643; GFX9: ; %bb.0: ; %.entry644; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)645; GFX9-NEXT: v_pk_mul_f16 v0, v0, v2646; GFX9-NEXT: v_pk_mul_f16 v1, v1, v3647; GFX9-NEXT: v_sub_f16_e32 v2, v4, v0648; GFX9-NEXT: v_sub_f16_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1649; GFX9-NEXT: v_sub_f16_e32 v3, v5, v1650; GFX9-NEXT: v_sub_f16_sdwa v1, v5, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1651; GFX9-NEXT: v_pack_b32_f16 v0, v2, v0652; GFX9-NEXT: v_pack_b32_f16 v1, v3, v1653; GFX9-NEXT: s_setpc_b64 s[30:31]654;655; GFX9-CONTRACT-LABEL: test_v4f16_sub_mul_rhs:656; GFX9-CONTRACT: ; %bb.0: ; %.entry657; GFX9-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)658; GFX9-CONTRACT-NEXT: v_pk_fma_f16 v0, v0, v2, v4 neg_lo:[1,0,0] neg_hi:[1,0,0]659; GFX9-CONTRACT-NEXT: v_pk_fma_f16 v1, v1, v3, v5 neg_lo:[1,0,0] neg_hi:[1,0,0]660; GFX9-CONTRACT-NEXT: s_setpc_b64 s[30:31]661;662; GFX9-DENORM-LABEL: test_v4f16_sub_mul_rhs:663; GFX9-DENORM: ; %bb.0: ; %.entry664; GFX9-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)665; GFX9-DENORM-NEXT: v_pk_mul_f16 v0, v0, v2666; GFX9-DENORM-NEXT: v_pk_mul_f16 v1, v1, v3667; GFX9-DENORM-NEXT: v_sub_f16_e32 v2, v4, v0668; GFX9-DENORM-NEXT: v_sub_f16_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1669; GFX9-DENORM-NEXT: v_sub_f16_e32 v3, v5, v1670; GFX9-DENORM-NEXT: v_sub_f16_sdwa v1, v5, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1671; GFX9-DENORM-NEXT: v_pack_b32_f16 v0, v2, v0672; GFX9-DENORM-NEXT: v_pack_b32_f16 v1, v3, v1673; GFX9-DENORM-NEXT: s_setpc_b64 s[30:31]674;675; GFX10-LABEL: test_v4f16_sub_mul_rhs:676; GFX10: ; %bb.0: ; %.entry677; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)678; GFX10-NEXT: v_pk_mul_f16 v0, v0, v2679; GFX10-NEXT: v_pk_mul_f16 v1, v1, v3680; GFX10-NEXT: v_sub_f16_e32 v2, v4, v0681; GFX10-NEXT: v_sub_f16_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1682; GFX10-NEXT: v_sub_f16_e32 v3, v5, v1683; GFX10-NEXT: v_sub_f16_sdwa v1, v5, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1684; GFX10-NEXT: v_pack_b32_f16 v0, v2, v0685; GFX10-NEXT: v_pack_b32_f16 v1, v3, v1686; GFX10-NEXT: s_setpc_b64 s[30:31]687;688; GFX10-CONTRACT-LABEL: test_v4f16_sub_mul_rhs:689; GFX10-CONTRACT: ; %bb.0: ; %.entry690; GFX10-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)691; GFX10-CONTRACT-NEXT: v_pk_fma_f16 v0, v0, v2, v4 neg_lo:[1,0,0] neg_hi:[1,0,0]692; GFX10-CONTRACT-NEXT: v_pk_fma_f16 v1, v1, v3, v5 neg_lo:[1,0,0] neg_hi:[1,0,0]693; GFX10-CONTRACT-NEXT: s_setpc_b64 s[30:31]694;695; GFX10-DENORM-LABEL: test_v4f16_sub_mul_rhs:696; GFX10-DENORM: ; %bb.0: ; %.entry697; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)698; GFX10-DENORM-NEXT: v_pk_mul_f16 v0, v0, v2699; GFX10-DENORM-NEXT: v_pk_mul_f16 v1, v1, v3700; GFX10-DENORM-NEXT: v_sub_f16_e32 v2, v4, v0701; GFX10-DENORM-NEXT: v_sub_f16_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1702; GFX10-DENORM-NEXT: v_sub_f16_e32 v3, v5, v1703; GFX10-DENORM-NEXT: v_sub_f16_sdwa v1, v5, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1704; GFX10-DENORM-NEXT: v_pack_b32_f16 v0, v2, v0705; GFX10-DENORM-NEXT: v_pack_b32_f16 v1, v3, v1706; GFX10-DENORM-NEXT: s_setpc_b64 s[30:31]707;708; GFX11-CONTRACT-LABEL: test_v4f16_sub_mul_rhs:709; GFX11-CONTRACT: ; %bb.0: ; %.entry710; GFX11-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)711; GFX11-CONTRACT-NEXT: v_pk_fma_f16 v0, v0, v2, v4 neg_lo:[1,0,0] neg_hi:[1,0,0]712; GFX11-CONTRACT-NEXT: v_pk_fma_f16 v1, v1, v3, v5 neg_lo:[1,0,0] neg_hi:[1,0,0]713; GFX11-CONTRACT-NEXT: s_setpc_b64 s[30:31]714;715; GFX11-DENORM-LABEL: test_v4f16_sub_mul_rhs:716; GFX11-DENORM: ; %bb.0: ; %.entry717; GFX11-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)718; GFX11-DENORM-NEXT: v_pk_mul_f16 v0, v0, v2719; GFX11-DENORM-NEXT: v_pk_mul_f16 v1, v1, v3720; GFX11-DENORM-NEXT: v_lshrrev_b32_e32 v2, 16, v4721; GFX11-DENORM-NEXT: v_lshrrev_b32_e32 v3, 16, v5722; GFX11-DENORM-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)723; GFX11-DENORM-NEXT: v_lshrrev_b32_e32 v6, 16, v0724; GFX11-DENORM-NEXT: v_lshrrev_b32_e32 v7, 16, v1725; GFX11-DENORM-NEXT: v_sub_f16_e32 v0, v4, v0726; GFX11-DENORM-NEXT: v_sub_f16_e32 v1, v5, v1727; GFX11-DENORM-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)728; GFX11-DENORM-NEXT: v_sub_f16_e32 v2, v2, v6729; GFX11-DENORM-NEXT: v_sub_f16_e32 v3, v3, v7730; GFX11-DENORM-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)731; GFX11-DENORM-NEXT: v_pack_b32_f16 v0, v0, v2732; GFX11-DENORM-NEXT: v_pack_b32_f16 v1, v1, v3733; GFX11-DENORM-NEXT: s_setpc_b64 s[30:31]734.entry:735 %a = fmul <4 x half> %x, %y736 %b = fsub <4 x half> %z, %a737 ret <4 x half> %b738}739 740define <4 x double> @test_v4f64_sub_mul(<4 x double> %x, <4 x double> %y, <4 x double> %z) {741; GFX9-LABEL: test_v4f64_sub_mul:742; GFX9: ; %bb.0: ; %.entry743; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)744; GFX9-NEXT: v_mul_f64 v[0:1], v[0:1], v[8:9]745; GFX9-NEXT: v_mul_f64 v[2:3], v[2:3], v[10:11]746; GFX9-NEXT: v_mul_f64 v[4:5], v[4:5], v[12:13]747; GFX9-NEXT: v_mul_f64 v[6:7], v[6:7], v[14:15]748; GFX9-NEXT: v_add_f64 v[0:1], v[0:1], -v[16:17]749; GFX9-NEXT: v_add_f64 v[2:3], v[2:3], -v[18:19]750; GFX9-NEXT: v_add_f64 v[4:5], v[4:5], -v[20:21]751; GFX9-NEXT: v_add_f64 v[6:7], v[6:7], -v[22:23]752; GFX9-NEXT: s_setpc_b64 s[30:31]753;754; GFX9-CONTRACT-LABEL: test_v4f64_sub_mul:755; GFX9-CONTRACT: ; %bb.0: ; %.entry756; GFX9-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)757; GFX9-CONTRACT-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], -v[16:17]758; GFX9-CONTRACT-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], -v[18:19]759; GFX9-CONTRACT-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], -v[20:21]760; GFX9-CONTRACT-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], -v[22:23]761; GFX9-CONTRACT-NEXT: s_setpc_b64 s[30:31]762;763; GFX9-DENORM-LABEL: test_v4f64_sub_mul:764; GFX9-DENORM: ; %bb.0: ; %.entry765; GFX9-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)766; GFX9-DENORM-NEXT: v_mul_f64 v[0:1], v[0:1], v[8:9]767; GFX9-DENORM-NEXT: v_mul_f64 v[2:3], v[2:3], v[10:11]768; GFX9-DENORM-NEXT: v_mul_f64 v[4:5], v[4:5], v[12:13]769; GFX9-DENORM-NEXT: v_mul_f64 v[6:7], v[6:7], v[14:15]770; GFX9-DENORM-NEXT: v_add_f64 v[0:1], v[0:1], -v[16:17]771; GFX9-DENORM-NEXT: v_add_f64 v[2:3], v[2:3], -v[18:19]772; GFX9-DENORM-NEXT: v_add_f64 v[4:5], v[4:5], -v[20:21]773; GFX9-DENORM-NEXT: v_add_f64 v[6:7], v[6:7], -v[22:23]774; GFX9-DENORM-NEXT: s_setpc_b64 s[30:31]775;776; GFX10-LABEL: test_v4f64_sub_mul:777; GFX10: ; %bb.0: ; %.entry778; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)779; GFX10-NEXT: v_mul_f64 v[0:1], v[0:1], v[8:9]780; GFX10-NEXT: v_mul_f64 v[2:3], v[2:3], v[10:11]781; GFX10-NEXT: v_mul_f64 v[4:5], v[4:5], v[12:13]782; GFX10-NEXT: v_mul_f64 v[6:7], v[6:7], v[14:15]783; GFX10-NEXT: v_add_f64 v[0:1], v[0:1], -v[16:17]784; GFX10-NEXT: v_add_f64 v[2:3], v[2:3], -v[18:19]785; GFX10-NEXT: v_add_f64 v[4:5], v[4:5], -v[20:21]786; GFX10-NEXT: v_add_f64 v[6:7], v[6:7], -v[22:23]787; GFX10-NEXT: s_setpc_b64 s[30:31]788;789; GFX10-CONTRACT-LABEL: test_v4f64_sub_mul:790; GFX10-CONTRACT: ; %bb.0: ; %.entry791; GFX10-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)792; GFX10-CONTRACT-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], -v[16:17]793; GFX10-CONTRACT-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], -v[18:19]794; GFX10-CONTRACT-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], -v[20:21]795; GFX10-CONTRACT-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], -v[22:23]796; GFX10-CONTRACT-NEXT: s_setpc_b64 s[30:31]797;798; GFX10-DENORM-LABEL: test_v4f64_sub_mul:799; GFX10-DENORM: ; %bb.0: ; %.entry800; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)801; GFX10-DENORM-NEXT: v_mul_f64 v[0:1], v[0:1], v[8:9]802; GFX10-DENORM-NEXT: v_mul_f64 v[2:3], v[2:3], v[10:11]803; GFX10-DENORM-NEXT: v_mul_f64 v[4:5], v[4:5], v[12:13]804; GFX10-DENORM-NEXT: v_mul_f64 v[6:7], v[6:7], v[14:15]805; GFX10-DENORM-NEXT: v_add_f64 v[0:1], v[0:1], -v[16:17]806; GFX10-DENORM-NEXT: v_add_f64 v[2:3], v[2:3], -v[18:19]807; GFX10-DENORM-NEXT: v_add_f64 v[4:5], v[4:5], -v[20:21]808; GFX10-DENORM-NEXT: v_add_f64 v[6:7], v[6:7], -v[22:23]809; GFX10-DENORM-NEXT: s_setpc_b64 s[30:31]810;811; GFX11-CONTRACT-LABEL: test_v4f64_sub_mul:812; GFX11-CONTRACT: ; %bb.0: ; %.entry813; GFX11-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)814; GFX11-CONTRACT-NEXT: v_fma_f64 v[0:1], v[0:1], v[8:9], -v[16:17]815; GFX11-CONTRACT-NEXT: v_fma_f64 v[2:3], v[2:3], v[10:11], -v[18:19]816; GFX11-CONTRACT-NEXT: v_fma_f64 v[4:5], v[4:5], v[12:13], -v[20:21]817; GFX11-CONTRACT-NEXT: v_fma_f64 v[6:7], v[6:7], v[14:15], -v[22:23]818; GFX11-CONTRACT-NEXT: s_setpc_b64 s[30:31]819;820; GFX11-DENORM-LABEL: test_v4f64_sub_mul:821; GFX11-DENORM: ; %bb.0: ; %.entry822; GFX11-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)823; GFX11-DENORM-NEXT: v_mul_f64 v[0:1], v[0:1], v[8:9]824; GFX11-DENORM-NEXT: v_mul_f64 v[2:3], v[2:3], v[10:11]825; GFX11-DENORM-NEXT: v_mul_f64 v[4:5], v[4:5], v[12:13]826; GFX11-DENORM-NEXT: v_mul_f64 v[6:7], v[6:7], v[14:15]827; GFX11-DENORM-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)828; GFX11-DENORM-NEXT: v_add_f64 v[0:1], v[0:1], -v[16:17]829; GFX11-DENORM-NEXT: v_add_f64 v[2:3], v[2:3], -v[18:19]830; GFX11-DENORM-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)831; GFX11-DENORM-NEXT: v_add_f64 v[4:5], v[4:5], -v[20:21]832; GFX11-DENORM-NEXT: v_add_f64 v[6:7], v[6:7], -v[22:23]833; GFX11-DENORM-NEXT: s_setpc_b64 s[30:31]834.entry:835 %a = fmul <4 x double> %x, %y836 %b = fsub <4 x double> %a, %z837 ret <4 x double> %b838}839 840define <4 x double> @test_v4f64_sub_mul_rhs(<4 x double> %x, <4 x double> %y, <4 x double> %z) {841; GFX9-LABEL: test_v4f64_sub_mul_rhs:842; GFX9: ; %bb.0: ; %.entry843; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)844; GFX9-NEXT: v_mul_f64 v[0:1], v[0:1], v[8:9]845; GFX9-NEXT: v_mul_f64 v[2:3], v[2:3], v[10:11]846; GFX9-NEXT: v_mul_f64 v[4:5], v[4:5], v[12:13]847; GFX9-NEXT: v_mul_f64 v[6:7], v[6:7], v[14:15]848; GFX9-NEXT: v_add_f64 v[0:1], v[16:17], -v[0:1]849; GFX9-NEXT: v_add_f64 v[2:3], v[18:19], -v[2:3]850; GFX9-NEXT: v_add_f64 v[4:5], v[20:21], -v[4:5]851; GFX9-NEXT: v_add_f64 v[6:7], v[22:23], -v[6:7]852; GFX9-NEXT: s_setpc_b64 s[30:31]853;854; GFX9-CONTRACT-LABEL: test_v4f64_sub_mul_rhs:855; GFX9-CONTRACT: ; %bb.0: ; %.entry856; GFX9-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)857; GFX9-CONTRACT-NEXT: v_fma_f64 v[0:1], -v[0:1], v[8:9], v[16:17]858; GFX9-CONTRACT-NEXT: v_fma_f64 v[2:3], -v[2:3], v[10:11], v[18:19]859; GFX9-CONTRACT-NEXT: v_fma_f64 v[4:5], -v[4:5], v[12:13], v[20:21]860; GFX9-CONTRACT-NEXT: v_fma_f64 v[6:7], -v[6:7], v[14:15], v[22:23]861; GFX9-CONTRACT-NEXT: s_setpc_b64 s[30:31]862;863; GFX9-DENORM-LABEL: test_v4f64_sub_mul_rhs:864; GFX9-DENORM: ; %bb.0: ; %.entry865; GFX9-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)866; GFX9-DENORM-NEXT: v_mul_f64 v[0:1], v[0:1], v[8:9]867; GFX9-DENORM-NEXT: v_mul_f64 v[2:3], v[2:3], v[10:11]868; GFX9-DENORM-NEXT: v_mul_f64 v[4:5], v[4:5], v[12:13]869; GFX9-DENORM-NEXT: v_mul_f64 v[6:7], v[6:7], v[14:15]870; GFX9-DENORM-NEXT: v_add_f64 v[0:1], v[16:17], -v[0:1]871; GFX9-DENORM-NEXT: v_add_f64 v[2:3], v[18:19], -v[2:3]872; GFX9-DENORM-NEXT: v_add_f64 v[4:5], v[20:21], -v[4:5]873; GFX9-DENORM-NEXT: v_add_f64 v[6:7], v[22:23], -v[6:7]874; GFX9-DENORM-NEXT: s_setpc_b64 s[30:31]875;876; GFX10-LABEL: test_v4f64_sub_mul_rhs:877; GFX10: ; %bb.0: ; %.entry878; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)879; GFX10-NEXT: v_mul_f64 v[0:1], v[0:1], v[8:9]880; GFX10-NEXT: v_mul_f64 v[2:3], v[2:3], v[10:11]881; GFX10-NEXT: v_mul_f64 v[4:5], v[4:5], v[12:13]882; GFX10-NEXT: v_mul_f64 v[6:7], v[6:7], v[14:15]883; GFX10-NEXT: v_add_f64 v[0:1], v[16:17], -v[0:1]884; GFX10-NEXT: v_add_f64 v[2:3], v[18:19], -v[2:3]885; GFX10-NEXT: v_add_f64 v[4:5], v[20:21], -v[4:5]886; GFX10-NEXT: v_add_f64 v[6:7], v[22:23], -v[6:7]887; GFX10-NEXT: s_setpc_b64 s[30:31]888;889; GFX10-CONTRACT-LABEL: test_v4f64_sub_mul_rhs:890; GFX10-CONTRACT: ; %bb.0: ; %.entry891; GFX10-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)892; GFX10-CONTRACT-NEXT: v_fma_f64 v[0:1], -v[0:1], v[8:9], v[16:17]893; GFX10-CONTRACT-NEXT: v_fma_f64 v[2:3], -v[2:3], v[10:11], v[18:19]894; GFX10-CONTRACT-NEXT: v_fma_f64 v[4:5], -v[4:5], v[12:13], v[20:21]895; GFX10-CONTRACT-NEXT: v_fma_f64 v[6:7], -v[6:7], v[14:15], v[22:23]896; GFX10-CONTRACT-NEXT: s_setpc_b64 s[30:31]897;898; GFX10-DENORM-LABEL: test_v4f64_sub_mul_rhs:899; GFX10-DENORM: ; %bb.0: ; %.entry900; GFX10-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)901; GFX10-DENORM-NEXT: v_mul_f64 v[0:1], v[0:1], v[8:9]902; GFX10-DENORM-NEXT: v_mul_f64 v[2:3], v[2:3], v[10:11]903; GFX10-DENORM-NEXT: v_mul_f64 v[4:5], v[4:5], v[12:13]904; GFX10-DENORM-NEXT: v_mul_f64 v[6:7], v[6:7], v[14:15]905; GFX10-DENORM-NEXT: v_add_f64 v[0:1], v[16:17], -v[0:1]906; GFX10-DENORM-NEXT: v_add_f64 v[2:3], v[18:19], -v[2:3]907; GFX10-DENORM-NEXT: v_add_f64 v[4:5], v[20:21], -v[4:5]908; GFX10-DENORM-NEXT: v_add_f64 v[6:7], v[22:23], -v[6:7]909; GFX10-DENORM-NEXT: s_setpc_b64 s[30:31]910;911; GFX11-CONTRACT-LABEL: test_v4f64_sub_mul_rhs:912; GFX11-CONTRACT: ; %bb.0: ; %.entry913; GFX11-CONTRACT-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)914; GFX11-CONTRACT-NEXT: v_fma_f64 v[0:1], -v[0:1], v[8:9], v[16:17]915; GFX11-CONTRACT-NEXT: v_fma_f64 v[2:3], -v[2:3], v[10:11], v[18:19]916; GFX11-CONTRACT-NEXT: v_fma_f64 v[4:5], -v[4:5], v[12:13], v[20:21]917; GFX11-CONTRACT-NEXT: v_fma_f64 v[6:7], -v[6:7], v[14:15], v[22:23]918; GFX11-CONTRACT-NEXT: s_setpc_b64 s[30:31]919;920; GFX11-DENORM-LABEL: test_v4f64_sub_mul_rhs:921; GFX11-DENORM: ; %bb.0: ; %.entry922; GFX11-DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)923; GFX11-DENORM-NEXT: v_mul_f64 v[0:1], v[0:1], v[8:9]924; GFX11-DENORM-NEXT: v_mul_f64 v[2:3], v[2:3], v[10:11]925; GFX11-DENORM-NEXT: v_mul_f64 v[4:5], v[4:5], v[12:13]926; GFX11-DENORM-NEXT: v_mul_f64 v[6:7], v[6:7], v[14:15]927; GFX11-DENORM-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)928; GFX11-DENORM-NEXT: v_add_f64 v[0:1], v[16:17], -v[0:1]929; GFX11-DENORM-NEXT: v_add_f64 v[2:3], v[18:19], -v[2:3]930; GFX11-DENORM-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)931; GFX11-DENORM-NEXT: v_add_f64 v[4:5], v[20:21], -v[4:5]932; GFX11-DENORM-NEXT: v_add_f64 v[6:7], v[22:23], -v[6:7]933; GFX11-DENORM-NEXT: s_setpc_b64 s[30:31]934.entry:935 %a = fmul <4 x double> %x, %y936 %b = fsub <4 x double> %z, %a937 ret <4 x double> %b938}939