From: David S. Miller Date: Fri, 9 Jun 2017 19:24:51 +0000 (+0000) Subject: sparc: Further adjustments for alloca epilogue blockage. X-Git-Tag: releases/gcc-6.4.0~74 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2dcec49780dd5d5ebacb64decc2ae60c78e2eda0;p=thirdparty%2Fgcc.git sparc: Further adjustments for alloca epilogue blockage. 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 488b6a77d843..2439e669df30 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2017-06-09 David S. Miller + + 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 PR target/80968 diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index bc4364c880ba..05192c92cc6c 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -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 diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md index 3cd5b4b01876..cae6547bab76 100644 --- a/gcc/config/sparc/sparc.md +++ b/gcc/config/sparc/sparc.md @@ -6428,7 +6428,10 @@ (define_expand "return" [(return)] "sparc_can_use_return_insn_p ()" - "") +{ + if (cfun->calls_alloca) + emit_insn (gen_frame_blockage ()); +}) (define_insn "*return_internal" [(return)]