[LLVMdev] [PATCH] - Union types, attempt 2

Chris Lattner clattner at apple.com
Fri Jan 15 10:14:16 PST 2010

On Jan 14, 2010, at 8:27 PM, Talin wrote:

> I'm still working on the next patch, it's going somewhat slowly. I  
> wanted to create a unit test that actually created a union, and in  
> order to do that I had to implement constant unions. And rather than  
> creating a special syntax for constructing a union, I decided that  
> it was simplest to implement the insertvalue instruction for a  
> constant union expression:
>     @foo = constant union { i32, float } insertvalue union { i32,  
> float } undef, i32 4, 0
> What this says is to start with an undef, and then insert the value  
> '4' into the integer field (the zeroth field) of the union.

Insertvalue constant exprs should work on these, but that should fall  
out from insertvalue just working on unions.  However:

> The reason for doing it this way is that to construct a union, you  
> really need 4 pieces of information: The type of the union, the type  
> and value of the member to be initialized, and the index of which  
> member is being initialized. Originally I thought about having the  
> last be detected automatically by what type of initializer was used:
>     @foo = constant union { i32, float } i32 4

I think we really do need a "ConstantUnion" class.  How about syntax  
like this:

     @foo = constant union { i32, float, double, i32*, i32 } { i32 4 }

That seems simple and unambiguous, and analogous to structs.


More information about the llvm-dev mailing list