tree-optimization/103219 - avoid ICE in unroll-and-jam
For no particularly good reason unroll-and-jam uses single_dom_exit to determine the exit for the region it wants to run VN on. That happens to ICE because of the dominance restriction. Use single_exit instead. 2021-11-15 Richard Biener <rguenther@suse.de> PR tree-optimization/103219 * gimple-loop-jam.c (tree_loop_unroll_and_jam): Use single_exit to determine the exit for the VN region. * gcc.dg/torture/pr103219.c: New testcase.
This commit is contained in:
parent
2551cd4f9b
commit
d1ca8aeaf3
2 changed files with 25 additions and 1 deletions
|
@ -593,7 +593,7 @@ tree_loop_unroll_and_jam (void)
|
|||
todo |= TODO_cleanup_cfg;
|
||||
|
||||
auto_bitmap exit_bbs;
|
||||
bitmap_set_bit (exit_bbs, single_dom_exit (outer)->dest->index);
|
||||
bitmap_set_bit (exit_bbs, single_exit (outer)->dest->index);
|
||||
todo |= do_rpo_vn (cfun, loop_preheader_edge (outer), exit_bbs);
|
||||
}
|
||||
|
||||
|
|
24
gcc/testsuite/gcc.dg/torture/pr103219.c
Normal file
24
gcc/testsuite/gcc.dg/torture/pr103219.c
Normal file
|
@ -0,0 +1,24 @@
|
|||
/* { dg-do compile } */
|
||||
|
||||
int f();
|
||||
void g();
|
||||
int a, b, c, e;
|
||||
int d[10];
|
||||
int main()
|
||||
{
|
||||
if (c)
|
||||
if (f())
|
||||
{
|
||||
g();
|
||||
if (e) {
|
||||
a = 0;
|
||||
for (; a != 6; a = a + 2)
|
||||
{
|
||||
b = 0;
|
||||
for (; b <= 3; b++)
|
||||
d[b] &= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue