> What do you think we should relax it to though?  Obviously there's a balance
> here between relaxing things enough and not relaxing them too far (so that
> the EImode AArch64 thing I mentioned is still a noisy failure, for
> example). ISTM the patch deals with the only significant case that is
> obviously safe for modes that are not a power of 2 in size.

Apparently the change wants to accept general subregs with not only modes 
whose sizes are multiple of each other but also whose sizes are multiple of a 
common large enough value.  That clearly goes against:

  /* This should always pass, otherwise we don't know how to verify
     the constraint.  These conditions may be relaxed but
     subreg_regno_offset would need to be redesigned.  */
  gcc_assert ((GET_MODE_SIZE (xmode) % GET_MODE_SIZE (ymode)) == 0);
  gcc_assert ((nregs_xmode % nregs_ymode) == 0);

so I think that we should formulate the new requirement and implement it in 
the main part of the function, instead of adding it as a kludge.

> If you're saying that the condition itself is OK, but that the code should
> be further down in the function, then I don't think that would gain much.
> We already have early-outs for the simple cases, such as:

Right, but they are more of special cases and this one is not.

-- 
Eric Botcazou

Reply via email to