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.