[PATCH] D97915: [Coroutines] Handle overaligned frame allocation
Yuanfang Chen via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 17 12:42:21 PDT 2021
ychen added a comment.
In D97915#2632493 <https://reviews.llvm.org/D97915#2632493>, @lxfind wrote:
> I am not sure how this would work, maybe I am missing something.
> But this patch tries to round up the frame pointer by looking at the difference between the alignment of new and the alignment of the frame.
> The alignment of new only gives you the guaranteed alignment for new, but not necessarily the maximum alignment, e.g. if the alignment of new is 16, the returned pointer can still be a multiple 32. And that difference matters.
>
> Let's consider a frame that only has the two pointers and a promise with alignment requirement of 64. The alignment of new is 16.
> Now you will calculate the difference to be 48, and create a padding of 48 before the frame:
> But if the returned pointer from new is actually a multiple of 32 (but not 64), the frame will no longer be aligned to 64 (but (32 + 48) % 64 = 16).
48 is the maximal possible adjustment needed. For this particular case, `EmitBuiltinAlignTo` would make the real adjustment 32 since (32 + 32) % 64 == 0.
> So from what I can tell, if we cannot pass alignment to new, we need to look at the address returned by new dynamically to decide the padding.
Indeed, that's what `EmitBuiltinAlignTo` is for.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D97915/new/
https://reviews.llvm.org/D97915
More information about the llvm-commits
mailing list