From: Zhijin Zeng <[email protected]>

The RISC-V vector function name mangling specification decorated with OpenMP
has been merged.

```
mangled-vector-name := "_ZGV" <isa> <mask> <len> <parameters> "_" <func-name>
isa := r<lmul>
```

More details in https://github.com/riscv-non-isa/riscv-elf-psabi-doc/pull/455

To support ISA mangles such as `r1`, `r2`, I add a new `extend_isa_mangle`
array. When `vecsize_mangle` is set to `W`, `extend_isa_mangle` is enabled
to support ISA mangles longer than one byte.

gcc/ChangeLog:

        * cgraph.h (struct cgraph_simd_clone):
        * omp-simd-clone.cc (simd_clone_mangle):
---
 gcc/cgraph.h          | 5 +++++
 gcc/omp-simd-clone.cc | 5 ++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/gcc/cgraph.h b/gcc/cgraph.h
index a7e6ab70b6b..7f8403810d1 100644
--- a/gcc/cgraph.h
+++ b/gcc/cgraph.h
@@ -850,6 +850,11 @@ struct GTY(()) cgraph_simd_clone {
      Vector ABI.  */
   unsigned char vecsize_mangle;
 
+  /* When the vecsize_mangle character is 'W', it indicates that
+     the ISA mangle will exceed 1 byte, and is thus used to extend
+     the ISA mangle.  */
+  unsigned char extend_isa_mangle[4];
+
   /* True if this is the masked, in-branch version of the clone,
      otherwise false.  */
   unsigned int inbranch : 1;
diff --git a/gcc/omp-simd-clone.cc b/gcc/omp-simd-clone.cc
index 7564846fac4..de6a0e33963 100644
--- a/gcc/omp-simd-clone.cc
+++ b/gcc/omp-simd-clone.cc
@@ -539,7 +539,10 @@ simd_clone_mangle (struct cgraph_node *node,
   gcc_assert (vecsize_mangle && maybe_ne (simdlen, 0U));
 
   pp_string (&pp, "_ZGV");
-  pp_character (&pp, vecsize_mangle);
+  if (vecsize_mangle == 'W')
+    pp_string (&pp, (const char *) clone_info->extend_isa_mangle);
+  else
+    pp_character (&pp, vecsize_mangle);
   pp_character (&pp, mask);
 
   unsigned HOST_WIDE_INT len;
-- 
2.25.1

Reply via email to