]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Do not use caller-saved registers for COMDAT functions
authorLIU Hao <lh_mouse@126.com>
Mon, 15 Jul 2024 08:55:52 +0000 (16:55 +0800)
committerJonathan Yong <10walls@gmail.com>
Thu, 18 Jul 2024 13:14:39 +0000 (13:14 +0000)
A reference to a COMDAT function may be resolved to another definition
outside the current translation unit, so it's not eligible for `-fipa-ra`.

In `decl_binds_to_current_def_p()` there is already a check for weak
symbols. This commit checks for COMDAT functions that are not implemented
as weak symbols, for example, on *-*-mingw32.

gcc/ChangeLog:

PR rtl-optimization/115049
* varasm.cc (decl_binds_to_current_def_p): Add a check for COMDAT
declarations too, like weak ones.

gcc/varasm.cc

index beb88709033ff54103a4ed4c5e7164ee6840c39d..4426e7ce6c65a6017a3f9a3046b44e58fe1920d4 100644 (file)
@@ -7813,6 +7813,8 @@ decl_binds_to_current_def_p (const_tree decl)
      for all other declaration types.  */
   if (DECL_WEAK (decl))
     return false;
+  if (DECL_COMDAT_GROUP (decl))
+    return false;
   if (DECL_COMMON (decl)
       && (DECL_INITIAL (decl) == NULL
          || (!in_lto_p && DECL_INITIAL (decl) == error_mark_node)))