On Fri, Mar 19, 2021 at 11:50:41PM +0800, Kewen.Lin wrote:
> > I am curious if the splitters ever triggered where they should not have?
> 
> Do you have any suggestion to catch this?  I thought the regression
> testing probably can show something different but it didn't unfortunately.

Well, you can compare the generated binaries with a compiler binary
before and after the patch, for something that will match the splitters,
so with a lot of float<->integer conversions for example.

I usually look at cc1 or vmlinux, but those both are nice for integer
code only.

Maybe we should have some tool that for every define_insn finds which
define_splits can possibly match it.

> > You might want to make this error easier to detect?  Maybe make
> > define_insn_and_split raise an error if the split condition is empty but
> > the insn condition is not?
> 
> Good idea!  Is there any possible reason to write this kind of
> define_insn_and_split?  If no (we should forbid it), I think we can add
> the check and raise an error if hits in gensupport.c.
> 
> I'll send out a RFC once GCC12 starts.

There is no good reason for it.  If you really want a
define_insn_and_split that splits more than just that insn, you should
just write the define_insn and the define_split separately.  Much
clearer that way.  A reader does not expect a define_insn_and_split to
split any other insns.  (Or they should not, IMO, of course :-) )

And yes, because that might well break things for some targets, or
change behaviour at least, it is a GCC 12 thing.  It will be a nice
cleanup though :-)


Segher

Reply via email to