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

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

commit ace877912bd2231a6c5ad91ef2565e1788128f2d
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 a708cb25d9284e9234b6457f8260bfc79f09043e)

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 03df25986b5..136ae98f89c 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-19  Eric S. Raymond <esr@thyrsus.com>
 	    Sandra Loosemore  <sandra@codesourcery.com>
 
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 64eab084683..20761578fb6 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -14336,6 +14336,9 @@ aarch64_gen_atomic_cas (rtx rval, rtx mem,
 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;
@@ -14680,6 +14683,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 68dc65c6d00..686e39ff2ee 100644
--- a/gcc/config/aarch64/atomics.md
+++ b/gcc/config/aarch64/atomics.md
@@ -53,7 +53,7 @@
    (clobber (match_scratch:SI 7 "=&r"))]
   ""
   "#"
-  "&& reload_completed"
+  "&& epilogue_completed"
   [(const_int 0)]
   {
     aarch64_split_compare_and_swap (operands);
@@ -77,7 +77,7 @@
    (clobber (match_scratch:SI 7 "=&r"))]
   ""
   "#"
-  "&& reload_completed"
+  "&& epilogue_completed"
   [(const_int 0)]
   {
     aarch64_split_compare_and_swap (operands);
@@ -169,7 +169,7 @@
    (clobber (match_scratch:SI 4 "=&r"))]
   ""
   "#"
-  "&& reload_completed"
+  "&& epilogue_completed"
   [(const_int 0)]
   {
     aarch64_split_atomic_op (SET, operands[0], NULL, operands[1],
@@ -230,7 +230,7 @@
   (clobber (match_scratch:SI 4 "=&r"))]
   ""
   "#"
-  "&& reload_completed"
+  "&& epilogue_completed"
   [(const_int 0)]
   {
     aarch64_split_atomic_op (<CODE>, NULL, operands[3], operands[0],
@@ -271,7 +271,7 @@
    (clobber (match_scratch:SI 4 "=&r"))]
   ""
   "#"
-  "&& reload_completed"
+  "&& epilogue_completed"
   [(const_int 0)]
   {
      aarch64_split_atomic_op (NOT, NULL, operands[3], operands[0],
@@ -317,7 +317,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],
@@ -361,7 +361,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],
@@ -408,7 +408,7 @@
    (clobber (match_scratch:SI 4 "=&r"))]
   ""
   "#"
-  "&& reload_completed"
+  "&& epilogue_completed"
   [(const_int 0)]
   {
     aarch64_split_atomic_op (<CODE>, NULL, operands[0], operands[1],
@@ -455,7 +455,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-8-branch)] Aarch64: Fix shrinkwrapping interactions with atomics (PR92692)
@ 2020-09-17 16:58 Jakub Jelinek
  0 siblings, 0 replies; 2+ messages in thread
From: Jakub Jelinek @ 2020-09-17 16:58 UTC (permalink / raw)
  To: gcc-cvs

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

commit c185c39a5a5a28565a2a5f73ff1f5ecca6855c8a
Author: Andre Vieira <andre.simoesdiasvieira@arm.com>
Date:   Thu Apr 16 10:16:15 2020 +0100

    Aarch64: Fix shrinkwrapping interactions with atomics (PR92692)
    
    2020-04-16  Andre Vieira  <andre.simoesdiasvieira@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 88539d9d699..c15d9221b04 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2020-04-16  Andre Vieira  <andre.simoesdiasvieira@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-16  Andre Vieira  <andre.simoesdiasvieira@arm.com>
 
 	Backport from mainline.
diff --git a/gcc/config/aarch64/atomics.md b/gcc/config/aarch64/atomics.md
index d79c1896321..4984a08680e 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-09-17 16:58 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-17 16:37 [gcc(refs/vendors/redhat/heads/gcc-8-branch)] [AArch64] Fix shrinkwrapping interactions with atomics (PR92692) Jakub Jelinek
2020-09-17 16:58 [gcc(refs/vendors/redhat/heads/gcc-8-branch)] Aarch64: " 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).