From 637037f4e637563c4f50ed04adfa2baf90671491 Mon Sep 17 00:00:00 2001 From: Aldy Hernandez Date: Tue, 17 Jan 2023 19:56:36 +0100 Subject: [PATCH] Remove some uses of deprecated irange API. gcc/ChangeLog: * builtins.cc (expand_builtin_strnlen): Rewrite deprecated irange API uses to new API. * gimple-predicate-analysis.cc (find_var_cmp_const): Same. * internal-fn.cc (get_min_precision): Same. * match.pd: Same. * tree-affine.cc (expr_to_aff_combination): Same. * tree-data-ref.cc (dr_step_indicator): Same. * tree-dfa.cc (get_ref_base_and_extent): Same. * tree-scalar-evolution.cc (iv_can_overflow_p): Same. * tree-ssa-phiopt.cc (two_value_replacement): Same. * tree-ssa-pre.cc (insert_into_preds_of_block): Same. * tree-ssa-reassoc.cc (optimize_range_tests_to_bit_test): Same. * tree-ssa-strlen.cc (compare_nonzero_chars): Same. * tree-switch-conversion.cc (bit_test_cluster::emit): Same. * tree-vect-patterns.cc (vect_recog_divmod_pattern): Same. * tree.cc (get_range_pos_neg): Same. --- gcc/builtins.cc | 2 +- gcc/gimple-predicate-analysis.cc | 3 ++- gcc/internal-fn.cc | 3 ++- gcc/match.pd | 10 +++++----- gcc/tree-affine.cc | 3 ++- gcc/tree-data-ref.cc | 2 +- gcc/tree-dfa.cc | 3 ++- gcc/tree-scalar-evolution.cc | 6 ++++-- gcc/tree-ssa-phiopt.cc | 17 ++++------------- gcc/tree-ssa-pre.cc | 3 ++- gcc/tree-ssa-reassoc.cc | 3 ++- gcc/tree-ssa-strlen.cc | 13 +++++++------ gcc/tree-switch-conversion.cc | 3 ++- gcc/tree-vect-patterns.cc | 2 +- gcc/tree.cc | 3 ++- 15 files changed, 39 insertions(+), 37 deletions(-) diff --git a/gcc/builtins.cc b/gcc/builtins.cc index bb931242c9c9..878596c240a9 100644 --- a/gcc/builtins.cc +++ b/gcc/builtins.cc @@ -3494,7 +3494,7 @@ expand_builtin_strnlen (tree exp, rtx target, machine_mode target_mode) wide_int min, max; value_range r; get_global_range_query ()->range_of_expr (r, bound); - if (r.kind () != VR_RANGE) + if (r.varying_p () || r.undefined_p ()) return NULL_RTX; min = r.lower_bound (); max = r.upper_bound (); diff --git a/gcc/gimple-predicate-analysis.cc b/gcc/gimple-predicate-analysis.cc index c89a5b1653a5..7f20f81ad863 100644 --- a/gcc/gimple-predicate-analysis.cc +++ b/gcc/gimple-predicate-analysis.cc @@ -307,7 +307,8 @@ find_var_cmp_const (pred_chain_union preds, gphi *phi, gimple **flag_def, value_range r; if (!INTEGRAL_TYPE_P (type) || !get_range_query (cfun)->range_of_expr (r, cond_rhs) - || r.kind () != VR_RANGE) + || r.undefined_p () + || r.varying_p ()) continue; wide_int min = r.lower_bound (); diff --git a/gcc/internal-fn.cc b/gcc/internal-fn.cc index 6e81dc05e0e0..5c9da73ea11f 100644 --- a/gcc/internal-fn.cc +++ b/gcc/internal-fn.cc @@ -775,7 +775,8 @@ get_min_precision (tree arg, signop sign) return prec + (orig_sign != sign); value_range r; while (!get_global_range_query ()->range_of_expr (r, arg) - || r.kind () != VR_RANGE) + || r.varying_p () + || r.undefined_p ()) { gimple *g = SSA_NAME_DEF_STMT (arg); if (is_gimple_assign (g) diff --git a/gcc/match.pd b/gcc/match.pd index e89ba57e30b7..34e1a5c1b46c 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -525,7 +525,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) value_range vr0; if (ovf1 == wi::OVF_NONE && ovf2 == wi::OVF_NONE && get_global_range_query ()->range_of_expr (vr0, @4) - && vr0.kind () == VR_RANGE) + && !vr0.varying_p () && !vr0.undefined_p ()) { wide_int wmin0 = vr0.lower_bound (); wide_int wmax0 = vr0.upper_bound (); @@ -566,7 +566,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) value_range vr0; if (ovf1 == wi::OVF_NONE && ovf2 == wi::OVF_NONE && get_global_range_query ()->range_of_expr (vr0, @0) - && vr0.kind () == VR_RANGE) + && !vr0.varying_p () && !vr0.undefined_p ()) { wide_int wmin0 = vr0.lower_bound (); wide_int wmax0 = vr0.upper_bound (); @@ -853,8 +853,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) if (INTEGRAL_TYPE_P (type) && get_global_range_query ()->range_of_expr (vr0, @0) && get_global_range_query ()->range_of_expr (vr1, @1) - && vr0.kind () == VR_RANGE - && vr1.kind () == VR_RANGE) + && !vr0.varying_p () && !vr0.undefined_p () + && !vr1.varying_p () && !vr1.undefined_p ()) { wide_int wmin0 = vr0.lower_bound (); wide_int wmax0 = vr0.upper_bound (); @@ -3010,7 +3010,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) value_range vr; if (get_global_range_query ()->range_of_expr (vr, @0) - && vr.kind () == VR_RANGE) + && !vr.varying_p () && !vr.undefined_p ()) { wide_int wmin0 = vr.lower_bound (); wide_int wmax0 = vr.upper_bound (); diff --git a/gcc/tree-affine.cc b/gcc/tree-affine.cc index 5d0632f09b8b..ee327e63a236 100644 --- a/gcc/tree-affine.cc +++ b/gcc/tree-affine.cc @@ -351,7 +351,8 @@ expr_to_aff_combination (aff_tree *comb, tree_code code, tree type, && TYPE_OVERFLOW_WRAPS (itype) && TREE_CODE (op1) == INTEGER_CST && get_range_query (cfun)->range_of_expr (vr, op0) - && vr.kind () == VR_RANGE) + && !vr.varying_p () + && !vr.undefined_p ()) { wide_int minv = vr.lower_bound (); wide_int maxv = vr.upper_bound (); diff --git a/gcc/tree-data-ref.cc b/gcc/tree-data-ref.cc index 4ebd839db156..6a4112b9fded 100644 --- a/gcc/tree-data-ref.cc +++ b/gcc/tree-data-ref.cc @@ -6351,7 +6351,7 @@ dr_step_indicator (struct data_reference *dr, int useful_min) value_range vr; if (TREE_CODE (step) != SSA_NAME || !get_range_query (cfun)->range_of_expr (vr, step) - || vr.kind () != VR_RANGE) + || vr.undefined_p ()) { step_min = wi::to_wide (TYPE_MIN_VALUE (type)); step_max = wi::to_wide (TYPE_MAX_VALUE (type)); diff --git a/gcc/tree-dfa.cc b/gcc/tree-dfa.cc index 82803a8ccb1d..ad8cfedec8ce 100644 --- a/gcc/tree-dfa.cc +++ b/gcc/tree-dfa.cc @@ -542,7 +542,8 @@ get_ref_base_and_extent (tree exp, poly_int64_pod *poffset, && (unit_size = array_ref_element_size (exp), TREE_CODE (unit_size) == INTEGER_CST) && query->range_of_expr (vr, index) - && vr.kind () == VR_RANGE) + && !vr.varying_p () + && !vr.undefined_p ()) { wide_int min = vr.lower_bound (); wide_int max = vr.upper_bound (); diff --git a/gcc/tree-scalar-evolution.cc b/gcc/tree-scalar-evolution.cc index 672cf9fab62f..ba47a684f4b3 100644 --- a/gcc/tree-scalar-evolution.cc +++ b/gcc/tree-scalar-evolution.cc @@ -3032,7 +3032,8 @@ iv_can_overflow_p (class loop *loop, tree type, tree base, tree step) if (!INTEGRAL_TYPE_P (TREE_TYPE (base)) || !get_range_query (cfun)->range_of_expr (r, base) - || r.kind () != VR_RANGE) + || r.varying_p () + || r.undefined_p ()) return true; base_min = r.lower_bound (); @@ -3040,7 +3041,8 @@ iv_can_overflow_p (class loop *loop, tree type, tree base, tree step) if (!INTEGRAL_TYPE_P (TREE_TYPE (step)) || !get_range_query (cfun)->range_of_expr (r, step) - || r.kind () != VR_RANGE) + || r.varying_p () + || r.undefined_p ()) return true; step_min = r.lower_bound (); diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc index 4a3ab8efb712..3b15ffcb0fc0 100644 --- a/gcc/tree-ssa-phiopt.cc +++ b/gcc/tree-ssa-phiopt.cc @@ -687,22 +687,13 @@ two_value_replacement (basic_block cond_bb, basic_block middle_bb, <= TYPE_PRECISION (TREE_TYPE (lhs))))) return false; - wide_int min, max; value_range r; get_range_query (cfun)->range_of_expr (r, lhs); + if (r.undefined_p ()) + r.set_varying (TREE_TYPE (lhs)); + wide_int min = r.lower_bound (); + wide_int max = r.upper_bound (); - if (r.kind () == VR_RANGE) - { - min = r.lower_bound (); - max = r.upper_bound (); - } - else - { - int prec = TYPE_PRECISION (TREE_TYPE (lhs)); - signop sgn = TYPE_SIGN (TREE_TYPE (lhs)); - min = wi::min_value (prec, sgn); - max = wi::max_value (prec, sgn); - } if (min + 1 != max || (wi::to_wide (rhs) != min && wi::to_wide (rhs) != max)) diff --git a/gcc/tree-ssa-pre.cc b/gcc/tree-ssa-pre.cc index 943936df8080..1f7eea93c16c 100644 --- a/gcc/tree-ssa-pre.cc +++ b/gcc/tree-ssa-pre.cc @@ -3247,7 +3247,8 @@ insert_into_preds_of_block (basic_block block, unsigned int exprnum, { value_range r; if (get_range_query (cfun)->range_of_expr (r, expr->u.nary->op[0]) - && r.kind () == VR_RANGE + && !r.undefined_p () + && !r.varying_p () && !wi::neg_p (r.lower_bound (), SIGNED) && !wi::neg_p (r.upper_bound (), SIGNED)) { diff --git a/gcc/tree-ssa-reassoc.cc b/gcc/tree-ssa-reassoc.cc index e795bdc0db4f..aeaca2f76ccc 100644 --- a/gcc/tree-ssa-reassoc.cc +++ b/gcc/tree-ssa-reassoc.cc @@ -3372,7 +3372,8 @@ optimize_range_tests_to_bit_test (enum tree_code opcode, int first, int length, value_range r; if (TREE_CODE (exp) == SSA_NAME && get_range_query (cfun)->range_of_expr (r, exp) - && r.kind () == VR_RANGE + && !r.undefined_p () + && !r.varying_p () && wi::leu_p (r.upper_bound () - r.lower_bound (), prec - 1)) { wide_int min = r.lower_bound (); diff --git a/gcc/tree-ssa-strlen.cc b/gcc/tree-ssa-strlen.cc index dcc9e9e14abd..0bbcb04834ff 100644 --- a/gcc/tree-ssa-strlen.cc +++ b/gcc/tree-ssa-strlen.cc @@ -350,18 +350,19 @@ compare_nonzero_chars (strinfo *si, gimple *stmt, return -1; value_range vr; - if (!rvals->range_of_expr (vr, si->nonzero_chars, stmt)) - return -1; - value_range_kind rng = vr.kind (); - if (rng != VR_RANGE) + if (!rvals->range_of_expr (vr, si->nonzero_chars, stmt) + || vr.varying_p () + || vr.undefined_p ()) return -1; /* If the offset is less than the minimum length or if the bounds of the length range are equal return the result of the comparison same as in the constant case. Otherwise return a conservative result. */ - int cmpmin = compare_tree_int (vr.min (), off); - if (cmpmin > 0 || tree_int_cst_equal (vr.min (), vr.max ())) + tree lower = wide_int_to_tree (vr.type (), vr.lower_bound ()); + tree upper = wide_int_to_tree (vr.type (), vr.upper_bound ()); + int cmpmin = compare_tree_int (lower, off); + if (cmpmin > 0 || tree_int_cst_equal (lower, upper)) return cmpmin; return -1; diff --git a/gcc/tree-switch-conversion.cc b/gcc/tree-switch-conversion.cc index dfdcd79bb40b..44934d2560d2 100644 --- a/gcc/tree-switch-conversion.cc +++ b/gcc/tree-switch-conversion.cc @@ -1590,7 +1590,8 @@ bit_test_cluster::emit (tree index_expr, tree index_type, value_range r; if (TREE_CODE (index_expr) == SSA_NAME && get_range_query (cfun)->range_of_expr (r, index_expr) - && r.kind () == VR_RANGE + && !r.undefined_p () + && !r.varying_p () && wi::leu_p (r.upper_bound () - r.lower_bound (), prec - 1)) { wide_int min = r.lower_bound (); diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc index b964dcb8ad9e..33a8b2bb6060 100644 --- a/gcc/tree-vect-patterns.cc +++ b/gcc/tree-vect-patterns.cc @@ -4598,7 +4598,7 @@ vect_recog_divmod_pattern (vec_info *vinfo, int msb = 1; value_range r; get_range_query (cfun)->range_of_expr (r, oprnd0); - if (r.kind () == VR_RANGE) + if (!r.varying_p () && !r.undefined_p ()) { if (!wi::neg_p (r.lower_bound (), TYPE_SIGN (itype))) msb = 0; diff --git a/gcc/tree.cc b/gcc/tree.cc index 8394ff0f8378..ead4248b8e5c 100644 --- a/gcc/tree.cc +++ b/gcc/tree.cc @@ -14296,7 +14296,8 @@ get_range_pos_neg (tree arg) if (TREE_CODE (arg) != SSA_NAME) return 3; value_range r; - while (!get_global_range_query ()->range_of_expr (r, arg) || r.kind () != VR_RANGE) + while (!get_global_range_query ()->range_of_expr (r, arg) + || r.undefined_p () || r.varying_p ()) { gimple *g = SSA_NAME_DEF_STMT (arg); if (is_gimple_assign (g) -- 2.47.2