diff options
author | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2015-10-02 08:36:45 +0000 |
---|---|---|
committer | Kyrylo Tkachov <ktkachov@gcc.gnu.org> | 2015-10-02 08:36:45 +0000 |
commit | 6b7e8671878891adcbace3de22331689b85b2ce9 (patch) | |
tree | ce4cc7ec9b7b6b5c5b2592d6b2a7c19541561908 /gcc/ifcvt.c | |
parent | c0233c783d09832f51bf67d32b919852c74621d6 (diff) | |
download | gcc-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.c | 3 |
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); |