From: Enes Cevik <[email protected]>

This patch adds builtin intrinsic names to Values::Intrinsics class and
updates the BuiltinContext mappings to use these constants instead of
hardcoded raw strings.

gcc/rust/ChangeLog:

        * backend/rust-builtins.cc
        (BuiltinsContext::register_rust_mappings): Use Values::Intrinsics
        constants instead of raw strings.
        * util/rust-intrinsic-values.h (class Intrinsics): Add missing
        builtin intrinsics.

Signed-off-by: Enes Cevik <[email protected]>
---
This change was merged into the gccrs repository and is posted here for
upstream visibility and potential drive-by review, as requested by GCC
release managers.
Each commit email contains a link to its details on github from where you can
find the Pull-Request and associated discussions.


Commit on github: 
https://github.com/Rust-GCC/gccrs/commit/b9721a30bfce4ee594d77ba2bea9de79daba72c3

The commit has NOT been mentioned in any issue.

The commit has been mentioned in the following pull-request(s):
 - https://github.com/Rust-GCC/gccrs/pull/4587

 gcc/rust/backend/rust-builtins.cc     | 89 ++++++++++++++-------------
 gcc/rust/util/rust-intrinsic-values.h | 60 ++++++++++++++++++
 2 files changed, 105 insertions(+), 44 deletions(-)

diff --git a/gcc/rust/backend/rust-builtins.cc 
b/gcc/rust/backend/rust-builtins.cc
index 282ecba70..881561fdd 100644
--- a/gcc/rust/backend/rust-builtins.cc
+++ b/gcc/rust/backend/rust-builtins.cc
@@ -20,6 +20,7 @@
 
 #include "target.h"
 #include "stringpool.h"
+#include "rust-intrinsic-values.h"
 
 namespace Rust {
 namespace Compile {
@@ -285,72 +286,72 @@ void
 BuiltinsContext::register_rust_mappings ()
 {
   rust_intrinsic_to_gcc_builtin = {
-    {"unreachable", "__builtin_unreachable"},
-    {"abort", "__builtin_abort"},
+    {Values::Intrinsics::UNREACHABLE, "__builtin_unreachable"},
+    {Values::Intrinsics::ABORT, "__builtin_abort"},
 
     // Math intrinsics
-    {"sqrtf32", "__builtin_sqrtf"},
-    {"sqrtf64", "__builtin_sqrt"},
+    {Values::Intrinsics::SQRTF32, "__builtin_sqrtf"},
+    {Values::Intrinsics::SQRTF64, "__builtin_sqrt"},
 
-    {"sinf32", "__builtin_sinf"},
-    {"sinf64", "__builtin_sin"},
+    {Values::Intrinsics::SINF32, "__builtin_sinf"},
+    {Values::Intrinsics::SINF64, "__builtin_sin"},
 
-    {"cosf32", "__builtin_cosf"},
-    {"cosf64", "__builtin_cos"},
+    {Values::Intrinsics::COSF32, "__builtin_cosf"},
+    {Values::Intrinsics::COSF64, "__builtin_cos"},
 
-    {"powf32", "__builtin_powf"},
-    {"powf64", "__builtin_pow"},
+    {Values::Intrinsics::POWF32, "__builtin_powf"},
+    {Values::Intrinsics::POWF64, "__builtin_pow"},
 
-    {"powif32", "__builtin_powif"},
-    {"powif64", "__builtin_powi"},
+    {Values::Intrinsics::POWIF32, "__builtin_powif"},
+    {Values::Intrinsics::POWIF64, "__builtin_powi"},
 
-    {"expf32", "__builtin_expf"},
-    {"expf64", "__builtin_exp"},
+    {Values::Intrinsics::EXPF32, "__builtin_expf"},
+    {Values::Intrinsics::EXPF64, "__builtin_exp"},
 
-    {"exp2f32", "__builtin_exp2f"},
-    {"exp2f64", "__builtin_exp2"},
+    {Values::Intrinsics::EXP2F32, "__builtin_exp2f"},
+    {Values::Intrinsics::EXP2F64, "__builtin_exp2"},
 
-    {"logf32", "__builtin_logf"},
-    {"logf64", "__builtin_log"},
+    {Values::Intrinsics::LOGF32, "__builtin_logf"},
+    {Values::Intrinsics::LOGF64, "__builtin_log"},
 
-    {"log10f32", "__builtin_log10f"},
-    {"log10f64", "__builtin_log10"},
+    {Values::Intrinsics::LOG10F32, "__builtin_log10f"},
+    {Values::Intrinsics::LOG10F64, "__builtin_log10"},
 
-    {"log2f32", "__builtin_log2f"},
-    {"log2f64", "__builtin_log2"},
+    {Values::Intrinsics::LOG2F32, "__builtin_log2f"},
+    {Values::Intrinsics::LOG2F64, "__builtin_log2"},
 
-    {"fmaf32", "__builtin_fmaf"},
-    {"fmaf64", "__builtin_fma"},
+    {Values::Intrinsics::FMAF32, "__builtin_fmaf"},
+    {Values::Intrinsics::FMAF64, "__builtin_fma"},
 
-    {"fabsf32", "__builtin_fabsf"},
-    {"fabsf64", "__builtin_fabs"},
+    {Values::Intrinsics::FABSF32, "__builtin_fabsf"},
+    {Values::Intrinsics::FABSF64, "__builtin_fabs"},
 
-    {"minnumf32", "__builtin_fminf"},
-    {"minnumf64", "__builtin_fmin"},
+    {Values::Intrinsics::MINNUMF32, "__builtin_fminf"},
+    {Values::Intrinsics::MINNUMF64, "__builtin_fmin"},
 
-    {"maxnumf32", "__builtin_fmaxf"},
-    {"maxnumf64", "__builtin_fmax"},
+    {Values::Intrinsics::MAXNUMF32, "__builtin_fmaxf"},
+    {Values::Intrinsics::MAXNUMF64, "__builtin_fmax"},
 
-    {"copysignf32", "__builtin_copysignf"},
-    {"copysignf64", "__builtin_copysign"},
+    {Values::Intrinsics::COPYSIGNF32, "__builtin_copysignf"},
+    {Values::Intrinsics::COPYSIGNF64, "__builtin_copysign"},
 
-    {"floorf32", "__builtin_floorf"},
-    {"floorf64", "__builtin_floor"},
+    {Values::Intrinsics::FLOORF32, "__builtin_floorf"},
+    {Values::Intrinsics::FLOORF64, "__builtin_floor"},
 
-    {"ceilf32", "__builtin_ceilf"},
-    {"ceilf64", "__builtin_ceil"},
+    {Values::Intrinsics::CEILF32, "__builtin_ceilf"},
+    {Values::Intrinsics::CEILF64, "__builtin_ceil"},
 
-    {"truncf32", "__builtin_truncf"},
-    {"truncf64", "__builtin_trunc"},
+    {Values::Intrinsics::TRUNCF32, "__builtin_truncf"},
+    {Values::Intrinsics::TRUNCF64, "__builtin_trunc"},
 
-    {"rintf32", "__builtin_rintf"},
-    {"rintf64", "__builtin_rint"},
+    {Values::Intrinsics::RINTF32, "__builtin_rintf"},
+    {Values::Intrinsics::RINTF64, "__builtin_rint"},
 
-    {"nearbyintf32", "__builtin_nearbyintf"},
-    {"nearbyintf64", "__builtin_nearbyint"},
+    {Values::Intrinsics::NEARBYINTF32, "__builtin_nearbyintf"},
+    {Values::Intrinsics::NEARBYINTF64, "__builtin_nearbyint"},
 
-    {"roundf32", "__builtin_roundf"},
-    {"roundf64", "__builtin_round"},
+    {Values::Intrinsics::ROUNDF32, "__builtin_roundf"},
+    {Values::Intrinsics::ROUNDF64, "__builtin_round"},
   };
 }
 
diff --git a/gcc/rust/util/rust-intrinsic-values.h 
b/gcc/rust/util/rust-intrinsic-values.h
index c868c851d..1c275e7b7 100644
--- a/gcc/rust/util/rust-intrinsic-values.h
+++ b/gcc/rust/util/rust-intrinsic-values.h
@@ -21,6 +21,66 @@ namespace Values {
 class Intrinsics
 {
 public:
+  static constexpr auto &UNREACHABLE = "unreachable";
+
+  // Math intrinsics
+  static constexpr auto &SQRTF32 = "sqrtf32";
+  static constexpr auto &SQRTF64 = "sqrtf64";
+
+  static constexpr auto &SINF32 = "sinf32";
+  static constexpr auto &SINF64 = "sinf64";
+
+  static constexpr auto &COSF32 = "cosf32";
+  static constexpr auto &COSF64 = "cosf64";
+
+  static constexpr auto &POWF32 = "powf32";
+  static constexpr auto &POWF64 = "powf64";
+
+  static constexpr auto &POWIF32 = "powif32";
+  static constexpr auto &POWIF64 = "powif64";
+
+  static constexpr auto &EXPF32 = "expf32";
+  static constexpr auto &EXPF64 = "expf64";
+
+  static constexpr auto &EXP2F32 = "exp2f32";
+  static constexpr auto &EXP2F64 = "exp2f64";
+
+  static constexpr auto &LOGF32 = "logf32";
+  static constexpr auto &LOGF64 = "logf64";
+
+  static constexpr auto &LOG10F32 = "log10f32";
+  static constexpr auto &LOG10F64 = "log10f64";
+
+  static constexpr auto &LOG2F32 = "log2f32";
+  static constexpr auto &LOG2F64 = "log2f64";
+
+  static constexpr auto &FMAF32 = "fmaf32";
+  static constexpr auto &FMAF64 = "fmaf64";
+
+  static constexpr auto &FABSF32 = "fabsf32";
+  static constexpr auto &FABSF64 = "fabsf64";
+
+  static constexpr auto &COPYSIGNF32 = "copysignf32";
+  static constexpr auto &COPYSIGNF64 = "copysignf64";
+
+  static constexpr auto &FLOORF32 = "floorf32";
+  static constexpr auto &FLOORF64 = "floorf64";
+
+  static constexpr auto &CEILF32 = "ceilf32";
+  static constexpr auto &CEILF64 = "ceilf64";
+
+  static constexpr auto &TRUNCF32 = "truncf32";
+  static constexpr auto &TRUNCF64 = "truncf64";
+
+  static constexpr auto &RINTF32 = "rintf32";
+  static constexpr auto &RINTF64 = "rintf64";
+
+  static constexpr auto &NEARBYINTF32 = "nearbyintf32";
+  static constexpr auto &NEARBYINTF64 = "nearbyintf64";
+
+  static constexpr auto &ROUNDF32 = "roundf32";
+  static constexpr auto &ROUNDF64 = "roundf64";
+
   static constexpr auto &ABORT = "abort";
   static constexpr auto &OFFSET = "offset";
   static constexpr auto &SIZE_OF = "size_of";

base-commit: 70e9fdc3666359a519847b8bf4254a85ea601524
-- 
2.54.0

Reply via email to