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:
Andrew MacLeod 2022-11-11 12:22:33 -05:00
parent 52672be7d3
commit 0a7b437ca7
2 changed files with 33 additions and 1 deletions

View file

@ -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.

View 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;
}