Makefile.in: Add tree-vrp.h to GTFILES.
authorKugan Vivekanandarajah <kuganv@linaro.org>
Sat, 20 Aug 2016 05:43:01 +0000 (05:43 +0000)
committerKugan Vivekanandarajah <kugan@gcc.gnu.org>
Sat, 20 Aug 2016 05:43:01 +0000 (05:43 +0000)
gcc/ChangeLog:

2016-08-20  Kugan Vivekanandarajah  <kuganv@linaro.org>

* Makefile.in: Add tree-vrp.h to GTFILES.
* gengtype.c (open_base_files): Add tree-vrp.h.
* asan.c: Add tree-vrp.h which now has the definition value_range_type.
* builtins.c: Likewise.
* fold-const.c: Likewise.
* gimple-builder.c: Likewise.
* gimple-laddress.c: Likewise.
* hsa-gen.c: Likewise.
* internal-fn.c: Likewise.
* ssa.h: Likewise.
* targhooks.c: Liewise,
* tree-ssa-address.c: Likewise.
* tree-ssanames.h (value_range_type: Move to tree-vrp.h.
* tree-vrp.c (struct value_range): Move to tree-vrp.h
* tree-vrp.h: New file.

From-SVN: r239638

16 files changed:
gcc/ChangeLog
gcc/Makefile.in
gcc/asan.c
gcc/builtins.c
gcc/fold-const.c
gcc/gengtype.c
gcc/gimple-builder.c
gcc/gimple-laddress.c
gcc/hsa-gen.c
gcc/internal-fn.c
gcc/ssa.h
gcc/targhooks.c
gcc/tree-ssa-address.c
gcc/tree-ssanames.h
gcc/tree-vrp.c
gcc/tree-vrp.h [new file with mode: 0644]

index a9946a9134bd0a2ac0826a0ccdd73978133dcd26..1929ba8d000bae16f9cc1739218876f414fcc225 100644 (file)
@@ -1,3 +1,21 @@
+2016-08-20  Kugan Vivekanandarajah  <kuganv@linaro.org>
+
+       * Makefile.in: Add tree-vrp.h to GTFILES.
+       * gengtype.c (open_base_files): Add tree-vrp.h.
+       * asan.c: Add tree-vrp.h which now has the definition value_range_type.
+       * builtins.c: Likewise.
+       * fold-const.c: Likewise.
+       * gimple-builder.c: Likewise.
+       * gimple-laddress.c: Likewise.
+       * hsa-gen.c: Likewise.
+       * internal-fn.c: Likewise.
+       * ssa.h: Likewise.
+       * targhooks.c: Liewise,
+       * tree-ssa-address.c: Likewise.
+       * tree-ssanames.h (value_range_type: Move to tree-vrp.h.
+       * tree-vrp.c (struct value_range): Move to tree-vrp.h
+       * tree-vrp.h: New file.
+
 2016-08-20  Kugan Vivekanandarajah  <kuganv@linaro.org>
 
        PR tree-optimization/61839
index 7a0160f89b61dec26fff1614a379d52bf807f938..8d7cc51940ba58f5901cf5bba08fc2bff99cf9a5 100644 (file)
@@ -2456,6 +2456,7 @@ GTFILES = $(CPP_ID_DATA_H) $(srcdir)/input.h $(srcdir)/coretypes.h \
   $(srcdir)/tree-phinodes.c \
   $(srcdir)/tree-ssa-alias.h \
   $(srcdir)/tree-ssanames.h \
+  $(srcdir)/tree-vrp.h \
   $(srcdir)/ipa-prop.h \
   $(srcdir)/trans-mem.c \
   $(srcdir)/lto-streamer.h \
index 9047e1bfc8f7d70c0b659e7e137c98b70c0697c4..4fe2447fe7f012294486ee881878ef03e8a3da9f 100644 (file)
@@ -32,6 +32,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tree-pass.h"
 #include "tm_p.h"
 #include "stringpool.h"
+#include "tree-vrp.h"
 #include "tree-ssanames.h"
 #include "optabs.h"
 #include "emit-rtl.h"
index 03a0dc84d5389a0092d4136dae507a20419f7c21..abc934b408a3cb2a6f236dc22bf5de0414d0a031 100644 (file)
@@ -32,6 +32,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "predict.h"
 #include "tm_p.h"
 #include "stringpool.h"
+#include "tree-vrp.h"
 #include "tree-ssanames.h"
 #include "expmed.h"
 #include "optabs.h"
index 30c1e0d440a6b6cce82a80a827d486b88c5ac1c2..103ed2d3ba09b19df6af1457ba1ee261007886fc 100644 (file)
@@ -75,6 +75,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "md5.h"
 #include "case-cfn-macros.h"
 #include "stringpool.h"
+#include "tree-vrp.h"
 #include "tree-ssanames.h"
 #include "selftest.h"
 
index 05183554b2a3927416e819a40e18beab1cf3364f..cecd552f7147dd92f823bd8369a92a8969029e35 100644 (file)
@@ -1713,7 +1713,7 @@ open_base_files (void)
       "explow.h", "calls.h", "cilk.h", "emit-rtl.h", "varasm.h", "stmt.h",
       "expr.h", "alloc-pool.h", "cselib.h", "insn-addr.h", "optabs.h",
       "libfuncs.h", "debug.h", "internal-fn.h", "gimple-fold.h", "tree-eh.h",
-      "gimple-iterator.h", "gimple-ssa.h", "tree-cfg.h",
+      "gimple-iterator.h", "gimple-ssa.h", "tree-cfg.h", "tree-vrp.h",
       "tree-phinodes.h", "ssa-iterators.h", "stringpool.h", "tree-ssanames.h",
       "tree-ssa-loop.h", "tree-ssa-loop-ivopts.h", "tree-ssa-loop-manip.h",
       "tree-ssa-loop-niter.h", "tree-into-ssa.h", "tree-dfa.h", 
index f124554fc13c2f4d298a241ebb4534764e2aae41..4fb21e4da00e8f6d12228afee79c2c8cb143e323 100644 (file)
@@ -24,6 +24,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tree.h"
 #include "gimple.h"
 #include "stringpool.h"
+#include "tree-vrp.h"
 #include "tree-ssanames.h"
 
 
index 4cc57cf17d27158e2d4d87c9b5aaa4fa3e233643..1a3c8e15a0d4e4416ac352c10367b184e1c80322 100644 (file)
@@ -32,6 +32,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "symtab.h"
 #include "tree.h"
 #include "stringpool.h"
+#include "tree-vrp.h"
 #include "tree-ssanames.h"
 #include "fold-const.h"
 #include "gimple-expr.h"
index fb6d8a2dd8d5d8fa802a8c63501ba363bf349895..314bb5b231cab56287a3f4fec614cc2bd1c318ee 100644 (file)
@@ -42,6 +42,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "gimple-ssa.h"
 #include "tree-phinodes.h"
 #include "stringpool.h"
+#include "tree-vrp.h"
 #include "tree-ssanames.h"
 #include "tree-dfa.h"
 #include "ssa-iterators.h"
index 49f3495866351c6d687b60ccef79deee9bb0134b..cd4b6254c81eaaddf08f784f811d0a79272689b0 100644 (file)
@@ -27,6 +27,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "gimple.h"
 #include "predict.h"
 #include "stringpool.h"
+#include "tree-vrp.h"
 #include "tree-ssanames.h"
 #include "expmed.h"
 #include "optabs.h"
index 40bc1c70de04f4e1890ec89fa8e2fc64bc47829c..0ec1bf07817a9190c2ff3da7e74b05a16ad560b7 100644 (file)
--- a/gcc/ssa.h
+++ b/gcc/ssa.h
@@ -25,6 +25,7 @@ along with GCC; see the file COPYING3.  If not see
 
 #include "stringpool.h"
 #include "gimple-ssa.h"
+#include "tree-vrp.h"
 #include "tree-ssanames.h"
 #include "tree-phinodes.h"
 #include "ssa-iterators.h" 
index 9d5be1706ddd3601a80844d74e5d8e4fc1ee83a9..97856face380f586ba7a248c372e1b684035af20 100644 (file)
@@ -57,6 +57,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "gimple-expr.h"
 #include "tm_p.h"
 #include "stringpool.h"
+#include "tree-vrp.h"
 #include "tree-ssanames.h"
 #include "optabs.h"
 #include "regs.h"
index b04545c2ed55a6908d2ef61b244cfdd7dcf89d02..30f0c325ae27de4b209d4dd2eecebf5310ab5fd1 100644 (file)
@@ -29,6 +29,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tree.h"
 #include "gimple.h"
 #include "stringpool.h"
+#include "tree-vrp.h"
 #include "tree-ssanames.h"
 #include "expmed.h"
 #include "insn-config.h"
index c81b1a14184ef01c58ba07fb61648eb002d3b9db..8e66ce6f3cebdc4a15f0a8b8902601abd717f86d 100644 (file)
@@ -62,11 +62,6 @@ struct GTY ((variable_size)) range_info_def {
 #define num_ssa_names (vec_safe_length (cfun->gimple_df->ssa_names))
 #define ssa_name(i) ((*cfun->gimple_df->ssa_names)[(i)])
 
-
-/* Type of value ranges.  See value_range_d In tree-vrp.c for a
-   description of these types.  */
-enum value_range_type { VR_UNDEFINED, VR_RANGE, VR_ANTI_RANGE, VR_VARYING };
-
 /* Sets the value range to SSA.  */
 extern void set_range_info (tree, enum value_range_type, const wide_int_ref &,
                            const wide_int_ref &);
index d350a86c50cc314ad5ea3c09da18b4db45ad0696..192dbbdf845198a0c18a16fa5869bee271659ed0 100644 (file)
@@ -61,32 +61,6 @@ along with GCC; see the file COPYING3.  If not see
 #include "params.h"
 #include "alloc-pool.h"
 
-/* Range of values that can be associated with an SSA_NAME after VRP
-   has executed.  */
-struct value_range
-{
-  /* Lattice value represented by this range.  */
-  enum value_range_type type;
-
-  /* Minimum and maximum values represented by this range.  These
-     values should be interpreted as follows:
-
-       - If TYPE is VR_UNDEFINED or VR_VARYING then MIN and MAX must
-         be NULL.
-
-       - If TYPE == VR_RANGE then MIN holds the minimum value and
-         MAX holds the maximum value of the range [MIN, MAX].
-
-       - If TYPE == ANTI_RANGE the variable is known to NOT
-         take any values in the range [MIN, MAX].  */
-  tree min;
-  tree max;
-
-  /* Set of SSA names whose value ranges are equivalent to this one.
-     This set is only valid when TYPE is VR_RANGE or VR_ANTI_RANGE.  */
-  bitmap equiv;
-};
-
 #define VR_INITIALIZER { VR_UNDEFINED, NULL_TREE, NULL_TREE, NULL }
 
 /* Allocation pools for tree-vrp allocations.  */
@@ -109,8 +83,6 @@ live_on_edge (edge e, tree name)
 /* Local functions.  */
 static int compare_values (tree val1, tree val2);
 static int compare_values_warnv (tree val1, tree val2, bool *);
-static void vrp_meet (value_range *, value_range *);
-static void vrp_intersect_ranges (value_range *, value_range *);
 static tree vrp_evaluate_conditional_warnv_with_ops (enum tree_code,
                                                     tree, tree, bool, bool *,
                                                     bool *);
@@ -4648,7 +4620,7 @@ compare_range_with_value (enum tree_code comp, value_range *vr, tree val,
 
 /* Debugging dumps.  */
 
-void dump_value_range (FILE *, value_range *);
+void dump_value_range (FILE *, const value_range *);
 void debug_value_range (value_range *);
 void dump_all_value_ranges (FILE *);
 void debug_all_value_ranges (void);
@@ -4659,7 +4631,7 @@ void debug_vr_equiv (bitmap);
 /* Dump value range VR to FILE.  */
 
 void
-dump_value_range (FILE *file, value_range *vr)
+dump_value_range (FILE *file, const value_range *vr)
 {
   if (vr == NULL)
     fprintf (file, "[]");
@@ -8600,7 +8572,7 @@ vrp_intersect_ranges_1 (value_range *vr0, value_range *vr1)
     bitmap_copy (vr0->equiv, vr1->equiv);
 }
 
-static void
+void
 vrp_intersect_ranges (value_range *vr0, value_range *vr1)
 {
   if (dump_file && (dump_flags & TDF_DETAILS))
@@ -8625,7 +8597,7 @@ vrp_intersect_ranges (value_range *vr0, value_range *vr1)
    may not be the smallest possible such range.  */
 
 static void
-vrp_meet_1 (value_range *vr0, value_range *vr1)
+vrp_meet_1 (value_range *vr0, const value_range *vr1)
 {
   value_range saved;
 
@@ -8697,8 +8669,8 @@ vrp_meet_1 (value_range *vr0, value_range *vr1)
     bitmap_clear (vr0->equiv);
 }
 
-static void
-vrp_meet (value_range *vr0, value_range *vr1)
+void
+vrp_meet (value_range *vr0, const value_range *vr1)
 {
   if (dump_file && (dump_flags & TDF_DETAILS))
     {
diff --git a/gcc/tree-vrp.h b/gcc/tree-vrp.h
new file mode 100644 (file)
index 0000000..7ffb7e7
--- /dev/null
@@ -0,0 +1,54 @@
+/* Support routines for Value Range Propagation (VRP).
+   Copyright (C) 2016 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Type of value ranges.  See value_range_d In tree-vrp.c for a
+   description of these types.  */
+enum value_range_type { VR_UNDEFINED, VR_RANGE,
+                       VR_ANTI_RANGE, VR_VARYING, VR_LAST };
+
+/* Range of values that can be associated with an SSA_NAME after VRP
+   has executed.  */
+struct GTY(()) value_range
+{
+  /* Lattice value represented by this range.  */
+  enum value_range_type type;
+
+  /* Minimum and maximum values represented by this range.  These
+     values should be interpreted as follows:
+
+       - If TYPE is VR_UNDEFINED or VR_VARYING then MIN and MAX must
+         be NULL.
+
+       - If TYPE == VR_RANGE then MIN holds the minimum value and
+         MAX holds the maximum value of the range [MIN, MAX].
+
+       - If TYPE == ANTI_RANGE the variable is known to NOT
+         take any values in the range [MIN, MAX].  */
+  tree min;
+  tree max;
+
+  /* Set of SSA names whose value ranges are equivalent to this one.
+     This set is only valid when TYPE is VR_RANGE or VR_ANTI_RANGE.  */
+  bitmap equiv;
+};
+
+extern void vrp_intersect_ranges (value_range *vr0, value_range *vr1);
+extern void vrp_meet (value_range *vr0, const value_range *vr1);
+extern void dump_value_range (FILE *, const value_range *);
+