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.