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
+2018-11-02 Richard Earnshaw <rearnsha@arm.com>
+
+ * config/aarch64/aarch64.c ((aarch64_override_options): Disable
+ shrink-wrapping when -mtrack-speculation.
+
2018-08-23 Richard Earnshaw <rearnsha@arm.com>
PR target/86951
|| (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