This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 08/05/2016 07:36 AM, Richard Biener wrote:
I'm a little confused here. In the case where the taken edge goes into a deeper loop nest you're splitting the edge -- to what end? The backwards threader isn't going to register that jump thread. So if this is fixing something, then we've got the fix in the wrong place.@@ -560,6 +562,14 @@ fsm_find_control_statement_thread_paths edge taken_edge = profitable_jump_thread_path (path, bbi, name, arg); if (taken_edge) { + /* If the taken edge is a loop entry avoid mashing two + loops into one with multiple latches by splitting + the edge. This only works if that block won't become + a latch of this loop. */ + if ((bb_loop_depth (taken_edge->src) + < bb_loop_depth (taken_edge->dest)) + && ! single_succ_p (bbi)) + split_edge (taken_edge); if (bb_loop_depth (taken_edge->src) >= bb_loop_depth (taken_edge->dest)) convert_and_register_jump_thread_path (path, taken_edge); note you need the PR72772 fix to trigger all this.
FWIW, I the anonymous name fix ought to go in separately, it looks like the right thing to do independent of this stuff.
jeff
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |