aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-range-fold.cc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2022-09-05 10:44:56 +0200
committerMartin Liska <mliska@suse.cz>2022-09-05 10:44:56 +0200
commitd8e441f4b8698f38e4564fe1bbe9ff112814ecff (patch)
tree62aac45da0a2358e1ea29a07ab734f607a201e5b /gcc/gimple-range-fold.cc
parent4483fe115cef3eea1d64e913816e2d117b38ac73 (diff)
parentca60bd93e216ae0425f790e1d4f4dc4a48763c0e (diff)
downloadgcc-d8e441f4b8698f38e4564fe1bbe9ff112814ecff.zip
gcc-d8e441f4b8698f38e4564fe1bbe9ff112814ecff.tar.gz
gcc-d8e441f4b8698f38e4564fe1bbe9ff112814ecff.tar.bz2
Merge branch 'master' into devel/sphinx
Diffstat (limited to 'gcc/gimple-range-fold.cc')
-rw-r--r--gcc/gimple-range-fold.cc20
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/gimple-range-fold.cc b/gcc/gimple-range-fold.cc
index b0b2210..d8497fc 100644
--- a/gcc/gimple-range-fold.cc
+++ b/gcc/gimple-range-fold.cc
@@ -1023,6 +1023,26 @@ fold_using_range::range_of_builtin_int_call (irange &r, gcall *call,
break;
}
+ case CFN_BUILT_IN_SIGNBIT:
+ {
+ arg = gimple_call_arg (call, 0);
+ frange tmp;
+ if (src.get_operand (tmp, arg))
+ {
+ if (tmp.get_signbit ().varying_p ())
+ return false;
+ if (tmp.get_signbit ().yes_p ())
+ {
+ tree one = build_one_cst (type);
+ r.set (one, one);
+ }
+ else
+ r.set_zero (type);
+ return true;
+ }
+ break;
+ }
+
case CFN_BUILT_IN_TOUPPER:
{
arg = gimple_call_arg (call, 0);