aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2023-03-02 16:56:12 +0100
committerAldy Hernandez <aldyh@redhat.com>2023-04-26 11:46:06 +0200
commitfb5607ae6ad468fe1183b7a3b392d445010ada41 (patch)
tree7273123ba0c957a9f19c66bb5e14d69d45c2e71f /gcc
parent637037f4e637563c4f50ed04adfa2baf90671491 (diff)
downloadgcc-fb5607ae6ad468fe1183b7a3b392d445010ada41.zip
gcc-fb5607ae6ad468fe1183b7a3b392d445010ada41.tar.gz
gcc-fb5607ae6ad468fe1183b7a3b392d445010ada41.tar.bz2
Convert compare_nonzero_chars to wide_ints.
gcc/ChangeLog: * tree-ssa-strlen.cc (compare_nonzero_chars): Convert to wide_ints.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/tree-ssa-strlen.cc8
1 files changed, 4 insertions, 4 deletions
diff --git a/gcc/tree-ssa-strlen.cc b/gcc/tree-ssa-strlen.cc
index 0bbcb04..de78528 100644
--- a/gcc/tree-ssa-strlen.cc
+++ b/gcc/tree-ssa-strlen.cc
@@ -359,10 +359,10 @@ compare_nonzero_chars (strinfo *si, gimple *stmt,
of the length range are equal return the result of the comparison
same as in the constant case. Otherwise return a conservative
result. */
- 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))
+ signop sign = TYPE_SIGN (vr.type ());
+ unsigned prec = TYPE_PRECISION (vr.type ());
+ int cmpmin = wi::cmp (vr.lower_bound (), wi::uhwi (off, prec), sign);
+ if (cmpmin > 0 || vr.singleton_p ())
return cmpmin;
return -1;