[LLVMdev] different layout of structs for llc vs. llvm-gcc

Andrew Lenharth andrewl at lenharth.org
Wed Jul 14 08:33:08 PDT 2010


On Wed, Jul 14, 2010 at 10:26 AM, Eli Friedman <eli.friedman at gmail.com> wrote:
> On Wed, Jul 14, 2010 at 3:20 AM, Torvald Riegel
> <torvald at se.inf.tu-dresden.de> wrote:
>> On Tuesday 13 July 2010 19:48:25 you wrote:
>>> On Tue, Jul 13, 2010 at 10:09 AM, Torvald Riegel
>>> > I thought that the layout of structs was supposed to be preserved (wrong
>>> > assumption?). Otherwise, any ideas why this happens?
>>>
>>> It should be preserved in general;
>>
>> Is this a "should" or a "must"? Are there any cases in which structure layout
>> must be preserved besides for volatile accesses and if the data goes out to
>> external code?
>
> LLVM generally doesn't attempt to preserve the layout of structs which
> aren't externally visible or used by a volatile load/store.
>
>> I've seen code like the one above quite often to put data on different
>> cachelines, so even if it's a "should" and not a "must" it might be good to
>> preserve the padding. Otherwise, is there a portable way to ensure that
>> globals end up on a separate cacheline (without making all accesses to them
>> volatile)?
>
> I can't think of any way of doing it without essentially trying to
> trick the compiler... although there are many ways to trick LLVM.
>
> Anyone else have ideas?

Is alignment on a field propagated when the struct is split up?

Andrew



More information about the llvm-dev mailing list