[PATCH] D49248: [TargetLowering] Add support for non-uniform vectors to BuildUDIV

Eli Friedman via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 3 12:52:22 PDT 2018


efriedma added inline comments.


================
Comment at: lib/CodeGen/SelectionDAG/TargetLowering.cpp:3567
+    if (VT.isVector()) {
+      Q = DAG.getVectorShuffle(VT, dl, Q, NPQ, ShuffleMask);
+      Created->push_back(Q.getNode());
----------------
RKSimon wrote:
> RKSimon wrote:
> > RKSimon wrote:
> > > efriedma wrote:
> > > > I'm pretty sure this isn't the most efficient way to handle this case.  Would it be more efficient to use a variable-amount shift to compute NPQ, rather than shuffle afterwards?  Or is it possible to fudge the magic number to avoid the blend?
> > > > 
> > > > Please make sure you have test coverage for both UseNPQ=true and UseNPQ=false.
> > > We do have full coverage for scalars and uniform vectors only - I'll try to add all the necessary non-uniform cases as well.
> > Tests now ensure we have vector cases with all/none/some NPQ path
> > I'm pretty sure this isn't the most efficient way to handle this case. Would it be more efficient to use a variable amount shift to compute NPQ, rather than shuffle afterwards? Or is it possible to fudge the magic number to avoid the blend?
> 
> @efriedma  I haven't found anything that works any better then the current shuffle - the additional SUB and ADD seem to get in the way - do you have a codegen example of what you have in mind?
> 
By "variable amount shift", I was thinking of something like VPSUB+VPSRLVD+VPADD: if the shift amount is zero, it's a no-op.

The other thing I was thinking is that it might be possible to transform the magic number for an element so that SelNPQ is true for all the elements by shifting magics.a left?  Not sure if that actually works.


Repository:
  rL LLVM

https://reviews.llvm.org/D49248





More information about the llvm-commits mailing list