[llvm] RISC-V: Add fminimumnum and fmaximumnum support (PR #104411)

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 19 10:42:56 PDT 2024


================
@@ -0,0 +1,734 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc --mtriple=riscv32 --mattr=+f,-d,+zfh < %s | FileCheck %s --check-prefix=RV32FH
+; RUN: llc --mtriple=riscv32 --mattr=+d,+zfh < %s | FileCheck %s --check-prefix=RV32DH
+; RUN: llc --mtriple=riscv64 --mattr=+f,-d,+zfh < %s | FileCheck %s --check-prefix=RV64FH
+; RUN: llc --mtriple=riscv64 --mattr=+d,+zfh < %s | FileCheck %s --check-prefix=RV64DH
+; RUN: llc --mtriple=riscv32 --mattr=+d,-zfh < %s | FileCheck %s --check-prefix=RV32DNH
+; RUN: llc --mtriple=riscv64 --mattr=+d,-zfh < %s | FileCheck %s --check-prefix=RV64DNH
+
+declare float @llvm.maximumnum.f32(float, float)
+declare double @llvm.maximumnum.f64(double, double)
+declare float @llvm.minimumnum.f32(float, float)
+declare double @llvm.minimumnum.f64(double, double)
+
+define float @maximumnum_float(float %x, float %y) {
+; RV32FH-LABEL: maximumnum_float:
+; RV32FH:       # %bb.0:
+; RV32FH-NEXT:    fmax.s fa0, fa0, fa1
+; RV32FH-NEXT:    ret
+;
+; RV32DH-LABEL: maximumnum_float:
+; RV32DH:       # %bb.0:
+; RV32DH-NEXT:    fmax.s fa0, fa0, fa1
+; RV32DH-NEXT:    ret
+;
+; RV64FH-LABEL: maximumnum_float:
+; RV64FH:       # %bb.0:
+; RV64FH-NEXT:    fmax.s fa0, fa0, fa1
+; RV64FH-NEXT:    ret
+;
+; RV64DH-LABEL: maximumnum_float:
+; RV64DH:       # %bb.0:
+; RV64DH-NEXT:    fmax.s fa0, fa0, fa1
+; RV64DH-NEXT:    ret
+;
+; RV32DNH-LABEL: maximumnum_float:
+; RV32DNH:       # %bb.0:
+; RV32DNH-NEXT:    fmax.s fa0, fa0, fa1
+; RV32DNH-NEXT:    ret
+;
+; RV64DNH-LABEL: maximumnum_float:
+; RV64DNH:       # %bb.0:
+; RV64DNH-NEXT:    fmax.s fa0, fa0, fa1
+; RV64DNH-NEXT:    ret
+  %z = call float @llvm.maximumnum.f32(float %x, float %y)
+  ret float %z
+}
+
+define float @maximumnum_float_nsz(float %x, float %y) {
+; RV32FH-LABEL: maximumnum_float_nsz:
+; RV32FH:       # %bb.0:
+; RV32FH-NEXT:    fmax.s fa0, fa0, fa1
+; RV32FH-NEXT:    ret
+;
+; RV32DH-LABEL: maximumnum_float_nsz:
+; RV32DH:       # %bb.0:
+; RV32DH-NEXT:    fmax.s fa0, fa0, fa1
+; RV32DH-NEXT:    ret
+;
+; RV64FH-LABEL: maximumnum_float_nsz:
+; RV64FH:       # %bb.0:
+; RV64FH-NEXT:    fmax.s fa0, fa0, fa1
+; RV64FH-NEXT:    ret
+;
+; RV64DH-LABEL: maximumnum_float_nsz:
+; RV64DH:       # %bb.0:
+; RV64DH-NEXT:    fmax.s fa0, fa0, fa1
+; RV64DH-NEXT:    ret
+;
+; RV32DNH-LABEL: maximumnum_float_nsz:
+; RV32DNH:       # %bb.0:
+; RV32DNH-NEXT:    fmax.s fa0, fa0, fa1
+; RV32DNH-NEXT:    ret
+;
+; RV64DNH-LABEL: maximumnum_float_nsz:
+; RV64DNH:       # %bb.0:
+; RV64DNH-NEXT:    fmax.s fa0, fa0, fa1
+; RV64DNH-NEXT:    ret
+  %z = call nsz float @llvm.maximumnum.f32(float %x, float %y)
----------------
topperc wrote:

Are the fast math flag tests interesting for RISC-V? We do the same thing regardless of the flags right?

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


More information about the llvm-commits mailing list