diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2022-09-20 18:07:14 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2022-09-22 14:48:29 -0400 |
commit | 5f730c650184d4c8bfad513a9e0e593f87a5bf0c (patch) | |
tree | 584d7035e64af4763a5715dac8deb5ca476124d5 /gcc/gimple-range-fold.cc | |
parent | 2f5da730f159de238500c82b0c6ef6c9ab91b1c2 (diff) | |
download | gcc-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.cc | 22 |
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; |