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