On Wed, Nov 28, 2018 at 12:38 PM Richard Sandiford
<richard.sandif...@arm.com> wrote:
>
> Uros Bizjak <ubiz...@gmail.com> writes:
> > diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
> > index 21bdcdaeaa35..691e0c7c1b0b 100644
> > --- a/gcc/cfgexpand.c
> > +++ b/gcc/cfgexpand.c
> > @@ -2981,6 +2981,14 @@ expand_asm_stmt (gasm *stmt)
> >                          regname);
> >                   return;
> >                 }
> > +             else if (!in_hard_reg_set_p
> > +                      (accessible_reg_set, reg_raw_mode[reg], reg))
> > +               {
> > +                 /* ??? Diagnose during gimplification?  */
> > +                 error ("the register %qs cannot be clobbered in %<asm%>"
> > +                        " for the current target", regname);
> > +                 return;
> > +               }
> >
> >               SET_HARD_REG_BIT (clobbered_regs, reg);
> >               rtx x = gen_rtx_REG (reg_raw_mode[reg], reg);
>
> There's an argument that clobbering an inaccessible register should
> simply be a no-op, so that e.g. you can describe a syscall ABI's effect
> on FP registers without having to check whether FP registers are
> disabled.  But if an asm explicitly uses the clobbered register,
> it would be surprising not to at least warn.  Since we can't reliably
> distinguish the two cases, I agree going for the safest is best.
>
> So OK (for GCC 10, like you say) if no-one objects in the meantime.

Now committed.

Uros.

Reply via email to