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>
This commit is contained in:
Siddhesh Poyarekar 2021-12-18 16:46:43 +05:30
parent 21423a1dfa
commit cc032ec1ec
1 changed files with 6 additions and 21 deletions

View File

@ -83,30 +83,13 @@ static bitmap computed[OST_END];
/* Maximum value of offset we consider to be addition. */ /* Maximum value of offset we consider to be addition. */
static unsigned HOST_WIDE_INT offset_limit; 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. */ /* Return true if VAL is represents an unknown size for OBJECT_SIZE_TYPE. */
static inline bool static inline bool
size_unknown_p (tree val, int object_size_type) size_unknown_p (tree val, int object_size_type)
{ {
return (tree_fits_uhwi_p (val) return ((object_size_type & OST_MINIMUM)
&& tree_to_uhwi (val) == unknown (object_size_type)); ? integer_zerop (val) : integer_all_onesp (val));
} }
/* Return a tree with initial value for OBJECT_SIZE_TYPE. */ /* 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 static inline tree
size_initval (int object_size_type) 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. */ /* Return a tree with unknown value for OBJECT_SIZE_TYPE. */
@ -122,7 +106,8 @@ size_initval (int object_size_type)
static inline tree static inline tree
size_unknown (int object_size_type) 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. */ /* Grow object_sizes[OBJECT_SIZE_TYPE] to num_ssa_names. */