2020-04-16  Andre Vieira <andre.simoesdiasvie...@arm.com>

    Backport from mainline
    2019-09-19  Richard Henderson <richard.hender...@linaro.org>

    * config/aarch64/aarch64.opt (-moutline-atomics): New.
    * config/aarch64/aarch64.c (aarch64_atomic_ool_func): New.
    (aarch64_ool_cas_names, aarch64_ool_swp_names): New.
    (aarch64_ool_ldadd_names, aarch64_ool_ldset_names): New.
    (aarch64_ool_ldclr_names, aarch64_ool_ldeor_names): New.
    (aarch64_expand_compare_and_swap): Honor TARGET_OUTLINE_ATOMICS.
    * config/aarch64/atomics.md (atomic_exchange<ALLI>): Likewise.
    (atomic_<atomic_op><ALLI>): Likewise.
    (atomic_fetch_<atomic_op><ALLI>): Likewise.
    (atomic_<atomic_op>_fetch<ALLI>): Likewise.
    * doc/invoke.texi: Document -moutline-atomics.

    * gcc.target/aarch64/atomic-op-acq_rel.c: Use -mno-outline-atomics.
    * gcc.target/aarch64/atomic-comp-swap-release-acquire.c: Likewise.
    * gcc.target/aarch64/atomic-op-acquire.c: Likewise.
    * gcc.target/aarch64/atomic-op-char.c: Likewise.
    * gcc.target/aarch64/atomic-op-consume.c: Likewise.
    * gcc.target/aarch64/atomic-op-imm.c: Likewise.
    * gcc.target/aarch64/atomic-op-int.c: Likewise.
    * gcc.target/aarch64/atomic-op-long.c: Likewise.
    * gcc.target/aarch64/atomic-op-relaxed.c: Likewise.
    * gcc.target/aarch64/atomic-op-release.c: Likewise.
    * gcc.target/aarch64/atomic-op-seq_cst.c: Likewise.
    * gcc.target/aarch64/atomic-op-short.c: Likewise.
    * gcc.target/aarch64/atomic_cmp_exchange_zero_reg_1.c: Likewise.
    * gcc.target/aarch64/atomic_cmp_exchange_zero_strong_1.c: Likewise.
    * gcc.target/aarch64/sync-comp-swap.c: Likewise.
    * gcc.target/aarch64/sync-op-acquire.c: Likewise.
    * gcc.target/aarch64/sync-op-full.c: Likewise.

diff --git a/gcc/config/aarch64/aarch64-protos.h 
b/gcc/config/aarch64/aarch64-protos.h
index 
da68ce0e7d096bf4a512c2b8ef52bf236f8f76f4..0f1dc75a27f3fdd2218e57811e208fc28139ac4a
 100644
--- a/gcc/config/aarch64/aarch64-protos.h
+++ b/gcc/config/aarch64/aarch64-protos.h
@@ -548,4 +548,17 @@ rtl_opt_pass *make_pass_fma_steering (gcc::context *ctxt);
 
 poly_uint64 aarch64_regmode_natural_size (machine_mode);
 
+struct atomic_ool_names
+{
+    const char *str[5][4];
+};
+
+rtx aarch64_atomic_ool_func(machine_mode mode, rtx model_rtx,
+                           const atomic_ool_names *names);
+extern const atomic_ool_names aarch64_ool_swp_names;
+extern const atomic_ool_names aarch64_ool_ldadd_names;
+extern const atomic_ool_names aarch64_ool_ldset_names;
+extern const atomic_ool_names aarch64_ool_ldclr_names;
+extern const atomic_ool_names aarch64_ool_ldeor_names;
+
 #endif /* GCC_AARCH64_PROTOS_H */
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 
2df5bf3db97d9362155c3c8d9c9d7f14c41b9520..21124b5a3479dd388eb767402e080e2181153467
 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -14227,6 +14227,82 @@ aarch64_emit_unlikely_jump (rtx insn)
   add_reg_br_prob_note (jump, profile_probability::very_unlikely ());
 }
 
+/* We store the names of the various atomic helpers in a 5x4 array.
+   Return the libcall function given MODE, MODEL and NAMES.  */
+
+rtx
+aarch64_atomic_ool_func(machine_mode mode, rtx model_rtx,
+                       const atomic_ool_names *names)
+{
+  memmodel model = memmodel_base (INTVAL (model_rtx));
+  int mode_idx, model_idx;
+
+  switch (mode)
+    {
+    case E_QImode:
+      mode_idx = 0;
+      break;
+    case E_HImode:
+      mode_idx = 1;
+      break;
+    case E_SImode:
+      mode_idx = 2;
+      break;
+    case E_DImode:
+      mode_idx = 3;
+      break;
+    case E_TImode:
+      mode_idx = 4;
+      break;
+    default:
+      gcc_unreachable ();
+    }
+
+  switch (model)
+    {
+    case MEMMODEL_RELAXED:
+      model_idx = 0;
+      break;
+    case MEMMODEL_CONSUME:
+    case MEMMODEL_ACQUIRE:
+      model_idx = 1;
+      break;
+    case MEMMODEL_RELEASE:
+      model_idx = 2;
+      break;
+    case MEMMODEL_ACQ_REL:
+    case MEMMODEL_SEQ_CST:
+      model_idx = 3;
+      break;
+    default:
+      gcc_unreachable ();
+    }
+
+  return init_one_libfunc_visibility (names->str[mode_idx][model_idx],
+                                     VISIBILITY_HIDDEN);
+}
+
+#define DEF0(B, N) \
+  { "__aarch64_" #B #N "_relax", \
+    "__aarch64_" #B #N "_acq", \
+    "__aarch64_" #B #N "_rel", \
+    "__aarch64_" #B #N "_acq_rel" }
+
+#define DEF4(B)  DEF0(B, 1), DEF0(B, 2), DEF0(B, 4), DEF0(B, 8), \
+                { NULL, NULL, NULL, NULL }
+#define DEF5(B)  DEF0(B, 1), DEF0(B, 2), DEF0(B, 4), DEF0(B, 8), DEF0(B, 16)
+
+static const atomic_ool_names aarch64_ool_cas_names = { { DEF5(cas) } };
+const atomic_ool_names aarch64_ool_swp_names = { { DEF4(swp) } };
+const atomic_ool_names aarch64_ool_ldadd_names = { { DEF4(ldadd) } };
+const atomic_ool_names aarch64_ool_ldset_names = { { DEF4(ldset) } };
+const atomic_ool_names aarch64_ool_ldclr_names = { { DEF4(ldclr) } };
+const atomic_ool_names aarch64_ool_ldeor_names = { { DEF4(ldeor) } };
+
+#undef DEF0
+#undef DEF4
+#undef DEF5
+
 /* Expand a compare and swap pattern.  */
 
 void
@@ -14294,6 +14370,17 @@ aarch64_expand_compare_and_swap (rtx operands[])
 
       cc_reg = aarch64_gen_compare_reg_maybe_ze (NE, rval, oldval, mode);
     }
+  else if (TARGET_OUTLINE_ATOMICS)
+    {
+      /* Oldval must satisfy compare afterward.  */
+      if (!aarch64_plus_operand (oldval, mode))
+       oldval = force_reg (mode, oldval);
+      rtx func = aarch64_atomic_ool_func (mode, mod_s, &aarch64_ool_cas_names);
+      rval = emit_library_call_value (func, NULL_RTX, LCT_NORMAL, r_mode,
+                                     oldval, mode, newval, mode,
+                                     XEXP (mem, 0), Pmode);
+      cc_reg = aarch64_gen_compare_reg_maybe_ze (NE, rval, oldval, mode);
+    }
   else
     {
       /* The oldval predicate varies by mode.  Test it and force to reg.  */
diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt
index 
52eaf8c6f408fb640dbc858d4cf4a70054fe8082..b4970b736070f3c529c3776565ccf4f9bab50d13
 100644
--- a/gcc/config/aarch64/aarch64.opt
+++ b/gcc/config/aarch64/aarch64.opt
@@ -214,3 +214,7 @@ Target RejectNegative Joined Enum(sve_vector_bits) 
Var(aarch64_sve_vector_bits)
 mverbose-cost-dump
 Common Undocumented Var(flag_aarch64_verbose_cost)
 Enables verbose cost model dumping in the debug dump files.
+
+moutline-atomics
+Target Report Mask(OUTLINE_ATOMICS) Save
+Generate local calls to out-of-line atomic operations.
diff --git a/gcc/config/aarch64/atomics.md b/gcc/config/aarch64/atomics.md
index 
d79c18963211d62e21f186802682332ec9d15881..28a1dbc4231009333c2e766d9d3aead54a491631
 100644
--- a/gcc/config/aarch64/atomics.md
+++ b/gcc/config/aarch64/atomics.md
@@ -186,16 +186,27 @@
   (match_operand:SI 3 "const_int_operand" "")]
   ""
   {
-    rtx (*gen) (rtx, rtx, rtx, rtx);
-
     /* Use an atomic SWP when available.  */
     if (TARGET_LSE)
-      gen = gen_aarch64_atomic_exchange<mode>_lse;
+      {
+       emit_insn (gen_aarch64_atomic_exchange<mode>_lse
+                  (operands[0], operands[1], operands[2], operands[3]));
+      }
+    else if (TARGET_OUTLINE_ATOMICS)
+      {
+       machine_mode mode = <MODE>mode;
+       rtx func = aarch64_atomic_ool_func (mode, operands[3],
+                                           &aarch64_ool_swp_names);
+       rtx rval = emit_library_call_value (func, operands[0], LCT_NORMAL,
+                                           mode, operands[2], mode,
+                                           XEXP (operands[1], 0), Pmode);
+        emit_move_insn (operands[0], rval);
+      }
     else
-      gen = gen_aarch64_atomic_exchange<mode>;
-
-    emit_insn (gen (operands[0], operands[1], operands[2], operands[3]));
-
+      {
+       emit_insn (gen_aarch64_atomic_exchange<mode>
+                  (operands[0], operands[1], operands[2], operands[3]));
+      }
     DONE;
   }
 )
@@ -280,6 +291,39 @@
          }
        operands[1] = force_reg (<MODE>mode, operands[1]);
       }
+    else if (TARGET_OUTLINE_ATOMICS)
+      {
+        const atomic_ool_names *names;
+       switch (<CODE>)
+         {
+         case MINUS:
+           operands[1] = expand_simple_unop (<MODE>mode, NEG, operands[1],
+                                             NULL, 1);
+           /* fallthru */
+         case PLUS:
+           names = &aarch64_ool_ldadd_names;
+           break;
+         case IOR:
+           names = &aarch64_ool_ldset_names;
+           break;
+         case XOR:
+           names = &aarch64_ool_ldeor_names;
+           break;
+         case AND:
+           operands[1] = expand_simple_unop (<MODE>mode, NOT, operands[1],
+                                             NULL, 1);
+           names = &aarch64_ool_ldclr_names;
+           break;
+         default:
+           gcc_unreachable ();
+         }
+        machine_mode mode = <MODE>mode;
+       rtx func = aarch64_atomic_ool_func (mode, operands[2], names);
+       emit_library_call_value (func, NULL_RTX, LCT_NORMAL, mode,
+                                operands[1], mode,
+                                XEXP (operands[0], 0), Pmode);
+        DONE;
+      }
     else
       gen = gen_aarch64_atomic_<atomic_optab><mode>;
 
@@ -405,6 +449,40 @@
        }
       operands[2] = force_reg (<MODE>mode, operands[2]);
     }
+  else if (TARGET_OUTLINE_ATOMICS)
+    {
+      const atomic_ool_names *names;
+      switch (<CODE>)
+       {
+       case MINUS:
+         operands[2] = expand_simple_unop (<MODE>mode, NEG, operands[2],
+                                           NULL, 1);
+         /* fallthru */
+       case PLUS:
+         names = &aarch64_ool_ldadd_names;
+         break;
+       case IOR:
+         names = &aarch64_ool_ldset_names;
+         break;
+       case XOR:
+         names = &aarch64_ool_ldeor_names;
+         break;
+       case AND:
+         operands[2] = expand_simple_unop (<MODE>mode, NOT, operands[2],
+                                           NULL, 1);
+         names = &aarch64_ool_ldclr_names;
+         break;
+       default:
+         gcc_unreachable ();
+       }
+      machine_mode mode = <MODE>mode;
+      rtx func = aarch64_atomic_ool_func (mode, operands[3], names);
+      rtx rval = emit_library_call_value (func, operands[0], LCT_NORMAL, mode,
+                                         operands[2], mode,
+                                         XEXP (operands[1], 0), Pmode);
+      emit_move_insn (operands[0], rval);
+      DONE;
+    }
   else
     gen = gen_aarch64_atomic_fetch_<atomic_optab><mode>;
 
@@ -494,7 +572,7 @@
 {
   /* Use an atomic load-operate instruction when possible.  In this case
      we will re-compute the result from the original mem value. */
-  if (TARGET_LSE)
+  if (TARGET_LSE || TARGET_OUTLINE_ATOMICS)
     {
       rtx tmp = gen_reg_rtx (<MODE>mode);
       operands[2] = force_reg (<MODE>mode, operands[2]);
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 
c138a0e84ce1e4cb2afd2b2ee9a8e625aa10df27..bdad016baeb7f4329727def86b75bca7b6aee5ab
 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -604,7 +604,8 @@ Objective-C and Objective-C++ Dialects}.
 -mpc-relative-literal-loads @gol
 -msign-return-address=@var{scope} @gol
 -march=@var{name}  -mcpu=@var{name}  -mtune=@var{name}  @gol
--moverride=@var{string}  -mverbose-cost-dump}
+-moverride=@var{string}  -mverbose-cost-dump @gol
+-moutline-atomics }
 
 @emph{Adapteva Epiphany Options}
 @gccoptlist{-mhalf-reg-file  -mprefer-short-insn-regs @gol
@@ -14712,6 +14713,19 @@ This option only has an effect if @option{-ffast-math} 
or
 precision of division results to about 16 bits for
 single precision and to 32 bits for double precision.
 
+@item -moutline-atomics
+@itemx -mno-outline-atomics
+Enable or disable calls to out-of-line helpers to implement atomic operations.
+These helpers will, at runtime, determine if the LSE instructions from
+ARMv8.1-A can be used; if not, they will use the load/store-exclusive
+instructions that are present in the base ARMv8.0 ISA.
+
+This option is only applicable when compiling for the base ARMv8.0
+instruction set.  If using a later revision, e.g. @option{-march=armv8.1-a}
+or @option{-march=armv8-a+lse}, the ARMv8.1-Atomics instructions will be
+used directly.  The same applies when using @option{-mcpu=} when the
+selected cpu supports the @samp{lse} feature.
+
 @item -march=@var{name}
 @opindex march
 Specify the name of the target architecture and, optionally, one or
diff --git 
a/gcc/testsuite/gcc.target/aarch64/atomic-comp-swap-release-acquire.c 
b/gcc/testsuite/gcc.target/aarch64/atomic-comp-swap-release-acquire.c
index 
49ca5d0d09c1e30f931cd6642b1973b441b98ac7..a828a72aa75af7bce6da76a2456296ea177dd865
 100644
--- a/gcc/testsuite/gcc.target/aarch64/atomic-comp-swap-release-acquire.c
+++ b/gcc/testsuite/gcc.target/aarch64/atomic-comp-swap-release-acquire.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-march=armv8-a+nolse -O2 -fno-ipa-icf" } */
+/* { dg-options "-march=armv8-a+nolse -O2 -fno-ipa-icf -mno-outline-atomics" } 
*/
 
 #include "atomic-comp-swap-release-acquire.x"
 
diff --git a/gcc/testsuite/gcc.target/aarch64/atomic-op-acq_rel.c 
b/gcc/testsuite/gcc.target/aarch64/atomic-op-acq_rel.c
index 
74f26348e42755e92ceb623306d909d529dbb937..6823ce381b2c1b74d61fe98c04904884bb2d87ae
 100644
--- a/gcc/testsuite/gcc.target/aarch64/atomic-op-acq_rel.c
+++ b/gcc/testsuite/gcc.target/aarch64/atomic-op-acq_rel.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-march=armv8-a+nolse -O2" } */
+/* { dg-options "-march=armv8-a+nolse -O2 -mno-outline-atomics" } */
 
 #include "atomic-op-acq_rel.x"
 
diff --git a/gcc/testsuite/gcc.target/aarch64/atomic-op-acquire.c 
b/gcc/testsuite/gcc.target/aarch64/atomic-op-acquire.c
index 
66c1b1efe20e6f0ebf6ccda10a7d8f24420d1840..87937de378ab02f284a3378c2315ed70e43fa27f
 100644
--- a/gcc/testsuite/gcc.target/aarch64/atomic-op-acquire.c
+++ b/gcc/testsuite/gcc.target/aarch64/atomic-op-acquire.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-march=armv8-a+nolse -O2" } */
+/* { dg-options "-march=armv8-a+nolse -O2 -mno-outline-atomics" } */
 
 #include "atomic-op-acquire.x"
 
diff --git a/gcc/testsuite/gcc.target/aarch64/atomic-op-char.c 
b/gcc/testsuite/gcc.target/aarch64/atomic-op-char.c
index 
c09d0434ecf54c1e2df3f0a07141e60133d4520b..60955e57da348642cbbf540d1f10e3cb4ebc177f
 100644
--- a/gcc/testsuite/gcc.target/aarch64/atomic-op-char.c
+++ b/gcc/testsuite/gcc.target/aarch64/atomic-op-char.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-march=armv8-a+nolse -O2" } */
+/* { dg-options "-march=armv8-a+nolse -O2 -mno-outline-atomics" } */
 
 #include "atomic-op-char.x"
 
diff --git a/gcc/testsuite/gcc.target/aarch64/atomic-op-consume.c 
b/gcc/testsuite/gcc.target/aarch64/atomic-op-consume.c
index 
5783ab84f5c6a46f1c9b659c3772118f07fc6ebb..16cb11aeeaf43c903771278ae06c9382d8a1a74c
 100644
--- a/gcc/testsuite/gcc.target/aarch64/atomic-op-consume.c
+++ b/gcc/testsuite/gcc.target/aarch64/atomic-op-consume.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-march=armv8-a+nolse -O2" } */
+/* { dg-options "-march=armv8-a+nolse -O2 -mno-outline-atomics" } */
 
 #include "atomic-op-consume.x"
 
diff --git a/gcc/testsuite/gcc.target/aarch64/atomic-op-imm.c 
b/gcc/testsuite/gcc.target/aarch64/atomic-op-imm.c
index 
18b8f0b04e96b34d06472e0b080190889b72baa1..bcab4e481e3bc0762ea46a9513e3e4937ee18209
 100644
--- a/gcc/testsuite/gcc.target/aarch64/atomic-op-imm.c
+++ b/gcc/testsuite/gcc.target/aarch64/atomic-op-imm.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-march=armv8-a+nolse -O2" } */
+/* { dg-options "-march=armv8-a+nolse -O2 -mno-outline-atomics" } */
 
 int v = 0;
 
diff --git a/gcc/testsuite/gcc.target/aarch64/atomic-op-int.c 
b/gcc/testsuite/gcc.target/aarch64/atomic-op-int.c
index 
8520f0839ba904b7a70a2d8298f3b33abbbb00f7..040e4a8d1684b87de605276999603417da1371fc
 100644
--- a/gcc/testsuite/gcc.target/aarch64/atomic-op-int.c
+++ b/gcc/testsuite/gcc.target/aarch64/atomic-op-int.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-march=armv8-a+nolse -O2" } */
+/* { dg-options "-march=armv8-a+nolse -O2 -mno-outline-atomics" } */
 
 #include "atomic-op-int.x"
 
diff --git a/gcc/testsuite/gcc.target/aarch64/atomic-op-long.c 
b/gcc/testsuite/gcc.target/aarch64/atomic-op-long.c
index 
d011f8c5ce247b987342b21d77fd321889d52be2..fc88b92cd3ea22854ee47b9009c08dbcd255f273
 100644
--- a/gcc/testsuite/gcc.target/aarch64/atomic-op-long.c
+++ b/gcc/testsuite/gcc.target/aarch64/atomic-op-long.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-march=armv8-a+nolse -O2" } */
+/* { dg-options "-march=armv8-a+nolse -O2 -mno-outline-atomics" } */
 
 long v = 0;
 
diff --git a/gcc/testsuite/gcc.target/aarch64/atomic-op-relaxed.c 
b/gcc/testsuite/gcc.target/aarch64/atomic-op-relaxed.c
index 
ed96bfdb978fe7a1968c8d383e1a37e705298e90..503d62b02809f9547b304606ab47581b8176e7a2
 100644
--- a/gcc/testsuite/gcc.target/aarch64/atomic-op-relaxed.c
+++ b/gcc/testsuite/gcc.target/aarch64/atomic-op-relaxed.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-march=armv8-a+nolse -O2" } */
+/* { dg-options "-march=armv8-a+nolse -O2 -mno-outline-atomics" } */
 
 #include "atomic-op-relaxed.x"
 
diff --git a/gcc/testsuite/gcc.target/aarch64/atomic-op-release.c 
b/gcc/testsuite/gcc.target/aarch64/atomic-op-release.c
index 
fc4be17de891d9048b0d765b02cc791990f24d56..efe14aea7e4b40daf13457582b066e9314206bf4
 100644
--- a/gcc/testsuite/gcc.target/aarch64/atomic-op-release.c
+++ b/gcc/testsuite/gcc.target/aarch64/atomic-op-release.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-march=armv8-a+nolse -O2" } */
+/* { dg-options "-march=armv8-a+nolse -O2 -mno-outline-atomics" } */
 
 #include "atomic-op-release.x"
 
diff --git a/gcc/testsuite/gcc.target/aarch64/atomic-op-seq_cst.c 
b/gcc/testsuite/gcc.target/aarch64/atomic-op-seq_cst.c
index 
613000fe49075c3507c457c276a9f2bf7cc70c3a..09973bf82ba0c6149d2fdf677bd915604dad3131
 100644
--- a/gcc/testsuite/gcc.target/aarch64/atomic-op-seq_cst.c
+++ b/gcc/testsuite/gcc.target/aarch64/atomic-op-seq_cst.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-march=armv8-a+nolse -O2" } */
+/* { dg-options "-march=armv8-a+nolse -O2 -mno-outline-atomics" } */
 
 #include "atomic-op-seq_cst.x"
 
diff --git a/gcc/testsuite/gcc.target/aarch64/atomic-op-short.c 
b/gcc/testsuite/gcc.target/aarch64/atomic-op-short.c
index 
e82c8118ece6dc17f01ee66675c3f5f34f025795..e1dcebb0f89643d108bfb54e6d7104e94585fe85
 100644
--- a/gcc/testsuite/gcc.target/aarch64/atomic-op-short.c
+++ b/gcc/testsuite/gcc.target/aarch64/atomic-op-short.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-march=armv8-a+nolse -O2" } */
+/* { dg-options "-march=armv8-a+nolse -O2 -mno-outline-atomics" } */
 
 #include "atomic-op-short.x"
 
diff --git a/gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_reg_1.c 
b/gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_reg_1.c
index 
f2a21ddf2e13a2cd82de2db79cdcbbce175768bc..29246979bfba1a71a0464f345c2ca87793d69f02
 100644
--- a/gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_reg_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_reg_1.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -march=armv8-a+nolse" } */
+/* { dg-options "-O2 -march=armv8-a+nolse -mno-outline-atomics" } */
 /* { dg-skip-if "" { *-*-* } { "-mcpu=*" } { "" } } */
 
 int
diff --git 
a/gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_strong_1.c 
b/gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_strong_1.c
index 
8d2ae67dfbe4155ec1af26da4a4cdc0fffb8c5de..6daf9b08f5ace91aa357b85ea9c6a51e7ca812f3
 100644
--- a/gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_strong_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/atomic_cmp_exchange_zero_strong_1.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -march=armv8-a+nolse" } */
+/* { dg-options "-O2 -march=armv8-a+nolse -mno-outline-atomics" } */
 /* { dg-skip-if "" { *-*-* } { "-mcpu=*" } { "" } } */
 
 int
diff --git a/gcc/testsuite/gcc.target/aarch64/sync-comp-swap.c 
b/gcc/testsuite/gcc.target/aarch64/sync-comp-swap.c
index 
e571b2f13b3530144ffd98d74fc7cd54db8a71d0..f56415f3354be520c13113043c6b031ef0f8a257
 100644
--- a/gcc/testsuite/gcc.target/aarch64/sync-comp-swap.c
+++ b/gcc/testsuite/gcc.target/aarch64/sync-comp-swap.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-march=armv8-a+nolse -O2 -fno-ipa-icf" } */
+/* { dg-options "-march=armv8-a+nolse -O2 -fno-ipa-icf -mno-outline-atomics" } 
*/
 
 #include "sync-comp-swap.x"
 
diff --git a/gcc/testsuite/gcc.target/aarch64/sync-op-acquire.c 
b/gcc/testsuite/gcc.target/aarch64/sync-op-acquire.c
index 
357bf1be3b22a9d2f3e475a683568b7f32e1c43a..39b3144aa3691a5c8ffeeb86d90d1e4369ee9e33
 100644
--- a/gcc/testsuite/gcc.target/aarch64/sync-op-acquire.c
+++ b/gcc/testsuite/gcc.target/aarch64/sync-op-acquire.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-march=armv8-a+nolse -O2" } */
+/* { dg-options "-march=armv8-a+nolse -O2 -mno-outline-atomics" } */
 
 #include "sync-op-acquire.x"
 
diff --git a/gcc/testsuite/gcc.target/aarch64/sync-op-full.c 
b/gcc/testsuite/gcc.target/aarch64/sync-op-full.c
index 
c6ba16299654a3410879e144982e652898a7736d..6b8b2043f40a1d7bfcbd1504af3e9b717481209b
 100644
--- a/gcc/testsuite/gcc.target/aarch64/sync-op-full.c
+++ b/gcc/testsuite/gcc.target/aarch64/sync-op-full.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-march=armv8-a+nolse -O2" } */
+/* { dg-options "-march=armv8-a+nolse -O2 -mno-outline-atomics" } */
 
 #include "sync-op-full.x"
 

Reply via email to