]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
sparc: Further adjustments for alloca epilogue blockage.
authorDavid S. Miller <davem@davemloft.net>
Fri, 9 Jun 2017 19:21:15 +0000 (19:21 +0000)
committerDavid S. Miller <davem@gcc.gnu.org>
Fri, 9 Jun 2017 19:21:15 +0000 (12:21 -0700)
gcc/

PR target/80968
* config/sparc/sparc.c (sparc_flat_expand_epilogue): Don't
        emit frame blockage here.
(sparc_expand_epilogue): Do it here.
* config/sparc/sparc.md (return expander): Emit frame blockage
for alloca here too.

From-SVN: r249072

gcc/ChangeLog
gcc/config/sparc/sparc.c
gcc/config/sparc/sparc.md

index e5940d0d2abcdedd2812d060febd41e849da19de..e92edd5653b75bc56acb9cdad0c1ea5ff16453b1 100644 (file)
@@ -1,3 +1,12 @@
+2017-06-09  David S. Miller  <davem@davemloft.net>
+
+       PR target/80968
+       * config/sparc/sparc.c (sparc_flat_expand_epilogue): Don't
+        emit frame blockage here.
+       (sparc_expand_epilogue): Do it here.
+       * config/sparc/sparc.md (return expander): Emit frame blockage
+       for alloca here too.
+
 2017-06-06  David S. Miller  <davem@davemloft.net>
 
        PR target/80968
index 8200a863105eeeb45f5ece787fc1d1bc9a02b0e5..45364d28136168370baa359b3d5aa86ec84be7f1 100644 (file)
@@ -5756,6 +5756,9 @@ sparc_expand_epilogue (bool for_eh)
 {
   HOST_WIDE_INT size = sparc_frame_size;
 
+  if (cfun->calls_alloca)
+    emit_insn (gen_frame_blockage ());
+
   if (sparc_n_global_fp_regs > 0)
     emit_save_or_restore_global_fp_regs (sparc_frame_base_reg,
                                         sparc_frame_base_offset
@@ -5790,9 +5793,6 @@ sparc_flat_expand_epilogue (bool for_eh)
 {
   HOST_WIDE_INT size = sparc_frame_size;
 
-  if (cfun->calls_alloca)
-    emit_insn (gen_frame_blockage ());
-
   if (sparc_n_global_fp_regs > 0)
     emit_save_or_restore_global_fp_regs (sparc_frame_base_reg,
                                         sparc_frame_base_offset
index f04b3e06662e37755fd7fb30a87df1e4e2952ed2..2beed35d8924078d8cf4b41e9bc489d84e899534 100644 (file)
 (define_expand "return"
   [(return)]
   "sparc_can_use_return_insn_p ()"
-  "")
+{
+  if (cfun->calls_alloca)
+    emit_insn (gen_frame_blockage ());
+})
 
 (define_insn "*return_internal"
   [(return)]