------- 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