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