[LLVMdev] [patch] Union Types - work in progress
Chris Lattner
clattner at apple.com
Wed Feb 10 10:57:03 PST 2010
On Feb 9, 2010, at 4:28 PM, Talin wrote:
> ping...
Hi Talin, sorry for the delay. FWIW, it's usually best to trickle pieces of a feature in and build it up over time, otherwise your patch just gets larger and larger.
LangRef.html:
+ <dt><b>Union constants</b></dt>
+ <dd>Union constants are represented with notation similar to a structure with
+ a single element - that is, a single typed element surrounded
+ by braces (<tt>{}</tt>)). For example: "<tt>{ i32 4 }</tt>". A
+ single-element constant struct can be implicitly converted to a
+ <a href="#t_union">union type</a> as long as the type of the struct
+ element matches the type of one of the union members.</dd>
+
It's a minor point, but I'd avoid the term "implicitly converted".
Constants.cpp:
- assert(Idx->getType()->isInteger(32) &&
+ assert(Idx->getType() == Type::getInt32Ty(Val->getContext()) &&
You're reverting these changes, please don't. There are a couple instances of this.
+void ConstantUnion::replaceUsesOfWithOnConstant(Value *From, Value *To,
+ Use *U) {
+ assert(false && "Implement replaceUsesOfWithOnConstant for unions");
+}
+
Still not implemented?
+UnionType *UnionType::get(const Type *type, ...) {
+ va_list ap;
+ std::vector<const llvm::Type*> UnionFields;
+ va_start(ap, type);
Please use smallvector.
+bool UnionType::isValidElementType(const Type *ElemTy) {
+ return !ElemTy->isVoidTy() && !ElemTy->isLabelTy() &&
+ !ElemTy->isMetadataTy() && !isa<FunctionType>(ElemTy);
+}
Isn't there a better predicate somewhere?
+LLVMTypeRef LLVMUnionTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
+ unsigned ElementCount) {
+ std::vector<const Type*> Tys;
+ for (LLVMTypeRef *I = ElementTypes,
+
indentation of unsigned and use smallvector.
+/// ParseUnionType
+/// TypeRec
+/// ::= 'union' '{' '}'
+/// ::= 'union' '{' TypeRec (',' TypeRec)* '}'
+bool LLParser::ParseUnionType(PATypeHolder &Result) {
Unions can't be empty, so the first grammar production isn't valid.
Otherwise, it looks good, please send these updates and I will commit it for you.
-Chris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100210/a94c1c32/attachment.html>
More information about the llvm-dev
mailing list