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

--- Comment #9 from Robin Dapp <rdapp at gcc dot gnu.org> ---
(In reply to Jeffrey A. Law from comment #8)
> I don't think the !lra_in_progress works because things go wonky in IRA?
> 
> Conceptually I think you're suggesting that this whole class of patterns in
> autovec.md are not valid past split1.  But I'm not aware of any way to
> describe that (and if you are, scream as it would make some of the
> mvconst_internal and related issues simpler to solve).

Hmm, yes, that's what it amounts to I think. 

I experimented some more and even IRA hacks like "don't try equivalence
substitution if all uses of the register have no constraints" don't help.
That's because we never split again before reload and split2 is too late for
our insns (as we cannot create pseudos anymore by then).

So while we could avoid the bogus substitution, the pattern is generated too
late for it to be ever split and we'll just fail the next time we try to recog
it.

I suppose this situation can only arise with the way we (ab)use splitters in
combination with the lack of constraints.

Shamelessly asking, though :)  Why don't we split after ira?  After all we do
perform changes there.  It wouldn't be terribly elegant on one hand but on the
other hand allow us to leave all the little ira tricks in place without
touching every single insn pattern.

Reply via email to