[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