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/tree-vrp.cc | |
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/tree-vrp.cc')
-rw-r--r-- | gcc/tree-vrp.cc | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/tree-vrp.cc b/gcc/tree-vrp.cc index 7f03f54..c52e997 100644 --- a/gcc/tree-vrp.cc +++ b/gcc/tree-vrp.cc @@ -994,11 +994,15 @@ execute_ranger_vrp (struct function *fun, bool warn_array_bounds_p, set_all_edges_as_executable (fun); gimple_ranger *ranger = enable_ranger (fun, false); rvrp_folder folder (ranger); + phi_analysis_initialize (ranger->const_query ()); folder.substitute_and_fold (); // Remove tagged builtin-unreachable and maybe update globals. folder.m_unreachable.remove_and_update_globals (final_p); if (dump_file && (dump_flags & TDF_DETAILS)) - ranger->dump (dump_file); + { + phi_analysis ().dump (dump_file); + ranger->dump (dump_file); + } if ((warn_array_bounds || warn_strict_flex_arrays) && warn_array_bounds_p) { @@ -1020,6 +1024,7 @@ execute_ranger_vrp (struct function *fun, bool warn_array_bounds_p, array_checker.check (); } + phi_analysis_finalize (); disable_ranger (fun); scev_finalize (); loop_optimizer_finalize (); |