[LLVMdev] Tagged (Disjoint) Unions

Ben Chambers gtg983q at mail.gatech.edu
Wed May 3 11:00:25 PDT 2006

I have been looking through the LLVM documentation, and I have decided 
that I would be interested in producing a functional front-end for it, 
if only to determine how applicable the optimizations that it already 
performs are to such a language.  However, I have run into one obstacle 
that would make it difficult to write many of the things I would like to 
do.  Is there a way to represent a union of types in LLVM?  
Specifically, how would you suggest representing something like:

   datatype foo = NUM of int
                | PAIR of int * int
                | STRING of string

I realize I *COULD* do it as a pair of an integer tag and the data, or 
any of the numerous ways that have been devised for representing such 
types in other functional languages.  The problem that I see is that any 
optimizations for which LLVM needs types to perform would basically be 
prohibited this technique.  So, I guess what I'm asking is, is there a 
way of representing tagged union types in LLVM that doesn't prevent 
providing accurate type information?

-- Ben Chambers

More information about the llvm-dev mailing list