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.
This commit is contained in:
LIU Hao 2024-07-15 16:55:52 +08:00 committed by Jonathan Yong
parent 3670c70c56
commit 5080840d8f

View 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)))