On Sat, Jun 22, 2024 at 8:57 PM Andi Kleen <a...@linux.intel.com> wrote:
>
> Some of the cfg fixups in pro_and_epilogue for sibcalls were dependent on 
> "optimize".
> Make them check cfun->tail_call_marked instead to handle the -O0 musttail
> case. This fixes the musttail test cases on arm targets.
>
>         PR115255
>
> gcc/ChangeLog:
>
>         * function.cc (thread_prologue_and_epilogue_insns): Check
>           cfun->tail_call_marked for sibcalls too.
>         (rest_of_handle_thread_prologue_and_epilogue): Dito.
> ---
>  gcc/function.cc | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/gcc/function.cc b/gcc/function.cc
> index 4edd4da12474..7c9b181423d4 100644
> --- a/gcc/function.cc
> +++ b/gcc/function.cc
> @@ -6261,6 +6261,7 @@ thread_prologue_and_epilogue_insns (void)
>    /* Threading the prologue and epilogue changes the artificial refs in the
>       entry and exit blocks, and may invalidate DF info for tail calls.  */
>    if (optimize
> +      || cfun->tail_call_marked

Can you add comments in both places as to this being because of [[musttail]]
which marks tail-calls even with -fno-optimize-sibling-calls?

OK with those change.

>        || flag_optimize_sibling_calls
>        || flag_ipa_icf_functions
>        || in_lto_p)
> @@ -6557,7 +6558,7 @@ rest_of_handle_thread_prologue_and_epilogue (function 
> *fun)
>  {
>    /* prepare_shrink_wrap is sensitive to the block structure of the control
>       flow graph, so clean it up first.  */
> -  if (optimize)
> +  if (cfun->tail_call_marked || optimize)
>      cleanup_cfg (0);
>
>    /* On some machines, the prologue and epilogue code, or parts thereof,
> --
> 2.45.2
>

Reply via email to