From: David S. Miller Date: Fri, 9 Jun 2017 19:21:15 +0000 (+0000) Subject: sparc: Further adjustments for alloca epilogue blockage. X-Git-Tag: releases/gcc-5.5.0~217 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0bc645ce07f84e3b7c977ac3822b610558acc579;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: r249072 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e5940d0d2abc..e92edd5653b7 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 8200a863105e..45364d281361 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 f04b3e06662e..2beed35d8924 100644 --- a/gcc/config/sparc/sparc.md +++ b/gcc/config/sparc/sparc.md @@ -6368,7 +6368,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)]