Hi,

with the numerous checks generated in Ada, the gimplification process can 
generated dead branches that aren't easily eliminated at -O0 and can impair 
the debugging experience.  We have found that unconditionally cleaning up the 
CFG before emitting the prologue/epilogue can help in some cases.  This is the 
same idiom already used in rest_of_handle_jump2 for example.

Tested on x86_64-suse-linux.  Comments?


2012-04-09  Eric Botcazou  <ebotca...@adacore.com>

        * function.c (rest_of_handle_thread_prologue_and_epilogue): Clean up
        the CFG before generating prologue/epilogue even when not optimizing.


-- 
Eric Botcazou
Index: function.c
===================================================================
--- function.c	(revision 186176)
+++ function.c	(working copy)
@@ -6877,8 +6877,7 @@ struct rtl_opt_pass pass_leaf_regs =
 static unsigned int
 rest_of_handle_thread_prologue_and_epilogue (void)
 {
-  if (optimize)
-    cleanup_cfg (CLEANUP_EXPENSIVE);
+  cleanup_cfg (optimize ? CLEANUP_EXPENSIVE : 0);
 
   /* On some machines, the prologue and epilogue code, or parts thereof,
      can be represented as RTL.  Doing so lets us schedule insns between

Reply via email to