tree-optimization/114832 - wrong dominator info with vect peeling
When we update the dominator of the redirected exit after peeling we check whether the immediate dominator was the loop header rather than the exit source when we later want to just update it to the new source. The following fixes this oversight. PR tree-optimization/114832 * tree-vect-loop-manip.cc (slpeel_tree_duplicate_loop_to_edge_cfg): Fix dominance check. * gcc.dg/vect/pr114832.c: New testcase.
This commit is contained in:
parent
d279c9d89b
commit
e28e8ab1a9
2 changed files with 14 additions and 1 deletions
13
gcc/testsuite/gcc.dg/vect/pr114832.c
Normal file
13
gcc/testsuite/gcc.dg/vect/pr114832.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-fno-tree-loop-if-convert -fno-tree-loop-distribute-patterns" } */
|
||||
|
||||
int a, b, c, d[3];
|
||||
void e() {
|
||||
int f, g = 0;
|
||||
for (; g < 3; g++) {
|
||||
if (f || a || b && c) {
|
||||
int h, *i = &h, **j = &i;
|
||||
}
|
||||
d[g] = 0;
|
||||
}
|
||||
}
|
|
@ -1523,7 +1523,7 @@ slpeel_tree_duplicate_loop_to_edge_cfg (class loop *loop, edge loop_exit,
|
|||
|
||||
exit_dest = exit->dest;
|
||||
was_imm_dom = (get_immediate_dominator (CDI_DOMINATORS,
|
||||
exit_dest) == loop->header ?
|
||||
exit_dest) == exit->src ?
|
||||
true : false);
|
||||
|
||||
/* Also copy the pre-header, this avoids jumping through hoops to
|
||||
|
|
Loading…
Add table
Reference in a new issue