[cfe-dev] struct copy

Argiris Kirtzidis akyrtzi at gmail.com
Sun Sep 28 09:48:58 PDT 2008


Chris Lattner wrote:
>
> On Sep 28, 2008, at 4:59 AM, Argiris Kirtzidis wrote:
>
>>
>> What is wrong with having the compiler always produce a load/store ?
>
> For small structs, almost nothing!  It has the same semantics as an 
> element-by-element copy.  For large structs, you really don't want to 
> do this.
>
> The problem is that you need the same heuristic: you need to know that 
> the struct is "small" and the struct has no holes in the LLVM type 
> that some other element of the C type (e.g. through a union) contain 
> data in.

Give these types:

union U { int u1; char u2; };
struct S {
   int x1;
   char x2;
   union U u;
};

Here's what llvm-gcc produces:
    %struct.S = type { i32, i8, %struct.U }
    %struct.U = type { i32 }

Isn't this enough information for the backend to know where the holes 
are in the struct and also to deal with unions (unions considered as the 
type of the largest field) ?
Can't the backend get a load/store of a large struct and based on type 
information as the above , lower it accordingly (memcpy, field copies, 
etc..) ?

-Argiris




More information about the cfe-dev mailing list