[llvm] [LLVM] Combine v_cvt_f32_f16 and v_add_f32/v_mul_f32 into v_fma_mix_f32 (PR #160151)
Jay Foad via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 23 02:22:08 PDT 2025
================
@@ -752,19 +726,25 @@ define float @fsub_fpext_muladd_mul_f16_to_f32(half %x, half %y, float %z, half
; GFX11-FAKE16-NEXT: v_mul_f16_e32 v3, v3, v4
; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
; GFX11-FAKE16-NEXT: v_fmac_f16_e32 v3, v0, v1
-; GFX11-FAKE16-NEXT: v_cvt_f32_f16_e32 v0, v3
-; GFX11-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX11-FAKE16-NEXT: v_sub_f32_e32 v0, v0, v2
+; GFX11-FAKE16-NEXT: v_fma_mix_f32 v0, v3, 1, -v2 op_sel_hi:[1,0,0]
; GFX11-FAKE16-NEXT: s_setpc_b64 s[30:31]
;
-; GFX89-LABEL: fsub_fpext_muladd_mul_f16_to_f32:
-; GFX89: ; %bb.0: ; %entry
-; GFX89-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX89-NEXT: v_mul_f16_e32 v3, v3, v4
-; GFX89-NEXT: v_fma_f16 v0, v0, v1, v3
-; GFX89-NEXT: v_cvt_f32_f16_e32 v0, v0
-; GFX89-NEXT: v_sub_f32_e32 v0, v0, v2
-; GFX89-NEXT: s_setpc_b64 s[30:31]
+; GFX9-F32FLUSH-LABEL: fsub_fpext_muladd_mul_f16_to_f32:
+; GFX9-F32FLUSH: ; %bb.0: ; %entry
+; GFX9-F32FLUSH-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX9-F32FLUSH-NEXT: v_mul_f16_e32 v3, v3, v4
+; GFX9-F32FLUSH-NEXT: v_fma_f16 v0, v0, v1, v3
+; GFX9-F32FLUSH-NEXT: v_mad_mix_f32 v0, v0, 1, -v2 op_sel_hi:[1,0,0]
+; GFX9-F32FLUSH-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX9-F32DENORM-LABEL: fsub_fpext_muladd_mul_f16_to_f32:
+; GFX9-F32DENORM: ; %bb.0: ; %entry
+; GFX9-F32DENORM-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX9-F32DENORM-NEXT: v_mul_f16_e32 v3, v3, v4
+; GFX9-F32DENORM-NEXT: v_fma_f16 v0, v0, v1, v3
+; GFX9-F32DENORM-NEXT: v_cvt_f32_f16_e32 v0, v0
+; GFX9-F32DENORM-NEXT: v_sub_f32_e32 v0, v0, v2
----------------
jayfoad wrote:
Why didn't this generate v_mad_mix_f32 ?
https://github.com/llvm/llvm-project/pull/160151
More information about the llvm-commits
mailing list