aboutsummaryrefslogtreecommitdiff
path: root/gcc/ifcvt.c
diff options
context:
space:
mode:
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>2015-10-02 08:36:45 +0000
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>2015-10-02 08:36:45 +0000
commit6b7e8671878891adcbace3de22331689b85b2ce9 (patch)
treece4cc7ec9b7b6b5c5b2592d6b2a7c19541561908 /gcc/ifcvt.c
parentc0233c783d09832f51bf67d32b919852c74621d6 (diff)
downloadgcc-6b7e8671878891adcbace3de22331689b85b2ce9.zip
gcc-6b7e8671878891adcbace3de22331689b85b2ce9.tar.gz
gcc-6b7e8671878891adcbace3de22331689b85b2ce9.tar.bz2
[RTL ifcvt] PR 67786, 67787: Check that intermediate instructions in the basic block don't clobber a reg used in condition
PR rtl-optimization/67786 PR rtl-optimization/67787 * ifcvt.c (bb_valid_for_noce_process_p): Reject basic block if it modifies a reg used in the condition calculation. * gcc.dg/pr67786.c: New test. * gcc.dg/pr67787.c: Likewise. From-SVN: r228375
Diffstat (limited to 'gcc/ifcvt.c')
-rw-r--r--gcc/ifcvt.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
index 7ab738e..d0ae494 100644
--- a/gcc/ifcvt.c
+++ b/gcc/ifcvt.c
@@ -3003,7 +3003,8 @@ bb_valid_for_noce_process_p (basic_block test_bb, rtx cond,
gcc_assert (sset);
if (contains_mem_rtx_p (SET_SRC (sset))
- || !REG_P (SET_DEST (sset)))
+ || !REG_P (SET_DEST (sset))
+ || reg_overlap_mentioned_p (SET_DEST (sset), cond))
goto free_bitmap_and_fail;
potential_cost += insn_rtx_cost (sset, speed_p);