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

Eli Friedman eli.friedman at gmail.com
Wed Jul 14 08:54:30 PDT 2010


On Wed, Jul 14, 2010 at 8:33 AM, Andrew Lenharth <andrewl at lenharth.org> wrote:
> 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?

Irrelevant here; the struct in question only has 4 byte alignment.

-Eli



More information about the llvm-dev mailing list