[LLVMbugs] [Bug 1278] NEW: struct layout suboptimality
bugzilla-daemon at cs.uiuc.edu
bugzilla-daemon at cs.uiuc.edu
Mon Mar 26 18:17:55 PDT 2007
http://llvm.org/bugs/show_bug.cgi?id=1278
Summary: struct layout suboptimality
Product: tools
Version: trunk
Platform: All
OS/Version: All
Status: NEW
Severity: normal
Priority: P2
Component: llvm-gcc
AssignedTo: unassignedbugs at nondot.org
ReportedBy: sabre at nondot.org
On darwin ppc32, this code:
struct s {
double d1;
int s1;
};
struct s foo(void) {
struct s S = {1.1, 2};
return S;
}
Compiles "s" to type { double, i32, [4 x i8] }. There are two problems with this:
1. [4 x i8] can be int, which would be more efficient since it is just tail padding. This tail padding exists
because the struct has 8-byte alignment, but llvm thinks both double/int have 4 byte alignment. If the
padding bytes weren't made explicit, the struct would be too small.
2. CopyAggregate copies by the llvm fields even if there are no source-level fields that correspond to
them.
The end result of this is that the example compiles into:
define void @foo(%struct.s* %agg.result) {
entry:
%tmp20 = getelementptr %struct.s* %agg.result, i32 0, i32 0 ; <double*> [#uses=1]
store double 1.100000e+00, double* %tmp20
%tmp23 = getelementptr %struct.s* %agg.result, i32 0, i32 1 ; <i32*> [#uses=1]
store i32 2, i32* %tmp23
%tmp28 = getelementptr %struct.s* %agg.result, i32 0, i32 2, i32 0 ; <i8*> [#uses=1]
store i8 0, i8* %tmp28
%tmp31 = getelementptr %struct.s* %agg.result, i32 0, i32 2, i32 1 ; <i8*> [#uses=1]
store i8 0, i8* %tmp31
%tmp34 = getelementptr %struct.s* %agg.result, i32 0, i32 2, i32 2 ; <i8*> [#uses=1]
store i8 0, i8* %tmp34
%tmp37 = getelementptr %struct.s* %agg.result, i32 0, i32 2, i32 3 ; <i8*> [#uses=1]
store i8 0, i8* %tmp37
ret void
}
Note that the 4 byte stores are completely dead. If #1 were solved at least we'd have a single dead
word store :)
-Chris
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
More information about the llvm-bugs
mailing list