diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2020-04-07 16:02:17 +0200 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2020-04-08 13:30:34 -0400 |
commit | 9eac184417b02eede7fd909b4f61024a7d5d8e81 (patch) | |
tree | 107ee7c25aa8e13c91ec875f9135876e61964f7e /gcc | |
parent | 277d95af38df39caebf22c570ba05196fea462dc (diff) | |
download | gcc-9eac184417b02eede7fd909b4f61024a7d5d8e81.zip gcc-9eac184417b02eede7fd909b4f61024a7d5d8e81.tar.gz gcc-9eac184417b02eede7fd909b4f61024a7d5d8e81.tar.bz2 |
Implement global_ranger::range_on_edge to intersect with global ssa range.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/gimple-range-cfg.cc | 1 | ||||
-rw-r--r-- | gcc/gimple-ranger.cc | 14 | ||||
-rw-r--r-- | gcc/gimple-ranger.h | 2 |
3 files changed, 16 insertions, 1 deletions
diff --git a/gcc/gimple-range-cfg.cc b/gcc/gimple-range-cfg.cc index 36e0fe3..f7d61b8 100644 --- a/gcc/gimple-range-cfg.cc +++ b/gcc/gimple-range-cfg.cc @@ -86,7 +86,6 @@ gimple_ranger::range_of_stmt (irange &r, gimple *s, tree name) // Calculate a range for NAME on edge E and return it in R. -// Return false if no range can be determined. void gimple_ranger::range_on_edge (irange &r, edge e, tree name) diff --git a/gcc/gimple-ranger.cc b/gcc/gimple-ranger.cc index 812956d..bb53ac9 100644 --- a/gcc/gimple-ranger.cc +++ b/gcc/gimple-ranger.cc @@ -153,6 +153,20 @@ global_ranger::range_on_exit (irange &r, basic_block bb, tree name) || types_compatible_p (r.type(), TREE_TYPE (name))); } +// Calculate a range for NAME on edge E and return it in R. + +void +global_ranger::range_on_edge (irange &r, edge e, tree name) +{ + super::range_on_edge (r, e, name); + + if (TREE_CODE (name) == SSA_NAME) + { + widest_irange range_for_name; + range_of_ssa_name (range_for_name, name); + r.intersect (range_for_name); + } +} // Calculate a range for statement S and return it in R. If NAME is // provided it represents the SSA_NAME on the LHS of the statement. diff --git a/gcc/gimple-ranger.h b/gcc/gimple-ranger.h index f2b31ed..575e670 100644 --- a/gcc/gimple-ranger.h +++ b/gcc/gimple-ranger.h @@ -48,6 +48,7 @@ public: virtual void range_on_entry (irange &r, basic_block bb, tree name); virtual void range_on_exit (irange &r, basic_block bb, tree name); virtual bool range_of_stmt (irange &r, gimple *s, tree name = NULL_TREE); + virtual void range_on_edge (irange &r, edge e, tree name); void export_global_ranges (); @@ -57,6 +58,7 @@ protected: virtual void range_of_ssa_name (irange &r, tree name, gimple *s = NULL); bool range_from_import (irange &r, tree name, irange &import_range); private: + typedef gimple_ranger super; // Inherited from class for easy changing. bool non_null_deref_p (tree name, basic_block bb); bool block_range (irange &r, basic_block bb, tree name, bool calc = true); void dump_block (FILE *f, basic_block bb); |