summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>2018-11-02 13:36:31 +0000
committerDongkyun Son <dongkyun.s@samsung.com>2019-01-31 21:41:21 +0900
commitc273b493a76a3f23d640d9e877e475937e7c992e (patch)
treeed9cabea2085d066128409f381dbfcfec5e058d6
parentb21ab123ee5870cc85e7634ee8f7a819ef91384e (diff)
downloadlinaro-gcc-sandbox/dkson95/spectre_v1.tar.gz
linaro-gcc-sandbox/dkson95/spectre_v1.tar.bz2
linaro-gcc-sandbox/dkson95/spectre_v1.zip
Although there's no fundamental reason why shrink wrapping andsandbox/dkson95/spectre_v1
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. (backported 3024ac6836fa5a0f8ab539a0823bfb609aef0e93) Change-Id: I894aa3562b8ddfc951e2eb33c15bd9d79c423c0f git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@265747 138bc75d-0d04-0410-961f-82ee72b054a4
-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 96e9021891a..a5f44da6db8 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-06 Richard Earnshaw <rearnsha@arm.com>
* config/aarch64/aarch64.md (speculation_tracker): Set the mode for
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 3b555265e9c..16cd780ac6e 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -8584,6 +8584,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