On Sun, Feb 10, 2019 at 10:42:55AM +0100, Christophe Lyon wrote:
> > 2019-02-08  Jakub Jelinek  <ja...@redhat.com>
> >
> >         PR bootstrap/88714
> >         * config/arm/ldrdstrd.md (*arm_ldrd, *arm_strd): Use q constraint
> >         instead of r.
> >
> 
> Both this simple patch or the previous fix all the ICEs I reported, thanks.
> 
> Of course, the scan-assembler failures remain to be fixed.

Thanks.  Is the patch ok for trunk then (which one)?

There is yet another variant I guess, using =q constraint just on the
operand 0, because valid_operands_ldrd_strd requires that the first reg
is even and second one higher and as the only difference between q and r
(CORE_REGS vs. GENERAL_REGS) is the ip register which has regno 12, the
second operand must not be ip anyway.

> > --- gcc/config/arm/ldrdstrd.md.jj       2019-02-08 11:25:42.368916124 +0100
> > +++ gcc/config/arm/ldrdstrd.md  2019-02-08 12:38:33.647585108 +0100
> > @@ -157,9 +157,9 @@ (define_peephole2 ; swap the destination
> >  ;; We use gen_operands_ldrd_strd() with a modify argument as false so that 
> > the
> >  ;; operands are not changed.
> >  (define_insn "*arm_ldrd"
> > -  [(parallel [(set (match_operand:SI 0 "s_register_operand" "=r")
> > +  [(parallel [(set (match_operand:SI 0 "s_register_operand" "=q")
> >                    (match_operand:SI 2 "memory_operand" "m"))
> > -             (set (match_operand:SI 1 "s_register_operand" "=r")
> > +             (set (match_operand:SI 1 "s_register_operand" "=q")
> >                    (match_operand:SI 3 "memory_operand" "m"))])]
> >    "TARGET_LDRD && TARGET_ARM && reload_completed
> >    && valid_operands_ldrd_strd (operands, true)"
> > @@ -178,9 +178,9 @@ (define_insn "*arm_ldrd"
> >
> >  (define_insn "*arm_strd"
> >    [(parallel [(set (match_operand:SI 2 "memory_operand" "=m")
> > -                  (match_operand:SI 0 "s_register_operand" "r"))
> > +                  (match_operand:SI 0 "s_register_operand" "q"))
> >               (set (match_operand:SI 3 "memory_operand" "=m")
> > -                  (match_operand:SI 1 "s_register_operand" "r"))])]
> > +                  (match_operand:SI 1 "s_register_operand" "q"))])]
> >    "TARGET_LDRD && TARGET_ARM && reload_completed
> >    && valid_operands_ldrd_strd (operands, false)"
> >    {

        Jakub

Reply via email to