[PATCH] D124387: AMDGPU: Fold out readfirstlane between vgpr to vgpr copies

Brian Sumner via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 25 13:29:48 PDT 2022


b-sumner added inline comments.


================
Comment at: llvm/lib/Target/AMDGPU/SIFoldOperands.cpp:1858
+        //
+        // => %2 = COPY %0
+        //
----------------
arsenm wrote:
> b-sumner wrote:
> > foad wrote:
> > > This transformation only makes sense if you know that %0 is uniform. I think @nhaehnle has suggested introducing a "readanylane" pseudo and/or intrinsic for that kind of use case.
> > > 
> > > I'm not sure if there is any existing code that deliberately uses readfirstlane on a non-uniform argument, but if there is then this will break it.
> > We use readfirstlane to "elect" a value from the currently active lines.  The argument is likely not uniform, and breaking such code would be problematic.
> I thought this was wrong at first but don't see where the problem is. If you're reading the value back into a VGPR with the same exec mask at a later point, where is the difference? At the copy to VGPR, you're copying the from the same lane
This use of readfirstlane is broadcasting the value in the elected lane (.e. the first lane) to all other active lanes.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124387/new/

https://reviews.llvm.org/D124387



More information about the llvm-commits mailing list