target/104327: Allow more inlining between different optimization levels.

avr-common.cc introduces the following options that are set depending
on optimization level: -mgas-isr-prologues, -mmain-is-OS-task and
-fsplit-wide-types-early.  The inliner thinks that different options
disallow cross-optimization inlining, so provide can_inline_p.

gcc/
	PR target/104327
	* config/avr/avr.cc (avr_can_inline_p): New static function.
	(TARGET_CAN_INLINE_P): Define to that function.
This commit is contained in:
Georg-Johann Lay 2023-05-23 14:54:12 +02:00
parent a499ab08d1
commit 6506590e70

View File

@ -1019,6 +1019,19 @@ avr_no_gccisr_function_p (tree func)
return avr_lookup_function_attribute1 (func, "no_gccisr");
}
/* Implement `TARGET_CAN_INLINE_P'. */
/* Some options like -mgas_isr_prologues depend on optimization level,
and the inliner might think that due to different options, inlining
is not permitted; see PR104327. */
static bool
avr_can_inline_p (tree /* caller */, tree /* callee */)
{
// No restrictions whatsoever.
return true;
}
/* Implement `TARGET_SET_CURRENT_FUNCTION'. */
/* Sanity cheching for above function attributes. */
@ -14768,6 +14781,9 @@ avr_float_lib_compare_returns_bool (machine_mode mode, enum rtx_code)
#undef TARGET_MD_ASM_ADJUST
#define TARGET_MD_ASM_ADJUST avr_md_asm_adjust
#undef TARGET_CAN_INLINE_P
#define TARGET_CAN_INLINE_P avr_can_inline_p
struct gcc_target targetm = TARGET_INITIALIZER;