[llvm] [SelectionDAG] Remove UnsafeFPMath check in `visitFADDForFMACombine` (PR #127770)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 17 23:44:43 PDT 2025


================
@@ -65,6 +84,39 @@ entry:
 
 ; GFX906-DENORM-CONTRACT: v_dot2_f32_f16
 ; GFX906-DOT10-DISABLED: v_fma_mix_f32
+define amdgpu_kernel void @dotproduct_f16_f32_contract(ptr addrspace(1) %src1,
+                                                       ptr addrspace(1) %src2,
+                                                       ptr addrspace(1) nocapture %dst) {
+entry:
+  %src1.vec = load <2 x half>, ptr addrspace(1) %src1
+  %src2.vec = load <2 x half>, ptr addrspace(1) %src2
+
+  %src1.el1 = extractelement <2 x half> %src1.vec, i64 0
+  %csrc1.el1 = fpext half %src1.el1 to float
+  %src2.el1 = extractelement <2 x half> %src2.vec, i64 0
+  %csrc2.el1 = fpext half %src2.el1 to float
+
+  %src1.el2 = extractelement <2 x half> %src1.vec, i64 1
+  %csrc1.el2 = fpext half %src1.el2 to float
+  %src2.el2 = extractelement <2 x half> %src2.vec, i64 1
+  %csrc2.el2 = fpext half %src2.el2 to float
+
+  %mul2 = fmul fast float %csrc1.el2, %csrc2.el2
+  %mul1 = fmul fast float %csrc1.el1, %csrc2.el1
+  %acc = load float, ptr addrspace(1) %dst, align 4
+  %acc1 = fadd fast float %mul2, %acc
+  %acc2 = fadd fast float %mul1, %acc1
----------------
arsenm wrote:

```suggestion
  %mul2 = fmul contract float %csrc1.el2, %csrc2.el2
  %mul1 = fmul contract float %csrc1.el1, %csrc2.el1
  %acc = load float, ptr addrspace(1) %dst, align 4
  %acc1 = fadd contract float %mul2, %acc
  %acc2 = fadd contract float %mul1, %acc1
```

https://github.com/llvm/llvm-project/pull/127770


More information about the llvm-commits mailing list