diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2020-03-31 16:19:37 +0200 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2020-03-31 16:19:37 +0200 |
commit | c6b05b86edbdc0d00e54145a115135c84cbf8402 (patch) | |
tree | 562f05fa496919fe64d06bbcf26281b737ca8526 /gcc | |
parent | c8f4b642d2bb4f5de57e7ac6a1385682f0e0dbe5 (diff) | |
download | gcc-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.cc | 14 |
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; } |