On Thu, Jul 14, 2016 at 9:45 PM, kugan <kugan.vivekanandara...@linaro.org> wrote: > > Hi, > > > > This patch adds a very simple early vrp implementation. This visits the > basic blocks in the dominance order and set the Value Ranges (VR) for > > SSA_NAMEs in the scope. Use this VR to discover more VRs. Restore the old VR > once the scope is exit.
Why separate out early VRP from tree-vrp? Just a little curious. Also it seems like if you are going to do that, putting the following functions in a class would be better: +extern void vrp_initialize (void); +extern void vrp_finalize (bool update, bool warn_array_bounds_p); +extern void vrp_intersect_ranges (value_range *vr0, value_range *vr1); +extern void vrp_meet (value_range *vr0, value_range *vr1); +extern enum ssa_prop_result vrp_visit_stmt (gimple *stmt, + edge *taken_edge_p, + tree *output_p); +extern enum ssa_prop_result vrp_visit_phi_node (gphi *phi); +extern bool stmt_interesting_for_vrp (gimple *stmt); + +extern void extract_range_from_assert (value_range *vr_p, tree expr); +extern bool update_value_range (const_tree var, value_range *vr); +extern value_range *get_value_range (const_tree var); +extern void set_value_range (value_range *vr, enum value_range_type t, + tree min, tree max, bitmap equiv); +extern void change_value_range (const_tree var, value_range *new_vr); + +extern void dump_value_range (FILE *, value_range *); That is vrp_initialize becomes the constructor and vrp_finalize becomes the deconstructor. With both jump_thread and warn_array_bounds_p being variables you set while running your pass. Thanks, Andrew > > > > Thanks, > > Kugan > > > > > > gcc/ChangeLog: > > > > 2016-07-14 Kugan Vivekanandarajah <kug...@linaro.org> > > > > * Makefile.in: Add tree-early-vrp.o. > > * common.opt: New option -ftree-evrp. > > * doc/invoke.texi: Document -ftree-evrp. > > * passes.def: Define new pass_early_vrp. > > * timevar.def: Define new TV_TREE_EARLY_VRP. > > * tree-early-vrp.c: New file. > > * tree-pass.h (make_pass_early_vrp): New. > > > > gcc/testsuite/ChangeLog: > > > > 2016-07-14 Kugan Vivekanandarajah <kug...@linaro.org> > > > > * gcc.dg/tree-ssa/evrp1.c: New test. > > * gcc.dg/tree-ssa/evrp2.c: New test. > > * gcc.dg/tree-ssa/evrp3.c: New test. > > * g++.dg/tree-ssa/pr31146-2.C: Run with -fno-tree-evrp as evrp also > > does the same transformation. > > * gcc.dg/tree-ssa/pr20318.c: Check for the pattern in evrp dump. > > * gcc.dg/tree-ssa/pr22117.c: Likewise. > > * gcc.dg/tree-ssa/pr25382.c: Likewise. > > * gcc.dg/tree-ssa/pr68431.c: LIkewise. > > * gcc.dg/tree-ssa/vrp19.c: Likewise. > > * gcc.dg/tree-ssa/vrp23.c: Likewise. > > * gcc.dg/tree-ssa/vrp24.c: Likewise. > > * gcc.dg/tree-ssa/vrp58.c: Likewise. > > * gcc.dg/tree-ssa/vrp67.c: Likewise. > > * gcc.dg/tree-ssa/vrp98.c: Likewise. > > > > >