aboutsummaryrefslogtreecommitdiff
path: root/gcc/vr-values.c
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2019-11-05 09:50:39 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2019-11-05 09:50:39 +0000
commit8f119c559e7f56eb3deac726b32f70e2befaf58d (patch)
treecd490dd53c93b6b91bc8ed05f5282ad41b52ddbb /gcc/vr-values.c
parent16a3a930ce83bc199bdae9c7e98914783c3ef534 (diff)
downloadgcc-8f119c559e7f56eb3deac726b32f70e2befaf58d.zip
gcc-8f119c559e7f56eb3deac726b32f70e2befaf58d.tar.gz
gcc-8f119c559e7f56eb3deac726b32f70e2befaf58d.tar.bz2
Move vrp_set_zero_nonzero_bits from tree-vrp.c into vr-values.c, and make it use wi_set_zero_nonzero_bits.
Move vrp_set_zero_nonzero_bits from tree-vrp.c into vr-values.c, and make it use wi_set_zero_nonzero_bits. Remove the now redundant wide_int_range_set_zero_nonzero_bits. From-SVN: r277818
Diffstat (limited to 'gcc/vr-values.c')
-rw-r--r--gcc/vr-values.c32
1 files changed, 28 insertions, 4 deletions
diff --git a/gcc/vr-values.c b/gcc/vr-values.c
index 3acbfc6..d1713bf 100644
--- a/gcc/vr-values.c
+++ b/gcc/vr-values.c
@@ -3341,6 +3341,30 @@ vr_values::simplify_abs_using_ranges (gimple_stmt_iterator *gsi, gimple *stmt)
return false;
}
+/* value_range wrapper for wi_set_zero_nonzero_bits.
+
+ Return TRUE if VR was a constant range and we were able to compute
+ the bit masks. */
+
+static bool
+vr_set_zero_nonzero_bits (const tree expr_type,
+ const value_range_base *vr,
+ wide_int *may_be_nonzero,
+ wide_int *must_be_nonzero)
+{
+ if (range_int_cst_p (vr))
+ {
+ wi_set_zero_nonzero_bits (expr_type,
+ wi::to_wide (vr->min ()),
+ wi::to_wide (vr->max ()),
+ *may_be_nonzero, *must_be_nonzero);
+ return true;
+ }
+ *may_be_nonzero = wi::minus_one (TYPE_PRECISION (expr_type));
+ *must_be_nonzero = wi::zero (TYPE_PRECISION (expr_type));
+ return false;
+}
+
/* Optimize away redundant BIT_AND_EXPR and BIT_IOR_EXPR.
If all the bits that are being cleared by & are already
known to be zero from VR, or all the bits that are being
@@ -3373,11 +3397,11 @@ vr_values::simplify_bit_ops_using_ranges (gimple_stmt_iterator *gsi,
else
return false;
- if (!vrp_set_zero_nonzero_bits (TREE_TYPE (op0), &vr0, &may_be_nonzero0,
- &must_be_nonzero0))
+ if (!vr_set_zero_nonzero_bits (TREE_TYPE (op0), &vr0, &may_be_nonzero0,
+ &must_be_nonzero0))
return false;
- if (!vrp_set_zero_nonzero_bits (TREE_TYPE (op1), &vr1, &may_be_nonzero1,
- &must_be_nonzero1))
+ if (!vr_set_zero_nonzero_bits (TREE_TYPE (op1), &vr1, &may_be_nonzero1,
+ &must_be_nonzero1))
return false;
switch (gimple_assign_rhs_code (stmt))