public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/vendors/redhat/heads/gcc-9-branch)] [AArch64] Fix shrinkwrapping interactions with atomics (PR92692)
@ 2020-03-17 19:06 Jakub Jelinek
  0 siblings, 0 replies; 2+ messages in thread
From: Jakub Jelinek @ 2020-03-17 19:06 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:a708cb25d9284e9234b6457f8260bfc79f09043e

commit a708cb25d9284e9234b6457f8260bfc79f09043e
Author: Wilco Dijkstra <wdijkstr@arm.com>
Date:   Fri Jan 17 13:17:21 2020 +0000

    [AArch64] Fix shrinkwrapping interactions with atomics (PR92692)
    
    The separate shrinkwrapping pass may insert stores in the middle
    of atomics loops which can cause issues on some implementations.
    Avoid this by delaying splitting atomics patterns until after
    prolog/epilog generation.
    
    gcc/
            PR target/92692
            * config/aarch64/aarch64.c (aarch64_split_compare_and_swap)
            Add assert to ensure prolog has been emitted.
            (aarch64_split_atomic_op): Likewise.
            * config/aarch64/atomics.md (aarch64_compare_and_swap<mode>)
            Use epilogue_completed rather than reload_completed.
            (aarch64_atomic_exchange<mode>): Likewise.
            (aarch64_atomic_<atomic_optab><mode>): Likewise.
            (atomic_nand<mode>): Likewise.
            (aarch64_atomic_fetch_<atomic_optab><mode>): Likewise.
            (atomic_fetch_nand<mode>): Likewise.
            (aarch64_atomic_<atomic_optab>_fetch<mode>): Likewise.
            (atomic_nand_fetch<mode>): Likewise.
    
    (cherry picked from commit e5e07b68187b9aa334519746c45b8cffc5eb7e5c)

Diff:
---
 gcc/ChangeLog                 | 16 ++++++++++++++++
 gcc/config/aarch64/aarch64.c  |  6 ++++++
 gcc/config/aarch64/atomics.md | 18 +++++++++---------
 3 files changed, 31 insertions(+), 9 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0d5933bb1ae..bf3c477e562 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,19 @@
+2020-01-27  Wilco Dijkstra  <wdijkstr@arm.com>
+
+	PR target/92692
+	* config/aarch64/aarch64.c (aarch64_split_compare_and_swap)
+	Add assert to ensure prolog has been emitted.
+	(aarch64_split_atomic_op): Likewise.
+	* config/aarch64/atomics.md (aarch64_compare_and_swap<mode>)
+	Use epilogue_completed rather than reload_completed.
+	(aarch64_atomic_exchange<mode>): Likewise.
+	(aarch64_atomic_<atomic_optab><mode>): Likewise.
+	(atomic_nand<mode>): Likewise.
+	(aarch64_atomic_fetch_<atomic_optab><mode>): Likewise.
+	(atomic_fetch_nand<mode>): Likewise.
+	(aarch64_atomic_<atomic_optab>_fetch<mode>): Likewise.
+	(atomic_nand_fetch<mode>): Likewise.
+
 2020-01-22  Jakub Jelinek  <jakub@redhat.com>
 
 	PR target/93335
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 90c6ea35dc1..d2a74a7e9d8 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -15504,6 +15504,9 @@ aarch64_emit_post_barrier (enum memmodel model)
 void
 aarch64_split_compare_and_swap (rtx operands[])
 {
+  /* Split after prolog/epilog to avoid interactions with shrinkwrapping.  */
+  gcc_assert (epilogue_completed);
+
   rtx rval, mem, oldval, newval, scratch;
   machine_mode mode;
   bool is_weak;
@@ -15620,6 +15623,9 @@ void
 aarch64_split_atomic_op (enum rtx_code code, rtx old_out, rtx new_out, rtx mem,
 			 rtx value, rtx model_rtx, rtx cond)
 {
+  /* Split after prolog/epilog to avoid interactions with shrinkwrapping.  */
+  gcc_assert (epilogue_completed);
+
   machine_mode mode = GET_MODE (mem);
   machine_mode wmode = (mode == DImode ? DImode : SImode);
   const enum memmodel model = memmodel_from_int (INTVAL (model_rtx));
diff --git a/gcc/config/aarch64/atomics.md b/gcc/config/aarch64/atomics.md
index b6b5f6be232..0f357662ac3 100644
--- a/gcc/config/aarch64/atomics.md
+++ b/gcc/config/aarch64/atomics.md
@@ -56,7 +56,7 @@
    (clobber (match_scratch:SI 7 "=&r"))]
   ""
   "#"
-  "&& reload_completed"
+  "&& epilogue_completed"
   [(const_int 0)]
   {
     aarch64_split_compare_and_swap (operands);
@@ -80,7 +80,7 @@
    (clobber (match_scratch:SI 7 "=&r"))]
   ""
   "#"
-  "&& reload_completed"
+  "&& epilogue_completed"
   [(const_int 0)]
   {
     aarch64_split_compare_and_swap (operands);
@@ -166,7 +166,7 @@
    (clobber (match_scratch:SI 4 "=&r"))]
   ""
   "#"
-  "&& reload_completed"
+  "&& epilogue_completed"
   [(const_int 0)]
   {
     aarch64_split_atomic_op (SET, operands[0], NULL, operands[1],
@@ -254,7 +254,7 @@
   (clobber (match_scratch:SI 4 "=&r"))]
   ""
   "#"
-  "&& reload_completed"
+  "&& epilogue_completed"
   [(const_int 0)]
   {
     aarch64_split_atomic_op (<CODE>, NULL, operands[3], operands[0],
@@ -310,7 +310,7 @@
    (clobber (match_scratch:SI 4 "=&r"))]
   ""
   "#"
-  "&& reload_completed"
+  "&& epilogue_completed"
   [(const_int 0)]
   {
      aarch64_split_atomic_op (NOT, NULL, operands[3], operands[0],
@@ -380,7 +380,7 @@
    (clobber (match_scratch:SI 5 "=&r"))]
   ""
   "#"
-  "&& reload_completed"
+  "&& epilogue_completed"
   [(const_int 0)]
   {
     aarch64_split_atomic_op (<CODE>, operands[0], operands[4], operands[1],
@@ -427,7 +427,7 @@
    (clobber (match_scratch:SI 5 "=&r"))]
   ""
   "#"
-  "&& reload_completed"
+  "&& epilogue_completed"
   [(const_int 0)]
   {
     aarch64_split_atomic_op (NOT, operands[0], operands[4], operands[1],
@@ -480,7 +480,7 @@
    (clobber (match_scratch:SI 4 "=&r"))]
   ""
   "#"
-  "&& reload_completed"
+  "&& epilogue_completed"
   [(const_int 0)]
   {
     aarch64_split_atomic_op (<CODE>, NULL, operands[0], operands[1],
@@ -504,7 +504,7 @@
    (clobber (match_scratch:SI 4 "=&r"))]
   ""
   "#"
-  "&& reload_completed"
+  "&& epilogue_completed"
   [(const_int 0)]
   {
     aarch64_split_atomic_op (NOT, NULL, operands[0], operands[1],


^ permalink raw reply	[flat|nested] 2+ messages in thread

* [gcc(refs/vendors/redhat/heads/gcc-9-branch)] [AArch64] Fix shrinkwrapping interactions with atomics (PR92692)
@ 2020-04-08 12:51 Jakub Jelinek
  0 siblings, 0 replies; 2+ messages in thread
From: Jakub Jelinek @ 2020-04-08 12:51 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:ea376dd471a3b006bc48945c1d9a29408ab17a04

commit ea376dd471a3b006bc48945c1d9a29408ab17a04
Author: Kyrylo Tkachov <kyrylo.tkachov@arm.com>
Date:   Wed Apr 1 12:09:09 2020 +0100

    [AArch64] Fix shrinkwrapping interactions with atomics (PR92692)
    
    2020-04-01  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
    
            Backport from mainline
            2020-01-17  Wilco Dijkstra  <wdijkstr@arm.com>
    
            PR target/92692
            * config/aarch64/atomics.md (aarch64_compare_and_swap<mode>)
            Use epilogue_completed rather than reload_completed.

Diff:
---
 gcc/ChangeLog                 | 9 +++++++++
 gcc/config/aarch64/atomics.md | 2 +-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e48d0bcf3d9..d0fc36b8ddf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2020-04-01  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+	Backport from mainline
+	2020-01-17  Wilco Dijkstra  <wdijkstr@arm.com>
+
+	PR target/92692
+	* config/aarch64/atomics.md (aarch64_compare_and_swap<mode>)
+	Use epilogue_completed rather than reload_completed.
+
 2020-04-01  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
 	Backport from mainline
diff --git a/gcc/config/aarch64/atomics.md b/gcc/config/aarch64/atomics.md
index cabcc58f1a0..1458bc00095 100644
--- a/gcc/config/aarch64/atomics.md
+++ b/gcc/config/aarch64/atomics.md
@@ -104,7 +104,7 @@
    (clobber (match_scratch:SI 7 "=&r"))]
   ""
   "#"
-  "&& reload_completed"
+  "&& epilogue_completed"
   [(const_int 0)]
   {
     aarch64_split_compare_and_swap (operands);


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-04-08 12:51 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-17 19:06 [gcc(refs/vendors/redhat/heads/gcc-9-branch)] [AArch64] Fix shrinkwrapping interactions with atomics (PR92692) Jakub Jelinek
2020-04-08 12:51 Jakub Jelinek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).