[cfe-commits] r51673 - in /cfe/trunk: lib/CodeGen/CodeGenTypes.cpp test/CodeGen/struct-x86-darwin.c test/CodeGen/struct.c
Eli Friedman
eli.friedman at gmail.com
Thu May 29 14:29:48 PDT 2008
On Thu, May 29, 2008 at 1:24 PM, Devang Patel <dpatel at apple.com> wrote:
>
> On May 29, 2008, at 3:58 AM, Eli Friedman wrote:
>
>> Author: efriedma
>> Date: Thu May 29 05:58:49 2008
>> New Revision: 51673
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=51673&view=rev
>> Log:
>> Always use packed structs. This isn't really very nice, but there's
>> nothing fundamentally wrong with it. Emitting unpacked structs where
>> possible is more work for almost no practical benefit.
>
> It may cause performance degradation in real world.
I don't follow; this doesn't affect the alignment of loads.
>> We'll probably
>> want to fix it at some point anyway, but it's low priority.
>
> Please add FIXME in the code.
Okay, I'll do that.
>> The issue with long double in particular is that LLVM thinks an X86 long
>> double is 10 bytes, while clang considers it for all purposes to be
>> either 12 or 16 bytes, depending on the platform, even in a packed
>> struct.
>
> I expect clang and LLVM to use same target data. Is it not true ?
When LLVM packs a struct, it appears to use the tightest packing
possible, which is in fact 10 bytes for an x86 long double. The issue
is that gcc-compatible C struct layout doesn't allow packing them that
tightly (might be considered a bug, but not really something that can
be fixed at this point). Not sure how to deal with it (it doesn't
show up with types with power-of-two width).
-Eli
More information about the cfe-commits
mailing list