Re: Additional peephole pass(es)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi!

On Tue, Apr 21, 2020 at 02:34:09AM +0900, Oleg Endo wrote:
> Yeah, it's true, combine doesn't catch every possible combination and
> the canonical form is also sometimes questionable.

Yeah.  Bug reports welcome!

This isn't "canonical" usually; but all targets depend more or less on
what insns combine used to generate.  Even for comparably tiny changes
(that are a net good thing for all targets!) people become very unhappy
already, so yeah it is some kinf of "de facto" canonical: but it is not
that we promised this is the form we would use, and it is not that we
think this is the best and we should not change it; the problem just is
inertia.

> You can add
> additional passes in the backend as you like.  If a particular
> additional pass for a particular backend results in significant
> improvements in code quality or such, then why not?
> 
> You can also do "manual combine" of certain insns in the split1 pass
> that runs after combine.  For some examples you can browse through the
> SH backend.

In combine itself runs split as well (one insn to two).  And you can
add instruction patterns to your machine description that are only there
for combine: you split them to separate insns immediately again (maybe
this is what you meant though?)

> The problem with peepholes is that they tend to break easily because
> they depend on insn order.  If something else in the compiler decides
> to insert insns between two related insns, peephole patterns usually
> break.

Another big problem is that it is very, very hard to write a *correct*
(non-trivial) peephole2.


Segher



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux