diff mbox series

[v3] tree-optimization/103759: Use sizetype everywhere for object sizes

Message ID 20211218065448.121912-1-siddhesh@gotplt.org
State New
Headers show
Series [v3] tree-optimization/103759: Use sizetype everywhere for object sizes | expand

Commit Message

Siddhesh Poyarekar Dec. 18, 2021, 6:54 a.m. UTC
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 (unknown, initval): Remove functions.
	(size_unknown, size_initval, size_unknown_p): Operate directly
	on trees.

Signed-off-by: Siddhesh Poyarekar <siddhesh@gotplt.org>
---
Tested a full bootstrap on x86_64, config=ubsan-bootstrap and i686.

Changes from v2:
- Operate directly on trees as per Jakub's suggestion.

 gcc/tree-object-size.c | 27 ++++++---------------------
 1 file changed, 6 insertions(+), 21 deletions(-)

Comments

Jakub Jelinek Dec. 18, 2021, 9:11 a.m. UTC | #1
On Sat, Dec 18, 2021 at 12:24:48PM +0530, Siddhesh Poyarekar wrote:
> 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 (unknown, initval): Remove functions.
> 	(size_unknown, size_initval, size_unknown_p): Operate directly
> 	on trees.
> 
> Signed-off-by: Siddhesh Poyarekar <siddhesh@gotplt.org>
> ---
> Tested a full bootstrap on x86_64, config=ubsan-bootstrap and i686.

Ok.

	Jakub
diff mbox series

Patch

diff --git a/gcc/tree-object-size.c b/gcc/tree-object-size.c
index 71f6b747d05..ee9ea1bfbfd 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.  */