]> 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:24:51 +0000 (19:24 +0000)
committerDavid S. Miller <davem@gcc.gnu.org>
Fri, 9 Jun 2017 19:24:51 +0000 (12:24 -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: r249074

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

index 488b6a77d84339933f4825f31527348537a31d6b..2439e669df3097ace4accb1c0ae2e60de4a15798 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 bc4364c880bab1db6a1add5ff3b5a97883062fb4..05192c92cc6c6c91a1c5d1308eb67093c7aba5a5 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 3cd5b4b01876c0d8c8736a641edbef5fedc237de..cae6547bab76a8c97b72237aa28a060236b7f3c8 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)]