aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Earnshaw <rearnsha@arm.com>2018-11-02 13:36:31 +0000
committerRichard Earnshaw <rearnsha@gcc.gnu.org>2018-11-02 13:36:31 +0000
commit5f7dbaa0adbe5148029177b198ae3dc26e1ff257 (patch)
tree7bc293d3f558b3a1a46af0fbbe90f11082d072ac
parent4c998ca548aa95e48f095604e96732de8d03de1c (diff)
downloadgcc-5f7dbaa0adbe5148029177b198ae3dc26e1ff257.zip
gcc-5f7dbaa0adbe5148029177b198ae3dc26e1ff257.tar.gz
gcc-5f7dbaa0adbe5148029177b198ae3dc26e1ff257.tar.bz2
Although there's no fundamental reason why shrink wrapping and speculation tracking are incompatible...
Although there's no fundamental reason why shrink wrapping and speculation tracking are incompatible, a phase-ordering requirement (we need to do speculation tracking before the final basic block clean-up) means that the shrink wrapping pass can undo some of the changes the speculation tracking pass makes. The result is that the tracking, while still safe is less comprehensive than we really want. So to keep things simple, and because the tracking code is quite expensive anyway, it seems best to just disable that pass when we are tracking speculative execution. * config/aarch64/aarch64.c (aarch64_override_options): Disable shrink-wrapping when -mtrack-speculation. From-SVN: r265747
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/aarch64/aarch64.c6
2 files changed, 11 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6aa860d..3ddb149 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2018-11-02 Richard Earnshaw <rearnsha@arm.com>
+
+ * config/aarch64/aarch64.c ((aarch64_override_options): Disable
+ shrink-wrapping when -mtrack-speculation.
+
2018-11-02 Richard Biener <rguenther@suse.de>
* tree-ssa-coalesce.c (struct coalesce_list): Add obstack member.
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index b44ee40..c82c7b6 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -11407,6 +11407,12 @@ aarch64_override_options (void)
|| (aarch64_arch_string && valid_arch))
gcc_assert (explicit_arch != aarch64_no_arch);
+ /* The pass to insert speculation tracking runs before
+ shrink-wrapping and the latter does not know how to update the
+ tracking status. So disable it in this case. */
+ if (aarch64_track_speculation)
+ flag_shrink_wrap = 0;
+
aarch64_override_options_internal (&global_options);
/* Save these options as the default ones in case we push and pop them later