Yes, all the RVV intrinsics have passed.
Committed, thanks juzhe.


xu...@eswincomputing.com
 
发件人: 钟居哲
发送时间: 2025-01-08 20:11
收件人: xuli1; gcc-patches
抄送: kito.cheng; palmer; Li, Pan2; xuli1
主题: Re: [PATCH] RISC-V: Refine registered_functions list for rvv overloaded 
intrinsics.
Thanks for optimizing it.

Did you do the RVV intrinsic CI test ?
riscv-non-isa/rvv-intrinsic-doc

LGTM if you finished the full coverage testing of rvv intrinsic.


juzhe.zh...@rivai.ai
 
From: Li Xu
Date: 2025-01-08 17:36
To: gcc-patches
CC: kito.cheng; palmer; juzhe.zhong; pan2.li; xuli
Subject: [PATCH] RISC-V: Refine registered_functions list for rvv overloaded 
intrinsics.
From: xuli <xu...@eswincomputing.com>
 
Before this patch, each rvv overloaded intrinsic was registered twice,
both in gcc and g++.
 
Take vint8mf8_t __riscv_vle8(vbool64_t vm, const int8_t *rs1, size_t vl)
as an example.
 
For gcc, one decl is void __riscv_vle8(void), and the other is
integer_zero_node, which is redundant.
For g++, one decl is integer_zero_node, which is redundant.
The other is vint8mf8_t __riscv_vle8(vbool64_t vm, const int8_t *rs1, size_t 
vl).
Additionally, rfn is saved in the non_overloaded_function_table, which is also 
redundant.
 
After this patch, both gcc and g++ regiter each rvv overloaded intrinsic once.
Only gcc's rfn will be added to the non_overloaded_function_table.
 
Passed the rv64gcv regression test.
 
Signed-off-by: Li Xu <xu...@eswincomputing.com>
 
gcc/ChangeLog:
 
* config/riscv/riscv-vector-builtins.cc (function_builder::add_unique_function):
Only register overloaded intrinsic for g++. Only insert 
non_overloaded_function_table for gcc.
(function_builder::add_overloaded_function): Only register overloaded intrinsic 
for gcc.
(handle_pragma_vector): Only initialize non_overloaded_function_table for gcc.
 
---
gcc/config/riscv/riscv-vector-builtins.cc | 34 ++++++++++++++---------
1 file changed, 21 insertions(+), 13 deletions(-)
 
diff --git a/gcc/config/riscv/riscv-vector-builtins.cc 
b/gcc/config/riscv/riscv-vector-builtins.cc
index f442005bfed..844b922efbf 100644
--- a/gcc/config/riscv/riscv-vector-builtins.cc
+++ b/gcc/config/riscv/riscv-vector-builtins.cc
@@ -3997,16 +3997,23 @@ function_builder::add_unique_function (const 
function_instance &instance,
     {
       /* Attribute lists shouldn't be shared.  */
       tree attrs = get_attributes (instance);
-      bool placeholder_p = !m_direct_overloads;
-      add_function (instance, overload_name, fntype, attrs, placeholder_p, 
NULL,
-     vNULL, required);
-
-      /* Enter the function into the non-overloaded hash table.  */
-      hash = rfn.overloaded_hash ();
-      rfn_slot = non_overloaded_function_table->find_slot_with_hash (&rfn, 
hash,
-      INSERT);
-      gcc_assert (!*rfn_slot);
-      *rfn_slot = &rfn;
+      if (m_direct_overloads)
+ add_function (instance, overload_name, fntype, attrs, false, NULL,
+       vNULL, required);
+      else
+ {
+   if (!non_overloaded_function_table)
+     non_overloaded_function_table
+       = new hash_table<non_overloaded_registered_function_hasher> (
+ 1023);
+   /* Enter the function into the non-overloaded hash table.  */
+   hash = rfn.overloaded_hash ();
+   rfn_slot
+     = non_overloaded_function_table->find_slot_with_hash (&rfn, hash,
+   INSERT);
+   gcc_assert (!*rfn_slot);
+   *rfn_slot = &rfn;
+ }
     }
   obstack_free (&m_string_obstack, name);
}
@@ -4017,6 +4024,9 @@ function_builder::add_overloaded_function (const 
function_instance &instance,
   const function_shape *shape,
   enum required_ext required)
{
+  if (m_direct_overloads)
+    return;
+
   if (!check_required_extensions (instance))
     return;
@@ -4027,7 +4037,7 @@ function_builder::add_overloaded_function (const 
function_instance &instance,
       /* To avoid API conflicting, take void return type and void argument
for the overloaded function.  */
       tree fntype = build_function_type (void_type_node, void_list_node);
-      add_function (instance, name, fntype, NULL_TREE, m_direct_overloads, 
name,
+      add_function (instance, name, fntype, NULL_TREE, false, name,
    vNULL, required, true);
       obstack_free (&m_string_obstack, name);
     }
@@ -4817,8 +4827,6 @@ handle_pragma_vector ()
   /* Define the functions.  */
   function_table = new hash_table<registered_function_hasher> (1023);
-  non_overloaded_function_table
-    = new hash_table<non_overloaded_registered_function_hasher> (1023);
   function_builder builder;
   for (unsigned int i = 0; i < ARRAY_SIZE (function_groups); ++i)
   {
-- 
2.17.1
 
 

Reply via email to