diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2023-05-24 09:52:26 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2023-05-24 16:40:11 -0400 |
commit | 1cd5bc387c453126fdb4c9400096180484ecddee (patch) | |
tree | 1e6b283f595756c7bf6ac904fba8674ef5be4ead /gcc/gimple-range-cache.h | |
parent | 04859bda7730f9f0cc3dc02b1df865bd7d20d388 (diff) | |
download | gcc-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.h | 2 |
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; }; |