[RTL-ifcvt] Reject insns that are multiple_sets
* 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: r231004
This commit is contained in:
parent
14af28ba5a
commit
4d7b2a8a3b
|
@ -1,3 +1,10 @@
|
|||
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.
|
||||
|
||||
2015-11-27 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
PR rtl-optimization/68506
|
||||
|
|
|
@ -1850,6 +1850,7 @@ 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;
|
||||
|
||||
|
@ -2176,7 +2177,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. */
|
||||
|
||||
modified_in_a = emit_a != NULL_RTX && modified_in_p (orig_b, emit_a);
|
||||
gcc_checking_assert (!emit_a || !modified_in_p (orig_b, emit_a));
|
||||
if (tmp_b && then_bb)
|
||||
{
|
||||
FOR_BB_INSNS (then_bb, tmp_insn)
|
||||
|
@ -2192,7 +2193,7 @@ noce_try_cmove_arith (struct noce_if_info *if_info)
|
|||
}
|
||||
if (emit_a || modified_in_a)
|
||||
{
|
||||
modified_in_b = emit_b != NULL_RTX && modified_in_p (orig_a, emit_b);
|
||||
gcc_checking_assert (!emit_b || !modified_in_p (orig_a, emit_b));
|
||||
if (tmp_b && else_bb)
|
||||
{
|
||||
FOR_BB_INSNS (else_bb, tmp_insn)
|
||||
|
|
Loading…
Reference in New Issue