diff options
author | Siddhesh Poyarekar <siddhesh@gotplt.org> | 2021-12-18 16:46:43 +0530 |
---|---|---|
committer | Siddhesh Poyarekar <siddhesh@gotplt.org> | 2021-12-18 16:46:44 +0530 |
commit | cc032ec1ecb34b006f42e170ccb9d76aa42fd8eb (patch) | |
tree | 5c16486cec75a1a5d41f84ceb699eb1d4510c4ec /gcc | |
parent | 21423a1dfa079d4cd218f69d2fab9fe65a69fedb (diff) | |
download | gcc-cc032ec1ecb34b006f42e170ccb9d76aa42fd8eb.zip gcc-cc032ec1ecb34b006f42e170ccb9d76aa42fd8eb.tar.gz gcc-cc032ec1ecb34b006f42e170ccb9d76aa42fd8eb.tar.bz2 |
tree-optimization/103759: Use sizetype everywhere for object sizes
Since all computations in tree-object-size are now done in sizetype and
not HOST_WIDE_INT, comparisons with HOST_WIDE_INT based unknown and
initval would be incorrect. Instead, use the sizetype trees directly to
generate and evaluate initval and unknown size values.
gcc/ChangeLog:
PR tree-optimization/103759
* tree-object-size.c (unknown, initval): Remove functions.
(size_unknown, size_initval, size_unknown_p): Operate directly
on trees.
Signed-off-by: Siddhesh Poyarekar <siddhesh@gotplt.org>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/tree-object-size.c | 27 |
1 files changed, 6 insertions, 21 deletions
diff --git a/gcc/tree-object-size.c b/gcc/tree-object-size.c index 71f6b74..ee9ea1b 100644 --- a/gcc/tree-object-size.c +++ b/gcc/tree-object-size.c @@ -83,30 +83,13 @@ static bitmap computed[OST_END]; /* Maximum value of offset we consider to be addition. */ static unsigned HOST_WIDE_INT offset_limit; -/* Initial value of object sizes; zero for maximum and SIZE_MAX for minimum - object size. */ - -static inline unsigned HOST_WIDE_INT -initval (int object_size_type) -{ - return (object_size_type & OST_MINIMUM) ? HOST_WIDE_INT_M1U : 0; -} - -/* Unknown object size value; it's the opposite of initval. */ - -static inline unsigned HOST_WIDE_INT -unknown (int object_size_type) -{ - return ~initval (object_size_type); -} - /* Return true if VAL is represents an unknown size for OBJECT_SIZE_TYPE. */ static inline bool size_unknown_p (tree val, int object_size_type) { - return (tree_fits_uhwi_p (val) - && tree_to_uhwi (val) == unknown (object_size_type)); + return ((object_size_type & OST_MINIMUM) + ? integer_zerop (val) : integer_all_onesp (val)); } /* Return a tree with initial value for OBJECT_SIZE_TYPE. */ @@ -114,7 +97,8 @@ size_unknown_p (tree val, int object_size_type) static inline tree size_initval (int object_size_type) { - return size_int (initval (object_size_type)); + return ((object_size_type & OST_MINIMUM) + ? TYPE_MAX_VALUE (sizetype) : size_zero_node); } /* Return a tree with unknown value for OBJECT_SIZE_TYPE. */ @@ -122,7 +106,8 @@ size_initval (int object_size_type) static inline tree size_unknown (int object_size_type) { - return size_int (unknown (object_size_type)); + return ((object_size_type & OST_MINIMUM) + ? size_zero_node : TYPE_MAX_VALUE (sizetype)); } /* Grow object_sizes[OBJECT_SIZE_TYPE] to num_ssa_names. */ |