aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-range-cache.h
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2023-05-24 09:06:26 -0400
committerAndrew MacLeod <amacleod@redhat.com>2023-05-24 16:40:11 -0400
commit71baa009496c9ba6e1f71aebb4e96b03c32b3957 (patch)
tree6806c71e73c85e6846da663bc7c0573f8c9a6815 /gcc/gimple-range-cache.h
parent46a594b949082fc47ced0e8278f162ddbe79db1a (diff)
downloadgcc-71baa009496c9ba6e1f71aebb4e96b03c32b3957.zip
gcc-71baa009496c9ba6e1f71aebb4e96b03c32b3957.tar.gz
gcc-71baa009496c9ba6e1f71aebb4e96b03c32b3957.tar.bz2
Make ssa_cache a range_query.
By providing range_of_expr as a range_query, we can fold and do other interesting things using values from the global table. Make ranger's knonw globals available via const_query. * gimple-range-cache.cc (ssa_cache::range_of_expr): New. * gimple-range-cache.h (class ssa_cache): Inherit from range_query. (ranger_cache::const_query): New. * gimple-range.cc (gimple_ranger::const_query): New. * gimple-range.h (gimple_ranger::const_query): New prototype.
Diffstat (limited to 'gcc/gimple-range-cache.h')
-rw-r--r--gcc/gimple-range-cache.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/gimple-range-cache.h b/gcc/gimple-range-cache.h
index 4fc9823..afcf8d7 100644
--- a/gcc/gimple-range-cache.h
+++ b/gcc/gimple-range-cache.h
@@ -52,7 +52,7 @@ private:
// has been visited during this incarnation. Once the ranger evaluates
// a name, it is typically not re-evaluated again.
-class ssa_cache
+class ssa_cache : public range_query
{
public:
ssa_cache ();
@@ -63,6 +63,8 @@ public:
virtual void clear_range (tree name);
virtual void clear ();
void dump (FILE *f = stderr);
+ virtual bool range_of_expr (vrange &r, tree expr, gimple *stmt);
+
protected:
vec<vrange_storage *> m_tab;
vrange_allocator *m_range_allocator;
@@ -103,6 +105,7 @@ public:
bool get_global_range (vrange &r, tree name) const;
bool get_global_range (vrange &r, tree name, bool &current_p);
void set_global_range (tree name, const vrange &r, bool changed = true);
+ range_query &const_query () { return m_globals; }
void propagate_updated_value (tree name, basic_block bb);