[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?


More information about the llvm-dev mailing list