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

Eli Friedman eli.friedman at gmail.com
Wed Jul 14 08:26:44 PDT 2010


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?

-Eli



More information about the llvm-dev mailing list