aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLIU Hao <lh_mouse@126.com>2024-07-15 16:55:52 +0800
committerJonathan Yong <10walls@gmail.com>2024-07-18 13:14:39 +0000
commit5080840d8fbf25a321dd27543a1462d393d338bc (patch)
tree2b566e2a07fa56044b6de1af5ad6be4fcd7f1589
parent3670c70c561656a19f6bff36dd229f18120af127 (diff)
downloadgcc-5080840d8fbf25a321dd27543a1462d393d338bc.zip
gcc-5080840d8fbf25a321dd27543a1462d393d338bc.tar.gz
gcc-5080840d8fbf25a321dd27543a1462d393d338bc.tar.bz2
Do not use caller-saved registers for COMDAT functions
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.
-rw-r--r--gcc/varasm.cc2
1 files changed, 2 insertions, 0 deletions
diff --git a/gcc/varasm.cc b/gcc/varasm.cc
index beb8870..4426e7c 100644
--- a/gcc/varasm.cc
+++ b/gcc/varasm.cc
@@ -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)))