From 0bc645ce07f84e3b7c977ac3822b610558acc579 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Fri, 9 Jun 2017 19:21:15 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 9 +++++++++ gcc/config/sparc/sparc.c | 6 +++--- gcc/config/sparc/sparc.md | 5 ++++- 3 files changed, 16 insertions(+), 4 deletions(-) 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)] -- 2.47.2