aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2020-03-31 16:19:37 +0200
committerAldy Hernandez <aldyh@redhat.com>2020-03-31 16:19:37 +0200
commitc6b05b86edbdc0d00e54145a115135c84cbf8402 (patch)
tree562f05fa496919fe64d06bbcf26281b737ca8526 /gcc
parentc8f4b642d2bb4f5de57e7ac6a1385682f0e0dbe5 (diff)
downloadgcc-c6b05b86edbdc0d00e54145a115135c84cbf8402.zip
gcc-c6b05b86edbdc0d00e54145a115135c84cbf8402.tar.gz
gcc-c6b05b86edbdc0d00e54145a115135c84cbf8402.tar.bz2
Intersect known global ranges of LHS in gimple_ranger::range_of_call.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ssa-range.cc14
1 files changed, 11 insertions, 3 deletions
diff --git a/gcc/ssa-range.cc b/gcc/ssa-range.cc
index e8fe078..64cce18 100644
--- a/gcc/ssa-range.cc
+++ b/gcc/ssa-range.cc
@@ -212,15 +212,23 @@ bool
gimple_ranger::range_of_call (irange &r, gcall *call)
{
tree type = gimple_call_return_type (call);
+ tree lhs = gimple_call_lhs (call);
+
if (!irange::supports_type_p (type))
return false;
if (gimple_call_nonnull_result_p (call))
+ r = range_nonzero (type);
+ else
+ r.set_varying (type);
+
+ // If there is a lHS, intersect that with what is known.
+ if (lhs)
{
- r = range_nonzero (type);
- return true;
+ value_range def;
+ def = gimple_range_global (lhs);
+ r.intersect (def);
}
- r.set_varying (type);
return true;
}