Commit 23e4d0b3 by Kyrylo Tkachov Committed by Kyrylo Tkachov

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
parent 7b8edc29
2015-11-27 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
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.
2015-11-27 Nathan Sidwell <nathan@acm.org> 2015-11-27 Nathan Sidwell <nathan@acm.org>
* config/nvptx/nvptx-protos.h (nvptx_addr_space_from_address): * config/nvptx/nvptx-protos.h (nvptx_addr_space_from_address):
...@@ -1850,7 +1850,6 @@ insn_valid_noce_process_p (rtx_insn *insn, rtx cc) ...@@ -1850,7 +1850,6 @@ insn_valid_noce_process_p (rtx_insn *insn, rtx cc)
{ {
if (!insn if (!insn
|| !NONJUMP_INSN_P (insn) || !NONJUMP_INSN_P (insn)
|| multiple_sets (insn)
|| (cc && set_of (cc, insn))) || (cc && set_of (cc, insn)))
return false; return false;
...@@ -2177,7 +2176,7 @@ noce_try_cmove_arith (struct noce_if_info *if_info) ...@@ -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 swap insn that sets up A with the one that sets up B. If even
that doesn't help, punt. */ 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) if (tmp_b && then_bb)
{ {
FOR_BB_INSNS (then_bb, tmp_insn) FOR_BB_INSNS (then_bb, tmp_insn)
...@@ -2193,7 +2192,7 @@ noce_try_cmove_arith (struct noce_if_info *if_info) ...@@ -2193,7 +2192,7 @@ noce_try_cmove_arith (struct noce_if_info *if_info)
} }
if (emit_a || modified_in_a) 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) if (tmp_b && else_bb)
{ {
FOR_BB_INSNS (else_bb, tmp_insn) FOR_BB_INSNS (else_bb, tmp_insn)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment