Don't add dependencies in update_stmt.
gimple_ranger::update_stmt has no idea what the context of an update is, and should not be adding relations when it re-evaluates a stmt. PR tree-optimization/107523 gcc/ * gimple-range.cc (gimple_ranger::update_stmt): Use fur_stmt rather than fur_depend. gcc/testsuite/ * gcc.dg/pr107523.c: New.
This commit is contained in:
parent
52672be7d3
commit
0a7b437ca7
2 changed files with 33 additions and 1 deletions
|
@ -546,7 +546,7 @@ gimple_ranger::update_stmt (gimple *s)
|
|||
// Re-calculate a new value using just cache values.
|
||||
Value_Range tmp (TREE_TYPE (lhs));
|
||||
fold_using_range f;
|
||||
fur_depend src (s, &(gori ()), &m_cache);
|
||||
fur_stmt src (s, &m_cache);
|
||||
f.fold_stmt (tmp, s, src, lhs);
|
||||
|
||||
// Combine the new value with the old value to check for a change.
|
||||
|
|
32
gcc/testsuite/gcc.dg/pr107523.c
Normal file
32
gcc/testsuite/gcc.dg/pr107523.c
Normal file
|
@ -0,0 +1,32 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-O2 " } */
|
||||
|
||||
int a, b = 1;
|
||||
unsigned int c = 1;
|
||||
int main() {
|
||||
int d = 1, f;
|
||||
if (b)
|
||||
d = 0;
|
||||
a = -1;
|
||||
b = ~d ^ 465984011;
|
||||
L1:;
|
||||
if (b < 2)
|
||||
f = b;
|
||||
b = f;
|
||||
if (f <= a) {
|
||||
int g = -(a && 1), h = g - f && a, i = ~(c / f) && 1 % (a | h);
|
||||
if (c) {
|
||||
g = f;
|
||||
if (i || (g && (g > -465984012)))
|
||||
goto L2;
|
||||
}
|
||||
c = g | f / c;
|
||||
}
|
||||
if (0)
|
||||
L2:
|
||||
a = 0;
|
||||
if (a <= c)
|
||||
goto L1;
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Add table
Reference in a new issue