diff options
author | Kugan Vivekanandarajah <kuganv@linaro.org> | 2016-08-04 04:20:01 +0000 |
---|---|---|
committer | Kugan Vivekanandarajah <kugan@gcc.gnu.org> | 2016-08-04 04:20:01 +0000 |
commit | b29fcf3b64a0f2404ab43bb9d884349d09168d51 (patch) | |
tree | 581333500589395efbcc8e86c945cf9bc2da1f3e /gcc/tree-vrp.c | |
parent | 5c5ad8cd638c5c1aa2bd2fb0477e2b893fdda309 (diff) | |
download | gcc-b29fcf3b64a0f2404ab43bb9d884349d09168d51.zip gcc-b29fcf3b64a0f2404ab43bb9d884349d09168d51.tar.gz gcc-b29fcf3b64a0f2404ab43bb9d884349d09168d51.tar.bz2 |
tree-vrp.c (set_value_range): Use vrp_equiv_obstack with BITMAP_ALLOC.
gcc/ChangeLog:
2016-08-04 Kugan Vivekanandarajah <kuganv@linaro.org>
* tree-vrp.c (set_value_range): Use vrp_equiv_obstack with
BITMAP_ALLOC.
(add_equivalence): Likewise.
(get_value_range): Allocate value range with vrp_value_range_pool.
(vrp_initialize): Initialize vrp_equiv_obstack for equiv allocation.
(vrp_finalize): Relase vrp_equiv_obstack and vrp_value_range_pool.
From-SVN: r239113
Diffstat (limited to 'gcc/tree-vrp.c')
-rw-r--r-- | gcc/tree-vrp.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 41c870f..c0e25cf 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -59,6 +59,7 @@ along with GCC; see the file COPYING3. If not see #include "target.h" #include "case-cfn-macros.h" #include "params.h" +#include "alloc-pool.h" /* Range of values that can be associated with an SSA_NAME after VRP has executed. */ @@ -88,6 +89,10 @@ struct value_range #define VR_INITIALIZER { VR_UNDEFINED, NULL_TREE, NULL_TREE, NULL } +/* Allocation pools for tree-vrp allocations. */ +static object_allocator<value_range> vrp_value_range_pool ("Tree VRP value ranges"); +static bitmap_obstack vrp_equiv_obstack; + /* Set of SSA names found live during the RPO traversal of the function for still active basic-blocks. */ static sbitmap *live; @@ -407,7 +412,7 @@ set_value_range (value_range *vr, enum value_range_type t, tree min, bitmaps, only do it if absolutely necessary. */ if (vr->equiv == NULL && equiv != NULL) - vr->equiv = BITMAP_ALLOC (NULL); + vr->equiv = BITMAP_ALLOC (&vrp_equiv_obstack); if (equiv != vr->equiv) { @@ -689,7 +694,8 @@ get_value_range (const_tree var) return CONST_CAST (value_range *, &vr_const_varying); /* Create a default value range. */ - vr_value[ver] = vr = XCNEW (value_range); + vr_value[ver] = vr = vrp_value_range_pool.allocate (); + memset (vr, 0, sizeof (*vr)); /* Defer allocating the equivalence set. */ vr->equiv = NULL; @@ -818,7 +824,7 @@ add_equivalence (bitmap *equiv, const_tree var) value_range *vr = vr_value[ver]; if (*equiv == NULL) - *equiv = BITMAP_ALLOC (NULL); + *equiv = BITMAP_ALLOC (&vrp_equiv_obstack); bitmap_set_bit (*equiv, ver); if (vr && vr->equiv) bitmap_ior_into (*equiv, vr->equiv); @@ -6967,6 +6973,7 @@ vrp_initialize (void) num_vr_values = num_ssa_names; vr_value = XCNEWVEC (value_range *, num_vr_values); vr_phi_edge_counts = XCNEWVEC (int, num_ssa_names); + bitmap_obstack_initialize (&vrp_equiv_obstack); FOR_EACH_BB_FN (bb, cfun) { @@ -10291,15 +10298,10 @@ vrp_finalize (bool warn_array_bounds_p) identify_jump_threads (); /* Free allocated memory. */ - for (i = 0; i < num_vr_values; i++) - if (vr_value[i]) - { - BITMAP_FREE (vr_value[i]->equiv); - free (vr_value[i]); - } - free (vr_value); free (vr_phi_edge_counts); + bitmap_obstack_release (&vrp_equiv_obstack); + vrp_value_range_pool.release (); /* So that we can distinguish between VRP data being available and not available. */ |