[llvm-dev] Dealing with illegal operand mappings in RegBankSelect (original) (raw)

Matt Arsenault via llvm-dev llvm-dev at lists.llvm.org
Tue Feb 26 16:58:40 PST 2019


On Feb 26, 2019, at 7:46 PM, Quentin Colombet <qcolombet at apple.com> wrote:

The only use I would have for the copy is as as a means of passing which registers were already created for the new mapping, after which point I would need to delete it. Could you describe in pseudo code what the expansion of vgpr into sgpr looks like? e.g., = use vgpr And you only support = use sgpr

It’s serializing the vector operation. There’s an additional optimization to reduce the number of loop iterations when multiple work items/lanes/threads have the same value in them which happens in practice, but essentially it does:

Save Execution Mask For (Lane : Wavefront/Warp) { Enable Lane, Disable all other lanes SGPR = read SGPR value for current lane from VGPR VGPRResult[Lane] = use_op SGPR } Restore Execution Mask

Eventually it might be nice to have optimizations to only emit one of these loops when multiple consecutive instructions need the same register handled (which I suspect will happen frequently with image samplers), but I haven’t really thought about what that should look like yet.

-Matt -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190226/589014a5/attachment.html>



More information about the llvm-dev mailing list