On Fri, May 15, 2015 at 10:40:48PM -0400, Hans-Peter Nilsson wrote:
> I confess the test-case-"guarded" addi pattern should have been
> expressed with a shift in addition to the multiplication.
But they wouldn't ever match so they might very well have bitrotted
by now :-(
> ("In
> addition to" as the canonically wrong one used to be the
> combine-matching pattern; I'm not sure I should really drop that
> just yet.)
It is harmless to leave it in. It will rot though, eventually --
better take it out before then. Add some gcc_unreachable, perhaps.
> Supposedly more noteworthy: this now-stricter canonicalization
> leads to a requirement to rewrite patterns that used to be:
>
> (parallel
> [(set reg0 (mem (plus (mult reg1 N) reg2)))
> (set reg3 (plus (mult reg1 N) reg2))])
>
> into the awkwardly asymmetric:
>
> (parallel
> [(set reg0 (mem (plus (mult reg1 2) reg2)))
> (set reg3 (plus (ashift reg1 M) reg2))])
>
> (where M = log2 N)
Yeah. This is true of parallels in general: canonicalisation works
on each arm separately. I'm not sure what can be done about it.
Looks like quite some work for you, I'm sorry about that,
Segher