tree-optimization/97135 - fix dependence check in store-motion
The following fixes a dependence check where in the particular place we cannot ignore self-dependences. 2020-09-21 Richard Biener <rguenther@suse.de> PR tree-optimization/97135 * tree-ssa-loop-im.c (sm_seq_push_down): Do not ignore self-dependences. * gcc.dg/torture/pr97135.c: New testcase.
This commit is contained in:
parent
d726ecd955
commit
0df746afc5
21
gcc/testsuite/gcc.dg/torture/pr97135.c
Normal file
21
gcc/testsuite/gcc.dg/torture/pr97135.c
Normal file
@ -0,0 +1,21 @@
|
||||
/* { dg-do run } */
|
||||
|
||||
long long e, *d = &e;
|
||||
int a, b, c;
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
for (; c <= 5; c++)
|
||||
for (b = 0; b <= 5; b++)
|
||||
{
|
||||
for (a = 1; a <= 5; a++)
|
||||
;
|
||||
*d = 0;
|
||||
if (c)
|
||||
break;
|
||||
}
|
||||
if (a != 6)
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
@ -2232,9 +2232,11 @@ sm_seq_push_down (vec<seq_entry> &seq, unsigned ptr, unsigned *at)
|
||||
|| (against.second == sm_other && against.from != NULL_TREE))
|
||||
/* Found the tail of the sequence. */
|
||||
break;
|
||||
if (!refs_independent_p (memory_accesses.refs_list[new_cand.first],
|
||||
memory_accesses.refs_list[against.first],
|
||||
false))
|
||||
/* We may not ignore self-dependences here. */
|
||||
if (new_cand.first == against.first
|
||||
|| !refs_independent_p (memory_accesses.refs_list[new_cand.first],
|
||||
memory_accesses.refs_list[against.first],
|
||||
false))
|
||||
/* ??? Prune new_cand from the list of refs to apply SM to. */
|
||||
return false;
|
||||
std::swap (new_cand, against);
|
||||
|
Loading…
Reference in New Issue
Block a user