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
       || 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