From: Chris Lattner
+An "up reference" allows you to refer to a lexically enclosing type without +requiring it to have a name. For instance, a structure declaration may contain a +pointer to any of the types it is lexically a member of. Example of up +references (with their equivalent as named type declarations) include:
+ +
+ { \2 * } %x = type { %t* }
+ { \2 }* %y = type { %y }*
+ \1* %z = type %z*
+
+
++An up reference is needed by the asmprinter for printing out cyclic types when +there is no declared name for a type in the cycle. Because the asmprinter does +not want to print out an infinite type string, it needs a syntax to handle +recursive types that have no names (all names are optional in llvm IR). +
+ ++ \<level> ++ +
+The level is the count of the lexical type that is being referred to. +
+ +| \1* | +Self-referential pointer. | +
| { { \3*, i8 }, i32 } | +Recursive structure where the upref refers to the out-most + structure. | +