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.

Reply via email to