[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