https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70319
Eric Botcazou <ebotcazou at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |NEW Assignee|ebotcazou at gcc dot gnu.org |unassigned at gcc dot gnu.org --- Comment #9 from Eric Botcazou <ebotcazou at gcc dot gnu.org> --- The postreload pass turns: (insn 34 33 35 3 (set (reg:DI 19 %r19 [orig:106 B1 ] [106]) (mem/c:DI (plus:DI (reg/f:DI 30 %r30) (const_int -128 [0xffffffffffffff80])) [1 B1+0 S8 A128])) pr70319.c:611 128 {*pa.md:4152} (expr_list:REG_EQUIV (mem/c:DI (plus:DI (reg/f:DI 30 %r30) (const_int -128 [0xffffffffffffff80])) [1 B1+0 S8 A128]) into (insn 34 33 35 3 (set (reg:DI 19 %r19 [orig:106 B1 ] [106]) (reg:DI 19 %r19 [orig:97 B1 ] [97])) pr70319.c:611 128 {*pa.md:4152} (expr_list:REG_EQUIV (mem/c:DI (plus:DI (reg/f:DI 30 %r30) (const_int -128 [0xffffffffffffff80])) [1 B1+0 S8 A128]) (nil))) because it doesn't know that: (insn 22 21 23 2 (set (reg:DI 28 %r28 [96]) (bswap:DI (reg:DI 19 %r19 [orig:97 B1 ] [97]))) pr70319.c:611 47 {bswapdi2} (nil)) clobbers (reg:DI 19 %r19). I think that the bswapdi2 pattern is incorrect, it must contain an explicit clobber of the source register in addition to the constraint.