gcc/
authorienkovich <ienkovich@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 15 May 2015 09:38:44 +0000 (09:38 +0000)
committerienkovich <ienkovich@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 15 May 2015 09:38:44 +0000 (09:38 +0000)
PR middle-end/66134
* tree-chkp.c (chkp_get_orginal_bounds_for_abnormal_copy): New.
(chkp_maybe_copy_and_register_bounds): Don't copy abnormal copy.

gcc/testsuite/

PR middle-end/66134
* gcc.target/i386/mpx/pr66134.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@223215 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 8dafd1e..f446b29 100644 (file)
@@ -1,3 +1,9 @@
+2015-05-15  Ilya Enkovich  <enkovich.gnu@gmail.com>
+
+       PR middle-end/66134
+       * tree-chkp.c (chkp_get_orginal_bounds_for_abnormal_copy): New.
+       (chkp_maybe_copy_and_register_bounds): Don't copy abnormal copy.
+
 2015-05-15  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * config/aarch64/aarch64.h (AARCH64_TUNE_SLOWMUL): Delete.
index 8c71bd5..9bd5b5e 100644 (file)
@@ -1,3 +1,8 @@
+2015-05-15  Ilya Enkovich  <enkovich.gnu@gmail.com>
+
+       PR middle-end/66134
+       * gcc.target/i386/mpx/pr66134.c: New test.
+
 2015-05-14  Rohit Arul Raj  <rohitrulraj@freescale.com>
 
        * gcc.target/powerpc/pr60158.c: New test.
index 288470b..17a52bc 100644 (file)
@@ -1097,7 +1097,20 @@ chkp_get_bounds_var (tree ptr_var)
   return bnd_var;
 }
 
+/* If BND is an abnormal bounds copy, return a copied value.
+   Otherwise return BND.  */
+static tree
+chkp_get_orginal_bounds_for_abnormal_copy (tree bnd)
+{
+  if (bitmap_bit_p (chkp_abnormal_copies, SSA_NAME_VERSION (bnd)))
+    {
+      gimple bnd_def = SSA_NAME_DEF_STMT (bnd);
+      gcc_checking_assert (gimple_code (bnd_def) == GIMPLE_ASSIGN);
+      bnd = gimple_assign_rhs1 (bnd_def);
+    }
 
+  return bnd;
+}
 
 /* Register bounds BND for object PTR in global bounds table.
    A copy of bounds may be created for abnormal ssa names.
@@ -1141,11 +1154,7 @@ chkp_maybe_copy_and_register_bounds (tree ptr, tree bnd)
       /* For abnormal copies we may just find original
         bounds and use them.  */
       if (!abnormal_ptr && !SSA_NAME_IS_DEFAULT_DEF (bnd))
-       {
-         gimple bnd_def = SSA_NAME_DEF_STMT (bnd);
-         gcc_checking_assert (gimple_code (bnd_def) == GIMPLE_ASSIGN);
-         bnd = gimple_assign_rhs1 (bnd_def);
-       }
+       bnd = chkp_get_orginal_bounds_for_abnormal_copy (bnd);
       /* For undefined values we usually use none bounds
         value but in case of abnormal edge it may cause
         coalescing failures.  Use default definition of
@@ -1177,6 +1186,7 @@ chkp_maybe_copy_and_register_bounds (tree ptr, tree bnd)
            copy = make_temp_ssa_name (pointer_bounds_type_node,
                                       gimple_build_nop (),
                                       CHKP_BOUND_TMP_NAME);
+         bnd = chkp_get_orginal_bounds_for_abnormal_copy (bnd);
          assign = gimple_build_assign (copy, bnd);
 
          if (dump_file && (dump_flags & TDF_DETAILS))