https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69176

--- Comment #8 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Wilco from comment #7)
> > > I think the problem is the constraints on *add<mode>3_pluslong allows all 
> > > immediates.
> > 
> > I'm not sure what you mean here - there are 4 constraints that should all be
> > true before the instruction is matched: GPI, aarch64_pluslong_immediate, 'i'
> > and "!aarch64_plus_operand (operands[2], VOIDmode) && !aarch64_move_imm
> > (INTVAL (operands[2]), <MODE>mode)".
> 
> It appears reload creates the instruction without doing the last check -
> this is incorrect as it might be an instruction that is disabled (eg. not
> supported by the selected architecture)...
> 
> However a trivial workaround is to always expand the pattern by changing the
> "&& true" into "true". I'll post a patch.

plus patterns are special to reload (this is documented IIRC). So I think there
should be only one plus pattern for DI mode.

Reply via email to