aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-chkp.c
diff options
context:
space:
mode:
authorIlya Enkovich <enkovich.gnu@gmail.com>2015-06-19 09:07:25 +0000
committerIlya Enkovich <ienkovich@gcc.gnu.org>2015-06-19 09:07:25 +0000
commitb1668acb81d27e9e4e33ad4920bfba1449413c64 (patch)
tree71a92cd18103e052073a050ef7c9b6225dacd27a /gcc/tree-chkp.c
parent9faf9a56c9da010635712da0d2574b6e399034e0 (diff)
downloadgcc-b1668acb81d27e9e4e33ad4920bfba1449413c64.zip
gcc-b1668acb81d27e9e4e33ad4920bfba1449413c64.tar.gz
gcc-b1668acb81d27e9e4e33ad4920bfba1449413c64.tar.bz2
tree-chkp.c (chkp_compute_bounds_for_assignment): Don't reuse bounds created for abnormal ssa names.
gcc/ * tree-chkp.c (chkp_compute_bounds_for_assignment): Don't reuse bounds created for abnormal ssa names. gcc/testsuite/ * gcc.target/i386/mpx/pr66581.c: New test. From-SVN: r224643
Diffstat (limited to 'gcc/tree-chkp.c')
-rw-r--r--gcc/tree-chkp.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c
index 7ffec7b..4c3317a 100644
--- a/gcc/tree-chkp.c
+++ b/gcc/tree-chkp.c
@@ -2526,6 +2526,7 @@ chkp_compute_bounds_for_assignment (tree node, gimple assign)
tree rhs1 = gimple_assign_rhs1 (assign);
tree bounds = NULL_TREE;
gimple_stmt_iterator iter = gsi_for_stmt (assign);
+ tree base = NULL;
if (dump_file && (dump_flags & TDF_DETAILS))
{
@@ -2552,6 +2553,7 @@ chkp_compute_bounds_for_assignment (tree node, gimple assign)
case INTEGER_CST:
/* Bounds are just propagated from RHS. */
bounds = chkp_find_bounds (rhs1, &iter);
+ base = rhs1;
break;
case VIEW_CONVERT_EXPR:
@@ -2622,6 +2624,8 @@ chkp_compute_bounds_for_assignment (tree node, gimple assign)
(e.g. pointer minus pointer). In such case
use default invalid op bounds. */
bounds = chkp_get_invalid_op_bounds ();
+
+ base = (bounds == bnd1) ? rhs1 : (bounds == bnd2) ? rhs2 : NULL;
}
break;
@@ -2717,6 +2721,19 @@ chkp_compute_bounds_for_assignment (tree node, gimple assign)
gcc_assert (bounds);
+ /* We may reuse bounds of other pointer we copy/modify. But it is not
+ allowed for abnormal ssa names. If we produced a pointer using
+ abnormal ssa name, we better make a bounds copy to avoid coalescing
+ issues. */
+ if (base
+ && TREE_CODE (base) == SSA_NAME
+ && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (base))
+ {
+ gimple stmt = gimple_build_assign (chkp_get_tmp_reg (NULL), bounds);
+ gsi_insert_after (&iter, stmt, GSI_SAME_STMT);
+ bounds = gimple_assign_lhs (stmt);
+ }
+
if (node)
bounds = chkp_maybe_copy_and_register_bounds (node, bounds);