aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-range-path.h
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2021-09-05 12:44:41 +0200
committerAldy Hernandez <aldyh@redhat.com>2021-09-05 13:43:51 +0200
commit90ef15352701c6880faee83a46031d7837ab9d27 (patch)
treee18207c6fd09f3dd67335e1a264e5fdb236993c3 /gcc/gimple-range-path.h
parentcbeeadff4c041c09a6335105d596019b6d583880 (diff)
downloadgcc-90ef15352701c6880faee83a46031d7837ab9d27.zip
gcc-90ef15352701c6880faee83a46031d7837ab9d27.tar.gz
gcc-90ef15352701c6880faee83a46031d7837ab9d27.tar.bz2
Add an unreachable_path_p method to path_range_query.
Keeping track of unreachable calculations while traversing a path is useful to determine edge reachability, among other things. We've been doing this ad-hoc in the backwards threader, so this provides a cleaner way of accessing the information. This patch also makes it easier to compare different threading implementations, in some upcoming work. For example, it's currently difficult to gague how good we're doing compared to the forward threader, because it can thread paths that are obviously unreachable. This provides a way of discarding those paths. Note that I've opted to keep unreachable_path_p() out-of-line, because I have local changes that will enhance this method. Tested on x86-64 Linux. gcc/ChangeLog: * gimple-range-path.cc (path_range_query::range_of_expr): Set m_undefined_path when appropriate. (path_range_query::internal_range_of_expr): Copy from range_of_expr. (path_range_query::unreachable_path_p): New. (path_range_query::precompute_ranges): Set m_undefined_path. * gimple-range-path.h (path_range_query::unreachable_path_p): New. (path_range_query::internal_range_of_expr): New. * tree-ssa-threadbackward.c (back_threader::find_taken_edge_cond): Use unreachable_path_p.
Diffstat (limited to 'gcc/gimple-range-path.h')
-rw-r--r--gcc/gimple-range-path.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/gimple-range-path.h b/gcc/gimple-range-path.h
index 5177313..c75721f 100644
--- a/gcc/gimple-range-path.h
+++ b/gcc/gimple-range-path.h
@@ -41,10 +41,13 @@ public:
const bitmap_head *imports);
bool range_of_expr (irange &r, tree name, gimple * = NULL) override;
bool range_of_stmt (irange &r, gimple *, tree name = NULL) override;
+ bool unreachable_path_p ();
void dump (FILE *) override;
void debug ();
private:
+ bool internal_range_of_expr (irange &r, tree name, gimple *);
+
// Cache manipulation.
void set_cache (const irange &r, tree name);
bool get_cache (irange &r, tree name);
@@ -82,6 +85,9 @@ private:
const bitmap_head *m_imports;
gimple_ranger &m_ranger;
non_null_ref m_non_null;
+
+ // Set if there were any undefined expressions while pre-calculating path.
+ bool m_undefined_path;
};
#endif // GCC_TREE_SSA_THREADSOLVER_H