The non-LSE pattern aarch64_atomic_exchange<mode> comes before the LSE pattern aarch64_atomic_exchange<mode>_lse. From a recog perspective, the only difference between the patterns is that the non-LSE one clobbers CC and needs a scratch.
However, combine and RTL-SSA can both add clobbers to make a pattern match. This means that if they try to rerecognise an LSE pattern, they could end up turning it into a non-LSE pattern. This patch adds a !TARGET_LSE test to avoid that. This is needed to avoid a regression with later patches. Tested on aarch64-linux-gnu & pushed. Richard gcc/ * config/aarch64/atomics.md (aarch64_atomic_exchange<mode>): Require !TARGET_LSE. --- gcc/config/aarch64/atomics.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/aarch64/atomics.md b/gcc/config/aarch64/atomics.md index 2b6f04efa6c..055a87320ca 100644 --- a/gcc/config/aarch64/atomics.md +++ b/gcc/config/aarch64/atomics.md @@ -224,7 +224,7 @@ (define_insn_and_split "aarch64_atomic_exchange<mode>" UNSPECV_ATOMIC_EXCHG)) (clobber (reg:CC CC_REGNUM)) (clobber (match_scratch:SI 4 "=&r"))] - "" + "!TARGET_LSE" "#" "&& epilogue_completed" [(const_int 0)] -- 2.25.1