Message ID | 201204091155.26101.ebotcazou@adacore.com |
---|---|
State | New |
Headers | show |
On Mon, Apr 9, 2012 at 11:55 AM, Eric Botcazou <ebotcazou@adacore.com> wrote: > 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? Isn't the gimple cfg-cleanup we run post optimization (right before expansion) not enough? Or the cfg-cleanup we perform right after expansion now? At least if the branches are really caused by the gimplification process I would expect things to be cleaned up at this point, no? Richard. > > > 2012-04-09 Eric Botcazou <ebotcazou@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