[clang] fa53ce0 - [RISCV] Enable strict fp for RISC-V in clang.
Yeting Kuo via cfe-commits
cfe-commits at lists.llvm.org
Tue May 2 17:32:34 PDT 2023
Author: Yeting Kuo
Date: 2023-05-03T08:32:27+08:00
New Revision: fa53ce0faaa0cb6956a201c7a01c06da34ab9936
URL: https://github.com/llvm/llvm-project/commit/fa53ce0faaa0cb6956a201c7a01c06da34ab9936
DIFF: https://github.com/llvm/llvm-project/commit/fa53ce0faaa0cb6956a201c7a01c06da34ab9936.diff
LOG: [RISCV] Enable strict fp for RISC-V in clang.
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D149334
Added:
clang/test/CodeGen/RISCV/fpconstrained.c
Modified:
clang/lib/Basic/Targets/RISCV.h
Removed:
################################################################################
diff --git a/clang/lib/Basic/Targets/RISCV.h b/clang/lib/Basic/Targets/RISCV.h
index f8240e7f09483..e4e39506bccf5 100644
--- a/clang/lib/Basic/Targets/RISCV.h
+++ b/clang/lib/Basic/Targets/RISCV.h
@@ -41,6 +41,7 @@ class RISCVTargetInfo : public TargetInfo {
HasRISCVVTypes = true;
MCountName = "_mcount";
HasFloat16 = true;
+ HasStrictFP = true;
}
bool setCPU(const std::string &Name) override {
diff --git a/clang/test/CodeGen/RISCV/fpconstrained.c b/clang/test/CodeGen/RISCV/fpconstrained.c
new file mode 100644
index 0000000000000..d5a7a4aab1556
--- /dev/null
+++ b/clang/test/CodeGen/RISCV/fpconstrained.c
@@ -0,0 +1,27 @@
+// RUN: %clang_cc1 -triple riscv64 -frounding-math -ffp-exception-behavior=strict -fexperimental-strict-floating-point -emit-llvm -o - %s | FileCheck %s -check-prefix=FPMODELSTRICT
+// RUN: %clang_cc1 -triple riscv64 -ffp-contract=fast -emit-llvm -o - %s | FileCheck %s -check-prefix=PRECISE
+// RUN: %clang_cc1 -triple riscv64 -ffast-math -ffp-contract=fast -emit-llvm -o - %s | FileCheck %s -check-prefix=FAST
+// RUN: %clang_cc1 -triple riscv64 -ffast-math -emit-llvm -o - %s | FileCheck %s -check-prefix=FASTNOCONTRACT
+// RUN: %clang_cc1 -triple riscv64 -ffast-math -ffp-contract=fast -ffp-exception-behavior=ignore -emit-llvm -o - %s | FileCheck %s -check-prefix=FAST
+// RUN: %clang_cc1 -triple riscv64 -ffast-math -ffp-contract=fast -ffp-exception-behavior=strict -fexperimental-strict-floating-point -emit-llvm -o - %s | FileCheck %s -check-prefix=EXCEPT
+// RUN: %clang_cc1 -triple riscv64 -ffast-math -ffp-contract=fast -ffp-exception-behavior=maytrap -fexperimental-strict-floating-point -emit-llvm -o - %s | FileCheck %s -check-prefix=MAYTRAP
+
+// Test strict-fp support in RISC-V.
+
+float f0, f1, f2;
+
+void foo(void) {
+ // CHECK-LABEL: define {{.*}}void @foo()
+
+ // MAYTRAP: llvm.experimental.constrained.fadd.f32(float %{{.*}}, float %{{.*}}, metadata !"round.tonearest", metadata !"fpexcept.maytrap")
+ // EXCEPT: llvm.experimental.constrained.fadd.f32(float %{{.*}}, float %{{.*}}, metadata !"round.tonearest", metadata !"fpexcept.strict")
+ // FPMODELSTRICT: llvm.experimental.constrained.fadd.f32(float %{{.*}}, float %{{.*}}, metadata !"round.dynamic", metadata !"fpexcept.strict")
+ // STRICTEXCEPT: llvm.experimental.constrained.fadd.f32(float %{{.*}}, float %{{.*}}, metadata !"round.dynamic", metadata !"fpexcept.strict")
+ // STRICTNOEXCEPT: llvm.experimental.constrained.fadd.f32(float %{{.*}}, float %{{.*}}, metadata !"round.dynamic", metadata !"fpexcept.ignore")
+ // PRECISE: fadd contract float %{{.*}}, %{{.*}}
+ // FAST: fadd fast
+ // FASTNOCONTRACT: fadd reassoc nnan ninf nsz arcp afn float
+ f0 = f1 + f2;
+
+ // CHECK: ret
+}
More information about the cfe-commits
mailing list