Commit f90aa46c by Kugan Vivekanandarajah Committed by Kugan Vivekanandarajah

Makefile.in: Add tree-vrp.h to GTFILES.

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
parent 22d12455
2016-08-20 Kugan Vivekanandarajah <kuganv@linaro.org> 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 PR tree-optimization/61839
* tree-vrp.c (two_valued_val_range_p): New. * tree-vrp.c (two_valued_val_range_p): New.
(simplify_stmt_using_ranges): Convert CST BINOP VAR where VAR is (simplify_stmt_using_ranges): Convert CST BINOP VAR where VAR is
......
...@@ -2456,6 +2456,7 @@ GTFILES = $(CPP_ID_DATA_H) $(srcdir)/input.h $(srcdir)/coretypes.h \ ...@@ -2456,6 +2456,7 @@ GTFILES = $(CPP_ID_DATA_H) $(srcdir)/input.h $(srcdir)/coretypes.h \
$(srcdir)/tree-phinodes.c \ $(srcdir)/tree-phinodes.c \
$(srcdir)/tree-ssa-alias.h \ $(srcdir)/tree-ssa-alias.h \
$(srcdir)/tree-ssanames.h \ $(srcdir)/tree-ssanames.h \
$(srcdir)/tree-vrp.h \
$(srcdir)/ipa-prop.h \ $(srcdir)/ipa-prop.h \
$(srcdir)/trans-mem.c \ $(srcdir)/trans-mem.c \
$(srcdir)/lto-streamer.h \ $(srcdir)/lto-streamer.h \
......
...@@ -32,6 +32,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -32,6 +32,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-pass.h" #include "tree-pass.h"
#include "tm_p.h" #include "tm_p.h"
#include "stringpool.h" #include "stringpool.h"
#include "tree-vrp.h"
#include "tree-ssanames.h" #include "tree-ssanames.h"
#include "optabs.h" #include "optabs.h"
#include "emit-rtl.h" #include "emit-rtl.h"
......
...@@ -32,6 +32,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -32,6 +32,7 @@ along with GCC; see the file COPYING3. If not see
#include "predict.h" #include "predict.h"
#include "tm_p.h" #include "tm_p.h"
#include "stringpool.h" #include "stringpool.h"
#include "tree-vrp.h"
#include "tree-ssanames.h" #include "tree-ssanames.h"
#include "expmed.h" #include "expmed.h"
#include "optabs.h" #include "optabs.h"
......
...@@ -75,6 +75,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -75,6 +75,7 @@ along with GCC; see the file COPYING3. If not see
#include "md5.h" #include "md5.h"
#include "case-cfn-macros.h" #include "case-cfn-macros.h"
#include "stringpool.h" #include "stringpool.h"
#include "tree-vrp.h"
#include "tree-ssanames.h" #include "tree-ssanames.h"
#include "selftest.h" #include "selftest.h"
......
...@@ -1713,7 +1713,7 @@ open_base_files (void) ...@@ -1713,7 +1713,7 @@ open_base_files (void)
"explow.h", "calls.h", "cilk.h", "emit-rtl.h", "varasm.h", "stmt.h", "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", "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", "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-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.h", "tree-ssa-loop-ivopts.h", "tree-ssa-loop-manip.h",
"tree-ssa-loop-niter.h", "tree-into-ssa.h", "tree-dfa.h", "tree-ssa-loop-niter.h", "tree-into-ssa.h", "tree-dfa.h",
......
...@@ -24,6 +24,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -24,6 +24,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree.h" #include "tree.h"
#include "gimple.h" #include "gimple.h"
#include "stringpool.h" #include "stringpool.h"
#include "tree-vrp.h"
#include "tree-ssanames.h" #include "tree-ssanames.h"
......
...@@ -32,6 +32,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -32,6 +32,7 @@ along with GCC; see the file COPYING3. If not see
#include "symtab.h" #include "symtab.h"
#include "tree.h" #include "tree.h"
#include "stringpool.h" #include "stringpool.h"
#include "tree-vrp.h"
#include "tree-ssanames.h" #include "tree-ssanames.h"
#include "fold-const.h" #include "fold-const.h"
#include "gimple-expr.h" #include "gimple-expr.h"
......
...@@ -42,6 +42,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -42,6 +42,7 @@ along with GCC; see the file COPYING3. If not see
#include "gimple-ssa.h" #include "gimple-ssa.h"
#include "tree-phinodes.h" #include "tree-phinodes.h"
#include "stringpool.h" #include "stringpool.h"
#include "tree-vrp.h"
#include "tree-ssanames.h" #include "tree-ssanames.h"
#include "tree-dfa.h" #include "tree-dfa.h"
#include "ssa-iterators.h" #include "ssa-iterators.h"
......
...@@ -27,6 +27,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -27,6 +27,7 @@ along with GCC; see the file COPYING3. If not see
#include "gimple.h" #include "gimple.h"
#include "predict.h" #include "predict.h"
#include "stringpool.h" #include "stringpool.h"
#include "tree-vrp.h"
#include "tree-ssanames.h" #include "tree-ssanames.h"
#include "expmed.h" #include "expmed.h"
#include "optabs.h" #include "optabs.h"
......
...@@ -25,6 +25,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -25,6 +25,7 @@ along with GCC; see the file COPYING3. If not see
#include "stringpool.h" #include "stringpool.h"
#include "gimple-ssa.h" #include "gimple-ssa.h"
#include "tree-vrp.h"
#include "tree-ssanames.h" #include "tree-ssanames.h"
#include "tree-phinodes.h" #include "tree-phinodes.h"
#include "ssa-iterators.h" #include "ssa-iterators.h"
......
...@@ -57,6 +57,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -57,6 +57,7 @@ along with GCC; see the file COPYING3. If not see
#include "gimple-expr.h" #include "gimple-expr.h"
#include "tm_p.h" #include "tm_p.h"
#include "stringpool.h" #include "stringpool.h"
#include "tree-vrp.h"
#include "tree-ssanames.h" #include "tree-ssanames.h"
#include "optabs.h" #include "optabs.h"
#include "regs.h" #include "regs.h"
......
...@@ -29,6 +29,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -29,6 +29,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree.h" #include "tree.h"
#include "gimple.h" #include "gimple.h"
#include "stringpool.h" #include "stringpool.h"
#include "tree-vrp.h"
#include "tree-ssanames.h" #include "tree-ssanames.h"
#include "expmed.h" #include "expmed.h"
#include "insn-config.h" #include "insn-config.h"
......
...@@ -62,11 +62,6 @@ struct GTY ((variable_size)) range_info_def { ...@@ -62,11 +62,6 @@ struct GTY ((variable_size)) range_info_def {
#define num_ssa_names (vec_safe_length (cfun->gimple_df->ssa_names)) #define num_ssa_names (vec_safe_length (cfun->gimple_df->ssa_names))
#define ssa_name(i) ((*cfun->gimple_df->ssa_names)[(i)]) #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. */ /* Sets the value range to SSA. */
extern void set_range_info (tree, enum value_range_type, const wide_int_ref &, extern void set_range_info (tree, enum value_range_type, const wide_int_ref &,
const wide_int_ref &); const wide_int_ref &);
......
...@@ -61,32 +61,6 @@ along with GCC; see the file COPYING3. If not see ...@@ -61,32 +61,6 @@ along with GCC; see the file COPYING3. If not see
#include "params.h" #include "params.h"
#include "alloc-pool.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 } #define VR_INITIALIZER { VR_UNDEFINED, NULL_TREE, NULL_TREE, NULL }
/* Allocation pools for tree-vrp allocations. */ /* Allocation pools for tree-vrp allocations. */
...@@ -109,8 +83,6 @@ live_on_edge (edge e, tree name) ...@@ -109,8 +83,6 @@ live_on_edge (edge e, tree name)
/* Local functions. */ /* Local functions. */
static int compare_values (tree val1, tree val2); static int compare_values (tree val1, tree val2);
static int compare_values_warnv (tree val1, tree val2, bool *); 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, static tree vrp_evaluate_conditional_warnv_with_ops (enum tree_code,
tree, tree, bool, bool *, tree, tree, bool, bool *,
bool *); bool *);
...@@ -4648,7 +4620,7 @@ compare_range_with_value (enum tree_code comp, value_range *vr, tree val, ...@@ -4648,7 +4620,7 @@ compare_range_with_value (enum tree_code comp, value_range *vr, tree val,
/* Debugging dumps. */ /* Debugging dumps. */
void dump_value_range (FILE *, value_range *); void dump_value_range (FILE *, const value_range *);
void debug_value_range (value_range *); void debug_value_range (value_range *);
void dump_all_value_ranges (FILE *); void dump_all_value_ranges (FILE *);
void debug_all_value_ranges (void); void debug_all_value_ranges (void);
...@@ -4659,7 +4631,7 @@ void debug_vr_equiv (bitmap); ...@@ -4659,7 +4631,7 @@ void debug_vr_equiv (bitmap);
/* Dump value range VR to FILE. */ /* Dump value range VR to FILE. */
void void
dump_value_range (FILE *file, value_range *vr) dump_value_range (FILE *file, const value_range *vr)
{ {
if (vr == NULL) if (vr == NULL)
fprintf (file, "[]"); fprintf (file, "[]");
...@@ -8600,7 +8572,7 @@ vrp_intersect_ranges_1 (value_range *vr0, value_range *vr1) ...@@ -8600,7 +8572,7 @@ vrp_intersect_ranges_1 (value_range *vr0, value_range *vr1)
bitmap_copy (vr0->equiv, vr1->equiv); bitmap_copy (vr0->equiv, vr1->equiv);
} }
static void void
vrp_intersect_ranges (value_range *vr0, value_range *vr1) vrp_intersect_ranges (value_range *vr0, value_range *vr1)
{ {
if (dump_file && (dump_flags & TDF_DETAILS)) if (dump_file && (dump_flags & TDF_DETAILS))
...@@ -8625,7 +8597,7 @@ vrp_intersect_ranges (value_range *vr0, value_range *vr1) ...@@ -8625,7 +8597,7 @@ vrp_intersect_ranges (value_range *vr0, value_range *vr1)
may not be the smallest possible such range. */ may not be the smallest possible such range. */
static void static void
vrp_meet_1 (value_range *vr0, value_range *vr1) vrp_meet_1 (value_range *vr0, const value_range *vr1)
{ {
value_range saved; value_range saved;
...@@ -8697,8 +8669,8 @@ vrp_meet_1 (value_range *vr0, value_range *vr1) ...@@ -8697,8 +8669,8 @@ vrp_meet_1 (value_range *vr0, value_range *vr1)
bitmap_clear (vr0->equiv); bitmap_clear (vr0->equiv);
} }
static void void
vrp_meet (value_range *vr0, value_range *vr1) vrp_meet (value_range *vr0, const value_range *vr1)
{ {
if (dump_file && (dump_flags & TDF_DETAILS)) if (dump_file && (dump_flags & TDF_DETAILS))
{ {
......
/* 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 *);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment