aboutsummaryrefslogtreecommitdiff
path: root/gcc/ifcvt.c
diff options
context:
space:
mode:
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>2015-11-27 14:39:34 +0000
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>2015-11-27 14:39:34 +0000
commit23e4d0b369627a6131babcff43226b7de740b312 (patch)
tree1d8eb697b2a3c4da967ed15ad3ad7651d5d00854 /gcc/ifcvt.c
parent7b8edc29892b1caae4a5a83b9316ac240c376758 (diff)
downloadgcc-23e4d0b369627a6131babcff43226b7de740b312.zip
gcc-23e4d0b369627a6131babcff43226b7de740b312.tar.gz
gcc-23e4d0b369627a6131babcff43226b7de740b312.tar.bz2
Fix FAIL: gcc.c-torture/execute/20050124-1.c -O2 (internal compiler error)
Revert 2015-11-27 Kyrylo Tkachov <kyrylo.tkachov@arm.com> * ifcvt.c (insn_valid_noce_process_p): Reject insn if it satisfies multiple_sets. (noce_try_cmove_arith): Add checking asserts that orig_a and orig_b are not modified by the final modified insns in the basic blocks. From-SVN: r231019
Diffstat (limited to 'gcc/ifcvt.c')
-rw-r--r--gcc/ifcvt.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
index c995b0f..8ece873 100644
--- a/gcc/ifcvt.c
+++ b/gcc/ifcvt.c
@@ -1850,7 +1850,6 @@ insn_valid_noce_process_p (rtx_insn *insn, rtx cc)
{
if (!insn
|| !NONJUMP_INSN_P (insn)
- || multiple_sets (insn)
|| (cc && set_of (cc, insn)))
return false;
@@ -2177,7 +2176,7 @@ noce_try_cmove_arith (struct noce_if_info *if_info)
swap insn that sets up A with the one that sets up B. If even
that doesn't help, punt. */
- gcc_checking_assert (!emit_a || !modified_in_p (orig_b, emit_a));
+ modified_in_a = emit_a != NULL_RTX && modified_in_p (orig_b, emit_a);
if (tmp_b && then_bb)
{
FOR_BB_INSNS (then_bb, tmp_insn)
@@ -2193,7 +2192,7 @@ noce_try_cmove_arith (struct noce_if_info *if_info)
}
if (emit_a || modified_in_a)
{
- gcc_checking_assert (!emit_b || !modified_in_p (orig_a, emit_b));
+ modified_in_b = emit_b != NULL_RTX && modified_in_p (orig_a, emit_b);
if (tmp_b && else_bb)
{
FOR_BB_INSNS (else_bb, tmp_insn)