https://gcc.gnu.org/g:84a9771f9ab1f494dae5a0ed4a96bf4606d935dd

commit r17-1478-g84a9771f9ab1f494dae5a0ed4a96bf4606d935dd
Author: Andrew MacLeod <[email protected]>
Date:   Fri May 29 14:24:04 2026 -0400

    Add GTY to range_storage.
    
    In preparation for a points to tree in prange, this patch adds GTY
    markers to the vrange_storage classes.
    
            * value-range-storage.cc (irange_storage::irange_storage):
            Explicitly initialize vrange_storage.
            (prange_storage::prange_storage): Likewise.
            * value-range-storage.h (vrange_storage): Add GTY marker and
            discriminator field.
            (irange_storage): Add GTY marker.
            (prange_storage): Add GTY marker and friend GTY functions.
            (frange_storage): Add GTY marker and explcitly initialize
            vrange_storage.

Diff:
---
 gcc/value-range-storage.cc |  4 ++--
 gcc/value-range-storage.h  | 21 ++++++++++++++-------
 2 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/gcc/value-range-storage.cc b/gcc/value-range-storage.cc
index 58d4a3ba21aa..b2b3e4455905 100644
--- a/gcc/value-range-storage.cc
+++ b/gcc/value-range-storage.cc
@@ -296,7 +296,7 @@ irange_storage::alloc (vrange_internal_alloc &allocator, 
const irange &r)
 // Initialize the storage with R.
 
 irange_storage::irange_storage (const irange &r)
-  : m_max_ranges (r.num_pairs ())
+  : vrange_storage (VR_IRANGE), m_max_ranges (r.num_pairs ())
 {
   m_num_ranges = m_max_ranges;
   set_irange (r);
@@ -611,7 +611,7 @@ prange_storage::alloc (vrange_internal_alloc &allocator, 
const prange &r)
 
 // Initialize the storage with R.
 
-prange_storage::prange_storage (const prange &r)
+prange_storage::prange_storage (const prange &r) : vrange_storage (VR_PRANGE)
 {
   unsigned num_words;
   enum prange_kind kind = prange_format (r, num_words);
diff --git a/gcc/value-range-storage.h b/gcc/value-range-storage.h
index ebc2f6fda799..280aa65fe2dc 100644
--- a/gcc/value-range-storage.h
+++ b/gcc/value-range-storage.h
@@ -46,7 +46,7 @@ private:
 // ggc_test_and_set_mark calls.  We ignore the derived classes, since
 // they don't contain any pointers.
 
-class GTY(()) vrange_storage
+class GTY((desc ("%h.m_discriminator"), tag("VR_UNKNOWN"))) vrange_storage
 {
 public:
   static vrange_storage *alloc (vrange_internal_alloc &, const vrange &);
@@ -54,14 +54,15 @@ public:
   void set_vrange (const vrange &r);
   bool fits_p (const vrange &r) const;
   bool equal_p (const vrange &r) const;
-protected:
+
   // Stack initialization disallowed.
-  vrange_storage () { }
+  vrange_storage (enum value_range_discriminator d) : m_discriminator (d) { }
+  const ENUM_BITFIELD(value_range_discriminator) m_discriminator : 4;
 };
 
 // Efficient memory storage for an irange.
 
-class irange_storage : public vrange_storage
+class GTY((tag ("VR_IRANGE"))) irange_storage: public vrange_storage
 {
 public:
   static irange_storage *alloc (vrange_internal_alloc &, const irange &);
@@ -113,15 +114,20 @@ enum prange_kind { PR_UNDEFINED,  // VR_UNDEFINED
 const unsigned int PRANGE_STORAGE_NINTS = 4;
 
 // Efficient memory storage for a prange.
-class prange_storage : public vrange_storage
+class GTY((tag ("VR_PRANGE"))) prange_storage : public vrange_storage
 {
 public:
+  friend void gt_ggc_mx_vrange_storage(void *);
+  friend void gt_pch_nx_vrange_storage(void *);
+  friend void gt_pch_p_14vrange_storage(void *, void *, gt_pointer_operator,
+                                       void *);
   static prange_storage *alloc (vrange_internal_alloc &, const prange &);
   void set_prange (const prange &r);
   void get_prange (prange &r, tree type) const;
   bool equal_p (const prange &r) const;
   bool fits_p (const prange &r) const;
   void dump () const;
+
 private:
   DISABLE_COPY_AND_ASSIGN (prange_storage);
   prange_storage (const prange &r);
@@ -143,7 +149,7 @@ private:
 
 // Efficient memory storage for an frange.
 
-class frange_storage : public vrange_storage
+class GTY((tag ("VR_FRANGE"))) frange_storage : public vrange_storage
 {
  public:
   static frange_storage *alloc (vrange_internal_alloc &, const frange &r);
@@ -152,7 +158,8 @@ class frange_storage : public vrange_storage
   bool equal_p (const frange &r) const;
   bool fits_p (const frange &) const;
  private:
-  frange_storage (const frange &r) { set_frange (r); }
+  frange_storage (const frange &r) : vrange_storage (VR_FRANGE)
+    { set_frange (r); }
   DISABLE_COPY_AND_ASSIGN (frange_storage);
 
   enum value_range_kind m_kind;

Reply via email to