[clang] [llvm] [LLVM] Fix incorrect alignment on AMDGPU variadics (PR #96370)

Matt Arsenault via cfe-commits cfe-commits at lists.llvm.org
Tue Jun 25 05:10:46 PDT 2024


arsenm wrote:

> > > > Incrementing by align is just a bug, of course the size is the real value. Whether we want to continue wasting space is another not-correctness discussion
> > > 
> > > 
> > > Struct padding is pretty universal, AMDGPU seems the odd one out here. I wouldn't mind it so much if it didn't require me to know which vendor I was dealing with in the RPC implementation, but I suppose I could store that information somewhere if we want to use a compressed option and we know it works.
> > 
> > 
> > It's not about struct padding, but the base alignment. Any pointer increment should be alignTo(ptr + size, align), not += align. The += align won't even work for large structs
> 
> Hm, that's what I'm doing in the `printf` implementation and it doesn't work without that patch. When I look at the varargs struct it didn't have any padding, which explained why `alignTo(ptr + size, align)` was wrong. So, I was trying to do the following, `printf("%d%ld", 1, 1l)`. With this patch I get the following,

For what IR? Is the small struct getting expanded into individual scalar pieces? 

https://github.com/llvm/llvm-project/pull/96370


More information about the cfe-commits mailing list