[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
- Previous message: [llvm-dev] Dealing with illegal operand mappings in RegBankSelect
- Next message: [llvm-dev] Dealing with illegal operand mappings in RegBankSelect
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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>
- Previous message: [llvm-dev] Dealing with illegal operand mappings in RegBankSelect
- Next message: [llvm-dev] Dealing with illegal operand mappings in RegBankSelect
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]