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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits