Fix FAIL: gcc.c-torture/execute/20050124-1.c -O2 (internal compiler error)
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Fri, 27 Nov 2015 14:39:34 +0000 (14:39 +0000)
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>
Fri, 27 Nov 2015 14:39:34 +0000 (14:39 +0000)
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

gcc/ChangeLog
gcc/ifcvt.c

index 9e61bd6967a5a37d6fbb6ccc7b2228886dbf7055..fb519990fa9b884541b18f82f48aae227d20862c 100644 (file)
@@ -1,3 +1,13 @@
+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>
 
        * config/nvptx/nvptx-protos.h (nvptx_addr_space_from_address):
index c995b0fe5c4810a4bbcd4908975fee963b207659..8ece8734338c38881254c0fe6f71659f807719d3 100644 (file)
@@ -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)