This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH, i386, Pointer Bounds Checker 11/x] Keep bounds initial values
- From: Ilya Enkovich <enkovich dot gnu at gmail dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Thu, 29 May 2014 14:53:55 +0400
- Subject: [PATCH, i386, Pointer Bounds Checker 11/x] Keep bounds initial values
- Authentication-results: sourceware.org; auth=none
Hi,
This patch tries to keep bounds initial values when it may be needed. Even if initial value is not fully known (e.g. we know only low bound) it still may help to remove some redundant checks.
Bootstrapped and tested on linux-x86_64.
Thanks,
Ilya
--
gcc/
2013-05-29 Ilya Enkovich <ilya.enkovich@intel.com>
* ipa.c (symtab_remove_unreachable_nodes): Kepp initial values for
pointer bounds to be used for checks eliminations.
* lto-cgraph.c (compute_ltrans_boundary): Likewise.
* add_references_to_partition (add_references_to_partition): Add
references to pointer bounds vars.
diff --git a/gcc/ipa.c b/gcc/ipa.c
index 1d7fa35..958cabe 100644
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -568,7 +568,8 @@ symtab_remove_unreachable_nodes (bool before_inlining_p, FILE *file)
vnode->aux = NULL;
/* Keep body if it may be useful for constant folding. */
- if ((init = ctor_for_folding (vnode->decl)) == error_mark_node)
+ if ((init = ctor_for_folding (vnode->decl)) == error_mark_node
+ && !POINTER_BOUNDS_P (vnode->decl))
varpool_remove_initializer (vnode);
else
DECL_INITIAL (vnode->decl) = init;
diff --git a/gcc/lto-cgraph.c b/gcc/lto-cgraph.c
index 58105f0..7089516 100644
--- a/gcc/lto-cgraph.c
+++ b/gcc/lto-cgraph.c
@@ -829,7 +829,8 @@ compute_ltrans_boundary (lto_symtab_encoder_t in_encoder)
{
if (!lto_symtab_encoder_encode_initializer_p (encoder,
vnode)
- && ctor_for_folding (vnode->decl) != error_mark_node)
+ && (ctor_for_folding (vnode->decl) != error_mark_node
+ || POINTER_BOUNDS_P (vnode->decl)))
{
lto_set_symtab_encoder_encode_initializer (encoder, vnode);
add_references (encoder, &vnode->ref_list);
diff --git a/gcc/lto/lto-partition.c b/gcc/lto/lto-partition.c
index 2967d73..330253b 100644
--- a/gcc/lto/lto-partition.c
+++ b/gcc/lto/lto-partition.c
@@ -96,7 +96,8 @@ add_references_to_partition (ltrans_partition part, symtab_node *node)
Recursively look into the initializers of the constant variable and add
references, too. */
else if (is_a <varpool_node> (ref->referred)
- && ctor_for_folding (ref->referred->decl) != error_mark_node
+ && (ctor_for_folding (ref->referred->decl) != error_mark_node
+ || POINTER_BOUNDS_P (ref->referred->decl))
&& !lto_symtab_encoder_in_partition_p (part->encoder, ref->referred))
{
if (!part->initializers_visited)