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:
parent
2ad71efb5d
commit
22069036ef
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue