Don't tail-merge blocks from different loops
2017-07-03 Tom de Vries <tom@codesourcery.com> PR tree-optimization/81192 * tree-ssa-tail-merge.c (same_succ_hash): Use bb->loop_father->num in hash. (same_succ::equal): Don't find bbs to be equal if bb->loop_father differs. (find_same_succ_bb): Remove obsolete test on bb->loop_father->latch. * gcc.dg/pr81192.c: Update. From-SVN: r249894
This commit is contained in:
parent
0bbfd5540d
commit
4752be4637
|
@ -1,3 +1,12 @@
|
|||
2017-07-03 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
PR tree-optimization/81192
|
||||
* tree-ssa-tail-merge.c (same_succ_hash): Use bb->loop_father->num in
|
||||
hash.
|
||||
(same_succ::equal): Don't find bbs to be equal if bb->loop_father
|
||||
differs.
|
||||
(find_same_succ_bb): Remove obsolete test on bb->loop_father->latch.
|
||||
|
||||
2017-07-03 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
PR tree-optimization/81192
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2017-07-03 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
PR tree-optimization/81192
|
||||
* gcc.dg/pr81192.c: Update.
|
||||
|
||||
2017-07-03 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
PR tree-optimization/81192
|
||||
|
|
|
@ -19,4 +19,4 @@ fn2 (void)
|
|||
;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "(?n)find_duplicates: <bb .*> duplicate of <bb .*>" 1 "pre" } } */
|
||||
/* { dg-final { scan-tree-dump-not "(?n)find_duplicates: <bb .*> duplicate of <bb .*>" "pre" } } */
|
||||
|
|
|
@ -479,6 +479,8 @@ same_succ_hash (const same_succ *e)
|
|||
hstate.add_int (size);
|
||||
BB_SIZE (bb) = size;
|
||||
|
||||
hstate.add_int (bb->loop_father->num);
|
||||
|
||||
for (i = 0; i < e->succ_flags.length (); ++i)
|
||||
{
|
||||
flags = e->succ_flags[i];
|
||||
|
@ -568,6 +570,9 @@ same_succ::equal (const same_succ *e1, const same_succ *e2)
|
|||
if (BB_SIZE (bb1) != BB_SIZE (bb2))
|
||||
return 0;
|
||||
|
||||
if (bb1->loop_father != bb2->loop_father)
|
||||
return 0;
|
||||
|
||||
gsi1 = gsi_start_nondebug_bb (bb1);
|
||||
gsi2 = gsi_start_nondebug_bb (bb2);
|
||||
gsi_advance_fw_nondebug_nonlocal (&gsi1);
|
||||
|
@ -695,15 +700,7 @@ find_same_succ_bb (basic_block bb, same_succ **same_p)
|
|||
edge_iterator ei;
|
||||
edge e;
|
||||
|
||||
if (bb == NULL
|
||||
/* Be conservative with loop structure. It's not evident that this test
|
||||
is sufficient. Before tail-merge, we've just called
|
||||
loop_optimizer_finalize, and LOOPS_MAY_HAVE_MULTIPLE_LATCHES is now
|
||||
set, so there's no guarantee that the loop->latch value is still valid.
|
||||
But we assume that, since we've forced LOOPS_HAVE_SIMPLE_LATCHES at the
|
||||
start of pre, we've kept that property intact throughout pre, and are
|
||||
keeping it throughout tail-merge using this test. */
|
||||
|| bb->loop_father->latch == bb)
|
||||
if (bb == NULL)
|
||||
return;
|
||||
bitmap_set_bit (same->bbs, bb->index);
|
||||
FOR_EACH_EDGE (e, ei, bb->succs)
|
||||
|
|
Loading…
Reference in New Issue