[PATCH] D139852: [amdgpu] Lower CopyToReg into SGPR explicitly to avoid illegal vgpr to sgpr copy
Jon Chesterfield via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 12 09:43:04 PST 2022
JonChesterfield added inline comments.
================
Comment at: llvm/lib/Target/AMDGPU/SIISelLowering.cpp:11916-11918
+ // CopyToReg may be writing a constant to a sgpr as part of a calling
+ // convention. If that constant is selected to a vgpr then we later need
+ // to copy it into a sgpr. Instead, special case the copying-to-sgpr here to
----------------
arsenm wrote:
> Can you teach isVGPRImm to deal with this
I don't think so.
The failing case here is where a single constant node is needed in a vgpr and in a sgpr. isVGPRImm would need to return true for one case and false for the other, but it takes the node that was CSE'd together for both.
isVGPRImm will currently return false on isSGPRClass. Guessing slightly, the idea behind isVGPRImm is to prefer to materialise in a vgpr directly? Seems reasonable if so, but interacts badly with having no general means of copying from vgpr to sgpr.
I would guess the general case involves a patch to SIFixSGPRCopies.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D139852/new/
https://reviews.llvm.org/D139852
More information about the llvm-commits
mailing list