targhooks - provide an alternative hook for targets that never execute speculatively
authorRichard Earnshaw <rearnsha@arm.com>
Tue, 31 Jul 2018 17:36:36 +0000 (17:36 +0000)
committerRichard Earnshaw <rearnsha@gcc.gnu.org>
Tue, 31 Jul 2018 17:36:36 +0000 (17:36 +0000)
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

gcc/ChangeLog
gcc/doc/tm.texi
gcc/target.def
gcc/targhooks.c
gcc/targhooks.h

index 48a2002cfd746212a1fdf4fba0f59d0127628f7b..f6328f4d8565425d97c2ee9f838cd13326f4683a 100644 (file)
@@ -1,3 +1,10 @@
+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.
index 351f0b38b0e9beaac4d2619685790e6d7a4c47ce..a40f45ade07aa410c5b32e3ce3ee2398e57f1af5 100644 (file)
@@ -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})
index dc8d7deba2ecb79d279332a85105ba40ba447731..c570f3825a52516d909c2db2b348bb16a8ce6319 100644 (file)
@@ -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
index 06de1e3fa86ceea59462d571193a7e6f4da51a65..62051a98e9843212a924f0298ff21149ce8909f8 100644 (file)
@@ -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
index ba53778d468b2a626bf1cda9c2b4e9e4421594df..f92ca5ca997d5f249a7fb13c25ef1d80135ee4e1 100644 (file)
@@ -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 */