brintos

brintos / llvm-project-archived public Read only

0
0
Text · 52.9 KiB · 6ea0a94 Raw
1045 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx900 -fp-contract=fast < %s | FileCheck -check-prefix=GFX9-CONTRACT %s3; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx900 --denormal-fp-math=preserve-sign < %s | FileCheck -check-prefix=GFX9-DENORM %s4; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1010 -fp-contract=fast < %s | FileCheck -check-prefix=GFX10-CONTRACT %s5; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1010 --denormal-fp-math=preserve-sign < %s | FileCheck -check-prefix=GFX10-DENORM %s6; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -fp-contract=fast < %s | FileCheck -check-prefixes=GFX11-CONTRACT %s7; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 --denormal-fp-math=preserve-sign < %s | FileCheck -check-prefixes=GFX11-DENORM %s8 9; fadd (fma a, b, (fmul c, d)), e --> fma a, b, (fma c, d, e)10; fadd e, (fma a, b, (fmul c, d)) --> fma a, b, (fma c, d, e)11 12define float @test_f32_add_mul(float %a, float %b, float %c, float %d, float %e) {13; GFX9-CONTRACT-LABEL: test_f32_add_mul:14; GFX9-CONTRACT:       ; %bb.0: ; %.entry15; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)16; GFX9-CONTRACT-NEXT:    v_fma_f32 v2, v2, v3, v417; GFX9-CONTRACT-NEXT:    v_fma_f32 v0, v0, v1, v218; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]19;20; GFX9-DENORM-LABEL: test_f32_add_mul:21; GFX9-DENORM:       ; %bb.0: ; %.entry22; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)23; GFX9-DENORM-NEXT:    v_mad_f32 v2, v2, v3, v424; GFX9-DENORM-NEXT:    v_mac_f32_e32 v2, v0, v125; GFX9-DENORM-NEXT:    v_mov_b32_e32 v0, v226; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]27;28; GFX10-CONTRACT-LABEL: test_f32_add_mul:29; GFX10-CONTRACT:       ; %bb.0: ; %.entry30; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)31; GFX10-CONTRACT-NEXT:    v_fma_f32 v2, v2, v3, v432; GFX10-CONTRACT-NEXT:    v_fmac_f32_e32 v2, v0, v133; GFX10-CONTRACT-NEXT:    v_mov_b32_e32 v0, v234; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]35;36; GFX10-DENORM-LABEL: test_f32_add_mul:37; GFX10-DENORM:       ; %bb.0: ; %.entry38; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)39; GFX10-DENORM-NEXT:    v_fma_f32 v2, v2, v3, v440; GFX10-DENORM-NEXT:    v_fmac_f32_e32 v2, v0, v141; GFX10-DENORM-NEXT:    v_mov_b32_e32 v0, v242; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]43;44; GFX11-CONTRACT-LABEL: test_f32_add_mul:45; GFX11-CONTRACT:       ; %bb.0: ; %.entry46; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)47; GFX11-CONTRACT-NEXT:    v_fma_f32 v2, v2, v3, v448; GFX11-CONTRACT-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)49; GFX11-CONTRACT-NEXT:    v_fmac_f32_e32 v2, v0, v150; GFX11-CONTRACT-NEXT:    v_mov_b32_e32 v0, v251; GFX11-CONTRACT-NEXT:    s_setpc_b64 s[30:31]52;53; GFX11-DENORM-LABEL: test_f32_add_mul:54; GFX11-DENORM:       ; %bb.0: ; %.entry55; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)56; GFX11-DENORM-NEXT:    v_fma_f32 v2, v2, v3, v457; GFX11-DENORM-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)58; GFX11-DENORM-NEXT:    v_fmac_f32_e32 v2, v0, v159; GFX11-DENORM-NEXT:    v_mov_b32_e32 v0, v260; GFX11-DENORM-NEXT:    s_setpc_b64 s[30:31]61.entry:62  %x = fmul fast float %c, %d63  %y = call fast float @llvm.fmuladd.f32(float %a, float %b, float %x)64  %z = fadd fast float %y, %e65  ret float %z66}67 68define float @test_f32_add_mul_rhs(float %a, float %b, float %c, float %d, float %e) {69; GFX9-CONTRACT-LABEL: test_f32_add_mul_rhs:70; GFX9-CONTRACT:       ; %bb.0: ; %.entry71; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)72; GFX9-CONTRACT-NEXT:    v_fma_f32 v2, v2, v3, v473; GFX9-CONTRACT-NEXT:    v_fma_f32 v0, v0, v1, v274; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]75;76; GFX9-DENORM-LABEL: test_f32_add_mul_rhs:77; GFX9-DENORM:       ; %bb.0: ; %.entry78; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)79; GFX9-DENORM-NEXT:    v_mad_f32 v2, v2, v3, v480; GFX9-DENORM-NEXT:    v_mac_f32_e32 v2, v0, v181; GFX9-DENORM-NEXT:    v_mov_b32_e32 v0, v282; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]83;84; GFX10-CONTRACT-LABEL: test_f32_add_mul_rhs:85; GFX10-CONTRACT:       ; %bb.0: ; %.entry86; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)87; GFX10-CONTRACT-NEXT:    v_fma_f32 v2, v2, v3, v488; GFX10-CONTRACT-NEXT:    v_fmac_f32_e32 v2, v0, v189; GFX10-CONTRACT-NEXT:    v_mov_b32_e32 v0, v290; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]91;92; GFX10-DENORM-LABEL: test_f32_add_mul_rhs:93; GFX10-DENORM:       ; %bb.0: ; %.entry94; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)95; GFX10-DENORM-NEXT:    v_fma_f32 v2, v2, v3, v496; GFX10-DENORM-NEXT:    v_fmac_f32_e32 v2, v0, v197; GFX10-DENORM-NEXT:    v_mov_b32_e32 v0, v298; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]99;100; GFX11-CONTRACT-LABEL: test_f32_add_mul_rhs:101; GFX11-CONTRACT:       ; %bb.0: ; %.entry102; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)103; GFX11-CONTRACT-NEXT:    v_fma_f32 v2, v2, v3, v4104; GFX11-CONTRACT-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)105; GFX11-CONTRACT-NEXT:    v_fmac_f32_e32 v2, v0, v1106; GFX11-CONTRACT-NEXT:    v_mov_b32_e32 v0, v2107; GFX11-CONTRACT-NEXT:    s_setpc_b64 s[30:31]108;109; GFX11-DENORM-LABEL: test_f32_add_mul_rhs:110; GFX11-DENORM:       ; %bb.0: ; %.entry111; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)112; GFX11-DENORM-NEXT:    v_fma_f32 v2, v2, v3, v4113; GFX11-DENORM-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)114; GFX11-DENORM-NEXT:    v_fmac_f32_e32 v2, v0, v1115; GFX11-DENORM-NEXT:    v_mov_b32_e32 v0, v2116; GFX11-DENORM-NEXT:    s_setpc_b64 s[30:31]117.entry:118  %x = fmul fast float %c, %d119  %y = call fast float @llvm.fmuladd.f32(float %a, float %b, float %x)120  %z = fadd fast float %e, %y121  ret float %z122}123 124define half @test_half_add_mul(half %a, half %b, half %c, half %d, half %e) {125; GFX9-CONTRACT-LABEL: test_half_add_mul:126; GFX9-CONTRACT:       ; %bb.0: ; %.entry127; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)128; GFX9-CONTRACT-NEXT:    v_fma_f16 v2, v2, v3, v4129; GFX9-CONTRACT-NEXT:    v_fma_f16 v0, v0, v1, v2130; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]131;132; GFX9-DENORM-LABEL: test_half_add_mul:133; GFX9-DENORM:       ; %bb.0: ; %.entry134; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)135; GFX9-DENORM-NEXT:    v_mad_legacy_f16 v2, v2, v3, v4136; GFX9-DENORM-NEXT:    v_mac_f16_e32 v2, v0, v1137; GFX9-DENORM-NEXT:    v_mov_b32_e32 v0, v2138; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]139;140; GFX10-CONTRACT-LABEL: test_half_add_mul:141; GFX10-CONTRACT:       ; %bb.0: ; %.entry142; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)143; GFX10-CONTRACT-NEXT:    v_fma_f16 v2, v2, v3, v4144; GFX10-CONTRACT-NEXT:    v_fmac_f16_e32 v2, v0, v1145; GFX10-CONTRACT-NEXT:    v_mov_b32_e32 v0, v2146; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]147;148; GFX10-DENORM-LABEL: test_half_add_mul:149; GFX10-DENORM:       ; %bb.0: ; %.entry150; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)151; GFX10-DENORM-NEXT:    v_mul_f16_e32 v2, v2, v3152; GFX10-DENORM-NEXT:    v_mul_f16_e32 v0, v0, v1153; GFX10-DENORM-NEXT:    v_add_f16_e32 v0, v0, v2154; GFX10-DENORM-NEXT:    v_add_f16_e32 v0, v0, v4155; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]156;157; GFX11-CONTRACT-LABEL: test_half_add_mul:158; GFX11-CONTRACT:       ; %bb.0: ; %.entry159; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)160; GFX11-CONTRACT-NEXT:    v_fma_f16 v2, v2, v3, v4161; GFX11-CONTRACT-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)162; GFX11-CONTRACT-NEXT:    v_fmac_f16_e32 v2, v0, v1163; GFX11-CONTRACT-NEXT:    v_mov_b32_e32 v0, v2164; GFX11-CONTRACT-NEXT:    s_setpc_b64 s[30:31]165;166; GFX11-DENORM-LABEL: test_half_add_mul:167; GFX11-DENORM:       ; %bb.0: ; %.entry168; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)169; GFX11-DENORM-NEXT:    v_mul_f16_e32 v2, v2, v3170; GFX11-DENORM-NEXT:    v_mul_f16_e32 v0, v0, v1171; GFX11-DENORM-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)172; GFX11-DENORM-NEXT:    v_add_f16_e32 v0, v0, v2173; GFX11-DENORM-NEXT:    v_add_f16_e32 v0, v0, v4174; GFX11-DENORM-NEXT:    s_setpc_b64 s[30:31]175.entry:176  %x = fmul fast half %c, %d177  %y = call fast half @llvm.fmuladd.f16(half %a, half %b, half %x)178  %z = fadd fast half %y, %e179  ret half %z180}181 182define half @test_half_add_mul_rhs(half %a, half %b, half %c, half %d, half %e) {183; GFX9-CONTRACT-LABEL: test_half_add_mul_rhs:184; GFX9-CONTRACT:       ; %bb.0: ; %.entry185; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)186; GFX9-CONTRACT-NEXT:    v_fma_f16 v2, v2, v3, v4187; GFX9-CONTRACT-NEXT:    v_fma_f16 v0, v0, v1, v2188; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]189;190; GFX9-DENORM-LABEL: test_half_add_mul_rhs:191; GFX9-DENORM:       ; %bb.0: ; %.entry192; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)193; GFX9-DENORM-NEXT:    v_mad_legacy_f16 v2, v2, v3, v4194; GFX9-DENORM-NEXT:    v_mac_f16_e32 v2, v0, v1195; GFX9-DENORM-NEXT:    v_mov_b32_e32 v0, v2196; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]197;198; GFX10-CONTRACT-LABEL: test_half_add_mul_rhs:199; GFX10-CONTRACT:       ; %bb.0: ; %.entry200; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)201; GFX10-CONTRACT-NEXT:    v_fma_f16 v2, v2, v3, v4202; GFX10-CONTRACT-NEXT:    v_fmac_f16_e32 v2, v0, v1203; GFX10-CONTRACT-NEXT:    v_mov_b32_e32 v0, v2204; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]205;206; GFX10-DENORM-LABEL: test_half_add_mul_rhs:207; GFX10-DENORM:       ; %bb.0: ; %.entry208; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)209; GFX10-DENORM-NEXT:    v_mul_f16_e32 v2, v2, v3210; GFX10-DENORM-NEXT:    v_mul_f16_e32 v0, v0, v1211; GFX10-DENORM-NEXT:    v_add_f16_e32 v0, v0, v2212; GFX10-DENORM-NEXT:    v_add_f16_e32 v0, v4, v0213; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]214;215; GFX11-CONTRACT-LABEL: test_half_add_mul_rhs:216; GFX11-CONTRACT:       ; %bb.0: ; %.entry217; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)218; GFX11-CONTRACT-NEXT:    v_fma_f16 v2, v2, v3, v4219; GFX11-CONTRACT-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)220; GFX11-CONTRACT-NEXT:    v_fmac_f16_e32 v2, v0, v1221; GFX11-CONTRACT-NEXT:    v_mov_b32_e32 v0, v2222; GFX11-CONTRACT-NEXT:    s_setpc_b64 s[30:31]223;224; GFX11-DENORM-LABEL: test_half_add_mul_rhs:225; GFX11-DENORM:       ; %bb.0: ; %.entry226; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)227; GFX11-DENORM-NEXT:    v_mul_f16_e32 v2, v2, v3228; GFX11-DENORM-NEXT:    v_mul_f16_e32 v0, v0, v1229; GFX11-DENORM-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)230; GFX11-DENORM-NEXT:    v_add_f16_e32 v0, v0, v2231; GFX11-DENORM-NEXT:    v_add_f16_e32 v0, v4, v0232; GFX11-DENORM-NEXT:    s_setpc_b64 s[30:31]233.entry:234  %x = fmul fast half %c, %d235  %y = call fast half @llvm.fmuladd.f16(half %a, half %b, half %x)236  %z = fadd fast half %e, %y237  ret half %z238}239 240define double @test_double_add_mul(double %a, double %b, double %c, double %d, double %e) {241; GFX9-CONTRACT-LABEL: test_double_add_mul:242; GFX9-CONTRACT:       ; %bb.0: ; %.entry243; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)244; GFX9-CONTRACT-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[8:9]245; GFX9-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]246; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]247;248; GFX9-DENORM-LABEL: test_double_add_mul:249; GFX9-DENORM:       ; %bb.0: ; %.entry250; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)251; GFX9-DENORM-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[8:9]252; GFX9-DENORM-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]253; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]254;255; GFX10-CONTRACT-LABEL: test_double_add_mul:256; GFX10-CONTRACT:       ; %bb.0: ; %.entry257; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)258; GFX10-CONTRACT-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[8:9]259; GFX10-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]260; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]261;262; GFX10-DENORM-LABEL: test_double_add_mul:263; GFX10-DENORM:       ; %bb.0: ; %.entry264; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)265; GFX10-DENORM-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[8:9]266; GFX10-DENORM-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]267; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]268;269; GFX11-CONTRACT-LABEL: test_double_add_mul:270; GFX11-CONTRACT:       ; %bb.0: ; %.entry271; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)272; GFX11-CONTRACT-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[8:9]273; GFX11-CONTRACT-NEXT:    s_delay_alu instid0(VALU_DEP_1)274; GFX11-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]275; GFX11-CONTRACT-NEXT:    s_setpc_b64 s[30:31]276;277; GFX11-DENORM-LABEL: test_double_add_mul:278; GFX11-DENORM:       ; %bb.0: ; %.entry279; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)280; GFX11-DENORM-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[8:9]281; GFX11-DENORM-NEXT:    s_delay_alu instid0(VALU_DEP_1)282; GFX11-DENORM-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]283; GFX11-DENORM-NEXT:    s_setpc_b64 s[30:31]284.entry:285  %x = fmul fast double %c, %d286  %y = call fast double @llvm.fmuladd.f64(double %a, double %b, double %x)287  %z = fadd fast double %y, %e288  ret double %z289}290 291define double @test_double_add_mul_rhs(double %a, double %b, double %c, double %d, double %e) {292; GFX9-CONTRACT-LABEL: test_double_add_mul_rhs:293; GFX9-CONTRACT:       ; %bb.0: ; %.entry294; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)295; GFX9-CONTRACT-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[8:9]296; GFX9-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]297; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]298;299; GFX9-DENORM-LABEL: test_double_add_mul_rhs:300; GFX9-DENORM:       ; %bb.0: ; %.entry301; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)302; GFX9-DENORM-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[8:9]303; GFX9-DENORM-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]304; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]305;306; GFX10-CONTRACT-LABEL: test_double_add_mul_rhs:307; GFX10-CONTRACT:       ; %bb.0: ; %.entry308; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)309; GFX10-CONTRACT-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[8:9]310; GFX10-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]311; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]312;313; GFX10-DENORM-LABEL: test_double_add_mul_rhs:314; GFX10-DENORM:       ; %bb.0: ; %.entry315; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)316; GFX10-DENORM-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[8:9]317; GFX10-DENORM-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]318; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]319;320; GFX11-CONTRACT-LABEL: test_double_add_mul_rhs:321; GFX11-CONTRACT:       ; %bb.0: ; %.entry322; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)323; GFX11-CONTRACT-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[8:9]324; GFX11-CONTRACT-NEXT:    s_delay_alu instid0(VALU_DEP_1)325; GFX11-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]326; GFX11-CONTRACT-NEXT:    s_setpc_b64 s[30:31]327;328; GFX11-DENORM-LABEL: test_double_add_mul_rhs:329; GFX11-DENORM:       ; %bb.0: ; %.entry330; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)331; GFX11-DENORM-NEXT:    v_fma_f64 v[4:5], v[4:5], v[6:7], v[8:9]332; GFX11-DENORM-NEXT:    s_delay_alu instid0(VALU_DEP_1)333; GFX11-DENORM-NEXT:    v_fma_f64 v[0:1], v[0:1], v[2:3], v[4:5]334; GFX11-DENORM-NEXT:    s_setpc_b64 s[30:31]335.entry:336  %x = fmul fast double %c, %d337  %y = call fast double @llvm.fmuladd.f64(double %a, double %b, double %x)338  %z = fadd fast double %e, %y339  ret double %z340}341 342define <4 x float> @test_v4f32_add_mul(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, <4 x float> %e) {343; GFX9-CONTRACT-LABEL: test_v4f32_add_mul:344; GFX9-CONTRACT:       ; %bb.0: ; %.entry345; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)346; GFX9-CONTRACT-NEXT:    v_fma_f32 v8, v8, v12, v16347; GFX9-CONTRACT-NEXT:    v_fma_f32 v9, v9, v13, v17348; GFX9-CONTRACT-NEXT:    v_fma_f32 v10, v10, v14, v18349; GFX9-CONTRACT-NEXT:    v_fma_f32 v11, v11, v15, v19350; GFX9-CONTRACT-NEXT:    v_fma_f32 v0, v0, v4, v8351; GFX9-CONTRACT-NEXT:    v_fma_f32 v1, v1, v5, v9352; GFX9-CONTRACT-NEXT:    v_fma_f32 v2, v2, v6, v10353; GFX9-CONTRACT-NEXT:    v_fma_f32 v3, v3, v7, v11354; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]355;356; GFX9-DENORM-LABEL: test_v4f32_add_mul:357; GFX9-DENORM:       ; %bb.0: ; %.entry358; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)359; GFX9-DENORM-NEXT:    v_mad_f32 v8, v8, v12, v16360; GFX9-DENORM-NEXT:    v_mac_f32_e32 v8, v0, v4361; GFX9-DENORM-NEXT:    v_mad_f32 v4, v9, v13, v17362; GFX9-DENORM-NEXT:    v_mac_f32_e32 v4, v1, v5363; GFX9-DENORM-NEXT:    v_mad_f32 v5, v10, v14, v18364; GFX9-DENORM-NEXT:    v_mac_f32_e32 v5, v2, v6365; GFX9-DENORM-NEXT:    v_mad_f32 v6, v11, v15, v19366; GFX9-DENORM-NEXT:    v_mac_f32_e32 v6, v3, v7367; GFX9-DENORM-NEXT:    v_mov_b32_e32 v0, v8368; GFX9-DENORM-NEXT:    v_mov_b32_e32 v1, v4369; GFX9-DENORM-NEXT:    v_mov_b32_e32 v2, v5370; GFX9-DENORM-NEXT:    v_mov_b32_e32 v3, v6371; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]372;373; GFX10-CONTRACT-LABEL: test_v4f32_add_mul:374; GFX10-CONTRACT:       ; %bb.0: ; %.entry375; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)376; GFX10-CONTRACT-NEXT:    v_fma_f32 v8, v8, v12, v16377; GFX10-CONTRACT-NEXT:    v_fma_f32 v9, v9, v13, v17378; GFX10-CONTRACT-NEXT:    v_fma_f32 v10, v10, v14, v18379; GFX10-CONTRACT-NEXT:    v_fma_f32 v11, v11, v15, v19380; GFX10-CONTRACT-NEXT:    v_fmac_f32_e32 v8, v0, v4381; GFX10-CONTRACT-NEXT:    v_fmac_f32_e32 v9, v1, v5382; GFX10-CONTRACT-NEXT:    v_fmac_f32_e32 v10, v2, v6383; GFX10-CONTRACT-NEXT:    v_fmac_f32_e32 v11, v3, v7384; GFX10-CONTRACT-NEXT:    v_mov_b32_e32 v0, v8385; GFX10-CONTRACT-NEXT:    v_mov_b32_e32 v1, v9386; GFX10-CONTRACT-NEXT:    v_mov_b32_e32 v2, v10387; GFX10-CONTRACT-NEXT:    v_mov_b32_e32 v3, v11388; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]389;390; GFX10-DENORM-LABEL: test_v4f32_add_mul:391; GFX10-DENORM:       ; %bb.0: ; %.entry392; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)393; GFX10-DENORM-NEXT:    v_fma_f32 v8, v8, v12, v16394; GFX10-DENORM-NEXT:    v_fma_f32 v9, v9, v13, v17395; GFX10-DENORM-NEXT:    v_fma_f32 v10, v10, v14, v18396; GFX10-DENORM-NEXT:    v_fma_f32 v11, v11, v15, v19397; GFX10-DENORM-NEXT:    v_fmac_f32_e32 v8, v0, v4398; GFX10-DENORM-NEXT:    v_fmac_f32_e32 v9, v1, v5399; GFX10-DENORM-NEXT:    v_fmac_f32_e32 v10, v2, v6400; GFX10-DENORM-NEXT:    v_fmac_f32_e32 v11, v3, v7401; GFX10-DENORM-NEXT:    v_mov_b32_e32 v0, v8402; GFX10-DENORM-NEXT:    v_mov_b32_e32 v1, v9403; GFX10-DENORM-NEXT:    v_mov_b32_e32 v2, v10404; GFX10-DENORM-NEXT:    v_mov_b32_e32 v3, v11405; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]406;407; GFX11-CONTRACT-LABEL: test_v4f32_add_mul:408; GFX11-CONTRACT:       ; %bb.0: ; %.entry409; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)410; GFX11-CONTRACT-NEXT:    v_fma_f32 v8, v8, v12, v16411; GFX11-CONTRACT-NEXT:    v_fma_f32 v9, v9, v13, v17412; GFX11-CONTRACT-NEXT:    v_fma_f32 v10, v10, v14, v18413; GFX11-CONTRACT-NEXT:    v_fma_f32 v11, v11, v15, v19414; GFX11-CONTRACT-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)415; GFX11-CONTRACT-NEXT:    v_dual_fmac_f32 v8, v0, v4 :: v_dual_fmac_f32 v9, v1, v5416; GFX11-CONTRACT-NEXT:    v_dual_fmac_f32 v10, v2, v6 :: v_dual_fmac_f32 v11, v3, v7417; GFX11-CONTRACT-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)418; GFX11-CONTRACT-NEXT:    v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v9419; GFX11-CONTRACT-NEXT:    v_dual_mov_b32 v2, v10 :: v_dual_mov_b32 v3, v11420; GFX11-CONTRACT-NEXT:    s_setpc_b64 s[30:31]421;422; GFX11-DENORM-LABEL: test_v4f32_add_mul:423; GFX11-DENORM:       ; %bb.0: ; %.entry424; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)425; GFX11-DENORM-NEXT:    v_fma_f32 v8, v8, v12, v16426; GFX11-DENORM-NEXT:    v_fma_f32 v9, v9, v13, v17427; GFX11-DENORM-NEXT:    v_fma_f32 v10, v10, v14, v18428; GFX11-DENORM-NEXT:    v_fma_f32 v11, v11, v15, v19429; GFX11-DENORM-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)430; GFX11-DENORM-NEXT:    v_dual_fmac_f32 v8, v0, v4 :: v_dual_fmac_f32 v9, v1, v5431; GFX11-DENORM-NEXT:    v_dual_fmac_f32 v10, v2, v6 :: v_dual_fmac_f32 v11, v3, v7432; GFX11-DENORM-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)433; GFX11-DENORM-NEXT:    v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v9434; GFX11-DENORM-NEXT:    v_dual_mov_b32 v2, v10 :: v_dual_mov_b32 v3, v11435; GFX11-DENORM-NEXT:    s_setpc_b64 s[30:31]436.entry:437  %x = fmul fast <4 x float> %c, %d438  %y = call fast <4 x float> @llvm.fmuladd.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %x)439  %z = fadd fast <4 x float> %y, %e440  ret <4 x float> %z441}442 443define <4 x float> @test_v4f32_add_mul_rhs(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, <4 x float> %e) {444; GFX9-CONTRACT-LABEL: test_v4f32_add_mul_rhs:445; GFX9-CONTRACT:       ; %bb.0: ; %.entry446; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)447; GFX9-CONTRACT-NEXT:    v_fma_f32 v8, v8, v12, v16448; GFX9-CONTRACT-NEXT:    v_fma_f32 v9, v9, v13, v17449; GFX9-CONTRACT-NEXT:    v_fma_f32 v10, v10, v14, v18450; GFX9-CONTRACT-NEXT:    v_fma_f32 v11, v11, v15, v19451; GFX9-CONTRACT-NEXT:    v_fma_f32 v0, v0, v4, v8452; GFX9-CONTRACT-NEXT:    v_fma_f32 v1, v1, v5, v9453; GFX9-CONTRACT-NEXT:    v_fma_f32 v2, v2, v6, v10454; GFX9-CONTRACT-NEXT:    v_fma_f32 v3, v3, v7, v11455; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]456;457; GFX9-DENORM-LABEL: test_v4f32_add_mul_rhs:458; GFX9-DENORM:       ; %bb.0: ; %.entry459; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)460; GFX9-DENORM-NEXT:    v_mad_f32 v8, v8, v12, v16461; GFX9-DENORM-NEXT:    v_mac_f32_e32 v8, v0, v4462; GFX9-DENORM-NEXT:    v_mad_f32 v4, v9, v13, v17463; GFX9-DENORM-NEXT:    v_mac_f32_e32 v4, v1, v5464; GFX9-DENORM-NEXT:    v_mad_f32 v5, v10, v14, v18465; GFX9-DENORM-NEXT:    v_mac_f32_e32 v5, v2, v6466; GFX9-DENORM-NEXT:    v_mad_f32 v6, v11, v15, v19467; GFX9-DENORM-NEXT:    v_mac_f32_e32 v6, v3, v7468; GFX9-DENORM-NEXT:    v_mov_b32_e32 v0, v8469; GFX9-DENORM-NEXT:    v_mov_b32_e32 v1, v4470; GFX9-DENORM-NEXT:    v_mov_b32_e32 v2, v5471; GFX9-DENORM-NEXT:    v_mov_b32_e32 v3, v6472; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]473;474; GFX10-CONTRACT-LABEL: test_v4f32_add_mul_rhs:475; GFX10-CONTRACT:       ; %bb.0: ; %.entry476; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)477; GFX10-CONTRACT-NEXT:    v_fma_f32 v8, v8, v12, v16478; GFX10-CONTRACT-NEXT:    v_fma_f32 v9, v9, v13, v17479; GFX10-CONTRACT-NEXT:    v_fma_f32 v10, v10, v14, v18480; GFX10-CONTRACT-NEXT:    v_fma_f32 v11, v11, v15, v19481; GFX10-CONTRACT-NEXT:    v_fmac_f32_e32 v8, v0, v4482; GFX10-CONTRACT-NEXT:    v_fmac_f32_e32 v9, v1, v5483; GFX10-CONTRACT-NEXT:    v_fmac_f32_e32 v10, v2, v6484; GFX10-CONTRACT-NEXT:    v_fmac_f32_e32 v11, v3, v7485; GFX10-CONTRACT-NEXT:    v_mov_b32_e32 v0, v8486; GFX10-CONTRACT-NEXT:    v_mov_b32_e32 v1, v9487; GFX10-CONTRACT-NEXT:    v_mov_b32_e32 v2, v10488; GFX10-CONTRACT-NEXT:    v_mov_b32_e32 v3, v11489; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]490;491; GFX10-DENORM-LABEL: test_v4f32_add_mul_rhs:492; GFX10-DENORM:       ; %bb.0: ; %.entry493; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)494; GFX10-DENORM-NEXT:    v_fma_f32 v8, v8, v12, v16495; GFX10-DENORM-NEXT:    v_fma_f32 v9, v9, v13, v17496; GFX10-DENORM-NEXT:    v_fma_f32 v10, v10, v14, v18497; GFX10-DENORM-NEXT:    v_fma_f32 v11, v11, v15, v19498; GFX10-DENORM-NEXT:    v_fmac_f32_e32 v8, v0, v4499; GFX10-DENORM-NEXT:    v_fmac_f32_e32 v9, v1, v5500; GFX10-DENORM-NEXT:    v_fmac_f32_e32 v10, v2, v6501; GFX10-DENORM-NEXT:    v_fmac_f32_e32 v11, v3, v7502; GFX10-DENORM-NEXT:    v_mov_b32_e32 v0, v8503; GFX10-DENORM-NEXT:    v_mov_b32_e32 v1, v9504; GFX10-DENORM-NEXT:    v_mov_b32_e32 v2, v10505; GFX10-DENORM-NEXT:    v_mov_b32_e32 v3, v11506; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]507;508; GFX11-CONTRACT-LABEL: test_v4f32_add_mul_rhs:509; GFX11-CONTRACT:       ; %bb.0: ; %.entry510; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)511; GFX11-CONTRACT-NEXT:    v_fma_f32 v8, v8, v12, v16512; GFX11-CONTRACT-NEXT:    v_fma_f32 v9, v9, v13, v17513; GFX11-CONTRACT-NEXT:    v_fma_f32 v10, v10, v14, v18514; GFX11-CONTRACT-NEXT:    v_fma_f32 v11, v11, v15, v19515; GFX11-CONTRACT-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)516; GFX11-CONTRACT-NEXT:    v_dual_fmac_f32 v8, v0, v4 :: v_dual_fmac_f32 v9, v1, v5517; GFX11-CONTRACT-NEXT:    v_dual_fmac_f32 v10, v2, v6 :: v_dual_fmac_f32 v11, v3, v7518; GFX11-CONTRACT-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)519; GFX11-CONTRACT-NEXT:    v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v9520; GFX11-CONTRACT-NEXT:    v_dual_mov_b32 v2, v10 :: v_dual_mov_b32 v3, v11521; GFX11-CONTRACT-NEXT:    s_setpc_b64 s[30:31]522;523; GFX11-DENORM-LABEL: test_v4f32_add_mul_rhs:524; GFX11-DENORM:       ; %bb.0: ; %.entry525; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)526; GFX11-DENORM-NEXT:    v_fma_f32 v8, v8, v12, v16527; GFX11-DENORM-NEXT:    v_fma_f32 v9, v9, v13, v17528; GFX11-DENORM-NEXT:    v_fma_f32 v10, v10, v14, v18529; GFX11-DENORM-NEXT:    v_fma_f32 v11, v11, v15, v19530; GFX11-DENORM-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)531; GFX11-DENORM-NEXT:    v_dual_fmac_f32 v8, v0, v4 :: v_dual_fmac_f32 v9, v1, v5532; GFX11-DENORM-NEXT:    v_dual_fmac_f32 v10, v2, v6 :: v_dual_fmac_f32 v11, v3, v7533; GFX11-DENORM-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)534; GFX11-DENORM-NEXT:    v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v9535; GFX11-DENORM-NEXT:    v_dual_mov_b32 v2, v10 :: v_dual_mov_b32 v3, v11536; GFX11-DENORM-NEXT:    s_setpc_b64 s[30:31]537.entry:538  %x = fmul fast <4 x float> %c, %d539  %y = call fast <4 x float> @llvm.fmuladd.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %x)540  %z = fadd fast <4 x float> %e, %y541  ret <4 x float> %z542}543 544define <4 x half> @test_f16_add_mul(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x half> %d, <4 x half> %e) {545; GFX9-CONTRACT-LABEL: test_f16_add_mul:546; GFX9-CONTRACT:       ; %bb.0: ; %.entry547; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)548; GFX9-CONTRACT-NEXT:    v_pk_fma_f16 v4, v4, v6, v8549; GFX9-CONTRACT-NEXT:    v_pk_fma_f16 v5, v5, v7, v9550; GFX9-CONTRACT-NEXT:    v_pk_fma_f16 v0, v0, v2, v4551; GFX9-CONTRACT-NEXT:    v_pk_fma_f16 v1, v1, v3, v5552; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]553;554; GFX9-DENORM-LABEL: test_f16_add_mul:555; GFX9-DENORM:       ; %bb.0: ; %.entry556; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)557; GFX9-DENORM-NEXT:    v_pk_mul_f16 v4, v4, v6558; GFX9-DENORM-NEXT:    v_pk_mul_f16 v5, v5, v7559; GFX9-DENORM-NEXT:    v_pk_mul_f16 v0, v0, v2560; GFX9-DENORM-NEXT:    v_pk_mul_f16 v1, v1, v3561; GFX9-DENORM-NEXT:    v_pk_add_f16 v0, v0, v4562; GFX9-DENORM-NEXT:    v_pk_add_f16 v1, v1, v5563; GFX9-DENORM-NEXT:    v_pk_add_f16 v0, v0, v8564; GFX9-DENORM-NEXT:    v_pk_add_f16 v1, v1, v9565; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]566;567; GFX10-CONTRACT-LABEL: test_f16_add_mul:568; GFX10-CONTRACT:       ; %bb.0: ; %.entry569; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)570; GFX10-CONTRACT-NEXT:    v_pk_fma_f16 v4, v4, v6, v8571; GFX10-CONTRACT-NEXT:    v_pk_fma_f16 v5, v5, v7, v9572; GFX10-CONTRACT-NEXT:    v_pk_fma_f16 v0, v0, v2, v4573; GFX10-CONTRACT-NEXT:    v_pk_fma_f16 v1, v1, v3, v5574; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]575;576; GFX10-DENORM-LABEL: test_f16_add_mul:577; GFX10-DENORM:       ; %bb.0: ; %.entry578; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)579; GFX10-DENORM-NEXT:    v_pk_mul_f16 v4, v4, v6580; GFX10-DENORM-NEXT:    v_pk_mul_f16 v5, v5, v7581; GFX10-DENORM-NEXT:    v_pk_mul_f16 v0, v0, v2582; GFX10-DENORM-NEXT:    v_pk_mul_f16 v1, v1, v3583; GFX10-DENORM-NEXT:    v_pk_add_f16 v0, v0, v4584; GFX10-DENORM-NEXT:    v_pk_add_f16 v1, v1, v5585; GFX10-DENORM-NEXT:    v_pk_add_f16 v0, v0, v8586; GFX10-DENORM-NEXT:    v_pk_add_f16 v1, v1, v9587; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]588;589; GFX11-CONTRACT-LABEL: test_f16_add_mul:590; GFX11-CONTRACT:       ; %bb.0: ; %.entry591; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)592; GFX11-CONTRACT-NEXT:    v_pk_fma_f16 v4, v4, v6, v8593; GFX11-CONTRACT-NEXT:    v_pk_fma_f16 v5, v5, v7, v9594; GFX11-CONTRACT-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)595; GFX11-CONTRACT-NEXT:    v_pk_fma_f16 v0, v0, v2, v4596; GFX11-CONTRACT-NEXT:    v_pk_fma_f16 v1, v1, v3, v5597; GFX11-CONTRACT-NEXT:    s_setpc_b64 s[30:31]598;599; GFX11-DENORM-LABEL: test_f16_add_mul:600; GFX11-DENORM:       ; %bb.0: ; %.entry601; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)602; GFX11-DENORM-NEXT:    v_pk_mul_f16 v4, v4, v6603; GFX11-DENORM-NEXT:    v_pk_mul_f16 v5, v5, v7604; GFX11-DENORM-NEXT:    v_pk_mul_f16 v0, v0, v2605; GFX11-DENORM-NEXT:    v_pk_mul_f16 v1, v1, v3606; GFX11-DENORM-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)607; GFX11-DENORM-NEXT:    v_pk_add_f16 v0, v0, v4608; GFX11-DENORM-NEXT:    v_pk_add_f16 v1, v1, v5609; GFX11-DENORM-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)610; GFX11-DENORM-NEXT:    v_pk_add_f16 v0, v0, v8611; GFX11-DENORM-NEXT:    v_pk_add_f16 v1, v1, v9612; GFX11-DENORM-NEXT:    s_setpc_b64 s[30:31]613.entry:614  %x = fmul fast <4 x half> %c, %d615  %y = call fast <4 x half> @llvm.fmuladd.v4f16(<4 x half> %a, <4 x half> %b, <4 x half> %x)616  %z = fadd fast <4 x half> %y, %e617  ret <4 x half> %z618}619 620define <4 x half> @test_f16_add_mul_rhs(<4 x half> %a, <4 x half> %b, <4 x half> %c, <4 x half> %d, <4 x half> %e) {621; GFX9-CONTRACT-LABEL: test_f16_add_mul_rhs:622; GFX9-CONTRACT:       ; %bb.0: ; %.entry623; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)624; GFX9-CONTRACT-NEXT:    v_pk_fma_f16 v4, v4, v6, v8625; GFX9-CONTRACT-NEXT:    v_pk_fma_f16 v5, v5, v7, v9626; GFX9-CONTRACT-NEXT:    v_pk_fma_f16 v0, v0, v2, v4627; GFX9-CONTRACT-NEXT:    v_pk_fma_f16 v1, v1, v3, v5628; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]629;630; GFX9-DENORM-LABEL: test_f16_add_mul_rhs:631; GFX9-DENORM:       ; %bb.0: ; %.entry632; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)633; GFX9-DENORM-NEXT:    v_pk_mul_f16 v4, v4, v6634; GFX9-DENORM-NEXT:    v_pk_mul_f16 v5, v5, v7635; GFX9-DENORM-NEXT:    v_pk_mul_f16 v0, v0, v2636; GFX9-DENORM-NEXT:    v_pk_mul_f16 v1, v1, v3637; GFX9-DENORM-NEXT:    v_pk_add_f16 v0, v0, v4638; GFX9-DENORM-NEXT:    v_pk_add_f16 v1, v1, v5639; GFX9-DENORM-NEXT:    v_pk_add_f16 v0, v8, v0640; GFX9-DENORM-NEXT:    v_pk_add_f16 v1, v9, v1641; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]642;643; GFX10-CONTRACT-LABEL: test_f16_add_mul_rhs:644; GFX10-CONTRACT:       ; %bb.0: ; %.entry645; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)646; GFX10-CONTRACT-NEXT:    v_pk_fma_f16 v4, v4, v6, v8647; GFX10-CONTRACT-NEXT:    v_pk_fma_f16 v5, v5, v7, v9648; GFX10-CONTRACT-NEXT:    v_pk_fma_f16 v0, v0, v2, v4649; GFX10-CONTRACT-NEXT:    v_pk_fma_f16 v1, v1, v3, v5650; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]651;652; GFX10-DENORM-LABEL: test_f16_add_mul_rhs:653; GFX10-DENORM:       ; %bb.0: ; %.entry654; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)655; GFX10-DENORM-NEXT:    v_pk_mul_f16 v4, v4, v6656; GFX10-DENORM-NEXT:    v_pk_mul_f16 v5, v5, v7657; GFX10-DENORM-NEXT:    v_pk_mul_f16 v0, v0, v2658; GFX10-DENORM-NEXT:    v_pk_mul_f16 v1, v1, v3659; GFX10-DENORM-NEXT:    v_pk_add_f16 v0, v0, v4660; GFX10-DENORM-NEXT:    v_pk_add_f16 v1, v1, v5661; GFX10-DENORM-NEXT:    v_pk_add_f16 v0, v8, v0662; GFX10-DENORM-NEXT:    v_pk_add_f16 v1, v9, v1663; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]664;665; GFX11-CONTRACT-LABEL: test_f16_add_mul_rhs:666; GFX11-CONTRACT:       ; %bb.0: ; %.entry667; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)668; GFX11-CONTRACT-NEXT:    v_pk_fma_f16 v4, v4, v6, v8669; GFX11-CONTRACT-NEXT:    v_pk_fma_f16 v5, v5, v7, v9670; GFX11-CONTRACT-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)671; GFX11-CONTRACT-NEXT:    v_pk_fma_f16 v0, v0, v2, v4672; GFX11-CONTRACT-NEXT:    v_pk_fma_f16 v1, v1, v3, v5673; GFX11-CONTRACT-NEXT:    s_setpc_b64 s[30:31]674;675; GFX11-DENORM-LABEL: test_f16_add_mul_rhs:676; GFX11-DENORM:       ; %bb.0: ; %.entry677; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)678; GFX11-DENORM-NEXT:    v_pk_mul_f16 v4, v4, v6679; GFX11-DENORM-NEXT:    v_pk_mul_f16 v5, v5, v7680; GFX11-DENORM-NEXT:    v_pk_mul_f16 v0, v0, v2681; GFX11-DENORM-NEXT:    v_pk_mul_f16 v1, v1, v3682; GFX11-DENORM-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)683; GFX11-DENORM-NEXT:    v_pk_add_f16 v0, v0, v4684; GFX11-DENORM-NEXT:    v_pk_add_f16 v1, v1, v5685; GFX11-DENORM-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)686; GFX11-DENORM-NEXT:    v_pk_add_f16 v0, v8, v0687; GFX11-DENORM-NEXT:    v_pk_add_f16 v1, v9, v1688; GFX11-DENORM-NEXT:    s_setpc_b64 s[30:31]689.entry:690  %x = fmul fast <4 x half> %c, %d691  %y = call fast <4 x half> @llvm.fmuladd.v4f16(<4 x half> %a, <4 x half> %b, <4 x half> %x)692  %z = fadd fast <4 x half> %e, %y693  ret <4 x half> %z694}695 696define <4 x double> @test_f64_add_mul(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x double> %d, <4 x double> %e) {697; GFX9-CONTRACT-LABEL: test_f64_add_mul:698; GFX9-CONTRACT:       ; %bb.0: ; %.entry699; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)700; GFX9-CONTRACT-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:4701; GFX9-CONTRACT-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:8702; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0)703; GFX9-CONTRACT-NEXT:    v_fma_f64 v[16:17], v[16:17], v[24:25], v[31:32]704; GFX9-CONTRACT-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:12705; GFX9-CONTRACT-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:16706; GFX9-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[8:9], v[16:17]707; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0)708; GFX9-CONTRACT-NEXT:    v_fma_f64 v[18:19], v[18:19], v[26:27], v[24:25]709; GFX9-CONTRACT-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:20710; GFX9-CONTRACT-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:24711; GFX9-CONTRACT-NEXT:    v_fma_f64 v[2:3], v[2:3], v[10:11], v[18:19]712; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0)713; GFX9-CONTRACT-NEXT:    v_fma_f64 v[20:21], v[20:21], v[28:29], v[24:25]714; GFX9-CONTRACT-NEXT:    buffer_load_dword v31, off, s[0:3], s32715; GFX9-CONTRACT-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:28716; GFX9-CONTRACT-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:32717; GFX9-CONTRACT-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[20:21]718; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0)719; GFX9-CONTRACT-NEXT:    v_fma_f64 v[22:23], v[22:23], v[30:31], v[24:25]720; GFX9-CONTRACT-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[22:23]721; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]722;723; GFX9-DENORM-LABEL: test_f64_add_mul:724; GFX9-DENORM:       ; %bb.0: ; %.entry725; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)726; GFX9-DENORM-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:4727; GFX9-DENORM-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:8728; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)729; GFX9-DENORM-NEXT:    v_fma_f64 v[16:17], v[16:17], v[24:25], v[31:32]730; GFX9-DENORM-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:12731; GFX9-DENORM-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:16732; GFX9-DENORM-NEXT:    v_fma_f64 v[0:1], v[0:1], v[8:9], v[16:17]733; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)734; GFX9-DENORM-NEXT:    v_fma_f64 v[18:19], v[18:19], v[26:27], v[24:25]735; GFX9-DENORM-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:20736; GFX9-DENORM-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:24737; GFX9-DENORM-NEXT:    v_fma_f64 v[2:3], v[2:3], v[10:11], v[18:19]738; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)739; GFX9-DENORM-NEXT:    v_fma_f64 v[20:21], v[20:21], v[28:29], v[24:25]740; GFX9-DENORM-NEXT:    buffer_load_dword v31, off, s[0:3], s32741; GFX9-DENORM-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:28742; GFX9-DENORM-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:32743; GFX9-DENORM-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[20:21]744; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)745; GFX9-DENORM-NEXT:    v_fma_f64 v[22:23], v[22:23], v[30:31], v[24:25]746; GFX9-DENORM-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[22:23]747; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]748;749; GFX10-CONTRACT-LABEL: test_f64_add_mul:750; GFX10-CONTRACT:       ; %bb.0: ; %.entry751; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)752; GFX10-CONTRACT-NEXT:    s_clause 0x8753; GFX10-CONTRACT-NEXT:    buffer_load_dword v31, off, s[0:3], s32754; GFX10-CONTRACT-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:4755; GFX10-CONTRACT-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:8756; GFX10-CONTRACT-NEXT:    buffer_load_dword v34, off, s[0:3], s32 offset:12757; GFX10-CONTRACT-NEXT:    buffer_load_dword v35, off, s[0:3], s32 offset:16758; GFX10-CONTRACT-NEXT:    buffer_load_dword v36, off, s[0:3], s32 offset:20759; GFX10-CONTRACT-NEXT:    buffer_load_dword v37, off, s[0:3], s32 offset:24760; GFX10-CONTRACT-NEXT:    buffer_load_dword v38, off, s[0:3], s32 offset:28761; GFX10-CONTRACT-NEXT:    buffer_load_dword v39, off, s[0:3], s32 offset:32762; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(6)763; GFX10-CONTRACT-NEXT:    v_fma_f64 v[16:17], v[16:17], v[24:25], v[32:33]764; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(4)765; GFX10-CONTRACT-NEXT:    v_fma_f64 v[18:19], v[18:19], v[26:27], v[34:35]766; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(2)767; GFX10-CONTRACT-NEXT:    v_fma_f64 v[20:21], v[20:21], v[28:29], v[36:37]768; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0)769; GFX10-CONTRACT-NEXT:    v_fma_f64 v[22:23], v[22:23], v[30:31], v[38:39]770; GFX10-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[8:9], v[16:17]771; GFX10-CONTRACT-NEXT:    v_fma_f64 v[2:3], v[2:3], v[10:11], v[18:19]772; GFX10-CONTRACT-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[20:21]773; GFX10-CONTRACT-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[22:23]774; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]775;776; GFX10-DENORM-LABEL: test_f64_add_mul:777; GFX10-DENORM:       ; %bb.0: ; %.entry778; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)779; GFX10-DENORM-NEXT:    s_clause 0x8780; GFX10-DENORM-NEXT:    buffer_load_dword v31, off, s[0:3], s32781; GFX10-DENORM-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:4782; GFX10-DENORM-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:8783; GFX10-DENORM-NEXT:    buffer_load_dword v34, off, s[0:3], s32 offset:12784; GFX10-DENORM-NEXT:    buffer_load_dword v35, off, s[0:3], s32 offset:16785; GFX10-DENORM-NEXT:    buffer_load_dword v36, off, s[0:3], s32 offset:20786; GFX10-DENORM-NEXT:    buffer_load_dword v37, off, s[0:3], s32 offset:24787; GFX10-DENORM-NEXT:    buffer_load_dword v38, off, s[0:3], s32 offset:28788; GFX10-DENORM-NEXT:    buffer_load_dword v39, off, s[0:3], s32 offset:32789; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(6)790; GFX10-DENORM-NEXT:    v_fma_f64 v[16:17], v[16:17], v[24:25], v[32:33]791; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(4)792; GFX10-DENORM-NEXT:    v_fma_f64 v[18:19], v[18:19], v[26:27], v[34:35]793; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(2)794; GFX10-DENORM-NEXT:    v_fma_f64 v[20:21], v[20:21], v[28:29], v[36:37]795; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)796; GFX10-DENORM-NEXT:    v_fma_f64 v[22:23], v[22:23], v[30:31], v[38:39]797; GFX10-DENORM-NEXT:    v_fma_f64 v[0:1], v[0:1], v[8:9], v[16:17]798; GFX10-DENORM-NEXT:    v_fma_f64 v[2:3], v[2:3], v[10:11], v[18:19]799; GFX10-DENORM-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[20:21]800; GFX10-DENORM-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[22:23]801; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]802;803; GFX11-CONTRACT-LABEL: test_f64_add_mul:804; GFX11-CONTRACT:       ; %bb.0: ; %.entry805; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)806; GFX11-CONTRACT-NEXT:    s_clause 0x8807; GFX11-CONTRACT-NEXT:    scratch_load_b32 v31, off, s32808; GFX11-CONTRACT-NEXT:    scratch_load_b32 v32, off, s32 offset:4809; GFX11-CONTRACT-NEXT:    scratch_load_b32 v33, off, s32 offset:8810; GFX11-CONTRACT-NEXT:    scratch_load_b32 v34, off, s32 offset:12811; GFX11-CONTRACT-NEXT:    scratch_load_b32 v35, off, s32 offset:16812; GFX11-CONTRACT-NEXT:    scratch_load_b32 v36, off, s32 offset:20813; GFX11-CONTRACT-NEXT:    scratch_load_b32 v37, off, s32 offset:24814; GFX11-CONTRACT-NEXT:    scratch_load_b32 v38, off, s32 offset:28815; GFX11-CONTRACT-NEXT:    scratch_load_b32 v39, off, s32 offset:32816; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(6)817; GFX11-CONTRACT-NEXT:    v_fma_f64 v[16:17], v[16:17], v[24:25], v[32:33]818; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(4)819; GFX11-CONTRACT-NEXT:    v_fma_f64 v[18:19], v[18:19], v[26:27], v[34:35]820; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(2)821; GFX11-CONTRACT-NEXT:    v_fma_f64 v[20:21], v[20:21], v[28:29], v[36:37]822; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(0)823; GFX11-CONTRACT-NEXT:    v_fma_f64 v[22:23], v[22:23], v[30:31], v[38:39]824; GFX11-CONTRACT-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)825; GFX11-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[8:9], v[16:17]826; GFX11-CONTRACT-NEXT:    v_fma_f64 v[2:3], v[2:3], v[10:11], v[18:19]827; GFX11-CONTRACT-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)828; GFX11-CONTRACT-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[20:21]829; GFX11-CONTRACT-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[22:23]830; GFX11-CONTRACT-NEXT:    s_setpc_b64 s[30:31]831;832; GFX11-DENORM-LABEL: test_f64_add_mul:833; GFX11-DENORM:       ; %bb.0: ; %.entry834; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)835; GFX11-DENORM-NEXT:    s_clause 0x8836; GFX11-DENORM-NEXT:    scratch_load_b32 v31, off, s32837; GFX11-DENORM-NEXT:    scratch_load_b32 v32, off, s32 offset:4838; GFX11-DENORM-NEXT:    scratch_load_b32 v33, off, s32 offset:8839; GFX11-DENORM-NEXT:    scratch_load_b32 v34, off, s32 offset:12840; GFX11-DENORM-NEXT:    scratch_load_b32 v35, off, s32 offset:16841; GFX11-DENORM-NEXT:    scratch_load_b32 v36, off, s32 offset:20842; GFX11-DENORM-NEXT:    scratch_load_b32 v37, off, s32 offset:24843; GFX11-DENORM-NEXT:    scratch_load_b32 v38, off, s32 offset:28844; GFX11-DENORM-NEXT:    scratch_load_b32 v39, off, s32 offset:32845; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(6)846; GFX11-DENORM-NEXT:    v_fma_f64 v[16:17], v[16:17], v[24:25], v[32:33]847; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(4)848; GFX11-DENORM-NEXT:    v_fma_f64 v[18:19], v[18:19], v[26:27], v[34:35]849; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(2)850; GFX11-DENORM-NEXT:    v_fma_f64 v[20:21], v[20:21], v[28:29], v[36:37]851; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(0)852; GFX11-DENORM-NEXT:    v_fma_f64 v[22:23], v[22:23], v[30:31], v[38:39]853; GFX11-DENORM-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)854; GFX11-DENORM-NEXT:    v_fma_f64 v[0:1], v[0:1], v[8:9], v[16:17]855; GFX11-DENORM-NEXT:    v_fma_f64 v[2:3], v[2:3], v[10:11], v[18:19]856; GFX11-DENORM-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)857; GFX11-DENORM-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[20:21]858; GFX11-DENORM-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[22:23]859; GFX11-DENORM-NEXT:    s_setpc_b64 s[30:31]860.entry:861  %x = fmul fast <4 x double> %c, %d862  %y = call fast <4 x double> @llvm.fmuladd.v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %x)863  %z = fadd fast <4 x double> %y, %e864  ret <4 x double> %z865}866 867define <4 x double> @test_f64_add_mul_rhs(<4 x double> %a, <4 x double> %b, <4 x double> %c, <4 x double> %d, <4 x double> %e) {868; GFX9-CONTRACT-LABEL: test_f64_add_mul_rhs:869; GFX9-CONTRACT:       ; %bb.0: ; %.entry870; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)871; GFX9-CONTRACT-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:4872; GFX9-CONTRACT-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:8873; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0)874; GFX9-CONTRACT-NEXT:    v_fma_f64 v[16:17], v[16:17], v[24:25], v[31:32]875; GFX9-CONTRACT-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:12876; GFX9-CONTRACT-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:16877; GFX9-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[8:9], v[16:17]878; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0)879; GFX9-CONTRACT-NEXT:    v_fma_f64 v[18:19], v[18:19], v[26:27], v[24:25]880; GFX9-CONTRACT-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:20881; GFX9-CONTRACT-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:24882; GFX9-CONTRACT-NEXT:    v_fma_f64 v[2:3], v[2:3], v[10:11], v[18:19]883; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0)884; GFX9-CONTRACT-NEXT:    v_fma_f64 v[20:21], v[20:21], v[28:29], v[24:25]885; GFX9-CONTRACT-NEXT:    buffer_load_dword v31, off, s[0:3], s32886; GFX9-CONTRACT-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:28887; GFX9-CONTRACT-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:32888; GFX9-CONTRACT-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[20:21]889; GFX9-CONTRACT-NEXT:    s_waitcnt vmcnt(0)890; GFX9-CONTRACT-NEXT:    v_fma_f64 v[22:23], v[22:23], v[30:31], v[24:25]891; GFX9-CONTRACT-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[22:23]892; GFX9-CONTRACT-NEXT:    s_setpc_b64 s[30:31]893;894; GFX9-DENORM-LABEL: test_f64_add_mul_rhs:895; GFX9-DENORM:       ; %bb.0: ; %.entry896; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)897; GFX9-DENORM-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:4898; GFX9-DENORM-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:8899; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)900; GFX9-DENORM-NEXT:    v_fma_f64 v[16:17], v[16:17], v[24:25], v[31:32]901; GFX9-DENORM-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:12902; GFX9-DENORM-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:16903; GFX9-DENORM-NEXT:    v_fma_f64 v[0:1], v[0:1], v[8:9], v[16:17]904; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)905; GFX9-DENORM-NEXT:    v_fma_f64 v[18:19], v[18:19], v[26:27], v[24:25]906; GFX9-DENORM-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:20907; GFX9-DENORM-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:24908; GFX9-DENORM-NEXT:    v_fma_f64 v[2:3], v[2:3], v[10:11], v[18:19]909; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)910; GFX9-DENORM-NEXT:    v_fma_f64 v[20:21], v[20:21], v[28:29], v[24:25]911; GFX9-DENORM-NEXT:    buffer_load_dword v31, off, s[0:3], s32912; GFX9-DENORM-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:28913; GFX9-DENORM-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:32914; GFX9-DENORM-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[20:21]915; GFX9-DENORM-NEXT:    s_waitcnt vmcnt(0)916; GFX9-DENORM-NEXT:    v_fma_f64 v[22:23], v[22:23], v[30:31], v[24:25]917; GFX9-DENORM-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[22:23]918; GFX9-DENORM-NEXT:    s_setpc_b64 s[30:31]919;920; GFX10-CONTRACT-LABEL: test_f64_add_mul_rhs:921; GFX10-CONTRACT:       ; %bb.0: ; %.entry922; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)923; GFX10-CONTRACT-NEXT:    s_clause 0x8924; GFX10-CONTRACT-NEXT:    buffer_load_dword v31, off, s[0:3], s32925; GFX10-CONTRACT-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:4926; GFX10-CONTRACT-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:8927; GFX10-CONTRACT-NEXT:    buffer_load_dword v34, off, s[0:3], s32 offset:12928; GFX10-CONTRACT-NEXT:    buffer_load_dword v35, off, s[0:3], s32 offset:16929; GFX10-CONTRACT-NEXT:    buffer_load_dword v36, off, s[0:3], s32 offset:20930; GFX10-CONTRACT-NEXT:    buffer_load_dword v37, off, s[0:3], s32 offset:24931; GFX10-CONTRACT-NEXT:    buffer_load_dword v38, off, s[0:3], s32 offset:28932; GFX10-CONTRACT-NEXT:    buffer_load_dword v39, off, s[0:3], s32 offset:32933; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(6)934; GFX10-CONTRACT-NEXT:    v_fma_f64 v[16:17], v[16:17], v[24:25], v[32:33]935; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(4)936; GFX10-CONTRACT-NEXT:    v_fma_f64 v[18:19], v[18:19], v[26:27], v[34:35]937; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(2)938; GFX10-CONTRACT-NEXT:    v_fma_f64 v[20:21], v[20:21], v[28:29], v[36:37]939; GFX10-CONTRACT-NEXT:    s_waitcnt vmcnt(0)940; GFX10-CONTRACT-NEXT:    v_fma_f64 v[22:23], v[22:23], v[30:31], v[38:39]941; GFX10-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[8:9], v[16:17]942; GFX10-CONTRACT-NEXT:    v_fma_f64 v[2:3], v[2:3], v[10:11], v[18:19]943; GFX10-CONTRACT-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[20:21]944; GFX10-CONTRACT-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[22:23]945; GFX10-CONTRACT-NEXT:    s_setpc_b64 s[30:31]946;947; GFX10-DENORM-LABEL: test_f64_add_mul_rhs:948; GFX10-DENORM:       ; %bb.0: ; %.entry949; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)950; GFX10-DENORM-NEXT:    s_clause 0x8951; GFX10-DENORM-NEXT:    buffer_load_dword v31, off, s[0:3], s32952; GFX10-DENORM-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:4953; GFX10-DENORM-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:8954; GFX10-DENORM-NEXT:    buffer_load_dword v34, off, s[0:3], s32 offset:12955; GFX10-DENORM-NEXT:    buffer_load_dword v35, off, s[0:3], s32 offset:16956; GFX10-DENORM-NEXT:    buffer_load_dword v36, off, s[0:3], s32 offset:20957; GFX10-DENORM-NEXT:    buffer_load_dword v37, off, s[0:3], s32 offset:24958; GFX10-DENORM-NEXT:    buffer_load_dword v38, off, s[0:3], s32 offset:28959; GFX10-DENORM-NEXT:    buffer_load_dword v39, off, s[0:3], s32 offset:32960; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(6)961; GFX10-DENORM-NEXT:    v_fma_f64 v[16:17], v[16:17], v[24:25], v[32:33]962; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(4)963; GFX10-DENORM-NEXT:    v_fma_f64 v[18:19], v[18:19], v[26:27], v[34:35]964; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(2)965; GFX10-DENORM-NEXT:    v_fma_f64 v[20:21], v[20:21], v[28:29], v[36:37]966; GFX10-DENORM-NEXT:    s_waitcnt vmcnt(0)967; GFX10-DENORM-NEXT:    v_fma_f64 v[22:23], v[22:23], v[30:31], v[38:39]968; GFX10-DENORM-NEXT:    v_fma_f64 v[0:1], v[0:1], v[8:9], v[16:17]969; GFX10-DENORM-NEXT:    v_fma_f64 v[2:3], v[2:3], v[10:11], v[18:19]970; GFX10-DENORM-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[20:21]971; GFX10-DENORM-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[22:23]972; GFX10-DENORM-NEXT:    s_setpc_b64 s[30:31]973;974; GFX11-CONTRACT-LABEL: test_f64_add_mul_rhs:975; GFX11-CONTRACT:       ; %bb.0: ; %.entry976; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)977; GFX11-CONTRACT-NEXT:    s_clause 0x8978; GFX11-CONTRACT-NEXT:    scratch_load_b32 v31, off, s32979; GFX11-CONTRACT-NEXT:    scratch_load_b32 v32, off, s32 offset:4980; GFX11-CONTRACT-NEXT:    scratch_load_b32 v33, off, s32 offset:8981; GFX11-CONTRACT-NEXT:    scratch_load_b32 v34, off, s32 offset:12982; GFX11-CONTRACT-NEXT:    scratch_load_b32 v35, off, s32 offset:16983; GFX11-CONTRACT-NEXT:    scratch_load_b32 v36, off, s32 offset:20984; GFX11-CONTRACT-NEXT:    scratch_load_b32 v37, off, s32 offset:24985; GFX11-CONTRACT-NEXT:    scratch_load_b32 v38, off, s32 offset:28986; GFX11-CONTRACT-NEXT:    scratch_load_b32 v39, off, s32 offset:32987; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(6)988; GFX11-CONTRACT-NEXT:    v_fma_f64 v[16:17], v[16:17], v[24:25], v[32:33]989; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(4)990; GFX11-CONTRACT-NEXT:    v_fma_f64 v[18:19], v[18:19], v[26:27], v[34:35]991; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(2)992; GFX11-CONTRACT-NEXT:    v_fma_f64 v[20:21], v[20:21], v[28:29], v[36:37]993; GFX11-CONTRACT-NEXT:    s_waitcnt vmcnt(0)994; GFX11-CONTRACT-NEXT:    v_fma_f64 v[22:23], v[22:23], v[30:31], v[38:39]995; GFX11-CONTRACT-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)996; GFX11-CONTRACT-NEXT:    v_fma_f64 v[0:1], v[0:1], v[8:9], v[16:17]997; GFX11-CONTRACT-NEXT:    v_fma_f64 v[2:3], v[2:3], v[10:11], v[18:19]998; GFX11-CONTRACT-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)999; GFX11-CONTRACT-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[20:21]1000; GFX11-CONTRACT-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[22:23]1001; GFX11-CONTRACT-NEXT:    s_setpc_b64 s[30:31]1002;1003; GFX11-DENORM-LABEL: test_f64_add_mul_rhs:1004; GFX11-DENORM:       ; %bb.0: ; %.entry1005; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1006; GFX11-DENORM-NEXT:    s_clause 0x81007; GFX11-DENORM-NEXT:    scratch_load_b32 v31, off, s321008; GFX11-DENORM-NEXT:    scratch_load_b32 v32, off, s32 offset:41009; GFX11-DENORM-NEXT:    scratch_load_b32 v33, off, s32 offset:81010; GFX11-DENORM-NEXT:    scratch_load_b32 v34, off, s32 offset:121011; GFX11-DENORM-NEXT:    scratch_load_b32 v35, off, s32 offset:161012; GFX11-DENORM-NEXT:    scratch_load_b32 v36, off, s32 offset:201013; GFX11-DENORM-NEXT:    scratch_load_b32 v37, off, s32 offset:241014; GFX11-DENORM-NEXT:    scratch_load_b32 v38, off, s32 offset:281015; GFX11-DENORM-NEXT:    scratch_load_b32 v39, off, s32 offset:321016; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(6)1017; GFX11-DENORM-NEXT:    v_fma_f64 v[16:17], v[16:17], v[24:25], v[32:33]1018; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(4)1019; GFX11-DENORM-NEXT:    v_fma_f64 v[18:19], v[18:19], v[26:27], v[34:35]1020; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(2)1021; GFX11-DENORM-NEXT:    v_fma_f64 v[20:21], v[20:21], v[28:29], v[36:37]1022; GFX11-DENORM-NEXT:    s_waitcnt vmcnt(0)1023; GFX11-DENORM-NEXT:    v_fma_f64 v[22:23], v[22:23], v[30:31], v[38:39]1024; GFX11-DENORM-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1025; GFX11-DENORM-NEXT:    v_fma_f64 v[0:1], v[0:1], v[8:9], v[16:17]1026; GFX11-DENORM-NEXT:    v_fma_f64 v[2:3], v[2:3], v[10:11], v[18:19]1027; GFX11-DENORM-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1028; GFX11-DENORM-NEXT:    v_fma_f64 v[4:5], v[4:5], v[12:13], v[20:21]1029; GFX11-DENORM-NEXT:    v_fma_f64 v[6:7], v[6:7], v[14:15], v[22:23]1030; GFX11-DENORM-NEXT:    s_setpc_b64 s[30:31]1031.entry:1032  %x = fmul fast <4 x double> %c, %d1033  %y = call fast <4 x double> @llvm.fmuladd.v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %x)1034  %z = fadd fast <4 x double> %e, %y1035  ret <4 x double> %z1036}1037 1038declare <4 x double> @llvm.fmuladd.v4f64(<4 x double>, <4 x double>, <4 x double>) #01039declare <4 x float> @llvm.fmuladd.v4f32(<4 x float>, <4 x float>, <4 x float>) #01040declare <4 x half> @llvm.fmuladd.v4f16(<4 x half>, <4 x half>, <4 x half>) #01041declare double @llvm.fmuladd.f64(double, double, double) #01042declare float @llvm.fmuladd.f32(float, float, float) #01043declare half @llvm.fmuladd.f16(half, half, half) #01044attributes #0 = { nounwind readnone }1045