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.
>
>
>
>
>

Reply via email to