[Bug rtl-optimization/23837] [4.0/4.1/4.2 regression] Wrong code with REG_NO_CONFLICT notes (caused by combine)

steven at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Thu Dec 15 00:52:00 GMT 2005



------- Comment #25 from steven at gcc dot gnu dot org  2005-12-15 00:52 -------
Smarter folks than me (iant ;-) suggest that "a multi-word rotate will normally
need all the input bits when setting any of the output bits", so the entire
no-conflict thing doesn't make sense here.

So, let's not do that:

--- optabs.c    2005-12-15 01:49:23.000000000 +0100
+++ optabs.c.jj 2005-12-15 01:49:55.000000000 +0100
@@ -1525,7 +1525,14 @@ expand_binop (enum machine_mode mode, op
          else
            equiv_value = 0;

-         emit_insn (insns);
+         /* We can't make this a no conflict block if this is a word swap,
+            because the word swap case fails if the input and output values
+            are in the same register.  */
+         if (shift_count != BITS_PER_WORD)
+           emit_no_conflict_block (insns, target, op0, op1, equiv_value);
+         else
+           emit_insn (insns);
+

          return target;
        }


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23837



More information about the Gcc-bugs mailing list