[cfe-dev] Passing StructType arguments directly

Chris Lattner clattner at apple.com
Wed Sep 21 23:09:04 PDT 2011


On Sep 21, 2011, at 2:06 PM, David Meyer wrote:

> Chris,
> 
> If we simply flatten the aggregates in the frontend, we lose type
> information. This makes it harder to satisfy the platform ABI.
> Keepings things as FCA is not perfect, but it does preserve more type
> information. With the signature you mentioned, for example on X86-64,
> whether or not "x.1" and "x.2" should be passed together in %rdi or
> passed separately in %edi/%esi depends on knowing that they came from
> the same structure.

I don't get it.  You're telling me two contradictory things:

1. You want target independent code coming out of the front end.
2. You want to match the target ABI.

Which is it?

-Chris

> 
> We've considered using a special naming convention, which we could use
> to recover the aggregate structure in the target backend. For example,
> "i32 %struct.x.0, i32 %struct.x.1, i32 %struct.x.2". We could then do
> the target-specific ABI lowering at the start of llc. This would
> require some ingenuity to figure out how accurately represent nested
> structs and unions, and some modifications to opt to avoid stripping
> the special naming.
> 
> On the other hand, it would be so much nicer for us if bitcode adapted
> a convention for doing this already, instead of us having to roll and
> maintain our own method.
> 
> This is why I like the idea of adding an extended type system to
> bitcode. To satisfy ABI requirements, extended types (like struct and
> union) would only need to exist in function signatures and as function
> arguments. They don't need to be completely first-class objects
> throughout all of bitcode. They could be implicitly split into
> individual elements at the start of a function, and explicitly created
> at call sites.
> 
> - David




More information about the cfe-dev mailing list