AArch64 - disable CB[N]Z TB[N]Z when tracking speculation
authorRichard Earnshaw <rearnsha@arm.com>
Tue, 31 Jul 2018 17:36:09 +0000 (17:36 +0000)
committerRichard Earnshaw <rearnsha@gcc.gnu.org>
Tue, 31 Jul 2018 17:36:09 +0000 (17:36 +0000)
commit6e1eaca96f745be9d40672c29cd2355c8b17b674
tree811af2ddcf0c35222ede963ae5fde1ef227a2407
parent3b0c25022ec92d117d4ff6d7e11fdfb5327eff0e
AArch64 - disable CB[N]Z TB[N]Z when tracking speculation

The CB[N]Z and TB[N]Z instructions do not expose the comparison through
the condition code flags.  This makes it impossible to track speculative
execution through such a branch.  We can handle this relatively easily
by simply disabling the patterns in this case.

A side effect of this is that the split patterns for the atomic operations
need to also avoid generating these instructions.  They mostly have simple
fall-backs for this already.

* config/aarch64/aarch64.md (cb<optab><mode>1): Disable when
aarch64_track_speculation is true.
(tb<optab><mode>1): Likewise.
* config/aarch64/aarch64.c (aarch64_split_compare_regs): Do not
generate CB[N]Z when tracking speculation.
(aarch64_split_compare_and_swap): Likewise.
(aarch64_split_atomic_op): Likewise.

From-SVN: r263172
gcc/ChangeLog
gcc/config/aarch64/aarch64.c
gcc/config/aarch64/aarch64.md