[LLVMdev] [PATCH] - Union types, attempt 2
Dustin Laurence
dllaurence at dslextreme.com
Sat Jan 16 00:21:06 PST 2010
On 01/15/2010 09:44 PM, Nick Lewycky wrote:
> Dustin Laurence wrote:
>> ...Isn't a union basically just a convenient alternate
>> interface to the various other conversion operators like bitcast,
>> inttoptr, trunc, zext, and the rest?
>
> Almost, but you're forgetting one important attribute: you can 'alloca'
> a union type and get something the size of the largest entry. This way,
> you can allocate a union of {i32, i8} and i8* without knowing in your
> frontend whether your system has 32 or 64-bit pointers. This is
> important to people who want to write fully platform neutral code in LLVM.
OK, but how does ordering an unordered "bag of alternatives" help that?
I wasn't trying to imply that union wasn't useful because you could
just use the other conversions, though I see I worded it so it sounds
that way. I just meant that the instructions for conversions seemed
like a better model for manipulating unions than structures. I suspect
it is C syntax that makes us think of structs and unions together, and I
was trying to defeat my own tendency to do that by using a different model.
The last time I felt like checking my little lisp code with it's numbers
stuffed into pairs of pointer-sized words would build on either 32 or
64-bit x86. But I commited some sins to more or less eliminate word
size dependence, at least sins against taste. Reducing the temptation
to such sin seems worthwhile. :-)
Dustin
More information about the llvm-dev
mailing list