[llvm] relaxed simd fma (PR #147487)

Luke Lau via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 10 18:24:51 PDT 2025


================
@@ -0,0 +1,276 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+
+; RUN: llc < %s -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers  -mattr=+simd128,+relaxed-simd | FileCheck %s --check-prefix=RELAXED
+; RUN: llc < %s -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers  -mattr=+simd128,              | FileCheck %s --check-prefix=STRICT
+
+target triple = "wasm32"
+define <4 x float> @fadd_fmul_vector_4xf32(<4 x float> %a, <4 x float> %b, <4 x float> %c) {
+; RELAXED-LABEL: fadd_fmul_vector_4xf32:
+; RELAXED:         .functype fadd_fmul_vector_4xf32 (v128, v128, v128) -> (v128)
+; RELAXED-NEXT:  # %bb.0: # %entry
+; RELAXED-NEXT:    f32x4.relaxed_madd $push0=, $2, $1, $0
+; RELAXED-NEXT:    return $pop0
+;
+; STRICT-LABEL: fadd_fmul_vector_4xf32:
+; STRICT:         .functype fadd_fmul_vector_4xf32 (v128, v128, v128) -> (v128)
+; STRICT-NEXT:  # %bb.0: # %entry
+; STRICT-NEXT:    f32x4.mul $push0=, $1, $0
+; STRICT-NEXT:    f32x4.add $push1=, $pop0, $2
+; STRICT-NEXT:    return $pop1
+entry:
+  %mul.i = fmul fast <4 x float> %b, %a
+  %add.i = fadd fast <4 x float> %mul.i, %c
----------------
lukel97 wrote:

I think we only need the contract flag, not the entire set of fast flags
```suggestion
  %mul.i = fmul contract <4 x float> %b, %a
  %add.i = fadd contract <4 x float> %mul.i, %c
```

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


More information about the llvm-commits mailing list