v850: add v850_can_inline_p target hook

gcc/ChangeLog:

	* config/v850/v850.c (v850_option_override): Build default
	target node.
	(v850_can_inline_p): New.  Allow MASK_PROLOG_FUNCTION to be
	ignored for inlining.
	(TARGET_CAN_INLINE_P): New.
This commit is contained in:
Martin Liska 2021-06-23 15:46:22 +02:00
parent 2ad71efb5d
commit 22069036ef
1 changed files with 32 additions and 0 deletions

View File

@ -3140,6 +3140,11 @@ v850_option_override (void)
/* The RH850 ABI does not (currently) support the use of the CALLT instruction. */
if (! TARGET_GCC_ABI)
target_flags |= MASK_DISABLE_CALLT;
/* Save the initial options in case the user does function specific
options. */
target_option_default_node = target_option_current_node
= build_target_option_node (&global_options, &global_options_set);
}
const char *
@ -3192,6 +3197,29 @@ v850_modes_tieable_p (machine_mode mode1, machine_mode mode2)
return (mode1 == mode2
|| (GET_MODE_SIZE (mode1) <= 4 && GET_MODE_SIZE (mode2) <= 4));
}
static bool
v850_can_inline_p (tree caller, tree callee)
{
tree caller_tree = DECL_FUNCTION_SPECIFIC_TARGET (caller);
tree callee_tree = DECL_FUNCTION_SPECIFIC_TARGET (callee);
const unsigned HOST_WIDE_INT safe_flags = MASK_PROLOG_FUNCTION;
if (!callee_tree)
callee_tree = target_option_default_node;
if (!caller_tree)
caller_tree = target_option_default_node;
if (callee_tree == caller_tree)
return true;
cl_target_option *caller_opts = TREE_TARGET_OPTION (caller_tree);
cl_target_option *callee_opts = TREE_TARGET_OPTION (callee_tree);
return ((caller_opts->x_target_flags & ~safe_flags)
== (callee_opts->x_target_flags & ~safe_flags));
}
/* Initialize the GCC target structure. */
@ -3306,6 +3334,10 @@ v850_modes_tieable_p (machine_mode mode1, machine_mode mode2)
#undef TARGET_HAVE_SPECULATION_SAFE_VALUE
#define TARGET_HAVE_SPECULATION_SAFE_VALUE speculation_safe_value_not_needed
#undef TARGET_CAN_INLINE_P
#define TARGET_CAN_INLINE_P v850_can_inline_p
struct gcc_target targetm = TARGET_INITIALIZER;
#include "gt-v850.h"