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

Eli Friedman eli.friedman at gmail.com
Wed Jul 14 08:53:52 PDT 2010

On Wed, Jul 14, 2010 at 8: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?

Oh, something I forgot earlier: the generic "don't touch this global"
directive is "__attribute__((__used__))".


More information about the llvm-dev mailing list