diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2022-11-11 12:22:33 -0500 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2022-11-11 14:47:39 -0500 |
commit | 0a7b437ca71e2721e9bcf070762fc54ef7991aeb (patch) | |
tree | 26b6eaf5a37bec6dff938c9d954f6dbb76de6b1c /gcc | |
parent | 52672be7d328df50f9a05ce3ab44ebcae50fee1b (diff) | |
download | gcc-0a7b437ca71e2721e9bcf070762fc54ef7991aeb.zip gcc-0a7b437ca71e2721e9bcf070762fc54ef7991aeb.tar.gz gcc-0a7b437ca71e2721e9bcf070762fc54ef7991aeb.tar.bz2 |
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/gimple-range.cc | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr107523.c | 32 |
2 files changed, 33 insertions, 1 deletions
diff --git a/gcc/gimple-range.cc b/gcc/gimple-range.cc index 2885d0f..ecd6039 100644 --- a/gcc/gimple-range.cc +++ b/gcc/gimple-range.cc @@ -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. diff --git a/gcc/testsuite/gcc.dg/pr107523.c b/gcc/testsuite/gcc.dg/pr107523.c new file mode 100644 index 0000000..1e5ed46 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr107523.c @@ -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; +} + |