[PATCH] D117890: [LangRef] Require elementtype attribute for gc.statepoint intrinsic
Philip Reames via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 31 11:09:18 PST 2022
reames accepted this revision.
reames added a comment.
This revision is now accepted and ready to land.
Ok, I got back to this today. Short version, Nikita was right all along, and this patch is now LGTM.
Longer version...
I landed 57cf29a <https://reviews.llvm.org/rG57cf29ac1bc5d0a5e20a7262111c3d3463113c47> and 6e4f7c08 <https://reviews.llvm.org/rG6e4f7c08230be1e58dbbe4f6c672b3bf3bc9f357> which removed two uses of getActualReturnType. These two are safe to drive from the type of the gc.result, since the code is unreachable if there isn't a gc.result present.
However, the remaining case can't be removed. Specifically, we need to know the result type to know which phys regs are being clobbered by the call; that's a function of calling convention and call site signature (i.e. return type).
Given that, we have two options:
1. Require that the optimize preserve a gc.result if initially present. This requires us not to recognize such calls as dead, and generally complicates the code to preserve optimizations we get for "free" today.
2. We find a way to express the type in the callsite again.
This patch implements (2), and does so in what appears to be a newly idiomatic way for opaque pointers. (I'd missed that previously.) As such, this looks like an utterly reasonable solution.
@nikic, are you going to follow up with the code changes to RS4GC and the IRBuilder interface? Or would you like me to do so?
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D117890/new/
https://reviews.llvm.org/D117890
More information about the llvm-commits
mailing list