aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-range-infer.cc
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2024-11-23 14:05:54 -0500
committerAndrew MacLeod <amacleod@redhat.com>2024-12-06 16:41:19 -0500
commitc7fd6c4369ef1a009b40c1787ea9d2dad2cf449f (patch)
tree101e3cf8c76af77d4e52423f10bd9068a1481ac7 /gcc/gimple-range-infer.cc
parentfaddf22942884a4c951ca0eeffc364296378eeff (diff)
downloadgcc-c7fd6c4369ef1a009b40c1787ea9d2dad2cf449f.zip
gcc-c7fd6c4369ef1a009b40c1787ea9d2dad2cf449f.tar.gz
gcc-c7fd6c4369ef1a009b40c1787ea9d2dad2cf449f.tar.bz2
Only add inferred ranges if they change the value.
Do not add an inferred range if it is already incorprated in the current range of an SSA_NAME. PR tree-optimization/117467 * gimple-range-infer.cc (infer_range_manager::add_ranges): Check range_of_expr to see if the inferred range is needed.
Diffstat (limited to 'gcc/gimple-range-infer.cc')
-rw-r--r--gcc/gimple-range-infer.cc9
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/gimple-range-infer.cc b/gcc/gimple-range-infer.cc
index aba5c3d9..94613cb 100644
--- a/gcc/gimple-range-infer.cc
+++ b/gcc/gimple-range-infer.cc
@@ -400,7 +400,14 @@ void
infer_range_manager::add_ranges (gimple *s, gimple_infer_range &infer)
{
for (unsigned x = 0; x < infer.num (); x++)
- add_range (infer.name (x), s, infer.range (x));
+ {
+ tree arg = infer.name (x);
+ value_range r (TREE_TYPE (arg));
+ m_query->range_of_expr (r, arg, s);
+ // Only add the inferred range if it changes the current range.
+ if (r.intersect (infer.range (x)))
+ add_range (arg, s, infer.range (x));
+ }
}
// Add range R as an inferred range for NAME on stmt S.