aboutsummaryrefslogtreecommitdiff
path: root/gcc/value-range.cc
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2021-04-17 14:26:33 +0200
committerAldy Hernandez <aldyh@redhat.com>2021-04-26 15:42:50 +0200
commit694c956b6b877e48323cf86c90c09237b7b0e8c8 (patch)
tree2849f7af5081259c283a52c0af30ff724c0c28d3 /gcc/value-range.cc
parent778032166d960d97541e652c59684d1187d0233c (diff)
downloadgcc-694c956b6b877e48323cf86c90c09237b7b0e8c8.zip
gcc-694c956b6b877e48323cf86c90c09237b7b0e8c8.tar.gz
gcc-694c956b6b877e48323cf86c90c09237b7b0e8c8.tar.bz2
Remove irange::varying_p checks from symbolic_p and constant_p.
As of a few releases ago, varying_p() ranges are also constant_p. Consequently, there is no need to check varying_p from either symbolic_p or constant_p. I have adjusted a few users of constant_p that were depending on constant_p returning false for varying_p. In these cases, I have placed the varying_p check before the constant_p check to avoid the more expensive constant_p check when possible. gcc/ChangeLog: * gimple-ssa-evrp-analyze.c (evrp_range_analyzer::set_ssa_range_info): Adjust for constant_p including varying_p. * tree-vrp.c (vrp_prop::finalize): Same. (determine_value_range): Same. * vr-values.c (vr_values::range_of_expr): Same. * value-range.cc (irange::symbolic_p): Do not check varying_p. (irange::constant_p): Same.
Diffstat (limited to 'gcc/value-range.cc')
-rw-r--r--gcc/value-range.cc11
1 files changed, 3 insertions, 8 deletions
diff --git a/gcc/value-range.cc b/gcc/value-range.cc
index d466623..f5ef480 100644
--- a/gcc/value-range.cc
+++ b/gcc/value-range.cc
@@ -534,22 +534,17 @@ irange::equal_p (const irange &other) const
bool
irange::symbolic_p () const
{
- return (!varying_p ()
- && !undefined_p ()
+ return (m_num_ranges > 0
&& (!is_gimple_min_invariant (min ())
|| !is_gimple_min_invariant (max ())));
}
-/* NOTE: This is not the inverse of symbolic_p because the range
- could also be varying or undefined. Ideally they should be inverse
- of each other, with varying only applying to symbolics. Varying of
- constants would be represented as [-MIN, +MAX]. */
+/* Return TRUE if this is a constant range. */
bool
irange::constant_p () const
{
- return (!varying_p ()
- && !undefined_p ()
+ return (m_num_ranges > 0
&& TREE_CODE (min ()) == INTEGER_CST
&& TREE_CODE (max ()) == INTEGER_CST);
}