aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-range.h
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2022-11-07 15:07:35 -0500
committerAndrew MacLeod <amacleod@redhat.com>2022-11-07 19:22:19 -0500
commitc838119946c9f75f1e42f4320275355822cc86fc (patch)
tree2ca1a424406083b17d55461bfc69fc2a093c9d47 /gcc/gimple-range.h
parentf8d901d00e94e5a03c3321b37303eddd7c321ecb (diff)
downloadgcc-c838119946c9f75f1e42f4320275355822cc86fc.zip
gcc-c838119946c9f75f1e42f4320275355822cc86fc.tar.gz
gcc-c838119946c9f75f1e42f4320275355822cc86fc.tar.bz2
Add transitive inferred range processing.
Rewalk statements at the end of a block to see if any inferred ranges affect earlier calculations and register those as inferred ranges. gcc/ PR tree-optimization/104530 * gimple-range-cache.cc (ranger_cache::register_inferred_value): New. Split from: (ranger_cache::apply_inferred_ranges): Move setting cache to separate function. * gimple-range-cache.h (register_inferred_value): New prototype. * gimple-range-infer.cc (infer_range_manager::has_range_p): New. * gimple-range-infer.h (has_range_p): New prototype. * gimple-range.cc (register_transitive_inferred_ranges): New. * gimple-range.h (register_transitive_inferred_ranges): New proto. * tree-vrp.cc (rvrp_folder::fold_stmt): Check for transitive inferred ranges at the end of the block before folding final stmt. gcc/testsuite/ * gcc.dg/pr104530.c: New.
Diffstat (limited to 'gcc/gimple-range.h')
-rw-r--r--gcc/gimple-range.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/gcc/gimple-range.h b/gcc/gimple-range.h
index 22e05f6..dfe8199b 100644
--- a/gcc/gimple-range.h
+++ b/gcc/gimple-range.h
@@ -62,6 +62,7 @@ public:
auto_edge_flag non_executable_edge_flag;
bool fold_stmt (gimple_stmt_iterator *gsi, tree (*) (tree));
void register_inferred_ranges (gimple *s);
+ void register_transitive_inferred_ranges (basic_block bb);
protected:
bool fold_range_internal (vrange &r, gimple *s, tree name);
void prefill_name (vrange &r, tree name);