]> git.ipfire.org Git - thirdparty/gcc.git/commit - gcc/config/arm/unspecs.md
Arm: Block predication on atomics [PR111235]
authorWilco Dijkstra <wilco.dijkstra@arm.com>
Fri, 29 Sep 2023 12:21:10 +0000 (13:21 +0100)
committerWilco Dijkstra <wilco.dijkstra@arm.com>
Mon, 2 Oct 2023 15:07:01 +0000 (16:07 +0100)
commit0731889c026bfe8d55c4851422ca5ec9d037f7a0
tree085803dfdf4f330578ee91759a8855c95d4e167c
parentbada3c27d855430af736de51439ce275cffda754
Arm: Block predication on atomics [PR111235]

The v7 memory ordering model allows reordering of conditional atomic
instructions.  To avoid this, make all atomic patterns unconditional.
Expand atomic loads and stores for all architectures so the memory access
can be wrapped into an UNSPEC.

Reviewed-by: Ramana Radhakrishnan <ramana.gcc@googlemail.com>
gcc/ChangeLog:
PR target/111235
* config/arm/constraints.md: Remove Pf constraint.
* config/arm/sync.md (arm_atomic_load<mode>): Add new pattern.
(arm_atomic_load_acquire<mode>): Likewise.
(arm_atomic_store<mode>): Likewise.
(arm_atomic_store_release<mode>): Likewise.
(atomic_load<mode>): Switch patterns to define_expand.
(atomic_store<mode>): Likewise.
(arm_atomic_loaddi2_ldrd): Remove predication.
(arm_load_exclusive<mode>): Likewise.
(arm_load_acquire_exclusive<mode>): Likewise.
(arm_load_exclusivesi): Likewise.
(arm_load_acquire_exclusivesi): Likewise.
(arm_load_exclusivedi): Likewise.
(arm_load_acquire_exclusivedi): Likewise.
(arm_store_exclusive<mode>): Likewise.
(arm_store_release_exclusivedi): Likewise.
(arm_store_release_exclusive<mode>): Likewise.
* config/arm/unspecs.md: Add VUNSPEC_LDR and VUNSPEC_STR.

gcc/testsuite/ChangeLog:
PR target/111235
* gcc.dg/rtl/arm/stl-cond.c: Remove test.
* gcc.target/arm/atomic_loaddi_7.c: Fix dmb count.
* gcc.target/arm/atomic_loaddi_8.c: Likewise.
* gcc.target/arm/pr111235.c: Add new test.
gcc/config/arm/constraints.md
gcc/config/arm/sync.md
gcc/config/arm/unspecs.md
gcc/testsuite/gcc.dg/rtl/arm/stl-cond.c [deleted file]
gcc/testsuite/gcc.target/arm/atomic_loaddi_7.c
gcc/testsuite/gcc.target/arm/atomic_loaddi_8.c
gcc/testsuite/gcc.target/arm/pr111235.c [new file with mode: 0644]