On Thu, 17 Sep 2015, Segher Boessenkool wrote: > On Thu, Sep 17, 2015 at 09:18:42AM -0500, Bill Schmidt wrote: > > On Thu, 2015-09-17 at 09:39 +0200, Richard Biener wrote: > > > So just to clarify - you need to reduce the vector with max to a scalar > > > but want the (same) result in all vector elements? > > > > Yes. Alan Hayward's cond-reduction patch is set up to perform a > > reduction to scalar, followed by a scalar broadcast to get the value > > into all positions. It happens that our most efficient expansion to > > reduce to scalar will naturally produce the value in all positions. > > It also is many insns after expand, so relying on combine to combine > all that plus the following splat (as Richard suggests below) is not > really going to work. > > If there also are targets where the _scal version is cheaper, maybe > we should keep both, and have expand expand to whatever the target > supports?
Wait .. so you don't actually have an instruction to do, say, REDUC_MAX_EXPR (neither to scalar nor to vector)? Then it's better to _not_ define such pattern and let the vectorizer generate its fallback code. If the fallback code isn't "best" then better think of a way to make it choose the best variant out of its available ones (and maybe add another). I think it tests availability of the building blocks for the variants and simply picks the first that works without checking the cost model. Richard. > > Segher > > -- Richard Biener <rguent...@suse.de> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)