Commit f3debef3 by Richard Earnshaw Committed by Richard Earnshaw

targhooks - provide an alternative hook for targets that never execute speculatively

This hook adds an alternative implementation for the target hook
TARGET_HAVE_SPECULATION_SAFE_VALUE; it can be used by targets that have no
CPU implementations that execute code speculatively.  All that is needed for
such targets now is to add:

 #undef TARGET_HAVE_SPECULATION_SAFE_VALUE
 #define TARGET_HAVE_SPECULATION_SAFE_VALUE speculation_safe_value_not_needed.

to where you have your other target hooks and you're done.

gcc:
	* targhooks.h (speculation_safe_value_not_needed): New prototype.
	* targhooks.c (speculation_safe_value_not_needed): New function.
	* target.def (have_speculation_safe_value): Update documentation.
	* doc/tm.texi: Regenerated.

From-SVN: r263175
parent c0111dc4
2018-07-31 Richard Earnshaw <rearnsha@arm.com>
* targhooks.h (speculation_safe_value_not_needed): New prototype.
* targhooks.c (speculation_safe_value_not_needed): New function.
* target.def (have_speculation_safe_value): Update documentation.
* doc/tm.texi: Regenerated.
2018-07-31 Richard Earnshaw <rearnsha@arm.com>
* config/aarch64/iterators.md (ALLI_TI): New iterator.
* config/aarch64/aarch64.md (despeculate_copy<ALLI_TI:mode>): New
expand.
......
......@@ -11935,6 +11935,11 @@ This hook is used to determine the level of target support for
a pattern named @code{speculation_barrier}. Else it returns true
for the first case and whether the pattern is enabled for the current
compilation for the second case.
For targets that have no processors that can execute instructions
speculatively an alternative implemenation of this hook is available:
simply redefine this hook to @code{speculation_safe_value_not_needed}
along with your other target hooks.
@end deftypefn
@deftypefn {Target Hook} rtx TARGET_SPECULATION_SAFE_VALUE (machine_mode @var{mode}, rtx @var{result}, rtx @var{val}, rtx @var{failval})
......
......@@ -4166,7 +4166,12 @@ DEFHOOK
The default implementation returns false if the target does not define\n\
a pattern named @code{speculation_barrier}. Else it returns true\n\
for the first case and whether the pattern is enabled for the current\n\
compilation for the second case.",
compilation for the second case.\n\
\n\
For targets that have no processors that can execute instructions\n\
speculatively an alternative implemenation of this hook is available:\n\
simply redefine this hook to @code{speculation_safe_value_not_needed}\n\
along with your other target hooks.",
bool, (bool active), default_have_speculation_safe_value)
DEFHOOK
......
......@@ -2324,6 +2324,13 @@ default_have_speculation_safe_value (bool active)
return false;
#endif
}
/* Alternative implementation of TARGET_HAVE_SPECULATION_SAFE_VALUE
that can be used on targets that never have speculative execution. */
bool
speculation_safe_value_not_needed (bool active)
{
return !active;
}
/* Default implementation of the speculation-safe-load builtin. This
implementation simply copies val to result and generates a
......
......@@ -282,6 +282,7 @@ extern void default_select_early_remat_modes (sbitmap);
extern tree default_preferred_else_value (unsigned, tree, unsigned, tree *);
extern bool default_have_speculation_safe_value (bool);
extern bool speculation_safe_value_not_needed (bool);
extern rtx default_speculation_safe_value (machine_mode, rtx, rtx, rtx);
#endif /* GCC_TARGHOOKS_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment