aboutsummaryrefslogtreecommitdiff
path: root/gcc/value-range.cc
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2021-04-19 08:24:11 +0200
committerAldy Hernandez <aldyh@redhat.com>2021-05-01 09:28:33 +0200
commit3c65858787dc52b65b26fa7018587c01510f442c (patch)
treec41a7763618c9c97b881b87ad6688b0ac51af83d /gcc/value-range.cc
parent69c426b89579312af91035c26fb1e270bfbcad00 (diff)
downloadgcc-3c65858787dc52b65b26fa7018587c01510f442c.zip
gcc-3c65858787dc52b65b26fa7018587c01510f442c.tar.gz
gcc-3c65858787dc52b65b26fa7018587c01510f442c.tar.bz2
Add GTY support for irange.
Right now we have GTY support for static storage iranges (int_range<>). However, there's no reason why the base class can't be used with GC, other than it was an oversight. For that matter, the base class has a pointer to the sub-range storage, so we can use the same implementation for both. This patch does so. I have also removed the DEFINE_INT_RANGE_GC_STUBS stuff, and have documented why we need a separate gt_pch_nx (int_range<1> *&) version. This has to do with hash-traits.h, which ipa-prop.c is using to store a value_range. The header file hash-traits.h is defining an extern of gt_pch_nx (int_range<1> *&) etc, instead of calling the more generic (int_range<1> *) which is already available. It seems suspect that has-traits.h has their own externs for GC functions, and if someone has a better solution, I'd be glad to hear it. gcc/ChangeLog: * value-range.cc (DEFINE_INT_RANGE_GC_STUBS): Remove. (gt_pch_nx (int_range<1> *&)): New. (gt_ggc_mx (int_range<1> *&)): New. * value-range.h (class irange): Add GTY support for the base class.
Diffstat (limited to 'gcc/value-range.cc')
-rw-r--r--gcc/value-range.cc35
1 files changed, 14 insertions, 21 deletions
diff --git a/gcc/value-range.cc b/gcc/value-range.cc
index 2decd08..865344f 100644
--- a/gcc/value-range.cc
+++ b/gcc/value-range.cc
@@ -2044,26 +2044,20 @@ vrp_operand_equal_p (const_tree val1, const_tree val2)
return true;
}
-#define DEFINE_INT_RANGE_GC_STUBS(N) \
- void \
- gt_pch_nx (int_range<N> *&x) \
- { \
- for (unsigned i = 0; i < N; ++i) \
- { \
- gt_pch_nx (x->m_ranges[i * 2]); \
- gt_pch_nx (x->m_ranges[i * 2 + 1]); \
- } \
- } \
- \
- void \
- gt_ggc_mx (int_range<N> *&x) \
- { \
- for (unsigned i = 0; i < N; ++i) \
- { \
- gt_ggc_mx (x->m_ranges[i * 2]); \
- gt_ggc_mx (x->m_ranges[i * 2 + 1]); \
- } \
- }
+// ?? These stubs are for ipa-prop.c which use a value_range in a
+// hash_traits. hash-traits.h defines an extern of gt_ggc_mx (T &)
+// instead of picking up the gt_ggc_mx (T *) version.
+void
+gt_pch_nx (int_range<1> *&x)
+{
+ return gt_pch_nx ((irange *) x);
+}
+
+void
+gt_ggc_mx (int_range<1> *&x)
+{
+ return gt_ggc_mx ((irange *) x);
+}
#define DEFINE_INT_RANGE_INSTANCE(N) \
template int_range<N>::int_range(tree, tree, value_range_kind); \
@@ -2080,7 +2074,6 @@ DEFINE_INT_RANGE_INSTANCE(1)
DEFINE_INT_RANGE_INSTANCE(2)
DEFINE_INT_RANGE_INSTANCE(3)
DEFINE_INT_RANGE_INSTANCE(255)
-DEFINE_INT_RANGE_GC_STUBS(1)
#if CHECKING_P
#include "selftest.h"