From 2c1f37b57aa599b80d3be5feb8be12db1f6441c6 Mon Sep 17 00:00:00 2001 From: Ilya Enkovich Date: Fri, 15 May 2015 09:38:44 +0000 Subject: [PATCH] re PR middle-end/66134 ([CHKP] ICE: Unable to coalesce ssa_names 18 and 17 which are marked as MUST COALESCE) gcc/ 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. From-SVN: r223215 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/tree-chkp.c | 20 +++++++++++++++----- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8dafd1e6c10..f446b294406 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-05-15 Ilya Enkovich + + 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 * config/aarch64/aarch64.h (AARCH64_TUNE_SLOWMUL): Delete. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8c71bd56822..9bd5b5ec723 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-05-15 Ilya Enkovich + + PR middle-end/66134 + * gcc.target/i386/mpx/pr66134.c: New test. + 2015-05-14 Rohit Arul Raj * gcc.target/powerpc/pr60158.c: New test. diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c index 288470bbe57..17a52bca7e7 100644 --- a/gcc/tree-chkp.c +++ b/gcc/tree-chkp.c @@ -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)) -- 2.30.2