On 05/11/2018 10:05, Richard Biener wrote: > On Fri, Nov 2, 2018 at 3:04 PM Richard Earnshaw (lists) > <richard.earns...@arm.com> wrote: >> >> On 02/11/2018 13:53, Richard Biener wrote: >>> On Fri, Nov 2, 2018 at 2:38 PM Richard Earnshaw (lists) >>> <richard.earns...@arm.com> wrote: >>>> >>>> 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. >>> >>> Shouldn't you be able to do this per function at least? >>> >> >> do what per function? track speculation? > > disable shrink-wrapping only when any speculation was there > (this is about __bultin_speculation_safe_value, no?) >
Only indirectly. This is about the tracking code that tracks conditional branches and propagates that information through call/return sequences. Shrink wrapping messes with the prologue/epilogue sequences after the speculation tracking pass has run and unknowingly deletes some of the additional code that was previously inserted by the tracking pass. R. > Richard. > >> R. >> >>> Richard. >>> >>>> * config/aarch64/aarch64.c (aarch64_override_options): Disable >>>> shrink-wrapping when -mtrack-speculation. >>>> >>>> Committed. >>