aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2023-07-16 20:48:29 +0200
committerAldy Hernandez <aldyh@redhat.com>2023-07-17 13:56:25 +0200
commitfb9ba7047740e29c15dc5c75bcec784b4a917abf (patch)
tree3479af19c2fb0dd63913219193fbcc5f97dfa96d
parent70742d08832eb7db4d90f52465966111a19ce3a5 (diff)
downloadgcc-fb9ba7047740e29c15dc5c75bcec784b4a917abf.zip
gcc-fb9ba7047740e29c15dc5c75bcec784b4a917abf.tar.gz
gcc-fb9ba7047740e29c15dc5c75bcec784b4a917abf.tar.bz2
Export value/mask known bits from CCP.
Currently CCP throws away the known 1 bits because VRP and irange have traditionally only had a way of tracking known 0s (set_nonzero_bits). With the ability to keep all the known bits in the irange, we can now save this between passes. gcc/ChangeLog: * tree-ssa-ccp.cc (ccp_finalize): Export value/mask known bits.
-rw-r--r--gcc/tree-ssa-ccp.cc8
1 files changed, 3 insertions, 5 deletions
diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc
index 0d0f02a..64d5fa8 100644
--- a/gcc/tree-ssa-ccp.cc
+++ b/gcc/tree-ssa-ccp.cc
@@ -1020,11 +1020,9 @@ ccp_finalize (bool nonzero_p)
else
{
unsigned int precision = TYPE_PRECISION (TREE_TYPE (val->value));
- wide_int nonzero_bits
- = (wide_int::from (val->mask, precision, UNSIGNED)
- | wi::to_wide (val->value));
- nonzero_bits &= get_nonzero_bits (name);
- set_nonzero_bits (name, nonzero_bits);
+ wide_int value = wi::to_wide (val->value);
+ wide_int mask = wide_int::from (val->mask, precision, UNSIGNED);
+ set_bitmask (name, value, mask);
}
}