tree-chkp.c (chkp_compute_bounds_for_assignment): Don't reuse bounds created for...
authorIlya Enkovich <enkovich.gnu@gmail.com>
Fri, 19 Jun 2015 09:07:25 +0000 (09:07 +0000)
committerIlya Enkovich <ienkovich@gcc.gnu.org>
Fri, 19 Jun 2015 09:07:25 +0000 (09:07 +0000)
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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/tree-chkp.c

index eb37d086aee44c8c1462f0b5a32d9fa0dcc205ab..e567ed0db715eed89b8a84f778f5a8854d344977 100644 (file)
@@ -1,3 +1,8 @@
+2015-06-19  Ilya Enkovich  <enkovich.gnu@gmail.com>
+
+       * tree-chkp.c (chkp_compute_bounds_for_assignment): Don't
+       reuse bounds created for abnormal ssa names.
+
 2015-06-19  Jakub Jelinek  <jakub@redhat.com>
 
        * config/nvptx/nvptx.md (allocate_stack): Rename to...
index 9a3978b7e79e5bb81f537a75856c17ab51a0fb4b..1ca4b686ddccc348f5804bbad1f18ddf9fef92c6 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-19  Ilya Enkovich  <enkovich.gnu@gmail.com>
+
+       * gcc.target/i386/mpx/pr66581.c: New test.
+
 2015-06-18  Uros Bizjak  <ubizjak@gmail.com>
 
        * gcc.target/i386/cmov9.c: New test.
index 7ffec7b630574b7144522619e489c9d508bdfff6..4c3317af3e0e71866c96158b6a3b7bb10db17c0d 100644 (file)
@@ -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);