]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix pro_and_epilogue for sibcalls at -O0 (PR115255)
authorAndi Kleen <ak@linux.intel.com>
Sun, 2 Jun 2024 05:04:41 +0000 (22:04 -0700)
committerAndi Kleen <ak@gcc.gnu.org>
Thu, 18 Jul 2024 04:24:47 +0000 (21:24 -0700)
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.

gcc/ChangeLog:

PR target/115255
* 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

index 4edd4da124743941d25394dc23a6fc1dc80240d5..a6f6de34942090821ffa6baaa2f130a3b5531c4b 100644 (file)
@@ -2231,6 +2231,7 @@ use_register_for_decl (const_tree decl)
       /* We don't set DECL_IGNORED_P for the function_result_decl.  */
       if (optimize)
        return true;
+      /* Needed for [[musttail]] which can operate even at -O0 */
       if (cfun->tail_call_marked)
        return true;
       /* We don't set DECL_REGISTER for the function_result_decl.  */
@@ -6259,8 +6260,11 @@ 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.  */
+     entry and exit blocks, and may invalidate DF info for tail calls.
+     This is also needed for [[musttail]] conversion even when not
+     optimizing.  */
   if (optimize
+      || cfun->tail_call_marked
       || flag_optimize_sibling_calls
       || flag_ipa_icf_functions
       || in_lto_p)
@@ -6557,7 +6561,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,