aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-range-fold.cc
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2022-09-20 18:07:14 -0400
committerAndrew MacLeod <amacleod@redhat.com>2022-09-22 14:48:29 -0400
commit5f730c650184d4c8bfad513a9e0e593f87a5bf0c (patch)
tree584d7035e64af4763a5715dac8deb5ca476124d5 /gcc/gimple-range-fold.cc
parent2f5da730f159de238500c82b0c6ef6c9ab91b1c2 (diff)
downloadgcc-5f730c650184d4c8bfad513a9e0e593f87a5bf0c.zip
gcc-5f730c650184d4c8bfad513a9e0e593f87a5bf0c.tar.gz
gcc-5f730c650184d4c8bfad513a9e0e593f87a5bf0c.tar.bz2
Convert CFN_BUILT_FFS and CFN_POPCOUNT to range-ops.
* gimple-range-fold.cc (range_of_builtin_int_call): Remove case for CFN_FFS and CFN_POPCOUNT. * gimple-range-op.cc (class cfn_pocount): New. (gimple_range_op_handler::maybe_builtin_call): Set arguments.
Diffstat (limited to 'gcc/gimple-range-fold.cc')
-rw-r--r--gcc/gimple-range-fold.cc22
1 files changed, 0 insertions, 22 deletions
diff --git a/gcc/gimple-range-fold.cc b/gcc/gimple-range-fold.cc
index af1f83f..ca53103 100644
--- a/gcc/gimple-range-fold.cc
+++ b/gcc/gimple-range-fold.cc
@@ -922,28 +922,6 @@ fold_using_range::range_of_builtin_int_call (irange &r, gcall *call,
switch (func)
{
- CASE_CFN_FFS:
- CASE_CFN_POPCOUNT:
- // __builtin_ffs* and __builtin_popcount* return [0, prec].
- arg = gimple_call_arg (call, 0);
- prec = TYPE_PRECISION (TREE_TYPE (arg));
- mini = 0;
- maxi = prec;
- src.get_operand (r, arg);
- // If arg is non-zero, then ffs or popcount are non-zero.
- if (!range_includes_zero_p (&r))
- mini = 1;
- // If some high bits are known to be zero, decrease the maximum.
- if (!r.undefined_p ())
- {
- if (TYPE_SIGN (r.type ()) == SIGNED)
- range_cast (r, unsigned_type_for (r.type ()));
- wide_int max = r.upper_bound ();
- maxi = wi::floor_log2 (max) + 1;
- }
- r.set (build_int_cst (type, mini), build_int_cst (type, maxi));
- return true;
-
CASE_CFN_PARITY:
r.set (build_zero_cst (type), build_one_cst (type));
return true;