aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-range-cache.h
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2023-05-24 09:52:26 -0400
committerAndrew MacLeod <amacleod@redhat.com>2023-05-24 16:40:11 -0400
commit1cd5bc387c453126fdb4c9400096180484ecddee (patch)
tree1e6b283f595756c7bf6ac904fba8674ef5be4ead /gcc/gimple-range-cache.h
parent04859bda7730f9f0cc3dc02b1df865bd7d20d388 (diff)
downloadgcc-1cd5bc387c453126fdb4c9400096180484ecddee.zip
gcc-1cd5bc387c453126fdb4c9400096180484ecddee.tar.gz
gcc-1cd5bc387c453126fdb4c9400096180484ecddee.tar.bz2
Gimple range PHI analyzer and testcases
Provide a PHI analyzer framework to provive better initial values for PHI nodes which formk groups with initial values and single statements which modify the PHI values in some predicatable way. PR tree-optimization/107822 PR tree-optimization/107986 gcc/ * Makefile.in (OBJS): Add gimple-range-phi.o. * gimple-range-cache.h (ranger_cache::m_estimate): New phi_analyzer pointer member. * gimple-range-fold.cc (fold_using_range::range_of_phi): Use phi_analyzer if no loop info is available. * gimple-range-phi.cc: New file. * gimple-range-phi.h: New file. * tree-vrp.cc (execute_ranger_vrp): Utililze a phi_analyzer. gcc/testsuite/ * gcc.dg/pr107822.c: New. * gcc.dg/pr107986-1.c: New.
Diffstat (limited to 'gcc/gimple-range-cache.h')
-rw-r--r--gcc/gimple-range-cache.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/gcc/gimple-range-cache.h b/gcc/gimple-range-cache.h
index afcf8d7..93d1629 100644
--- a/gcc/gimple-range-cache.h
+++ b/gcc/gimple-range-cache.h
@@ -23,6 +23,7 @@ along with GCC; see the file COPYING3. If not see
#include "gimple-range-gori.h"
#include "gimple-range-infer.h"
+#include "gimple-range-phi.h"
// This class manages a vector of pointers to ssa_block ranges. It
// provides the basis for the "range on entry" cache for all
@@ -136,6 +137,7 @@ private:
void exit_range (vrange &r, tree expr, basic_block bb, enum rfd_mode);
bool edge_range (vrange &r, edge e, tree name, enum rfd_mode);
+ phi_analyzer *m_estimate;
vec<basic_block> m_workback;
class update_list *m_update;
};