aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Earnshaw <rearnsha@arm.com>2018-07-31 17:36:36 +0000
committerRichard Earnshaw <rearnsha@gcc.gnu.org>2018-07-31 17:36:36 +0000
commitf3debef33629f8e8a95b5ed0cb79296e7a0282df (patch)
treef5992c2819cabd23432a44ebf8afd245a075eed1
parentc0111dc43591647ef6d619a1fc222a8e9a06e058 (diff)
downloadgcc-f3debef33629f8e8a95b5ed0cb79296e7a0282df.zip
gcc-f3debef33629f8e8a95b5ed0cb79296e7a0282df.tar.gz
gcc-f3debef33629f8e8a95b5ed0cb79296e7a0282df.tar.bz2
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
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/doc/tm.texi5
-rw-r--r--gcc/target.def7
-rw-r--r--gcc/targhooks.c7
-rw-r--r--gcc/targhooks.h1
5 files changed, 26 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 48a2002..f6328f4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
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.
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index 351f0b3..a40f45a 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -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})
diff --git a/gcc/target.def b/gcc/target.def
index dc8d7de..c570f38 100644
--- a/gcc/target.def
+++ b/gcc/target.def
@@ -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
diff --git a/gcc/targhooks.c b/gcc/targhooks.c
index 06de1e3..62051a9 100644
--- a/gcc/targhooks.c
+++ b/gcc/targhooks.c
@@ -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
diff --git a/gcc/targhooks.h b/gcc/targhooks.h
index ba53778..f92ca5c 100644
--- a/gcc/targhooks.h
+++ b/gcc/targhooks.h
@@ -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 */