"Robin Dapp" <[email protected]> writes:
>> Could be, but even if it's not: OImode is easy.  We can just split 
>> into
>> TImode bits and those would work.  Target-independent code doesn't have
>> the quandry that it had with TImode.
>
> As expected, with separate target expanders and dedicated spill code for 
> affected subregs, things fall into their place.

Do you mean that you add OImode patterns?  I don't think that should
be necessary.  Like I say, I think it'd be reasonable for emit_move_insn
to split into TImode pieces.

I can try to have a go at that in the next week or two.

> There's just one ICE 
> from before left in simplify_subreg_concatn (gcc.dg/pr44136.c).  It can 
> be fixed by:
>
> @@ -762,6 +779,10 @@ resolve_subreg_p (rtx x)
>  {
>    if (GET_CODE (x) != SUBREG)
>      return false;
> +  /* We can only resolve the subreg if it is splittable.  */
> +  if (maybe_lt ((unsigned) UNITS_PER_WORD,
> +               (poly_uint64) REGMODE_NATURAL_SIZE (GET_MODE (x))))
> +    return false;
>    return resolve_reg_p (SUBREG_REG (x));
>  }
>
> Is that reasonable on top of what we converged on?  (Bootstrap, regtest
> look good)  If so, I'll send out the new version, maybe CC'ing Tamar for
> the aarch64 bits.

That doesn't look right.  The CONCATNs are generated by the pass itself
and can't be left as-is.  The failure path for !resolve_subreg_p is
also different from the failure path for !simplify_subreg_concatn.

So it feels like the problem is elsewhere to me.

Richard

Reply via email to