gcc/ChangeLog:
* config/loongarch/loongarch.cc
(loongarch_compare_version_priority): Returns true if DECL1
and DECL2 are versions of the same function.
(TARGET_COMPARE_VERSION_PRIORITY): Define.
---
gcc/config/loongarch/loongarch.cc | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/gcc/config/loongarch/loongarch.cc
b/gcc/config/loongarch/loongarch.cc
index fe9f7a941cf..fffa8d61930 100644
--- a/gcc/config/loongarch/loongarch.cc
+++ b/gcc/config/loongarch/loongarch.cc
@@ -11841,6 +11841,23 @@ loongarch_generate_version_dispatcher_body (void
*node_p)
return resolver_decl;
}
+/* Compare priorities of two version decls. Return:
+ 1: decl1 has a higher priority
+ -1: decl2 has a higher priority
+ 0: decl1 and decl2 have the same priority.
+*/
+
+int
+loongarch_compare_version_priority (tree decl1, tree decl2)
+{
+ unsigned int prio1, prio2;
+ get_feature_mask_for_version (decl1, NULL, &prio1);
+ get_feature_mask_for_version (decl2, NULL, &prio2);
+
+ return prio1 == prio2 ? 0
+ : prio1 > prio2 ? 1 : -1;
+}
+
/* Initialize the GCC target structure. */
#undef TARGET_ASM_ALIGNED_HI_OP
#define TARGET_ASM_ALIGNED_HI_OP "\t.half\t"
@@ -12140,6 +12157,10 @@ loongarch_generate_version_dispatcher_body (void
*node_p)
#define TARGET_GENERATE_VERSION_DISPATCHER_BODY \
loongarch_generate_version_dispatcher_body
+#undef TARGET_COMPARE_VERSION_PRIORITY
+#define TARGET_COMPARE_VERSION_PRIORITY \
+ loongarch_compare_version_priority
+
struct gcc_target targetm = TARGET_INITIALIZER;
#include "gt-loongarch.h"
--
2.34.1