[llvm-commits] [llvm] r44769 - in /llvm/trunk: bindings/ocaml/llvm/ docs/ include/llvm-c/ include/llvm/ include/llvm/Bitcode/ lib/AsmParser/ lib/Bitcode/Reader/ lib/Bitcode/Writer/ lib/Transforms/Utils/ lib/VMCore/ test/Assembler/ test/Bindings/Ocaml/ test/CodeGen/Generic/GC/

Gordon Henriksen gordonhenriksen at mac.com
Sun Dec 9 19:18:06 PST 2007


Author: gordon
Date: Sun Dec  9 21:18:06 2007
New Revision: 44769

URL: http://llvm.org/viewvc/llvm-project?rev=44769&view=rev
Log:
Adding a collector name attribute to Function in the IR. These 
methods are new to Function:

  bool hasCollector() const;
  const std::string &getCollector() const;
  void setCollector(const std::string &);
  void clearCollector();

The assembly representation is as such:

  define void @f() gc "shadow-stack" { ...

The implementation uses an on-the-side table to map Functions to 
collector names, such that there is no overhead. A StringPool is 
further used to unique collector names, which are extremely
likely to be unique per process.

Added:
    llvm/trunk/test/Assembler/2007-09-29-GC.ll
Modified:
    llvm/trunk/bindings/ocaml/llvm/llvm.ml
    llvm/trunk/bindings/ocaml/llvm/llvm.mli
    llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c
    llvm/trunk/docs/LangRef.html
    llvm/trunk/include/llvm-c/Core.h
    llvm/trunk/include/llvm/Bitcode/LLVMBitCodes.h
    llvm/trunk/include/llvm/Function.h
    llvm/trunk/lib/AsmParser/LLLexer.cpp
    llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs
    llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs
    llvm/trunk/lib/AsmParser/llvmAsmParser.y
    llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs
    llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
    llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
    llvm/trunk/lib/Transforms/Utils/CloneModule.cpp
    llvm/trunk/lib/VMCore/AsmWriter.cpp
    llvm/trunk/lib/VMCore/Core.cpp
    llvm/trunk/lib/VMCore/Function.cpp
    llvm/trunk/test/Bindings/Ocaml/vmcore.ml
    llvm/trunk/test/CodeGen/Generic/GC/alloc_loop.ll

Modified: llvm/trunk/bindings/ocaml/llvm/llvm.ml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/llvm/llvm.ml?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/bindings/ocaml/llvm/llvm.ml (original)
+++ llvm/trunk/bindings/ocaml/llvm/llvm.ml Sun Dec  9 21:18:06 2007
@@ -282,6 +282,8 @@
 external function_call_conv : llvalue -> int = "llvm_function_call_conv"
 external set_function_call_conv : int -> llvalue -> unit
                                 = "llvm_set_function_call_conv"
+external collector : llvalue -> string option = "llvm_collector"
+external set_collector : string option -> llvalue -> unit = "llvm_set_collector"
 
 (* TODO: param attrs *)
 

Modified: llvm/trunk/bindings/ocaml/llvm/llvm.mli
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/llvm/llvm.mli?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/bindings/ocaml/llvm/llvm.mli (original)
+++ llvm/trunk/bindings/ocaml/llvm/llvm.mli Sun Dec  9 21:18:06 2007
@@ -754,6 +754,15 @@
 external set_function_call_conv : int -> llvalue -> unit
                                 = "llvm_set_function_call_conv"
 
+(** [collector f] returns [Some name] if the function [f] has a garbage
+    collection algorithm specified and [None] otherwise.
+    See the method [llvm::Function::getCollector]. **)
+external collector : llvalue -> string option = "llvm_collector"
+
+(** [set_collector gc f] sets the collection algorithm for the function [f] to
+    [gc]. See the method [llvm::Function::setCollector]. **)
+external set_collector : string option -> llvalue -> unit = "llvm_set_collector"
+
 (*--... Operations on basic blocks .........................................--*)
 
 (** [basic_blocks fn] returns the basic blocks of the function [f].

Modified: llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c (original)
+++ llvm/trunk/bindings/ocaml/llvm/llvm_ocaml.c Sun Dec  9 21:18:06 2007
@@ -536,6 +536,29 @@
   return Val_unit;
 }
 
+/* llvalue -> string option */
+CAMLprim value llvm_collector(LLVMValueRef Fn) {
+  const char *Collector;
+  CAMLparam0();
+  CAMLlocal2(Name, Option);
+  
+  if ((Collector = LLVMGetCollector(Fn))) {
+    Name = copy_string(Collector);
+    
+    Option = alloc(1, 0);
+    Field(Option, 0) = Name;
+    CAMLreturn(Option);
+  } else {
+    CAMLreturn(Val_int(0));
+  }
+}
+
+/* string option -> llvalue -> unit */
+CAMLprim value llvm_set_collector(value GC, LLVMValueRef Fn) {
+  LLVMSetCollector(Fn, GC == Val_int(0)? 0 : String_val(Field(GC, 0)));
+  return Val_unit;
+}
+
 /*--... Operations on basic blocks .........................................--*/
 
 /* llvalue -> llbasicblock array */

Modified: llvm/trunk/docs/LangRef.html
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/LangRef.html?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/docs/LangRef.html (original)
+++ llvm/trunk/docs/LangRef.html Sun Dec  9 21:18:06 2007
@@ -26,6 +26,7 @@
       <li><a href="#functionstructure">Functions</a></li>
       <li><a href="#aliasstructure">Aliases</a>
       <li><a href="#paramattrs">Parameter Attributes</a></li>
+      <li><a href="#gc">Garbage Collector Names</a></li>
       <li><a href="#moduleasm">Module-Level Inline Assembly</a></li>
       <li><a href="#datalayout">Data Layout</a></li>
     </ol>
@@ -702,15 +703,16 @@
 <a href="#paramattrs">parameter attribute</a> for the return type, a function 
 name, a (possibly empty) argument list (each with optional 
 <a href="#paramattrs">parameter attributes</a>), an optional section, an
-optional alignment, an opening curly brace, a list of basic blocks, and a
-closing curly brace.  
+optional alignment, an optional <a href="gc">garbage collector name</a>, an
+opening curly brace, a list of basic blocks, and a closing curly brace.
 
 LLVM function declarations consist of the "<tt>declare</tt>" keyword, an
 optional <a href="#linkage">linkage type</a>, an optional
 <a href="#visibility">visibility style</a>, an optional 
 <a href="#callingconv">calling convention</a>, a return type, an optional
 <a href="#paramattrs">parameter attribute</a> for the return type, a function 
-name, a possibly empty list of arguments, and an optional alignment.</p>
+name, a possibly empty list of arguments, an optional alignment, and an optional
+<a href="gc">garbage collector name</a>.</p>
 
 <p>A function definition contains a list of basic blocks, forming the CFG for
 the function.  Each basic block may optionally start with a label (giving the
@@ -826,6 +828,23 @@
 
 <!-- ======================================================================= -->
 <div class="doc_subsection">
+  <a name="gc">Garbage Collector Names</a>
+</div>
+
+<div class="doc_text">
+<p>Each function may specify a garbage collector name, which is simply a
+string.</p>
+
+<div class="doc_code"><pre
+>define void @f() gc "name" { ...</pre></div>
+
+<p>The compiler declares the supported values of <i>name</i>. Specifying a
+collector which will cause the compiler to alter its output in order to support
+the named garbage collection algorithm.</p>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
   <a name="moduleasm">Module-Level Inline Assembly</a>
 </div>
 

Modified: llvm/trunk/include/llvm-c/Core.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/Core.h?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/include/llvm-c/Core.h (original)
+++ llvm/trunk/include/llvm-c/Core.h Sun Dec  9 21:18:06 2007
@@ -339,6 +339,8 @@
 unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
 unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
 void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
+const char *LLVMGetCollector(LLVMValueRef Fn);
+void LLVMSetCollector(LLVMValueRef Fn, const char *Coll);
 
 /* Operations on basic blocks */
 LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef Bb);

Modified: llvm/trunk/include/llvm/Bitcode/LLVMBitCodes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Bitcode/LLVMBitCodes.h?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Bitcode/LLVMBitCodes.h (original)
+++ llvm/trunk/include/llvm/Bitcode/LLVMBitCodes.h Sun Dec  9 21:18:06 2007
@@ -58,7 +58,9 @@
     MODULE_CODE_ALIAS       = 9,
     
     /// MODULE_CODE_PURGEVALS: [numvals]
-    MODULE_CODE_PURGEVALS   = 10
+    MODULE_CODE_PURGEVALS   = 10,
+    
+    MODULE_CODE_COLLECTORNAME = 11   // COLLECTORNAME: [strchr x N]
   };
   
   /// PARAMATTR blocks have code for defining a parameter attribute set.

Modified: llvm/trunk/include/llvm/Function.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Function.h?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Function.h (original)
+++ llvm/trunk/include/llvm/Function.h Sun Dec  9 21:18:06 2007
@@ -153,6 +153,13 @@
   /// @brief Set the parameter attributes.
   void setParamAttrs(const ParamAttrsList *attrs);
 
+  /// hasCollector/getCollector/setCollector/clearCollector - The name of the
+  /// garbage collection algorithm to use during code generation.
+  bool hasCollector() const;
+  const char *getCollector() const;
+  void setCollector(const char *Str);
+  void clearCollector();
+
   /// @brief Determine whether the function has the given attribute.
   bool paramHasAttr(uint16_t i, ParameterAttributes attr) const {
     return ParamAttrs && ParamAttrs->paramHasAttr(i, attr);

Modified: llvm/trunk/lib/AsmParser/LLLexer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLLexer.cpp?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/lib/AsmParser/LLLexer.cpp (original)
+++ llvm/trunk/lib/AsmParser/LLLexer.cpp Sun Dec  9 21:18:06 2007
@@ -468,6 +468,7 @@
   KEYWORD("module", MODULE);
   KEYWORD("asm", ASM_TOK);
   KEYWORD("sideeffect", SIDEEFFECT);
+  KEYWORD("gc", GC);
   
   KEYWORD("cc", CC_TOK);
   KEYWORD("ccc", CCC_TOK);

Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs (original)
+++ llvm/trunk/lib/AsmParser/llvmAsmParser.cpp.cvs Sun Dec  9 21:18:06 2007
@@ -216,9 +216,10 @@
      NEST = 397,
      READNONE = 398,
      READONLY = 399,
-     DEFAULT = 400,
-     HIDDEN = 401,
-     PROTECTED = 402
+     GC = 400,
+     DEFAULT = 401,
+     HIDDEN = 402,
+     PROTECTED = 403
    };
 #endif
 /* Tokens.  */
@@ -364,15 +365,16 @@
 #define NEST 397
 #define READNONE 398
 #define READONLY 399
-#define DEFAULT 400
-#define HIDDEN 401
-#define PROTECTED 402
+#define GC 400
+#define DEFAULT 401
+#define HIDDEN 402
+#define PROTECTED 403
 
 
 
 
 /* Copy the first part of user declarations.  */
-#line 14 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 14 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
 
 #include "ParserInternals.h"
 #include "llvm/CallingConv.h"
@@ -1324,7 +1326,7 @@
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 945 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 945 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
 {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
@@ -1371,8 +1373,8 @@
   llvm::ICmpInst::Predicate         IPredicate;
   llvm::FCmpInst::Predicate         FPredicate;
 }
-/* Line 187 of yacc.c.  */
-#line 1376 "llvmAsmParser.tab.c"
+/* Line 193 of yacc.c.  */
+#line 1378 "llvmAsmParser.tab.c"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -1385,7 +1387,7 @@
 
 
 /* Line 216 of yacc.c.  */
-#line 1389 "llvmAsmParser.tab.c"
+#line 1391 "llvmAsmParser.tab.c"
 
 #ifdef short
 # undef short
@@ -1435,7 +1437,7 @@
 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
 #ifndef YY_
-# if YYENABLE_NLS
+# if defined YYENABLE_NLS && YYENABLE_NLS
 #  if ENABLE_NLS
 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
@@ -1600,20 +1602,20 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  43
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1816
+#define YYLAST   1820
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  162
+#define YYNTOKENS  163
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  82
+#define YYNNTS  83
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  314
+#define YYNRULES  316
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  608
+#define YYNSTATES  611
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   402
+#define YYMAXUTOK   403
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -1625,15 +1627,15 @@
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     152,   153,   150,     2,   149,     2,     2,     2,     2,     2,
+     153,   154,   151,     2,   150,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     157,   148,   158,     2,     2,     2,     2,     2,     2,     2,
+     158,   149,   159,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   154,   151,   156,     2,     2,     2,     2,     2,   161,
+       2,   155,   152,   157,     2,     2,     2,     2,     2,   162,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     155,     2,     2,   159,     2,   160,     2,     2,     2,     2,
+     156,     2,     2,   160,     2,   161,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1661,7 +1663,7 @@
      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147
+     145,   146,   147,   148
 };
 
 #if YYDEBUG
@@ -1681,32 +1683,32 @@
      175,   177,   179,   181,   182,   184,   186,   187,   189,   191,
      193,   195,   197,   200,   202,   204,   206,   208,   210,   212,
      214,   216,   218,   219,   222,   224,   226,   228,   230,   232,
-     234,   235,   238,   239,   242,   243,   247,   250,   251,   253,
-     254,   258,   260,   263,   265,   267,   269,   271,   273,   275,
-     277,   279,   281,   284,   286,   289,   295,   301,   307,   313,
-     317,   320,   326,   331,   334,   336,   338,   340,   344,   346,
-     350,   352,   353,   355,   359,   364,   368,   372,   377,   382,
-     386,   393,   399,   402,   405,   408,   411,   414,   417,   420,
-     423,   426,   429,   432,   435,   442,   448,   457,   464,   471,
-     479,   487,   494,   503,   512,   516,   518,   520,   522,   524,
-     525,   528,   535,   537,   538,   540,   543,   544,   548,   549,
-     553,   557,   561,   565,   566,   574,   575,   584,   585,   594,
-     600,   603,   607,   609,   613,   617,   621,   625,   627,   628,
-     634,   638,   640,   644,   646,   647,   657,   659,   661,   666,
-     668,   670,   673,   677,   678,   680,   682,   684,   686,   688,
-     690,   692,   694,   696,   700,   702,   708,   710,   712,   714,
-     716,   718,   720,   723,   726,   729,   733,   736,   737,   739,
-     742,   745,   749,   759,   769,   778,   793,   795,   797,   804,
-     810,   813,   820,   828,   833,   838,   845,   852,   853,   854,
-     858,   861,   863,   869,   875,   882,   889,   894,   901,   906,
-     911,   918,   925,   928,   937,   939,   941,   942,   946,   953,
-     957,   964,   967,   973,   981
+     234,   235,   238,   239,   242,   243,   246,   247,   251,   254,
+     255,   257,   258,   262,   264,   267,   269,   271,   273,   275,
+     277,   279,   281,   283,   285,   288,   290,   293,   299,   305,
+     311,   317,   321,   324,   330,   335,   338,   340,   342,   344,
+     348,   350,   354,   356,   357,   359,   363,   368,   372,   376,
+     381,   386,   390,   397,   403,   406,   409,   412,   415,   418,
+     421,   424,   427,   430,   433,   436,   439,   446,   452,   461,
+     468,   475,   483,   491,   498,   507,   516,   520,   522,   524,
+     526,   528,   529,   532,   539,   541,   542,   544,   547,   548,
+     552,   553,   557,   561,   565,   569,   570,   578,   579,   588,
+     589,   598,   604,   607,   611,   613,   617,   621,   625,   629,
+     631,   632,   638,   642,   644,   648,   650,   651,   662,   664,
+     666,   671,   673,   675,   678,   682,   683,   685,   687,   689,
+     691,   693,   695,   697,   699,   701,   705,   707,   713,   715,
+     717,   719,   721,   723,   725,   728,   731,   734,   738,   741,
+     742,   744,   747,   750,   754,   764,   774,   783,   798,   800,
+     802,   809,   815,   818,   825,   833,   838,   843,   850,   857,
+     858,   859,   863,   866,   868,   874,   880,   887,   894,   899,
+     906,   911,   916,   923,   930,   933,   942,   944,   946,   947,
+     951,   958,   962,   969,   972,   978,   986
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     206,     0,    -1,    73,    -1,    74,    -1,    75,    -1,    76,
+     208,     0,    -1,    73,    -1,    74,    -1,    75,    -1,    76,
       -1,    77,    -1,    78,    -1,    79,    -1,    80,    -1,    81,
       -1,    85,    -1,    86,    -1,    87,    -1,    82,    -1,    83,
       -1,    84,    -1,   116,    -1,   117,    -1,   118,    -1,   119,
@@ -1718,93 +1720,94 @@
       -1,   107,    -1,   108,    -1,   109,    -1,    96,    -1,    97,
       -1,    98,    -1,    99,    -1,    26,    -1,    27,    -1,    11,
       -1,    12,    -1,    13,    -1,    16,    -1,    15,    -1,    14,
-      -1,    19,    -1,    22,    -1,    24,    -1,   170,    -1,    -1,
-     170,   148,    -1,    -1,    20,    -1,    23,    -1,   175,    -1,
-      -1,   173,   148,    -1,    42,    -1,    44,    -1,    43,    -1,
+      -1,    19,    -1,    22,    -1,    24,    -1,   171,    -1,    -1,
+     171,   149,    -1,    -1,    20,    -1,    23,    -1,   176,    -1,
+      -1,   174,   149,    -1,    42,    -1,    44,    -1,    43,    -1,
       45,    -1,    47,    -1,    46,    -1,    48,    -1,    50,    -1,
-      -1,   145,    -1,   146,    -1,   147,    -1,    -1,    46,    -1,
+      -1,   146,    -1,   147,    -1,   148,    -1,    -1,    46,    -1,
       48,    -1,    -1,    42,    -1,    43,    -1,    44,    -1,    47,
       -1,    -1,    44,    -1,    42,    -1,    -1,    61,    -1,    62,
       -1,    63,    -1,    64,    -1,    65,    -1,    60,     4,    -1,
      135,    -1,   117,    -1,   134,    -1,   118,    -1,   137,    -1,
-     138,    -1,   140,    -1,   141,    -1,   142,    -1,    -1,   184,
-     183,    -1,   136,    -1,   139,    -1,   135,    -1,   134,    -1,
-     143,    -1,   144,    -1,    -1,   186,   185,    -1,    -1,    53,
-       4,    -1,    -1,   149,    53,     4,    -1,    34,    22,    -1,
-      -1,   189,    -1,    -1,   149,   192,   191,    -1,   189,    -1,
-      53,     4,    -1,    11,    -1,    12,    -1,    13,    -1,    16,
-      -1,    15,    -1,    14,    -1,    17,    -1,    49,    -1,   193,
-      -1,   194,   150,    -1,   228,    -1,   151,     4,    -1,   194,
-     152,   198,   153,   186,    -1,    10,   152,   198,   153,   186,
-      -1,   154,     4,   155,   194,   156,    -1,   157,     4,   155,
-     194,   158,    -1,   159,   199,   160,    -1,   159,   160,    -1,
-     157,   159,   199,   160,   158,    -1,   157,   159,   160,   158,
-      -1,   194,   184,    -1,   194,    -1,    10,    -1,   195,    -1,
-     197,   149,   195,    -1,   197,    -1,   197,   149,    39,    -1,
-      39,    -1,    -1,   194,    -1,   199,   149,   194,    -1,   194,
-     154,   202,   156,    -1,   194,   154,   156,    -1,   194,   161,
-      22,    -1,   194,   157,   202,   158,    -1,   194,   159,   202,
-     160,    -1,   194,   159,   160,    -1,   194,   157,   159,   202,
-     160,   158,    -1,   194,   157,   159,   160,   158,    -1,   194,
-      40,    -1,   194,    41,    -1,   194,   228,    -1,   194,   201,
-      -1,   194,    25,    -1,   168,     3,    -1,   168,     5,    -1,
-     168,     4,    -1,   168,     6,    -1,    11,    26,    -1,    11,
-      27,    -1,   169,     9,    -1,   165,   152,   200,    38,   194,
-     153,    -1,   115,   152,   200,   239,   153,    -1,   129,   152,
-     200,   149,   200,   149,   200,   153,    -1,   163,   152,   200,
-     149,   200,   153,    -1,   164,   152,   200,   149,   200,   153,
-      -1,    88,   166,   152,   200,   149,   200,   153,    -1,    89,
-     167,   152,   200,   149,   200,   153,    -1,   131,   152,   200,
-     149,   200,   153,    -1,   132,   152,   200,   149,   200,   149,
-     200,   153,    -1,   133,   152,   200,   149,   200,   149,   200,
-     153,    -1,   202,   149,   200,    -1,   200,    -1,    32,    -1,
-      33,    -1,    37,    -1,    -1,   196,   228,    -1,   121,   152,
-     205,    38,   194,   153,    -1,   207,    -1,    -1,   208,    -1,
-     207,   208,    -1,    -1,    31,   209,   224,    -1,    -1,    30,
-     210,   225,    -1,    58,    57,   214,    -1,   172,    18,   194,
-      -1,   172,    18,    10,    -1,    -1,   174,   178,   204,   203,
-     200,   211,   191,    -1,    -1,   174,   176,   178,   204,   203,
-     200,   212,   191,    -1,    -1,   174,   177,   178,   204,   203,
-     194,   213,   191,    -1,   174,   178,    35,   181,   205,    -1,
-      51,   215,    -1,    54,   148,   216,    -1,    22,    -1,    52,
-     148,    22,    -1,    66,   148,    22,    -1,   154,   217,   156,
-      -1,   217,   149,    22,    -1,    22,    -1,    -1,   218,   149,
-     194,   184,   171,    -1,   194,   184,   171,    -1,   218,    -1,
-     218,   149,    39,    -1,    39,    -1,    -1,   182,   196,   173,
-     152,   219,   153,   186,   190,   187,    -1,    28,    -1,   159,
-      -1,   180,   178,   220,   221,    -1,    29,    -1,   160,    -1,
-     231,   223,    -1,   179,   178,   220,    -1,    -1,    59,    -1,
-       3,    -1,     4,    -1,     9,    -1,    26,    -1,    27,    -1,
-      40,    -1,    41,    -1,    25,    -1,   157,   202,   158,    -1,
-     201,    -1,    57,   226,    22,   149,    22,    -1,     7,    -1,
-       8,    -1,   170,    -1,   173,    -1,   228,    -1,   227,    -1,
-     194,   229,    -1,   231,   232,    -1,   222,   232,    -1,   233,
-     172,   234,    -1,   233,   236,    -1,    -1,    21,    -1,    67,
-     230,    -1,    67,    10,    -1,    68,    17,   229,    -1,    68,
-      11,   229,   149,    17,   229,   149,    17,   229,    -1,    69,
-     168,   229,   149,    17,   229,   154,   235,   156,    -1,    69,
-     168,   229,   149,    17,   229,   154,   156,    -1,    70,   182,
-     196,   229,   152,   238,   153,   186,    38,    17,   229,    71,
-      17,   229,    -1,    71,    -1,    72,    -1,   235,   168,   227,
-     149,    17,   229,    -1,   168,   227,   149,    17,   229,    -1,
-     172,   241,    -1,   194,   154,   229,   149,   229,   156,    -1,
-     237,   149,   154,   229,   149,   229,   156,    -1,   194,   184,
-     229,   184,    -1,    17,   184,   229,   184,    -1,   238,   149,
-     194,   184,   229,   184,    -1,   238,   149,    17,   184,   229,
-     184,    -1,    -1,    -1,   239,   149,   230,    -1,    56,    55,
-      -1,    55,    -1,   163,   194,   229,   149,   229,    -1,   164,
-     194,   229,   149,   229,    -1,    88,   166,   194,   229,   149,
-     229,    -1,    89,   167,   194,   229,   149,   229,    -1,   165,
-     230,    38,   194,    -1,   129,   230,   149,   230,   149,   230,
-      -1,   130,   230,   149,   194,    -1,   131,   230,   149,   230,
-      -1,   132,   230,   149,   230,   149,   230,    -1,   133,   230,
-     149,   230,   149,   230,    -1,   128,   237,    -1,   240,   182,
-     196,   229,   152,   238,   153,   186,    -1,   243,    -1,    36,
-      -1,    -1,   110,   194,   188,    -1,   110,   194,   149,    11,
-     229,   188,    -1,   111,   194,   188,    -1,   111,   194,   149,
-      11,   229,   188,    -1,   112,   230,    -1,   242,   113,   194,
-     229,   188,    -1,   242,   114,   230,   149,   194,   229,   188,
-      -1,   115,   194,   229,   239,    -1
+     138,    -1,   140,    -1,   141,    -1,   142,    -1,    -1,   185,
+     184,    -1,   136,    -1,   139,    -1,   135,    -1,   134,    -1,
+     143,    -1,   144,    -1,    -1,   187,   186,    -1,    -1,   145,
+      22,    -1,    -1,    53,     4,    -1,    -1,   150,    53,     4,
+      -1,    34,    22,    -1,    -1,   191,    -1,    -1,   150,   194,
+     193,    -1,   191,    -1,    53,     4,    -1,    11,    -1,    12,
+      -1,    13,    -1,    16,    -1,    15,    -1,    14,    -1,    17,
+      -1,    49,    -1,   195,    -1,   196,   151,    -1,   230,    -1,
+     152,     4,    -1,   196,   153,   200,   154,   187,    -1,    10,
+     153,   200,   154,   187,    -1,   155,     4,   156,   196,   157,
+      -1,   158,     4,   156,   196,   159,    -1,   160,   201,   161,
+      -1,   160,   161,    -1,   158,   160,   201,   161,   159,    -1,
+     158,   160,   161,   159,    -1,   196,   185,    -1,   196,    -1,
+      10,    -1,   197,    -1,   199,   150,   197,    -1,   199,    -1,
+     199,   150,    39,    -1,    39,    -1,    -1,   196,    -1,   201,
+     150,   196,    -1,   196,   155,   204,   157,    -1,   196,   155,
+     157,    -1,   196,   162,    22,    -1,   196,   158,   204,   159,
+      -1,   196,   160,   204,   161,    -1,   196,   160,   161,    -1,
+     196,   158,   160,   204,   161,   159,    -1,   196,   158,   160,
+     161,   159,    -1,   196,    40,    -1,   196,    41,    -1,   196,
+     230,    -1,   196,   203,    -1,   196,    25,    -1,   169,     3,
+      -1,   169,     5,    -1,   169,     4,    -1,   169,     6,    -1,
+      11,    26,    -1,    11,    27,    -1,   170,     9,    -1,   166,
+     153,   202,    38,   196,   154,    -1,   115,   153,   202,   241,
+     154,    -1,   129,   153,   202,   150,   202,   150,   202,   154,
+      -1,   164,   153,   202,   150,   202,   154,    -1,   165,   153,
+     202,   150,   202,   154,    -1,    88,   167,   153,   202,   150,
+     202,   154,    -1,    89,   168,   153,   202,   150,   202,   154,
+      -1,   131,   153,   202,   150,   202,   154,    -1,   132,   153,
+     202,   150,   202,   150,   202,   154,    -1,   133,   153,   202,
+     150,   202,   150,   202,   154,    -1,   204,   150,   202,    -1,
+     202,    -1,    32,    -1,    33,    -1,    37,    -1,    -1,   198,
+     230,    -1,   121,   153,   207,    38,   196,   154,    -1,   209,
+      -1,    -1,   210,    -1,   209,   210,    -1,    -1,    31,   211,
+     226,    -1,    -1,    30,   212,   227,    -1,    58,    57,   216,
+      -1,   173,    18,   196,    -1,   173,    18,    10,    -1,    -1,
+     175,   179,   206,   205,   202,   213,   193,    -1,    -1,   175,
+     177,   179,   206,   205,   202,   214,   193,    -1,    -1,   175,
+     178,   179,   206,   205,   196,   215,   193,    -1,   175,   179,
+      35,   182,   207,    -1,    51,   217,    -1,    54,   149,   218,
+      -1,    22,    -1,    52,   149,    22,    -1,    66,   149,    22,
+      -1,   155,   219,   157,    -1,   219,   150,    22,    -1,    22,
+      -1,    -1,   220,   150,   196,   185,   172,    -1,   196,   185,
+     172,    -1,   220,    -1,   220,   150,    39,    -1,    39,    -1,
+      -1,   183,   198,   174,   153,   221,   154,   187,   192,   189,
+     188,    -1,    28,    -1,   160,    -1,   181,   179,   222,   223,
+      -1,    29,    -1,   161,    -1,   233,   225,    -1,   180,   179,
+     222,    -1,    -1,    59,    -1,     3,    -1,     4,    -1,     9,
+      -1,    26,    -1,    27,    -1,    40,    -1,    41,    -1,    25,
+      -1,   158,   204,   159,    -1,   203,    -1,    57,   228,    22,
+     150,    22,    -1,     7,    -1,     8,    -1,   171,    -1,   174,
+      -1,   230,    -1,   229,    -1,   196,   231,    -1,   233,   234,
+      -1,   224,   234,    -1,   235,   173,   236,    -1,   235,   238,
+      -1,    -1,    21,    -1,    67,   232,    -1,    67,    10,    -1,
+      68,    17,   231,    -1,    68,    11,   231,   150,    17,   231,
+     150,    17,   231,    -1,    69,   169,   231,   150,    17,   231,
+     155,   237,   157,    -1,    69,   169,   231,   150,    17,   231,
+     155,   157,    -1,    70,   183,   198,   231,   153,   240,   154,
+     187,    38,    17,   231,    71,    17,   231,    -1,    71,    -1,
+      72,    -1,   237,   169,   229,   150,    17,   231,    -1,   169,
+     229,   150,    17,   231,    -1,   173,   243,    -1,   196,   155,
+     231,   150,   231,   157,    -1,   239,   150,   155,   231,   150,
+     231,   157,    -1,   196,   185,   231,   185,    -1,    17,   185,
+     231,   185,    -1,   240,   150,   196,   185,   231,   185,    -1,
+     240,   150,    17,   185,   231,   185,    -1,    -1,    -1,   241,
+     150,   232,    -1,    56,    55,    -1,    55,    -1,   164,   196,
+     231,   150,   231,    -1,   165,   196,   231,   150,   231,    -1,
+      88,   167,   196,   231,   150,   231,    -1,    89,   168,   196,
+     231,   150,   231,    -1,   166,   232,    38,   196,    -1,   129,
+     232,   150,   232,   150,   232,    -1,   130,   232,   150,   196,
+      -1,   131,   232,   150,   232,    -1,   132,   232,   150,   232,
+     150,   232,    -1,   133,   232,   150,   232,   150,   232,    -1,
+     128,   239,    -1,   242,   183,   198,   231,   153,   240,   154,
+     187,    -1,   245,    -1,    36,    -1,    -1,   110,   196,   190,
+      -1,   110,   196,   150,    11,   231,   190,    -1,   111,   196,
+     190,    -1,   111,   196,   150,    11,   231,   190,    -1,   112,
+     232,    -1,   244,   113,   196,   231,   190,    -1,   244,   114,
+     232,   150,   196,   231,   190,    -1,   115,   196,   231,   241,
+      -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -1822,26 +1825,26 @@
     1192,  1193,  1194,  1198,  1199,  1200,  1203,  1204,  1205,  1206,
     1207,  1208,  1209,  1216,  1217,  1218,  1219,  1220,  1221,  1222,
     1223,  1224,  1227,  1228,  1233,  1234,  1235,  1236,  1237,  1238,
-    1241,  1242,  1249,  1250,  1256,  1257,  1265,  1273,  1274,  1279,
-    1280,  1281,  1286,  1299,  1299,  1299,  1299,  1299,  1299,  1299,
-    1302,  1306,  1310,  1317,  1322,  1330,  1360,  1385,  1390,  1400,
-    1410,  1414,  1424,  1431,  1440,  1447,  1452,  1457,  1464,  1465,
-    1472,  1479,  1487,  1493,  1505,  1533,  1549,  1576,  1604,  1630,
-    1650,  1676,  1696,  1708,  1715,  1781,  1791,  1801,  1807,  1817,
-    1823,  1833,  1838,  1843,  1856,  1868,  1890,  1898,  1904,  1915,
-    1920,  1925,  1931,  1937,  1946,  1950,  1958,  1958,  1961,  1961,
-    1964,  1976,  1997,  2002,  2010,  2011,  2015,  2015,  2019,  2019,
-    2022,  2025,  2049,  2060,  2060,  2071,  2070,  2080,  2079,  2090,
-    2130,  2133,  2139,  2149,  2153,  2158,  2160,  2165,  2170,  2179,
-    2189,  2200,  2204,  2213,  2222,  2227,  2357,  2357,  2359,  2368,
-    2368,  2370,  2375,  2387,  2391,  2396,  2400,  2404,  2408,  2412,
-    2416,  2420,  2424,  2428,  2453,  2457,  2467,  2471,  2475,  2480,
-    2487,  2487,  2493,  2502,  2506,  2515,  2524,  2533,  2537,  2544,
-    2548,  2552,  2557,  2567,  2586,  2595,  2679,  2683,  2690,  2701,
-    2714,  2724,  2735,  2745,  2756,  2764,  2774,  2781,  2784,  2785,
-    2792,  2796,  2801,  2817,  2834,  2848,  2862,  2874,  2882,  2889,
-    2895,  2901,  2907,  2922,  3013,  3018,  3022,  3029,  3036,  3044,
-    3051,  3059,  3067,  3081,  3098
+    1241,  1242,  1247,  1248,  1255,  1256,  1262,  1263,  1271,  1279,
+    1280,  1285,  1286,  1287,  1292,  1305,  1305,  1305,  1305,  1305,
+    1305,  1305,  1308,  1312,  1316,  1323,  1328,  1336,  1366,  1391,
+    1396,  1406,  1416,  1420,  1430,  1437,  1446,  1453,  1458,  1463,
+    1470,  1471,  1478,  1485,  1493,  1499,  1511,  1539,  1555,  1582,
+    1610,  1636,  1656,  1682,  1702,  1714,  1721,  1787,  1797,  1807,
+    1813,  1823,  1829,  1839,  1844,  1849,  1862,  1874,  1896,  1904,
+    1910,  1921,  1926,  1931,  1937,  1943,  1952,  1956,  1964,  1964,
+    1967,  1967,  1970,  1982,  2003,  2008,  2016,  2017,  2021,  2021,
+    2025,  2025,  2028,  2031,  2055,  2066,  2066,  2077,  2076,  2086,
+    2085,  2096,  2136,  2139,  2145,  2155,  2159,  2164,  2166,  2171,
+    2176,  2185,  2195,  2206,  2210,  2219,  2228,  2233,  2367,  2367,
+    2369,  2378,  2378,  2380,  2385,  2397,  2401,  2406,  2410,  2414,
+    2418,  2422,  2426,  2430,  2434,  2438,  2463,  2467,  2477,  2481,
+    2485,  2490,  2497,  2497,  2503,  2512,  2516,  2525,  2534,  2543,
+    2547,  2554,  2558,  2562,  2567,  2577,  2596,  2605,  2689,  2693,
+    2700,  2711,  2724,  2734,  2745,  2755,  2766,  2774,  2784,  2791,
+    2794,  2795,  2802,  2806,  2811,  2827,  2844,  2858,  2872,  2884,
+    2892,  2899,  2905,  2911,  2917,  2932,  3023,  3028,  3032,  3039,
+    3046,  3054,  3061,  3069,  3077,  3091,  3108
 };
 #endif
 
@@ -1872,7 +1875,7 @@
   "PTRTOINT", "PHI_TOK", "SELECT", "VAARG", "EXTRACTELEMENT",
   "INSERTELEMENT", "SHUFFLEVECTOR", "SIGNEXT", "ZEROEXT", "NORETURN",
   "INREG", "SRET", "NOUNWIND", "NOALIAS", "BYVAL", "NEST", "READNONE",
-  "READONLY", "DEFAULT", "HIDDEN", "PROTECTED", "'='", "','", "'*'",
+  "READONLY", "GC", "DEFAULT", "HIDDEN", "PROTECTED", "'='", "','", "'*'",
   "'\\\\'", "'('", "')'", "'['", "'x'", "']'", "'<'", "'>'", "'{'", "'}'",
   "'c'", "$accept", "ArithmeticOps", "LogicalOps", "CastOps",
   "IPredicates", "FPredicates", "IntType", "FPType", "LocalName",
@@ -1880,19 +1883,19 @@
   "GlobalAssign", "GVInternalLinkage", "GVExternalLinkage",
   "GVVisibilityStyle", "FunctionDeclareLinkage", "FunctionDefineLinkage",
   "AliasLinkage", "OptCallingConv", "ParamAttr", "OptParamAttrs",
-  "FuncAttr", "OptFuncAttrs", "OptAlign", "OptCAlign", "SectionString",
-  "OptSection", "GlobalVarAttributes", "GlobalVarAttribute", "PrimType",
-  "Types", "ArgType", "ResultTypes", "ArgTypeList", "ArgTypeListI",
-  "TypeListI", "ConstVal", "ConstExpr", "ConstVector", "GlobalType",
-  "ThreadLocal", "AliaseeRef", "Module", "DefinitionList", "Definition",
-  "@1", "@2", "@3", "@4", "@5", "AsmBlock", "TargetDefinition",
-  "LibrariesDefinition", "LibList", "ArgListH", "ArgList",
-  "FunctionHeaderH", "BEGIN", "FunctionHeader", "END", "Function",
-  "FunctionProto", "OptSideEffect", "ConstValueRef", "SymbolicValueRef",
-  "ValueRef", "ResolvedVal", "BasicBlockList", "BasicBlock",
-  "InstructionList", "BBTerminatorInst", "JumpTable", "Inst", "PHIList",
-  "ParamList", "IndexList", "OptTailCall", "InstVal", "OptVolatile",
-  "MemoryInst", 0
+  "FuncAttr", "OptFuncAttrs", "OptGC", "OptAlign", "OptCAlign",
+  "SectionString", "OptSection", "GlobalVarAttributes",
+  "GlobalVarAttribute", "PrimType", "Types", "ArgType", "ResultTypes",
+  "ArgTypeList", "ArgTypeListI", "TypeListI", "ConstVal", "ConstExpr",
+  "ConstVector", "GlobalType", "ThreadLocal", "AliaseeRef", "Module",
+  "DefinitionList", "Definition", "@1", "@2", "@3", "@4", "@5", "AsmBlock",
+  "TargetDefinition", "LibrariesDefinition", "LibList", "ArgListH",
+  "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader", "END",
+  "Function", "FunctionProto", "OptSideEffect", "ConstValueRef",
+  "SymbolicValueRef", "ValueRef", "ResolvedVal", "BasicBlockList",
+  "BasicBlock", "InstructionList", "BBTerminatorInst", "JumpTable", "Inst",
+  "PHIList", "ParamList", "IndexList", "OptTailCall", "InstVal",
+  "OptVolatile", "MemoryInst", 0
 };
 #endif
 
@@ -1915,47 +1918,47 @@
      365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
-     395,   396,   397,   398,   399,   400,   401,   402,    61,    44,
-      42,    92,    40,    41,    91,   120,    93,    60,    62,   123,
-     125,    99
+     395,   396,   397,   398,   399,   400,   401,   402,   403,    61,
+      44,    42,    92,    40,    41,    91,   120,    93,    60,    62,
+     123,   125,    99
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   162,   163,   163,   163,   163,   163,   163,   163,   163,
-     163,   164,   164,   164,   164,   164,   164,   165,   165,   165,
-     165,   165,   165,   165,   165,   165,   165,   165,   165,   166,
+       0,   163,   164,   164,   164,   164,   164,   164,   164,   164,
+     164,   165,   165,   165,   165,   165,   165,   166,   166,   166,
      166,   166,   166,   166,   166,   166,   166,   166,   166,   167,
-     167,   167,   167,   167,   167,   167,   167,   167,   167,   167,
-     167,   167,   167,   167,   167,   168,   169,   169,   169,   169,
-     169,   170,   170,   170,   171,   171,   172,   172,   173,   173,
-     174,   174,   175,   176,   176,   176,   176,   176,   177,   177,
-     177,   178,   178,   178,   178,   179,   179,   179,   180,   180,
-     180,   180,   180,   181,   181,   181,   182,   182,   182,   182,
-     182,   182,   182,   183,   183,   183,   183,   183,   183,   183,
-     183,   183,   184,   184,   185,   185,   185,   185,   185,   185,
-     186,   186,   187,   187,   188,   188,   189,   190,   190,   191,
-     191,   192,   192,   193,   193,   193,   193,   193,   193,   193,
-     194,   194,   194,   194,   194,   194,   194,   194,   194,   194,
-     194,   194,   194,   195,   196,   196,   197,   197,   198,   198,
-     198,   198,   199,   199,   200,   200,   200,   200,   200,   200,
-     200,   200,   200,   200,   200,   200,   200,   200,   200,   200,
-     200,   200,   200,   200,   201,   201,   201,   201,   201,   201,
-     201,   201,   201,   201,   202,   202,   203,   203,   204,   204,
-     205,   205,   206,   206,   207,   207,   209,   208,   210,   208,
-     208,   208,   208,   211,   208,   212,   208,   213,   208,   208,
-     208,   208,   214,   215,   215,   216,   217,   217,   217,   218,
-     218,   219,   219,   219,   219,   220,   221,   221,   222,   223,
-     223,   224,   225,   226,   226,   227,   227,   227,   227,   227,
-     227,   227,   227,   227,   227,   227,   228,   228,   228,   228,
-     229,   229,   230,   231,   231,   232,   233,   233,   233,   234,
-     234,   234,   234,   234,   234,   234,   234,   234,   235,   235,
-     236,   237,   237,   238,   238,   238,   238,   238,   239,   239,
-     240,   240,   241,   241,   241,   241,   241,   241,   241,   241,
-     241,   241,   241,   241,   241,   242,   242,   243,   243,   243,
-     243,   243,   243,   243,   243
+     167,   167,   167,   167,   167,   167,   167,   167,   167,   168,
+     168,   168,   168,   168,   168,   168,   168,   168,   168,   168,
+     168,   168,   168,   168,   168,   169,   170,   170,   170,   170,
+     170,   171,   171,   171,   172,   172,   173,   173,   174,   174,
+     175,   175,   176,   177,   177,   177,   177,   177,   178,   178,
+     178,   179,   179,   179,   179,   180,   180,   180,   181,   181,
+     181,   181,   181,   182,   182,   182,   183,   183,   183,   183,
+     183,   183,   183,   184,   184,   184,   184,   184,   184,   184,
+     184,   184,   185,   185,   186,   186,   186,   186,   186,   186,
+     187,   187,   188,   188,   189,   189,   190,   190,   191,   192,
+     192,   193,   193,   194,   194,   195,   195,   195,   195,   195,
+     195,   195,   196,   196,   196,   196,   196,   196,   196,   196,
+     196,   196,   196,   196,   196,   197,   198,   198,   199,   199,
+     200,   200,   200,   200,   201,   201,   202,   202,   202,   202,
+     202,   202,   202,   202,   202,   202,   202,   202,   202,   202,
+     202,   202,   202,   202,   202,   202,   203,   203,   203,   203,
+     203,   203,   203,   203,   203,   203,   204,   204,   205,   205,
+     206,   206,   207,   207,   208,   208,   209,   209,   211,   210,
+     212,   210,   210,   210,   210,   213,   210,   214,   210,   215,
+     210,   210,   210,   210,   216,   217,   217,   218,   219,   219,
+     219,   220,   220,   221,   221,   221,   221,   222,   223,   223,
+     224,   225,   225,   226,   227,   228,   228,   229,   229,   229,
+     229,   229,   229,   229,   229,   229,   229,   229,   230,   230,
+     230,   230,   231,   231,   232,   233,   233,   234,   235,   235,
+     235,   236,   236,   236,   236,   236,   236,   236,   236,   236,
+     237,   237,   238,   239,   239,   240,   240,   240,   240,   240,
+     241,   241,   242,   242,   243,   243,   243,   243,   243,   243,
+     243,   243,   243,   243,   243,   243,   243,   244,   244,   245,
+     245,   245,   245,   245,   245,   245,   245
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1973,26 +1976,26 @@
        1,     1,     1,     0,     1,     1,     0,     1,     1,     1,
        1,     1,     2,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     0,     2,     1,     1,     1,     1,     1,     1,
-       0,     2,     0,     2,     0,     3,     2,     0,     1,     0,
-       3,     1,     2,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     2,     1,     2,     5,     5,     5,     5,     3,
-       2,     5,     4,     2,     1,     1,     1,     3,     1,     3,
-       1,     0,     1,     3,     4,     3,     3,     4,     4,     3,
-       6,     5,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     6,     5,     8,     6,     6,     7,
-       7,     6,     8,     8,     3,     1,     1,     1,     1,     0,
-       2,     6,     1,     0,     1,     2,     0,     3,     0,     3,
-       3,     3,     3,     0,     7,     0,     8,     0,     8,     5,
-       2,     3,     1,     3,     3,     3,     3,     1,     0,     5,
-       3,     1,     3,     1,     0,     9,     1,     1,     4,     1,
-       1,     2,     3,     0,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     3,     1,     5,     1,     1,     1,     1,
-       1,     1,     2,     2,     2,     3,     2,     0,     1,     2,
-       2,     3,     9,     9,     8,    14,     1,     1,     6,     5,
-       2,     6,     7,     4,     4,     6,     6,     0,     0,     3,
-       2,     1,     5,     5,     6,     6,     4,     6,     4,     4,
-       6,     6,     2,     8,     1,     1,     0,     3,     6,     3,
-       6,     2,     5,     7,     4
+       0,     2,     0,     2,     0,     2,     0,     3,     2,     0,
+       1,     0,     3,     1,     2,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     2,     1,     2,     5,     5,     5,
+       5,     3,     2,     5,     4,     2,     1,     1,     1,     3,
+       1,     3,     1,     0,     1,     3,     4,     3,     3,     4,
+       4,     3,     6,     5,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     6,     5,     8,     6,
+       6,     7,     7,     6,     8,     8,     3,     1,     1,     1,
+       1,     0,     2,     6,     1,     0,     1,     2,     0,     3,
+       0,     3,     3,     3,     3,     0,     7,     0,     8,     0,
+       8,     5,     2,     3,     1,     3,     3,     3,     3,     1,
+       0,     5,     3,     1,     3,     1,     0,    10,     1,     1,
+       4,     1,     1,     2,     3,     0,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     3,     1,     5,     1,     1,
+       1,     1,     1,     1,     2,     2,     2,     3,     2,     0,
+       1,     2,     2,     3,     9,     9,     8,    14,     1,     1,
+       6,     5,     2,     6,     7,     4,     4,     6,     6,     0,
+       0,     3,     2,     1,     5,     5,     6,     6,     4,     6,
+       4,     4,     6,     6,     2,     8,     1,     1,     0,     3,
+       6,     3,     6,     2,     5,     7,     4
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -2000,67 +2003,68 @@
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-      71,    61,    68,    62,    69,    63,   208,   206,     0,     0,
-       0,     0,     0,     0,    81,    70,     0,    71,   204,    85,
-      88,     0,     0,   220,     0,     0,    66,     0,    72,    73,
+      71,    61,    68,    62,    69,    63,   210,   208,     0,     0,
+       0,     0,     0,     0,    81,    70,     0,    71,   206,    85,
+      88,     0,     0,   222,     0,     0,    66,     0,    72,    73,
       75,    74,    76,    78,    77,    79,    80,    82,    83,    84,
-      81,    81,   199,     1,   205,    86,    87,    81,   209,    89,
-      90,    91,    92,    81,   267,   207,   267,     0,     0,   228,
-     221,   222,   210,   256,   257,   212,   133,   134,   135,   138,
-     137,   136,   139,   140,     0,     0,     0,     0,   258,   259,
-     141,   211,   143,   199,   199,    93,   198,     0,    96,    96,
-     268,   264,    67,   239,   240,   241,   263,   223,   224,   227,
-       0,   161,   144,     0,     0,     0,     0,   150,   162,     0,
-     142,   161,     0,     0,    95,    94,     0,   196,   197,     0,
-       0,    97,    98,    99,   100,   101,     0,   242,     0,   306,
-     266,     0,   225,   160,   112,   156,   158,     0,     0,     0,
-       0,     0,     0,   149,     0,     0,     0,   155,     0,   154,
-       0,   219,   133,   134,   135,   138,   137,   136,     0,     0,
-       0,   213,   102,     0,   236,   237,   238,   305,   291,     0,
-       0,     0,     0,    96,   276,   277,     2,     3,     4,     5,
+      81,    81,   201,     1,   207,    86,    87,    81,   211,    89,
+      90,    91,    92,    81,   269,   209,   269,     0,     0,   230,
+     223,   224,   212,   258,   259,   214,   135,   136,   137,   140,
+     139,   138,   141,   142,     0,     0,     0,     0,   260,   261,
+     143,   213,   145,   201,   201,    93,   200,     0,    96,    96,
+     270,   266,    67,   241,   242,   243,   265,   225,   226,   229,
+       0,   163,   146,     0,     0,     0,     0,   152,   164,     0,
+     144,   163,     0,     0,    95,    94,     0,   198,   199,     0,
+       0,    97,    98,    99,   100,   101,     0,   244,     0,   308,
+     268,     0,   227,   162,   112,   158,   160,     0,     0,     0,
+       0,     0,     0,   151,     0,     0,     0,   157,     0,   156,
+       0,   221,   135,   136,   137,   140,   139,   138,     0,     0,
+       0,   215,   102,     0,   238,   239,   240,   307,   293,     0,
+       0,     0,     0,    96,   278,   279,     2,     3,     4,     5,
        6,     7,     8,     9,    10,    14,    15,    16,    11,    12,
       13,     0,     0,     0,     0,     0,     0,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   265,    96,
-     280,     0,   304,   226,   153,     0,   120,     0,     0,   152,
-       0,   163,   120,   215,   217,     0,   200,   181,   182,   177,
-     179,   178,   180,   183,   176,   172,   173,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   267,    96,
+     282,     0,   306,   228,   155,     0,   120,     0,     0,   154,
+       0,   165,   120,   217,   219,     0,   202,   183,   184,   179,
+     181,   180,   182,   185,   178,   174,   175,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   175,   174,   129,     0,   290,   270,     0,   269,     0,
+       0,   177,   176,   131,     0,   292,   272,     0,   271,     0,
        0,    55,     0,     0,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,     0,    53,    54,    49,    50,    51,
       52,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,     0,   124,   124,   311,     0,     0,   302,     0,     0,
+      48,     0,   126,   126,   313,     0,     0,   304,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,   104,
-     106,   105,   103,   107,   108,   109,   110,   111,   113,   159,
-     157,   146,   147,   148,   151,   145,   129,   129,     0,     0,
-       0,     0,     0,     0,     0,     0,   165,   195,     0,     0,
-       0,   169,     0,   166,     0,     0,     0,     0,   214,   234,
-     245,   246,   247,   252,   248,   249,   250,   251,   243,     0,
-     254,   261,   260,   262,     0,   271,     0,     0,     0,     0,
-       0,   307,     0,   309,   288,     0,     0,     0,     0,     0,
+     106,   105,   103,   107,   108,   109,   110,   111,   113,   161,
+     159,   148,   149,   150,   153,   147,   131,   131,     0,     0,
+       0,     0,     0,     0,     0,     0,   167,   197,     0,     0,
+       0,   171,     0,   168,     0,     0,     0,     0,   216,   236,
+     247,   248,   249,   254,   250,   251,   252,   253,   245,     0,
+     256,   263,   262,   264,     0,   273,     0,     0,     0,     0,
+       0,   309,     0,   311,   290,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,   117,   116,
-     114,   115,   118,   119,   121,   216,   218,     0,     0,     0,
-     288,     0,     0,     0,     0,     0,   164,   150,   162,     0,
-     167,   168,     0,     0,     0,     0,     0,   131,   129,   233,
-     112,   231,     0,   244,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   314,     0,     0,     0,   298,   299,
-       0,     0,     0,     0,   296,     0,   124,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   194,   171,     0,     0,
-       0,     0,   126,   132,   130,    65,     0,   120,     0,   253,
-       0,     0,   287,     0,     0,   124,   125,   124,     0,     0,
-       0,     0,     0,     0,   292,   293,   287,     0,   312,     0,
-     201,     0,     0,   185,     0,     0,     0,     0,   170,     0,
-       0,     0,    64,   230,   232,   112,   127,     0,     0,     0,
-     112,   112,     0,   294,   295,   308,   310,   289,     0,     0,
-     297,   300,   301,     0,   124,     0,     0,     0,   191,     0,
-       0,   187,   188,   184,    65,   128,   122,   255,     0,     0,
-       0,     0,     0,   120,   281,     0,   120,   313,   189,   190,
-       0,     0,     0,   229,     0,   235,     0,   274,     0,     0,
-     104,   106,   112,   112,   112,   112,     0,   282,   303,   186,
-     192,   193,   123,   272,     0,   273,     0,   284,   283,     0,
-       0,     0,     0,     0,   112,   112,     0,     0,     0,   286,
-     285,     0,   279,     0,     0,   278,     0,   275
+     114,   115,   118,   119,   121,   218,   220,     0,     0,     0,
+     290,     0,     0,     0,     0,     0,   166,   152,   164,     0,
+     169,   170,     0,     0,     0,     0,     0,   133,   131,   235,
+     112,   233,     0,   246,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   316,     0,     0,     0,   300,   301,
+       0,     0,     0,     0,   298,     0,   126,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   196,   173,     0,     0,
+       0,     0,   128,   134,   132,    65,     0,   120,     0,   255,
+       0,     0,   289,     0,     0,   126,   127,   126,     0,     0,
+       0,     0,     0,     0,   294,   295,   289,     0,   314,     0,
+     203,     0,     0,   187,     0,     0,     0,     0,   172,     0,
+       0,     0,    64,   232,   234,   112,   129,     0,     0,     0,
+     112,   112,     0,   296,   297,   310,   312,   291,     0,     0,
+     299,   302,   303,     0,   126,     0,     0,     0,   193,     0,
+       0,   189,   190,   186,    65,   130,   124,   257,     0,     0,
+       0,     0,     0,   120,   283,     0,   120,   315,   191,   192,
+       0,     0,     0,   231,     0,   122,     0,   276,     0,     0,
+     104,   106,   112,   112,   112,   112,     0,   284,   305,   188,
+     194,   195,   125,     0,   237,   274,     0,   275,     0,   286,
+     285,     0,     0,     0,   123,     0,     0,   112,   112,     0,
+       0,     0,   288,   287,     0,   281,     0,     0,   280,     0,
+     277
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -2068,472 +2072,475 @@
 {
       -1,   258,   259,   260,   284,   301,   158,   159,    78,   513,
       12,    79,    14,    15,    40,    41,    42,    47,    53,   116,
-     126,   328,   224,   404,   331,   565,   381,   427,   546,   358,
-     428,    80,   160,   135,   150,   136,   137,   109,   347,   370,
-     348,   119,    87,   151,    16,    17,    18,    20,    19,   263,
-     336,   337,    62,    23,    60,   100,   431,   432,   127,   166,
-      54,    95,    55,    48,   434,   371,    82,   373,   268,    56,
-      91,    92,   218,   569,   130,   307,   522,   444,   219,   220,
-     221,   222
+     126,   328,   224,   404,   331,   584,   565,   381,   427,   546,
+     358,   428,    80,   160,   135,   150,   136,   137,   109,   347,
+     370,   348,   119,    87,   151,    16,    17,    18,    20,    19,
+     263,   336,   337,    62,    23,    60,   100,   431,   432,   127,
+     166,    54,    95,    55,    48,   434,   371,    82,   373,   268,
+      56,    91,    92,   218,   569,   130,   307,   522,   444,   219,
+     220,   221,   222
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -546
+#define YYPACT_NINF -541
 static const yytype_int16 yypact[] =
 {
-      47,  -546,  -546,  -546,  -546,  -546,  -546,  -546,   -17,   -95,
-      52,   -90,    86,    14,   183,  -546,   135,  1758,  -546,   -10,
-      64,    18,    33,  -546,     5,   180,  -546,  1341,  -546,  -546,
-    -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,
-      76,    76,    59,  -546,  -546,  -546,  -546,    76,  -546,  -546,
-    -546,  -546,  -546,    76,   193,  -546,    13,   202,   224,   233,
-    -546,  -546,  -546,  -546,  -546,   111,  -546,  -546,  -546,  -546,
-    -546,  -546,  -546,  -546,   260,   261,     1,   378,  -546,  -546,
-    -546,    -7,  -546,   231,   231,   150,  -546,    55,   309,   309,
-    -546,  -546,   100,  -546,  -546,  -546,  -546,  -546,  -546,  -546,
-     -99,  1088,  -546,   116,   122,   988,   111,  -546,    -7,  -106,
-    -546,  1088,    55,    55,  -546,  -546,  1142,  -546,  -546,  1359,
-     274,  -546,  -546,  -546,  -546,  -546,  1414,  -546,   -18,  1624,
-    -546,   257,  -546,  -546,    -7,  -546,   131,   128,  1454,  1454,
-     129,  -105,  1454,  -546,   136,  1359,  1454,   111,   141,    -7,
-     237,  -546,   214,   279,   285,   289,   291,   294,   145,   299,
-     803,  -546,  -546,   103,  -546,  -546,  -546,  -546,  -546,   254,
-    1512,    57,   301,   309,  -546,  -546,  -546,  -546,  -546,  -546,
-    -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,
-    -546,   596,   646,  1454,  1454,  1454,  1454,  -546,  -546,  -546,
-    -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,  1454,
-    1454,  1454,  1454,  1454,  1454,  1454,  1454,  1454,  -546,   309,
-    -546,    61,  -546,  -546,   132,  1182,  -546,   -57,   -69,  -546,
-     155,    -7,  -546,  -546,    -7,  1142,  -546,  -546,  -546,  -546,
-    -546,  -546,  -546,  -546,  -546,  -546,  -546,   596,   646,   162,
-     163,   164,   166,   167,  1242,  1530,  1028,   303,   169,   174,
-     179,  -546,  -546,   185,   191,  -546,   111,   644,  -546,   780,
-     780,  -546,   780,  1414,  -546,  -546,  -546,  -546,  -546,  -546,
-    -546,  -546,  -546,  -546,  1454,  -546,  -546,  -546,  -546,  -546,
-    -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,
-    -546,  1454,    30,    48,  -546,   644,   -21,   197,   199,   203,
-     204,   205,   206,   644,   644,   313,  1414,  1454,  1454,  -546,
-    -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,
-    -546,   201,  -546,  -546,  -546,   201,   185,   185,   320,   207,
-     208,  1359,  1359,  1359,  1359,  1359,  -546,  -546,   -65,  1068,
-     -86,  -546,  -104,  -546,  1359,  1359,  1359,   -20,  -546,  1261,
-    -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,   273,  1359,
-    -546,  -546,  -546,  -546,   217,  -546,   218,   780,   644,   644,
-       8,  -546,    11,  -546,  -546,   780,   221,  1454,  1454,  1454,
-    1454,  1454,   227,   234,  1454,   780,   644,   235,  -546,  -546,
-    -546,  -546,  -546,  -546,  -546,  -546,  -546,  1454,  1359,  1359,
-    -546,   247,   258,   263,   265,  1359,  -546,   259,   803,  -101,
-    -546,  -546,   269,   270,   344,   398,   419,  -546,   185,  -546,
-      -7,   276,   275,  -546,   404,   -76,   412,   413,   282,   288,
-     292,   780,   440,   780,   297,   300,   780,   302,    -7,  -546,
-     304,   308,   780,   780,    -7,   306,   310,  1454,   -35,   311,
-     314,   -73,  1359,  1359,  1359,  1359,  -546,  -546,   315,  1359,
-    1359,  1454,  -546,  -546,  -546,   298,  1301,  -546,   319,  -546,
-     780,   780,  1570,   780,   780,   310,  -546,   310,  1454,   780,
-     322,  1454,  1454,  1454,  -546,  -546,  1570,   399,  -546,   644,
-    -546,  1359,  1359,  -546,   323,   316,   325,   327,  -546,   324,
-     326,    60,  -546,  -546,  -546,    -7,     3,   460,   334,   330,
-      82,    -7,   -13,  -546,  -546,  -546,  -546,  -546,   332,   780,
-    -546,  -546,  -546,    12,   310,   336,   337,  1359,  -546,  1359,
-    1359,  -546,  -546,  -546,   298,  -546,   438,  -546,   475,    -4,
-     493,   493,  1610,  -546,  -546,   338,  -546,  -546,  -546,  -546,
-     342,   345,   346,  -546,   501,  -546,   780,  -546,   940,     2,
-     354,   355,  -546,  -546,    82,    -7,    72,  -546,   201,  -546,
-    -546,  -546,  -546,  -546,   359,  -546,   940,   132,   132,   493,
-     493,   492,   494,   361,  -546,  -546,   780,   780,   497,   132,
-     132,   450,  -546,   780,   505,  -546,   780,  -546
+     658,  -541,  -541,  -541,  -541,  -541,  -541,  -541,   -12,  -135,
+     -38,  -125,   106,   -69,    26,  -541,    29,  1762,  -541,    14,
+      88,    43,    49,  -541,    45,   127,  -541,  1344,  -541,  -541,
+    -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,
+     131,   131,    73,  -541,  -541,  -541,  -541,   131,  -541,  -541,
+    -541,  -541,  -541,   131,   201,  -541,   -11,   135,   215,   216,
+    -541,  -541,  -541,  -541,  -541,    70,  -541,  -541,  -541,  -541,
+    -541,  -541,  -541,  -541,   245,   247,     3,   553,  -541,  -541,
+    -541,   -34,  -541,   219,   219,   110,  -541,    62,   171,   171,
+    -541,  -541,   124,  -541,  -541,  -541,  -541,  -541,  -541,  -541,
+     -66,  1092,  -541,   108,   114,   991,    70,  -541,   -34,  -109,
+    -541,  1092,    62,    62,  -541,  -541,  1146,  -541,  -541,  1362,
+     261,  -541,  -541,  -541,  -541,  -541,  1418,  -541,   -15,  1628,
+    -541,   260,  -541,  -541,   -34,  -541,   119,   129,  1458,  1458,
+     147,  -108,  1458,  -541,   134,  1362,  1458,    70,   142,   -34,
+     118,  -541,    40,   306,   307,   308,   309,   310,   172,   311,
+     805,  -541,  -541,   113,  -541,  -541,  -541,  -541,  -541,   266,
+    1516,    72,   314,   171,  -541,  -541,  -541,  -541,  -541,  -541,
+    -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,
+    -541,   313,   507,  1458,  1458,  1458,  1458,  -541,  -541,  -541,
+    -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  1458,
+    1458,  1458,  1458,  1458,  1458,  1458,  1458,  1458,  -541,   171,
+    -541,    52,  -541,  -541,   -36,  1186,  -541,   -94,   -30,  -541,
+     163,   -34,  -541,  -541,   -34,  1146,  -541,  -541,  -541,  -541,
+    -541,  -541,  -541,  -541,  -541,  -541,  -541,   313,   507,   176,
+     178,   184,   185,   187,  1246,  1534,  1031,   302,   190,   193,
+     198,  -541,  -541,   202,   200,  -541,    70,   645,  -541,   782,
+     782,  -541,   782,  1418,  -541,  -541,  -541,  -541,  -541,  -541,
+    -541,  -541,  -541,  -541,  1458,  -541,  -541,  -541,  -541,  -541,
+    -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,
+    -541,  1458,   136,   146,  -541,   645,   104,   206,   207,   208,
+     209,   210,   217,   645,   645,   328,  1418,  1458,  1458,  -541,
+    -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,
+    -541,   137,  -541,  -541,  -541,   137,   202,   202,   333,   221,
+     222,  1362,  1362,  1362,  1362,  1362,  -541,  -541,   -64,  1071,
+    -103,  -541,  -100,  -541,  1362,  1362,  1362,     2,  -541,  1264,
+    -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,   317,  1362,
+    -541,  -541,  -541,  -541,   227,  -541,   230,   782,   645,   645,
+      11,  -541,    12,  -541,  -541,   782,   228,  1458,  1458,  1458,
+    1458,  1458,   232,   234,  1458,   782,   645,   235,  -541,  -541,
+    -541,  -541,  -541,  -541,  -541,  -541,  -541,  1458,  1362,  1362,
+    -541,   239,   241,   243,   244,  1362,  -541,   256,   805,   -73,
+    -541,  -541,   248,   250,   385,   404,   423,  -541,   202,  -541,
+     -34,   278,   280,  -541,   413,   -72,   419,   420,   288,   292,
+     293,   782,   440,   782,   296,   297,   782,   299,   -34,  -541,
+     301,   303,   782,   782,   -34,   304,   318,  1458,   151,   319,
+     321,   -43,  1362,  1362,  1362,  1362,  -541,  -541,   295,  1362,
+    1362,  1458,  -541,  -541,  -541,   279,  1304,  -541,   322,  -541,
+     782,   782,  1574,   782,   782,   318,  -541,   318,  1458,   782,
+     323,  1458,  1458,  1458,  -541,  -541,  1574,   399,  -541,   645,
+    -541,  1362,  1362,  -541,   324,   305,   326,   327,  -541,   325,
+     329,   157,  -541,  -541,  -541,   -34,    81,   436,   332,   330,
+       9,   -34,    47,  -541,  -541,  -541,  -541,  -541,   334,   782,
+    -541,  -541,  -541,    96,   318,   336,   338,  1362,  -541,  1362,
+    1362,  -541,  -541,  -541,   279,  -541,   407,  -541,   444,    -6,
+     505,   505,  1614,  -541,  -541,   337,  -541,  -541,  -541,  -541,
+     339,   342,   343,  -541,   459,   341,   782,  -541,   943,    -2,
+     331,   348,  -541,  -541,     9,   -34,   109,  -541,   137,  -541,
+    -541,  -541,  -541,   442,  -541,  -541,   352,  -541,   943,   -36,
+     -36,   505,   505,   470,  -541,   486,   354,  -541,  -541,   782,
+     782,   488,   -36,   -36,   435,  -541,   782,   490,  -541,   782,
+    -541
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -546,   394,   395,   396,   280,   283,  -170,  -546,     0,   -16,
-     444,    15,  -546,  -546,  -546,  -546,    -1,  -546,  -546,  -546,
-    -157,  -546,  -418,  -546,  -229,  -546,  -292,    23,  -546,  -307,
-    -546,  -546,   -26,   305,  -120,  -546,   429,   436,   -59,  -156,
-    -235,   126,   168,   307,  -546,  -546,   526,  -546,  -546,  -546,
-    -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,   456,  -546,
-    -546,  -546,  -546,  -546,  -546,  -545,  -142,   108,  -186,  -546,
-     490,  -546,  -546,  -546,  -546,  -546,    51,   138,  -546,  -546,
-    -546,  -546
+    -541,   381,   382,   387,   270,   271,  -170,  -541,     0,   -24,
+     426,     8,  -541,  -541,  -541,  -541,    56,  -541,  -541,  -541,
+    -161,  -541,  -393,  -541,  -217,  -541,  -541,  -292,     5,  -541,
+    -310,  -541,  -541,   -26,   298,  -120,  -541,   411,   430,  -115,
+    -157,  -235,    94,   130,   312,  -541,  -541,   519,  -541,  -541,
+    -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,   448,
+    -541,  -541,  -541,  -541,  -541,  -541,  -540,  -111,   -51,  -179,
+    -541,   482,  -541,  -541,  -541,  -541,  -541,    46,   133,  -541,
+    -541,  -541,  -541
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -204
+#define YYTABLE_NINF -206
 static const yytype_int16 yytable[] =
 {
-      11,    81,   272,   335,   261,   104,   163,   271,   236,   304,
-     164,   383,   475,   271,   425,    13,   273,    11,   262,   441,
-     350,   352,   443,   584,   308,   309,   310,   311,   312,   405,
-     406,   315,    13,   426,    90,    21,    45,   425,    46,    83,
-      84,   593,    93,   142,   142,   415,    88,  -203,   415,    22,
-     131,   108,    89,    24,   143,   230,   421,   132,    26,   468,
-     161,   442,   316,   415,   442,   -67,     1,     2,   269,     3,
-       4,     5,   420,   415,   270,   134,   488,     6,     7,   108,
-     503,   110,   479,   111,   415,   134,   233,   117,   118,   333,
-     149,   416,    11,   110,    85,   111,    86,   544,     8,   332,
-     149,     9,   550,   551,    27,    10,    49,    50,    51,    25,
-     591,    52,   227,   228,   419,   110,   231,   111,   500,     1,
-     234,   474,     3,     2,     5,   372,     4,   372,   372,   110,
-     372,   111,   397,   385,   435,    43,   552,   398,   399,   400,
-     553,   165,   401,   110,   267,   111,   402,   403,   239,   240,
-     241,   242,   567,   377,   587,   588,   589,   590,   585,    59,
-     105,   552,    28,   372,   498,   556,    57,   302,   303,   267,
-     305,   372,   372,    94,   317,   318,   599,   600,   264,   380,
-     110,    58,   111,   306,   267,   267,   267,   267,   267,   313,
-     314,   267,   114,   525,   115,   526,   395,   382,   110,   134,
-     111,   447,    61,   449,   450,   451,   398,   399,   400,   149,
-     110,   401,   111,   543,    90,   402,   403,   -55,   -55,   -55,
-     -55,    37,    38,    39,    97,    29,    30,    31,    32,    33,
-      34,    35,  -139,    36,  -139,   372,   372,   372,   145,   146,
-     237,   238,   557,   372,    63,    64,    98,   149,   516,   319,
-     320,   112,   113,   372,   372,    99,     1,     2,   378,     3,
-       4,     5,   261,   101,   102,   103,   321,   322,    86,   323,
-     324,   138,   325,   326,   327,   379,   262,   139,   162,   223,
-     225,   226,   410,   411,   412,   413,   414,   229,   -56,   232,
-     149,   396,   267,   235,   -57,   422,   423,   424,   -60,   372,
-     -59,   372,   527,   -58,   372,   530,   531,   532,   243,   265,
-     372,   372,   271,   334,   341,   342,   343,     1,   344,   345,
-       3,   354,     5,   418,   576,   353,   355,   578,    37,    38,
-      39,   356,   433,   430,   357,   398,   399,   400,   372,   372,
-     401,   372,   372,   359,   402,   403,   386,   372,   387,   459,
-     460,   394,   388,   389,   390,   391,   466,   372,   407,   408,
-     409,   267,   448,   267,   267,   267,   436,   437,   454,   120,
-     121,   122,   123,   124,   125,   446,   452,   374,   375,   568,
-     376,   458,   471,   453,   457,    63,    64,   372,   106,    66,
-      67,    68,    69,    70,    71,    72,   462,     1,     2,   586,
-       3,     4,     5,   504,   505,   506,   507,   463,   372,   372,
-     509,   510,   464,   384,   465,   319,   320,   467,   469,   470,
-     472,   392,   393,   473,   372,   476,   478,    73,   477,   480,
-     481,   499,   321,   322,   482,   323,   324,   483,   325,   326,
-     327,   484,   535,   536,   486,   511,   488,   372,   372,   489,
-     515,   491,   442,   492,   372,   372,   521,   493,   496,   497,
-     501,   372,   267,   502,   372,   267,   267,   267,   517,   538,
-     521,   529,   537,   508,   539,   512,   540,   541,   560,   542,
-     561,   562,   547,   548,   549,   438,   439,   440,   554,   558,
-     559,   564,   566,   445,   577,   579,   360,   361,   580,   581,
-      63,    64,   362,   455,   456,   582,   -18,   -19,   592,   596,
-     598,   597,     1,     2,   603,     3,     4,     5,   363,   364,
-     365,   604,   606,   215,   216,   217,   575,   339,   563,    74,
-     330,   340,    75,   366,   367,    76,   129,    77,   107,   545,
-     144,   141,   338,    44,   512,   128,    96,   533,   461,   485,
-     368,   487,     0,     0,   490,     0,     0,     0,     0,     0,
-     494,   495,     0,     0,     0,     0,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   247,   248,     0,     0,     0,     0,     0,   518,   519,
-       0,   523,   524,     0,     0,     0,     0,   528,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   534,   249,   197,
-     570,   571,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,     0,   250,     0,   251,   252,   253,   321,   322,     0,
-     323,   324,     0,   325,   326,   327,     0,   555,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   360,   361,     0,
-     369,    63,    64,   362,     0,     0,     0,     0,   572,   573,
-       0,     0,     0,     1,     2,     0,     3,     4,     5,   363,
-     364,   365,   285,   286,   583,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   366,   367,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,     0,   594,   595,     0,
-       0,   368,     0,     0,   601,   602,     0,     0,     0,     0,
-       0,   605,     0,     0,   607,     0,     0,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   247,   248,     0,     0,     0,     0,     0,     0,
-       0,     0,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,     0,     0,     0,   249,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,     0,   250,     0,   251,   252,   253,     0,     0,
-       0,     0,     0,   360,   361,     0,     0,    63,    64,   362,
-       0,     0,     0,     0,   110,     0,   111,     0,     0,     1,
-       2,   369,     3,     4,     5,   363,   364,   365,     0,     0,
-      63,    64,     0,     0,     0,     0,     0,     0,     0,     0,
-     366,   367,     1,     2,     0,     3,     4,     5,   244,     0,
-       0,     0,     0,     0,     0,     0,     0,   368,     0,     0,
-       0,     0,     0,   245,   246,     0,     0,     0,     0,     0,
-       0,     0,     0,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   247,   248,
-       0,     0,     0,     0,     0,     0,   176,   177,   178,   179,
+      11,    81,   272,   261,   161,   271,   163,   104,    13,   271,
+      90,   383,   273,   164,    24,   335,   304,    11,    93,    25,
+     350,   352,   441,   443,    26,    13,   405,   406,   586,    43,
+     233,   308,   309,   310,   311,   312,   425,   475,   315,   236,
+      21,   142,   142,   -55,   -55,   -55,   -55,   415,   596,   262,
+     415,   108,   143,   230,    22,   426,   420,   110,   316,   111,
+      45,   421,    46,   332,   442,   442,   237,   238,    29,    30,
+      31,    32,    33,    34,    35,   134,    36,   415,   415,   108,
+      28,   319,   320,   269,   131,   134,   415,   479,   468,   270,
+     149,   132,    11,   416,   117,   118,    83,    84,   321,   322,
+     149,   323,   324,    88,   325,   326,   327,   488,    85,    89,
+      86,   503,   227,   228,   419,   425,   231,   110,   474,   111,
+     234,   110,   544,   111,    27,    63,    64,   550,   551,   333,
+      49,    50,    51,     2,   435,    52,     4,     1,     2,   397,
+       3,     4,     5,     1,   267,   165,     3,   593,     5,    61,
+      94,   567,   114,   377,   115,   587,   372,    97,   372,   372,
+    -141,   372,  -141,   105,   498,   317,   318,   302,   303,   267,
+     305,   264,    37,    38,    39,   239,   240,   241,   242,   589,
+     590,   591,   592,   306,   267,   267,   267,   267,   267,   313,
+     314,   267,    57,   525,   372,   526,   395,   552,    58,   134,
+      59,   553,   372,   372,   602,   603,   145,   146,   447,   149,
+     449,   450,   451,   112,   113,   398,   399,   400,   374,   375,
+     401,   376,    90,   101,   402,   403,   410,   411,   412,   413,
+     414,   120,   121,   122,   123,   124,   125,    98,    99,   422,
+     423,   424,   557,   398,   399,   400,   552,   149,   401,   102,
+     556,   103,   402,   403,   384,   110,    86,   111,   378,   385,
+     516,   261,   392,   393,   138,   162,   372,   372,   372,   225,
+     139,   398,   399,   400,   372,   379,   401,    37,    38,    39,
+     402,   403,   223,   226,   372,   372,   380,   110,   232,   111,
+     149,   396,   267,   459,   460,   235,   382,   110,     1,   111,
+     466,     3,   110,     5,   111,   500,   229,   262,   110,   527,
+     111,   543,   530,   531,   532,   -56,   -57,   -60,   -59,   -58,
+     243,   265,   334,   418,   353,   271,   438,   439,   440,   341,
+     372,   342,   372,   430,   445,   372,   576,   343,   344,   578,
+     345,   372,   372,   354,   455,   456,   355,   504,   505,   506,
+     507,   356,   357,   359,   509,   510,   386,   387,   388,   389,
+     390,   267,   448,   267,   267,   267,   394,   391,   454,   372,
+     372,   407,   372,   372,   408,   409,   433,   436,   372,   568,
+     437,   458,   452,   446,   453,   457,   535,   536,   372,   462,
+     485,   463,   487,   464,   465,   490,   319,   320,   469,   588,
+     470,   494,   495,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   321,   322,   467,   323,   324,   372,   325,
+     326,   327,   560,   471,   561,   562,   472,   473,   476,   518,
+     519,   499,   523,   524,   477,   478,   480,   481,   528,   372,
+     372,   482,   483,   484,   486,   511,   488,   489,   534,   491,
+     515,   492,   442,   493,   508,   372,   521,   496,   547,   538,
+     564,   566,   267,   582,   594,   267,   267,   267,   497,   501,
+     521,   502,   517,   529,   537,   512,   539,   540,   555,   541,
+     372,   372,   548,   542,   -18,   549,   583,   599,   372,   372,
+     558,   554,   559,   579,   577,   372,   580,   581,   372,   572,
+     573,   -19,   595,   600,   601,   606,   607,   609,   360,   361,
+     215,   216,    63,    64,   362,   585,   217,   339,   129,   340,
+     563,   545,   144,   330,     1,     2,   575,     3,     4,     5,
+     363,   364,   365,   285,   286,   141,    44,   128,    96,     0,
+     597,   598,   533,   461,   512,   366,   367,   338,   604,   605,
+       0,     0,     0,     0,     0,   608,     0,     0,   610,     0,
+      63,    64,   368,   106,    66,    67,    68,    69,    70,    71,
+      72,     0,     1,     2,     0,     3,     4,     5,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   247,   248,     0,     0,     0,     0,     0,
+       0,     0,    73,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,     0,     0,     0,
+     249,   197,   570,   571,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,     0,   250,     0,   251,   252,   253,   321,
+     322,     0,   323,   324,     0,   325,   326,   327,   360,   361,
+       0,     0,    63,    64,   362,     0,     0,     0,  -205,     0,
+       0,     0,     0,   369,     1,     2,     0,     3,     4,     5,
+     363,   364,   365,     0,     0,     0,   -67,     1,     2,     0,
+       3,     4,     5,     0,     0,   366,   367,     0,     6,     7,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   368,     0,     0,    74,     0,     0,    75,     8,
+       0,    76,     9,    77,   107,     0,    10,     0,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   247,   248,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     249,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,     0,   250,     0,   251,   252,   253,     0,
+       0,     0,     0,     0,     0,   360,   361,     0,     0,    63,
+      64,   362,     0,     0,     0,     0,   110,     0,   111,     0,
+       0,     1,     2,   369,     3,     4,     5,   363,   364,   365,
+       0,     0,    63,    64,     0,     0,     0,     0,     0,     0,
+       0,     0,   366,   367,     1,     2,     0,     3,     4,     5,
+     244,     0,     0,     0,     0,     0,     0,     0,     0,   368,
+       0,     0,     0,     0,     0,   245,   246,     0,     0,     0,
+       0,     0,     0,     0,     0,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     247,   248,     0,     0,     0,     0,     0,     0,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   247,   248,     0,     0,   249,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+       0,   250,     0,   251,   252,   253,     0,     0,     0,     0,
+     249,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,     0,   250,     0,   251,   252,   253,     0,
+     369,     0,     0,     0,     0,     0,   360,   361,     0,     0,
+       0,     0,   362,     0,     0,     0,   110,     0,   111,     0,
+     254,     0,     0,   255,     0,   256,     0,   257,   363,   364,
+     365,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   366,   367,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    63,    64,
+     368,   106,    66,    67,    68,    69,    70,    71,    72,     0,
+       1,     2,     0,     3,     4,     5,   176,   177,   178,   179,
      180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   247,   248,     0,     0,   249,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,     0,   250,
-       0,   251,   252,   253,     0,     0,     0,     0,   249,   197,
+     190,   247,   248,     0,     0,     0,     0,     0,    63,    64,
+      73,   106,   152,   153,   154,   155,   156,   157,    72,     0,
+       1,     2,     0,     3,     4,     5,     0,     0,   249,   197,
      198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,     0,   250,     0,   251,   252,   253,   369,     0,     0,
-       0,     0,     0,   360,   361,     0,     0,     0,     0,   362,
-       0,     0,     0,   110,     0,   111,     0,   254,     0,     0,
-     255,     0,   256,     0,   257,   363,   364,   365,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     366,   367,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    63,    64,   368,   106,    66,
-      67,    68,    69,    70,    71,    72,     0,     1,     2,     0,
-       3,     4,     5,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   247,   248,
-       0,     0,     0,     0,     0,    63,    64,    73,   106,   152,
-     153,   154,   155,   156,   157,    72,     0,     1,     2,     0,
-       3,     4,     5,     0,     0,   249,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,     0,   250,
-       0,   251,   252,   253,     0,    63,    64,    73,   106,   152,
-     153,   154,   155,   156,   157,    72,     0,     1,     2,     0,
-       3,     4,     5,     0,     0,    63,    64,   369,   106,    66,
-      67,    68,    69,    70,    71,    72,     0,     1,     2,     0,
-       3,     4,     5,     0,     0,     0,     0,    73,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   133,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    73,     0,    74,
-       0,     0,    75,     0,     0,    76,     0,    77,   140,    63,
-      64,     0,   147,    66,    67,    68,    69,    70,    71,    72,
-       0,     1,     2,     0,     3,     4,     5,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    74,
-       0,     0,    75,     0,     0,    76,     0,    77,   351,    63,
-      64,    73,   106,    66,    67,    68,    69,    70,    71,    72,
+     208,     0,   250,     0,   251,   252,   253,     0,    63,    64,
+      73,   106,   152,   153,   154,   155,   156,   157,    72,     0,
+       1,     2,     0,     3,     4,     5,     0,     0,     0,    63,
+      64,   369,   106,    66,    67,    68,    69,    70,    71,    72,
        0,     1,     2,     0,     3,     4,     5,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    74,
-       0,   329,    75,     0,     0,    76,     0,    77,   417,     0,
-       0,    73,     0,     0,     0,     0,     0,     0,     0,    74,
-       0,     0,    75,     0,     0,    76,     0,    77,     0,    63,
-      64,     0,   106,   152,   153,   154,   155,   156,   157,    72,
-       0,     1,     2,   148,     3,     4,     5,     0,    63,    64,
-       0,   106,    66,    67,    68,    69,    70,    71,    72,     0,
-       1,     2,     0,     3,     4,     5,     0,     0,     0,     0,
+      73,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   133,     0,     0,     0,     0,     0,     0,     0,     0,
        0,    73,     0,    74,     0,     0,    75,     0,     0,    76,
-     429,    77,     0,     0,     0,     0,     0,     0,    63,    64,
-      73,   106,    66,    67,    68,    69,    70,    71,    72,     0,
-       1,     2,     0,     3,     4,     5,     0,     0,     0,     0,
+       0,    77,   140,    63,    64,     0,   147,    66,    67,    68,
+      69,    70,    71,    72,     0,     1,     2,     0,     3,     4,
+       5,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,    74,     0,     0,    75,     0,     0,    76,
-     514,    77,     0,     0,     0,     0,     0,     0,    63,    64,
-      73,    65,    66,    67,    68,    69,    70,    71,    72,     0,
-       1,     2,     0,     3,     4,     5,    63,    64,     0,   106,
-     152,   153,   154,   155,   156,   157,    72,     0,     1,     2,
-       0,     3,     4,     5,     0,     0,     0,     0,     0,     0,
-      73,     0,     0,    74,     0,     0,    75,     0,   346,    76,
-       0,    77,     0,     0,     0,     0,     0,     0,    73,     0,
-       0,     0,    74,     0,     0,    75,     0,     0,    76,     0,
-      77,    63,    64,     0,   147,    66,    67,    68,    69,    70,
+       0,    77,   351,    63,    64,    73,   106,    66,    67,    68,
+      69,    70,    71,    72,     0,     1,     2,     0,     3,     4,
+       5,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    74,     0,   329,    75,     0,     0,    76,
+       0,    77,   417,     0,     0,    73,     0,     0,     0,     0,
+       0,     0,     0,     0,    74,     0,     0,    75,     0,     0,
+      76,     0,    77,    63,    64,     0,   106,   152,   153,   154,
+     155,   156,   157,    72,     0,     1,     2,   148,     3,     4,
+       5,    63,    64,     0,   106,    66,    67,    68,    69,    70,
       71,    72,     0,     1,     2,     0,     3,     4,     5,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    74,     0,     0,    75,     0,     0,    76,     0,
-      77,    63,    64,    73,   106,    66,    67,    68,    69,    70,
+       0,     0,     0,     0,     0,    73,     0,     0,    74,     0,
+       0,    75,     0,   429,    76,     0,    77,     0,     0,     0,
+       0,    63,    64,    73,   106,    66,    67,    68,    69,    70,
       71,    72,     0,     1,     2,     0,     3,     4,     5,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    74,     0,
+       0,    75,     0,   514,    76,     0,    77,     0,     0,     0,
+       0,    63,    64,    73,    65,    66,    67,    68,    69,    70,
+      71,    72,     0,     1,     2,     0,     3,     4,     5,    63,
+      64,     0,   106,   152,   153,   154,   155,   156,   157,    72,
+       0,     1,     2,     0,     3,     4,     5,     0,     0,     0,
+       0,     0,     0,    73,     0,     0,     0,     0,    74,     0,
+       0,    75,     0,   346,    76,     0,    77,     0,     0,     0,
+       0,    73,     0,     0,     0,     0,    74,     0,     0,    75,
+       0,     0,    76,     0,    77,    63,    64,     0,   147,    66,
+      67,    68,    69,    70,    71,    72,     0,     1,     2,     0,
+       3,     4,     5,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    74,     0,     0,    75,
+       0,     0,    76,     0,    77,    63,    64,    73,   106,    66,
+      67,    68,    69,    70,    71,    72,     0,     1,     2,     0,
+       3,     4,     5,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    74,     0,     0,    75,
+       0,     0,    76,     0,    77,     0,     0,    73,     0,     0,
+       0,     0,     0,     0,    74,     0,     0,    75,     0,     0,
+      76,     0,    77,    63,    64,     0,   266,    66,    67,    68,
+      69,    70,    71,    72,     0,     1,     2,     0,     3,     4,
+       5,    63,    64,     0,   106,   152,   153,   154,   155,   156,
+     157,    72,     0,     1,     2,     0,     3,     4,     5,     0,
+       0,     0,     0,     0,     0,    73,     0,     0,     0,     0,
+      74,     0,     0,    75,     0,     0,    76,     0,    77,     0,
+       0,    63,    64,    73,   106,    66,    67,    68,    69,    70,
+      71,   520,     0,     1,     2,     0,     3,     4,     5,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      74,     0,     0,    75,     0,     0,    76,     0,    77,     0,
+       0,    63,    64,    73,   106,    66,    67,    68,    69,    70,
+      71,   574,     0,     1,     2,     0,     3,     4,     5,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    74,     0,     0,    75,     0,     0,    76,     0,
-      77,     0,     0,    73,     0,     0,     0,     0,     0,     0,
-      74,     0,     0,    75,     0,     0,    76,     0,    77,    63,
-      64,     0,   266,    66,    67,    68,    69,    70,    71,    72,
-       0,     1,     2,     0,     3,     4,     5,    63,    64,     0,
-     106,   152,   153,   154,   155,   156,   157,    72,     0,     1,
-       2,     0,     3,     4,     5,     0,     0,     0,     0,     0,
-       0,    73,     0,     0,     0,    74,     0,     0,    75,     0,
-       0,    76,     0,    77,     0,     0,     0,    63,    64,    73,
-     106,    66,    67,    68,    69,    70,    71,   520,     0,     1,
-       2,     0,     3,     4,     5,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    74,     0,     0,    75,     0,
-       0,    76,     0,    77,     0,     0,     0,    63,    64,    73,
-     106,    66,    67,    68,    69,    70,    71,   574,     0,     1,
-       2,     0,     3,     4,     5,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    73,
-     167,     0,     0,    74,     0,     0,    75,     0,     0,    76,
-       0,    77,     0,     0,     0,     0,     0,     0,     0,   168,
-     169,    74,     0,     0,    75,     0,     0,    76,     0,   349,
-       0,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,     0,     0,     0,     0,     0,     0,
-       0,    74,     0,     0,    75,     0,     0,    76,     0,    77,
-       0,     0,     0,     0,   193,   194,   195,     0,     0,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,  -202,     0,
-       0,    74,     0,     0,    75,     0,     0,    76,     0,    77,
-       0,     0,     0,     0,     0,     0,   -67,     1,     2,     0,
-       3,     4,     5,     0,     0,     0,     0,     0,     6,     7,
+       0,     0,     0,    73,   167,     0,     0,     0,    74,     0,
+       0,    75,     0,     0,    76,     0,    77,     0,     0,     0,
+       0,     0,     0,   168,   169,     0,    74,     0,     0,    75,
+       0,     0,    76,     0,   349,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,     0,     0,
+       0,     0,     0,     0,     0,     0,    74,     0,     0,    75,
+       0,     0,    76,     0,    77,     0,     0,     0,   193,   194,
+     195,     0,     0,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,  -204,     0,     0,     0,    74,     0,     0,    75,
+       0,     0,    76,     0,    77,     0,     0,     0,     0,     0,
+     -67,     1,     2,     0,     3,     4,     5,     0,     0,     0,
+       0,     0,     6,     7,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     8,
-       0,     0,     9,     0,     0,     0,    10
+       0,     0,     0,     8,     0,     0,     9,     0,     0,     0,
+      10
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    27,   172,   232,   160,     4,   126,    11,   150,   195,
-      28,   303,   430,    11,    34,     0,   173,    17,   160,    11,
-     255,   256,    11,   568,   210,   211,   212,   213,   214,   336,
-     337,   217,    17,    53,    21,    52,    46,    34,    48,    40,
-      41,   586,    29,   149,   149,   149,    47,     0,   149,    66,
-     149,    77,    53,   148,   160,   160,   160,   156,   148,   160,
-     119,    53,   219,   149,    53,    18,    19,    20,    11,    22,
-      23,    24,   158,   149,    17,   101,   149,    30,    31,   105,
-     153,   150,   158,   152,   149,   111,   145,    32,    33,   158,
-     116,   156,    92,   150,    35,   152,    37,   515,    51,   156,
-     126,    54,   520,   521,    18,    58,    42,    43,    44,    57,
-      38,    47,   138,   139,   349,   150,   142,   152,   153,    19,
-     146,   428,    22,    20,    24,   267,    23,   269,   270,   150,
-     272,   152,   318,   154,   369,     0,   149,   134,   135,   136,
-     153,   159,   139,   150,   170,   152,   143,   144,     3,     4,
-       5,     6,   156,   273,   572,   573,   574,   575,   156,   154,
-     159,   149,   148,   305,   456,   153,   148,   193,   194,   195,
-     196,   313,   314,   160,   113,   114,   594,   595,   163,   149,
-     150,   148,   152,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,    42,   485,    44,   487,   316,   149,   150,   225,
-     152,   387,    22,   389,   390,   391,   134,   135,   136,   235,
-     150,   139,   152,   153,    21,   143,   144,     3,     4,     5,
-       6,   145,   146,   147,    22,    42,    43,    44,    45,    46,
-      47,    48,   150,    50,   152,   377,   378,   379,   112,   113,
-      26,    27,   534,   385,     7,     8,    22,   273,   477,   117,
-     118,    83,    84,   395,   396,    22,    19,    20,   284,    22,
-      23,    24,   418,   152,     4,     4,   134,   135,    37,   137,
-     138,   155,   140,   141,   142,   301,   418,   155,     4,    22,
-     149,   153,   341,   342,   343,   344,   345,   158,     9,   153,
-     316,   317,   318,   152,     9,   354,   355,   356,     9,   441,
-       9,   443,   488,     9,   446,   491,   492,   493,     9,    55,
-     452,   453,    11,   158,   152,   152,   152,    19,   152,   152,
-      22,   152,    24,   349,   553,    22,   152,   556,   145,   146,
-     147,   152,    59,   359,   149,   134,   135,   136,   480,   481,
-     139,   483,   484,   152,   143,   144,   149,   489,   149,   408,
-     409,    38,   149,   149,   149,   149,   415,   499,    38,   152,
-     152,   387,   388,   389,   390,   391,   149,   149,   394,    60,
-      61,    62,    63,    64,    65,   154,   149,   269,   270,   549,
-     272,   407,    38,   149,   149,     7,     8,   529,    10,    11,
-      12,    13,    14,    15,    16,    17,   149,    19,    20,   569,
-      22,    23,    24,   462,   463,   464,   465,   149,   550,   551,
-     469,   470,   149,   305,   149,   117,   118,   158,   149,   149,
-      22,   313,   314,     4,   566,   149,    22,    49,   153,    17,
-      17,   457,   134,   135,   152,   137,   138,   149,   140,   141,
-     142,   149,   501,   502,     4,   471,   149,   589,   590,   149,
-     476,   149,    53,   149,   596,   597,   482,   149,   152,   149,
-     149,   603,   488,   149,   606,   491,   492,   493,   149,   153,
-     496,   149,   149,   158,   149,   475,   149,   153,   537,   153,
-     539,   540,    22,   149,   154,   377,   378,   379,   156,   153,
-     153,    53,    17,   385,   156,   153,     3,     4,   153,   153,
-       7,     8,     9,   395,   396,     4,   152,   152,   149,    17,
-     149,    17,    19,    20,    17,    22,    23,    24,    25,    26,
-      27,    71,    17,   129,   129,   129,   552,   247,   544,   151,
-     225,   248,   154,    40,    41,   157,    92,   159,   160,   516,
-     111,   105,   235,    17,   544,    89,    56,   496,   410,   441,
-      57,   443,    -1,    -1,   446,    -1,    -1,    -1,    -1,    -1,
-     452,   453,    -1,    -1,    -1,    -1,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    -1,    -1,    -1,    -1,    -1,   480,   481,
-      -1,   483,   484,    -1,    -1,    -1,    -1,   489,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   499,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,    -1,   129,    -1,   131,   132,   133,   134,   135,    -1,
-     137,   138,    -1,   140,   141,   142,    -1,   529,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,    -1,
-     157,     7,     8,     9,    -1,    -1,    -1,    -1,   550,   551,
-      -1,    -1,    -1,    19,    20,    -1,    22,    23,    24,    25,
-      26,    27,    26,    27,   566,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    40,    41,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,    -1,   589,   590,    -1,
-      -1,    57,    -1,    -1,   596,   597,    -1,    -1,    -1,    -1,
-      -1,   603,    -1,    -1,   606,    -1,    -1,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,    -1,    -1,    -1,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,    -1,   129,    -1,   131,   132,   133,    -1,    -1,
-      -1,    -1,    -1,     3,     4,    -1,    -1,     7,     8,     9,
-      -1,    -1,    -1,    -1,   150,    -1,   152,    -1,    -1,    19,
-      20,   157,    22,    23,    24,    25,    26,    27,    -1,    -1,
-       7,     8,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      40,    41,    19,    20,    -1,    22,    23,    24,    25,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
+       0,    27,   172,   160,   119,    11,   126,     4,     0,    11,
+      21,   303,   173,    28,   149,   232,   195,    17,    29,    57,
+     255,   256,    11,    11,   149,    17,   336,   337,   568,     0,
+     145,   210,   211,   212,   213,   214,    34,   430,   217,   150,
+      52,   150,   150,     3,     4,     5,     6,   150,   588,   160,
+     150,    77,   161,   161,    66,    53,   159,   151,   219,   153,
+      46,   161,    48,   157,    53,    53,    26,    27,    42,    43,
+      44,    45,    46,    47,    48,   101,    50,   150,   150,   105,
+     149,   117,   118,    11,   150,   111,   150,   159,   161,    17,
+     116,   157,    92,   157,    32,    33,    40,    41,   134,   135,
+     126,   137,   138,    47,   140,   141,   142,   150,    35,    53,
+      37,   154,   138,   139,   349,    34,   142,   151,   428,   153,
+     146,   151,   515,   153,    18,     7,     8,   520,   521,   159,
+      42,    43,    44,    20,   369,    47,    23,    19,    20,   318,
+      22,    23,    24,    19,   170,   160,    22,    38,    24,    22,
+     161,   157,    42,   273,    44,   157,   267,    22,   269,   270,
+     151,   272,   153,   160,   456,   113,   114,   193,   194,   195,
+     196,   163,   146,   147,   148,     3,     4,     5,     6,   572,
+     573,   574,   575,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   149,   485,   305,   487,   316,   150,   149,   225,
+     155,   154,   313,   314,   597,   598,   112,   113,   387,   235,
+     389,   390,   391,    83,    84,   134,   135,   136,   269,   270,
+     139,   272,    21,   153,   143,   144,   341,   342,   343,   344,
+     345,    60,    61,    62,    63,    64,    65,    22,    22,   354,
+     355,   356,   534,   134,   135,   136,   150,   273,   139,     4,
+     154,     4,   143,   144,   305,   151,    37,   153,   284,   155,
+     477,   418,   313,   314,   156,     4,   377,   378,   379,   150,
+     156,   134,   135,   136,   385,   301,   139,   146,   147,   148,
+     143,   144,    22,   154,   395,   396,   150,   151,   154,   153,
+     316,   317,   318,   408,   409,   153,   150,   151,    19,   153,
+     415,    22,   151,    24,   153,   154,   159,   418,   151,   488,
+     153,   154,   491,   492,   493,     9,     9,     9,     9,     9,
+       9,    55,   159,   349,    22,    11,   377,   378,   379,   153,
+     441,   153,   443,   359,   385,   446,   553,   153,   153,   556,
+     153,   452,   453,   153,   395,   396,   153,   462,   463,   464,
+     465,   153,   150,   153,   469,   470,   150,   150,   150,   150,
+     150,   387,   388,   389,   390,   391,    38,   150,   394,   480,
+     481,    38,   483,   484,   153,   153,    59,   150,   489,   549,
+     150,   407,   150,   155,   150,   150,   501,   502,   499,   150,
+     441,   150,   443,   150,   150,   446,   117,   118,   150,   569,
+     150,   452,   453,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   134,   135,   159,   137,   138,   529,   140,
+     141,   142,   537,    38,   539,   540,    22,     4,   150,   480,
+     481,   457,   483,   484,   154,    22,    17,    17,   489,   550,
+     551,   153,   150,   150,     4,   471,   150,   150,   499,   150,
+     476,   150,    53,   150,   159,   566,   482,   153,    22,   154,
+      53,    17,   488,     4,    22,   491,   492,   493,   150,   150,
+     496,   150,   150,   150,   150,   475,   150,   150,   529,   154,
+     591,   592,   150,   154,   153,   155,   145,    17,   599,   600,
+     154,   157,   154,   154,   157,   606,   154,   154,   609,   550,
+     551,   153,   150,    17,   150,    17,    71,    17,     3,     4,
+     129,   129,     7,     8,     9,   566,   129,   247,    92,   248,
+     544,   516,   111,   225,    19,    20,   552,    22,    23,    24,
+      25,    26,    27,    26,    27,   105,    17,    89,    56,    -1,
+     591,   592,   496,   410,   544,    40,    41,   235,   599,   600,
+      -1,    -1,    -1,    -1,    -1,   606,    -1,    -1,   609,    -1,
+       7,     8,    57,    10,    11,    12,    13,    14,    15,    16,
+      17,    -1,    19,    20,    -1,    22,    23,    24,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    49,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,    -1,    -1,    -1,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,   129,    -1,   131,   132,   133,   134,
+     135,    -1,   137,   138,    -1,   140,   141,   142,     3,     4,
+      -1,    -1,     7,     8,     9,    -1,    -1,    -1,     0,    -1,
+      -1,    -1,    -1,   158,    19,    20,    -1,    22,    23,    24,
+      25,    26,    27,    -1,    -1,    -1,    18,    19,    20,    -1,
+      22,    23,    24,    -1,    -1,    40,    41,    -1,    30,    31,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    57,    -1,    -1,   152,    -1,    -1,   155,    51,
+      -1,   158,    54,   160,   161,    -1,    58,    -1,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,   129,    -1,   131,   132,   133,    -1,
+      -1,    -1,    -1,    -1,    -1,     3,     4,    -1,    -1,     7,
+       8,     9,    -1,    -1,    -1,    -1,   151,    -1,   153,    -1,
+      -1,    19,    20,   158,    22,    23,    24,    25,    26,    27,
+      -1,    -1,     7,     8,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    40,    41,    19,    20,    -1,    22,    23,    24,
+      25,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,
+      -1,    -1,    -1,    -1,    -1,    40,    41,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    -1,    -1,    -1,    -1,    -1,    -1,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    -1,    -1,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+      -1,   129,    -1,   131,   132,   133,    -1,    -1,    -1,    -1,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,    -1,   129,    -1,   131,   132,   133,    -1,
+     158,    -1,    -1,    -1,    -1,    -1,     3,     4,    -1,    -1,
+      -1,    -1,     9,    -1,    -1,    -1,   151,    -1,   153,    -1,
+     155,    -1,    -1,   158,    -1,   160,    -1,   162,    25,    26,
+      27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    40,    41,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      -1,    -1,    -1,    -1,    -1,    -1,    73,    74,    75,    76,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     7,     8,
+      57,    10,    11,    12,    13,    14,    15,    16,    17,    -1,
+      19,    20,    -1,    22,    23,    24,    73,    74,    75,    76,
       77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    -1,    -1,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,    -1,   129,
-      -1,   131,   132,   133,    -1,    -1,    -1,    -1,   115,   116,
+      87,    88,    89,    -1,    -1,    -1,    -1,    -1,     7,     8,
+      49,    10,    11,    12,    13,    14,    15,    16,    17,    -1,
+      19,    20,    -1,    22,    23,    24,    -1,    -1,   115,   116,
      117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,    -1,   129,    -1,   131,   132,   133,   157,    -1,    -1,
-      -1,    -1,    -1,     3,     4,    -1,    -1,    -1,    -1,     9,
-      -1,    -1,    -1,   150,    -1,   152,    -1,   154,    -1,    -1,
-     157,    -1,   159,    -1,   161,    25,    26,    27,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      40,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     7,     8,    57,    10,    11,
-      12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
-      22,    23,    24,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      -1,    -1,    -1,    -1,    -1,     7,     8,    49,    10,    11,
-      12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
-      22,    23,    24,    -1,    -1,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,    -1,   129,
-      -1,   131,   132,   133,    -1,     7,     8,    49,    10,    11,
-      12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
-      22,    23,    24,    -1,    -1,     7,     8,   157,    10,    11,
-      12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
-      22,    23,    24,    -1,    -1,    -1,    -1,    49,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,    -1,   151,
-      -1,    -1,   154,    -1,    -1,   157,    -1,   159,   160,     7,
-       8,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
-      -1,    19,    20,    -1,    22,    23,    24,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,
-      -1,    -1,   154,    -1,    -1,   157,    -1,   159,   160,     7,
-       8,    49,    10,    11,    12,    13,    14,    15,    16,    17,
+     127,    -1,   129,    -1,   131,   132,   133,    -1,     7,     8,
+      49,    10,    11,    12,    13,    14,    15,    16,    17,    -1,
+      19,    20,    -1,    22,    23,    24,    -1,    -1,    -1,     7,
+       8,   158,    10,    11,    12,    13,    14,    15,    16,    17,
       -1,    19,    20,    -1,    22,    23,    24,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,
-      -1,    39,   154,    -1,    -1,   157,    -1,   159,   160,    -1,
-      -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   151,
-      -1,    -1,   154,    -1,    -1,   157,    -1,   159,    -1,     7,
+      49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    49,    -1,   152,    -1,    -1,   155,    -1,    -1,   158,
+      -1,   160,   161,     7,     8,    -1,    10,    11,    12,    13,
+      14,    15,    16,    17,    -1,    19,    20,    -1,    22,    23,
+      24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   152,    -1,    -1,   155,    -1,    -1,   158,
+      -1,   160,   161,     7,     8,    49,    10,    11,    12,    13,
+      14,    15,    16,    17,    -1,    19,    20,    -1,    22,    23,
+      24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   152,    -1,    39,   155,    -1,    -1,   158,
+      -1,   160,   161,    -1,    -1,    49,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   152,    -1,    -1,   155,    -1,    -1,
+     158,    -1,   160,     7,     8,    -1,    10,    11,    12,    13,
+      14,    15,    16,    17,    -1,    19,    20,   121,    22,    23,
+      24,     7,     8,    -1,    10,    11,    12,    13,    14,    15,
+      16,    17,    -1,    19,    20,    -1,    22,    23,    24,    -1,
+      -1,    -1,    -1,    -1,    -1,    49,    -1,    -1,   152,    -1,
+      -1,   155,    -1,    39,   158,    -1,   160,    -1,    -1,    -1,
+      -1,     7,     8,    49,    10,    11,    12,    13,    14,    15,
+      16,    17,    -1,    19,    20,    -1,    22,    23,    24,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   152,    -1,
+      -1,   155,    -1,    39,   158,    -1,   160,    -1,    -1,    -1,
+      -1,     7,     8,    49,    10,    11,    12,    13,    14,    15,
+      16,    17,    -1,    19,    20,    -1,    22,    23,    24,     7,
        8,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
-      -1,    19,    20,   121,    22,    23,    24,    -1,     7,     8,
-      -1,    10,    11,    12,    13,    14,    15,    16,    17,    -1,
-      19,    20,    -1,    22,    23,    24,    -1,    -1,    -1,    -1,
-      -1,    49,    -1,   151,    -1,    -1,   154,    -1,    -1,   157,
-      39,   159,    -1,    -1,    -1,    -1,    -1,    -1,     7,     8,
-      49,    10,    11,    12,    13,    14,    15,    16,    17,    -1,
-      19,    20,    -1,    22,    23,    24,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   151,    -1,    -1,   154,    -1,    -1,   157,
-      39,   159,    -1,    -1,    -1,    -1,    -1,    -1,     7,     8,
-      49,    10,    11,    12,    13,    14,    15,    16,    17,    -1,
-      19,    20,    -1,    22,    23,    24,     7,     8,    -1,    10,
-      11,    12,    13,    14,    15,    16,    17,    -1,    19,    20,
-      -1,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    -1,
-      49,    -1,    -1,   151,    -1,    -1,   154,    -1,   156,   157,
-      -1,   159,    -1,    -1,    -1,    -1,    -1,    -1,    49,    -1,
-      -1,    -1,   151,    -1,    -1,   154,    -1,    -1,   157,    -1,
-     159,     7,     8,    -1,    10,    11,    12,    13,    14,    15,
+      -1,    19,    20,    -1,    22,    23,    24,    -1,    -1,    -1,
+      -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,   152,    -1,
+      -1,   155,    -1,   157,   158,    -1,   160,    -1,    -1,    -1,
+      -1,    49,    -1,    -1,    -1,    -1,   152,    -1,    -1,   155,
+      -1,    -1,   158,    -1,   160,     7,     8,    -1,    10,    11,
+      12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
+      22,    23,    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   152,    -1,    -1,   155,
+      -1,    -1,   158,    -1,   160,     7,     8,    49,    10,    11,
+      12,    13,    14,    15,    16,    17,    -1,    19,    20,    -1,
+      22,    23,    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   152,    -1,    -1,   155,
+      -1,    -1,   158,    -1,   160,    -1,    -1,    49,    -1,    -1,
+      -1,    -1,    -1,    -1,   152,    -1,    -1,   155,    -1,    -1,
+     158,    -1,   160,     7,     8,    -1,    10,    11,    12,    13,
+      14,    15,    16,    17,    -1,    19,    20,    -1,    22,    23,
+      24,     7,     8,    -1,    10,    11,    12,    13,    14,    15,
+      16,    17,    -1,    19,    20,    -1,    22,    23,    24,    -1,
+      -1,    -1,    -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,
+     152,    -1,    -1,   155,    -1,    -1,   158,    -1,   160,    -1,
+      -1,     7,     8,    49,    10,    11,    12,    13,    14,    15,
       16,    17,    -1,    19,    20,    -1,    22,    23,    24,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   151,    -1,    -1,   154,    -1,    -1,   157,    -1,
-     159,     7,     8,    49,    10,    11,    12,    13,    14,    15,
+     152,    -1,    -1,   155,    -1,    -1,   158,    -1,   160,    -1,
+      -1,     7,     8,    49,    10,    11,    12,    13,    14,    15,
       16,    17,    -1,    19,    20,    -1,    22,    23,    24,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   151,    -1,    -1,   154,    -1,    -1,   157,    -1,
-     159,    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
-     151,    -1,    -1,   154,    -1,    -1,   157,    -1,   159,     7,
-       8,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
-      -1,    19,    20,    -1,    22,    23,    24,     7,     8,    -1,
-      10,    11,    12,    13,    14,    15,    16,    17,    -1,    19,
-      20,    -1,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
-      -1,    49,    -1,    -1,    -1,   151,    -1,    -1,   154,    -1,
-      -1,   157,    -1,   159,    -1,    -1,    -1,     7,     8,    49,
-      10,    11,    12,    13,    14,    15,    16,    17,    -1,    19,
-      20,    -1,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   151,    -1,    -1,   154,    -1,
-      -1,   157,    -1,   159,    -1,    -1,    -1,     7,     8,    49,
-      10,    11,    12,    13,    14,    15,    16,    17,    -1,    19,
-      20,    -1,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,
-      36,    -1,    -1,   151,    -1,    -1,   154,    -1,    -1,   157,
-      -1,   159,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    55,
-      56,   151,    -1,    -1,   154,    -1,    -1,   157,    -1,   159,
-      -1,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   151,    -1,    -1,   154,    -1,    -1,   157,    -1,   159,
-      -1,    -1,    -1,    -1,   110,   111,   112,    -1,    -1,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,     0,    -1,
-      -1,   151,    -1,    -1,   154,    -1,    -1,   157,    -1,   159,
-      -1,    -1,    -1,    -1,    -1,    -1,    18,    19,    20,    -1,
-      22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
+      -1,    -1,    -1,    49,    36,    -1,    -1,    -1,   152,    -1,
+      -1,   155,    -1,    -1,   158,    -1,   160,    -1,    -1,    -1,
+      -1,    -1,    -1,    55,    56,    -1,   152,    -1,    -1,   155,
+      -1,    -1,   158,    -1,   160,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   152,    -1,    -1,   155,
+      -1,    -1,   158,    -1,   160,    -1,    -1,    -1,   110,   111,
+     112,    -1,    -1,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,     0,    -1,    -1,    -1,   152,    -1,    -1,   155,
+      -1,    -1,   158,    -1,   160,    -1,    -1,    -1,    -1,    -1,
+      18,    19,    20,    -1,    22,    23,    24,    -1,    -1,    -1,
+      -1,    -1,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    51,
-      -1,    -1,    54,    -1,    -1,    -1,    58
+      -1,    -1,    -1,    51,    -1,    -1,    54,    -1,    -1,    -1,
+      58
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -2541,66 +2548,67 @@
 static const yytype_uint8 yystos[] =
 {
        0,    19,    20,    22,    23,    24,    30,    31,    51,    54,
-      58,   170,   172,   173,   174,   175,   206,   207,   208,   210,
-     209,    52,    66,   215,   148,    57,   148,    18,   148,    42,
-      43,    44,    45,    46,    47,    48,    50,   145,   146,   147,
-     176,   177,   178,     0,   208,    46,    48,   179,   225,    42,
-      43,    44,    47,   180,   222,   224,   231,   148,   148,   154,
-     216,    22,   214,     7,     8,    10,    11,    12,    13,    14,
-      15,    16,    17,    49,   151,   154,   157,   159,   170,   173,
-     193,   194,   228,   178,   178,    35,    37,   204,   178,   178,
-      21,   232,   233,    29,   160,   223,   232,    22,    22,    22,
-     217,   152,     4,     4,     4,   159,    10,   160,   194,   199,
-     150,   152,   204,   204,    42,    44,   181,    32,    33,   203,
-      60,    61,    62,    63,    64,    65,   182,   220,   220,   172,
-     236,   149,   156,    39,   194,   195,   197,   198,   155,   155,
-     160,   199,   149,   160,   198,   203,   203,    10,   121,   194,
-     196,   205,    11,    12,    13,    14,    15,    16,   168,   169,
-     194,   200,     4,   196,    28,   159,   221,    36,    55,    56,
+      58,   171,   173,   174,   175,   176,   208,   209,   210,   212,
+     211,    52,    66,   217,   149,    57,   149,    18,   149,    42,
+      43,    44,    45,    46,    47,    48,    50,   146,   147,   148,
+     177,   178,   179,     0,   210,    46,    48,   180,   227,    42,
+      43,    44,    47,   181,   224,   226,   233,   149,   149,   155,
+     218,    22,   216,     7,     8,    10,    11,    12,    13,    14,
+      15,    16,    17,    49,   152,   155,   158,   160,   171,   174,
+     195,   196,   230,   179,   179,    35,    37,   206,   179,   179,
+      21,   234,   235,    29,   161,   225,   234,    22,    22,    22,
+     219,   153,     4,     4,     4,   160,    10,   161,   196,   201,
+     151,   153,   206,   206,    42,    44,   182,    32,    33,   205,
+      60,    61,    62,    63,    64,    65,   183,   222,   222,   173,
+     238,   150,   157,    39,   196,   197,   199,   200,   156,   156,
+     161,   201,   150,   161,   200,   205,   205,    10,   121,   196,
+     198,   207,    11,    12,    13,    14,    15,    16,   169,   170,
+     196,   202,     4,   198,    28,   160,   223,    36,    55,    56,
       67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
       77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
       87,    88,    89,   110,   111,   112,   115,   116,   117,   118,
      119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   163,   164,   165,   234,   240,
-     241,   242,   243,    22,   184,   149,   153,   194,   194,   158,
-     160,   194,   153,   200,   194,   152,   228,    26,    27,     3,
+     129,   130,   131,   132,   133,   164,   165,   166,   236,   242,
+     243,   244,   245,    22,   185,   150,   154,   196,   196,   159,
+     161,   196,   154,   202,   196,   153,   230,    26,    27,     3,
        4,     5,     6,     9,    25,    40,    41,    88,    89,   115,
-     129,   131,   132,   133,   154,   157,   159,   161,   163,   164,
-     165,   201,   228,   211,   173,    55,    10,   194,   230,    11,
-      17,    11,   168,   182,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   166,    26,    27,    96,    97,    98,
+     129,   131,   132,   133,   155,   158,   160,   162,   164,   165,
+     166,   203,   230,   213,   174,    55,    10,   196,   232,    11,
+      17,    11,   169,   183,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   167,    26,    27,    96,    97,    98,
       99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   167,   194,   194,   230,   194,   194,   237,   230,   230,
-     230,   230,   230,   194,   194,   230,   182,   113,   114,   117,
-     118,   134,   135,   137,   138,   140,   141,   142,   183,    39,
-     195,   186,   156,   158,   158,   186,   212,   213,   205,   166,
-     167,   152,   152,   152,   152,   152,   156,   200,   202,   159,
-     202,   160,   202,    22,   152,   152,   152,   149,   191,   152,
-       3,     4,     9,    25,    26,    27,    40,    41,    57,   157,
-     201,   227,   228,   229,   229,   229,   229,   196,   194,   194,
-     149,   188,   149,   188,   229,   154,   149,   149,   149,   149,
-     149,   149,   229,   229,    38,   196,   194,   230,   134,   135,
-     136,   139,   143,   144,   185,   191,   191,    38,   152,   152,
-     200,   200,   200,   200,   200,   149,   156,   160,   194,   202,
-     158,   160,   200,   200,   200,    34,    53,   189,   192,    39,
-     194,   218,   219,    59,   226,   202,   149,   149,   229,   229,
-     229,    11,    53,    11,   239,   229,   154,   230,   194,   230,
-     230,   230,   149,   149,   194,   229,   229,   149,   194,   200,
-     200,   239,   149,   149,   149,   149,   200,   158,   160,   149,
-     149,    38,    22,     4,   191,   184,   149,   153,    22,   158,
-      17,    17,   152,   149,   149,   229,     4,   229,   149,   149,
-     229,   149,   149,   149,   229,   229,   152,   149,   188,   194,
-     153,   149,   149,   153,   200,   200,   200,   200,   158,   200,
-     200,   194,   170,   171,    39,   194,   186,   149,   229,   229,
-      17,   194,   238,   229,   229,   188,   188,   230,   229,   149,
-     230,   230,   230,   238,   229,   200,   200,   149,   153,   149,
-     149,   153,   153,   153,   184,   189,   190,    22,   149,   154,
-     184,   184,   149,   153,   156,   229,   153,   188,   153,   153,
-     200,   200,   200,   171,    53,   187,    17,   156,   168,   235,
-     117,   118,   229,   229,    17,   194,   186,   156,   186,   153,
-     153,   153,     4,   229,   227,   156,   168,   184,   184,   184,
-     184,    38,   149,   227,   229,   229,    17,    17,   149,   184,
-     184,   229,   229,    17,    71,   229,    17,   229
+     109,   168,   196,   196,   232,   196,   196,   239,   232,   232,
+     232,   232,   232,   196,   196,   232,   183,   113,   114,   117,
+     118,   134,   135,   137,   138,   140,   141,   142,   184,    39,
+     197,   187,   157,   159,   159,   187,   214,   215,   207,   167,
+     168,   153,   153,   153,   153,   153,   157,   202,   204,   160,
+     204,   161,   204,    22,   153,   153,   153,   150,   193,   153,
+       3,     4,     9,    25,    26,    27,    40,    41,    57,   158,
+     203,   229,   230,   231,   231,   231,   231,   198,   196,   196,
+     150,   190,   150,   190,   231,   155,   150,   150,   150,   150,
+     150,   150,   231,   231,    38,   198,   196,   232,   134,   135,
+     136,   139,   143,   144,   186,   193,   193,    38,   153,   153,
+     202,   202,   202,   202,   202,   150,   157,   161,   196,   204,
+     159,   161,   202,   202,   202,    34,    53,   191,   194,    39,
+     196,   220,   221,    59,   228,   204,   150,   150,   231,   231,
+     231,    11,    53,    11,   241,   231,   155,   232,   196,   232,
+     232,   232,   150,   150,   196,   231,   231,   150,   196,   202,
+     202,   241,   150,   150,   150,   150,   202,   159,   161,   150,
+     150,    38,    22,     4,   193,   185,   150,   154,    22,   159,
+      17,    17,   153,   150,   150,   231,     4,   231,   150,   150,
+     231,   150,   150,   150,   231,   231,   153,   150,   190,   196,
+     154,   150,   150,   154,   202,   202,   202,   202,   159,   202,
+     202,   196,   171,   172,    39,   196,   187,   150,   231,   231,
+      17,   196,   240,   231,   231,   190,   190,   232,   231,   150,
+     232,   232,   232,   240,   231,   202,   202,   150,   154,   150,
+     150,   154,   154,   154,   185,   191,   192,    22,   150,   155,
+     185,   185,   150,   154,   157,   231,   154,   190,   154,   154,
+     202,   202,   202,   172,    53,   189,    17,   157,   169,   237,
+     117,   118,   231,   231,    17,   196,   187,   157,   187,   154,
+     154,   154,     4,   145,   188,   231,   229,   157,   169,   185,
+     185,   185,   185,    38,    22,   150,   229,   231,   231,    17,
+      17,   150,   185,   185,   231,   231,    17,    71,   231,    17,
+     231
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2674,7 +2682,7 @@
    we won't break user code: when these are the locations we know.  */
 
 #ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
 #  define YY_LOCATION_PRINT(File, Loc)			\
      fprintf (File, "%d.%d-%d.%d",			\
 	      (Loc).first_line, (Loc).first_column,	\
@@ -3415,142 +3423,142 @@
   switch (yyn)
     {
         case 29:
-#line 1111 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1111 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
     break;
 
   case 30:
-#line 1111 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1111 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
     break;
 
   case 31:
-#line 1112 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1112 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
     break;
 
   case 32:
-#line 1112 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1112 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
     break;
 
   case 33:
-#line 1113 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1113 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
     break;
 
   case 34:
-#line 1113 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1113 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
     break;
 
   case 35:
-#line 1114 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1114 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
     break;
 
   case 36:
-#line 1114 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1114 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
     break;
 
   case 37:
-#line 1115 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1115 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
     break;
 
   case 38:
-#line 1115 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1115 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
     break;
 
   case 39:
-#line 1119 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1119 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
     break;
 
   case 40:
-#line 1119 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1119 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
     break;
 
   case 41:
-#line 1120 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1120 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
     break;
 
   case 42:
-#line 1120 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1120 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
     break;
 
   case 43:
-#line 1121 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1121 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
     break;
 
   case 44:
-#line 1121 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1121 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
     break;
 
   case 45:
-#line 1122 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1122 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
     break;
 
   case 46:
-#line 1122 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1122 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
     break;
 
   case 47:
-#line 1123 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1123 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
     break;
 
   case 48:
-#line 1123 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1123 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
     break;
 
   case 49:
-#line 1124 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1124 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
     break;
 
   case 50:
-#line 1124 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1124 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
     break;
 
   case 51:
-#line 1125 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1125 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
     break;
 
   case 52:
-#line 1125 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1125 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
     break;
 
   case 53:
-#line 1126 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1126 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
     break;
 
   case 54:
-#line 1127 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1127 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
     break;
 
   case 65:
-#line 1136 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1136 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.StrVal) = 0; ;}
     break;
 
   case 66:
-#line 1140 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1140 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal);
     CHECK_FOR_ERROR
@@ -3558,7 +3566,7 @@
     break;
 
   case 67:
-#line 1144 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1144 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.StrVal) = 0;
     CHECK_FOR_ERROR
@@ -3566,7 +3574,7 @@
     break;
 
   case 71:
-#line 1152 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1152 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.StrVal) = 0;
     CHECK_FOR_ERROR
@@ -3574,7 +3582,7 @@
     break;
 
   case 72:
-#line 1157 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1157 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal);
     CHECK_FOR_ERROR
@@ -3582,152 +3590,152 @@
     break;
 
   case 73:
-#line 1163 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1163 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
     break;
 
   case 74:
-#line 1164 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1164 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
     break;
 
   case 75:
-#line 1165 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1165 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
     break;
 
   case 76:
-#line 1166 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1166 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
     break;
 
   case 77:
-#line 1167 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1167 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
     break;
 
   case 78:
-#line 1171 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1171 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
     break;
 
   case 79:
-#line 1172 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1172 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
     break;
 
   case 80:
-#line 1173 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1173 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
     break;
 
   case 81:
-#line 1177 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1177 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Visibility) = GlobalValue::DefaultVisibility;   ;}
     break;
 
   case 82:
-#line 1178 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1178 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Visibility) = GlobalValue::DefaultVisibility;   ;}
     break;
 
   case 83:
-#line 1179 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1179 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Visibility) = GlobalValue::HiddenVisibility;    ;}
     break;
 
   case 84:
-#line 1180 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1180 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Visibility) = GlobalValue::ProtectedVisibility; ;}
     break;
 
   case 85:
-#line 1184 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1184 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
     break;
 
   case 86:
-#line 1185 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1185 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
     break;
 
   case 87:
-#line 1186 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1186 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
     break;
 
   case 88:
-#line 1190 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1190 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
     break;
 
   case 89:
-#line 1191 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1191 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
     break;
 
   case 90:
-#line 1192 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1192 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
     break;
 
   case 91:
-#line 1193 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1193 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
     break;
 
   case 92:
-#line 1194 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1194 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
     break;
 
   case 93:
-#line 1198 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1198 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
     break;
 
   case 94:
-#line 1199 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1199 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
     break;
 
   case 95:
-#line 1200 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1200 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
     break;
 
   case 96:
-#line 1203 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1203 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::C; ;}
     break;
 
   case 97:
-#line 1204 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1204 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::C; ;}
     break;
 
   case 98:
-#line 1205 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1205 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::Fast; ;}
     break;
 
   case 99:
-#line 1206 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1206 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::Cold; ;}
     break;
 
   case 100:
-#line 1207 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1207 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
     break;
 
   case 101:
-#line 1208 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1208 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
     break;
 
   case 102:
-#line 1209 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1209 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
                    if ((unsigned)(yyvsp[(2) - (2)].UInt64Val) != (yyvsp[(2) - (2)].UInt64Val))
                      GEN_ERROR("Calling conv too large");
@@ -3737,111 +3745,123 @@
     break;
 
   case 103:
-#line 1216 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1216 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = ParamAttr::ZExt;      ;}
     break;
 
   case 104:
-#line 1217 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1217 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = ParamAttr::ZExt;      ;}
     break;
 
   case 105:
-#line 1218 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1218 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = ParamAttr::SExt;      ;}
     break;
 
   case 106:
-#line 1219 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1219 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = ParamAttr::SExt;      ;}
     break;
 
   case 107:
-#line 1220 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1220 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = ParamAttr::InReg;     ;}
     break;
 
   case 108:
-#line 1221 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1221 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = ParamAttr::StructRet; ;}
     break;
 
   case 109:
-#line 1222 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1222 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = ParamAttr::NoAlias;   ;}
     break;
 
   case 110:
-#line 1223 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1223 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = ParamAttr::ByVal;     ;}
     break;
 
   case 111:
-#line 1224 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1224 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = ParamAttr::Nest;      ;}
     break;
 
   case 112:
-#line 1227 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1227 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = ParamAttr::None; ;}
     break;
 
   case 113:
-#line 1228 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1228 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
                 (yyval.ParamAttrs) = (yyvsp[(1) - (2)].ParamAttrs) | (yyvsp[(2) - (2)].ParamAttrs);
               ;}
     break;
 
   case 114:
-#line 1233 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1233 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = ParamAttr::NoReturn; ;}
     break;
 
   case 115:
-#line 1234 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1234 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = ParamAttr::NoUnwind; ;}
     break;
 
   case 116:
-#line 1235 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1235 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = ParamAttr::ZExt;     ;}
     break;
 
   case 117:
-#line 1236 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1236 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = ParamAttr::SExt;     ;}
     break;
 
   case 118:
-#line 1237 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1237 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = ParamAttr::ReadNone; ;}
     break;
 
   case 119:
-#line 1238 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1238 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = ParamAttr::ReadOnly; ;}
     break;
 
   case 120:
-#line 1241 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1241 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = ParamAttr::None; ;}
     break;
 
   case 121:
-#line 1242 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1242 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
                 (yyval.ParamAttrs) = (yyvsp[(1) - (2)].ParamAttrs) | (yyvsp[(2) - (2)].ParamAttrs);
               ;}
     break;
 
   case 122:
-#line 1249 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = 0; ;}
+#line 1247 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.StrVal) = 0; ;}
     break;
 
   case 123:
-#line 1250 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 1248 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
+    {
+                (yyval.StrVal) = (yyvsp[(2) - (2)].StrVal);
+              ;}
+    break;
+
+  case 124:
+#line 1255 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = 0; ;}
+    break;
+
+  case 125:
+#line 1256 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   (yyval.UIntVal) = (yyvsp[(2) - (2)].UInt64Val);
   if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
@@ -3850,13 +3870,13 @@
 ;}
     break;
 
-  case 124:
-#line 1256 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 126:
+#line 1262 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = 0; ;}
     break;
 
-  case 125:
-#line 1257 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 127:
+#line 1263 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   (yyval.UIntVal) = (yyvsp[(3) - (3)].UInt64Val);
   if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
@@ -3865,8 +3885,8 @@
 ;}
     break;
 
-  case 126:
-#line 1265 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 128:
+#line 1271 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   for (unsigned i = 0, e = (yyvsp[(2) - (2)].StrVal)->length(); i != e; ++i)
     if ((*(yyvsp[(2) - (2)].StrVal))[i] == '"' || (*(yyvsp[(2) - (2)].StrVal))[i] == '\\')
@@ -3876,28 +3896,28 @@
 ;}
     break;
 
-  case 127:
-#line 1273 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 129:
+#line 1279 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.StrVal) = 0; ;}
     break;
 
-  case 128:
-#line 1274 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 130:
+#line 1280 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.StrVal) = (yyvsp[(1) - (1)].StrVal); ;}
     break;
 
-  case 129:
-#line 1279 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 131:
+#line 1285 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {;}
     break;
 
-  case 130:
-#line 1280 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 132:
+#line 1286 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {;}
     break;
 
-  case 131:
-#line 1281 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 133:
+#line 1287 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV->setSection(*(yyvsp[(1) - (1)].StrVal));
     delete (yyvsp[(1) - (1)].StrVal);
@@ -3905,8 +3925,8 @@
   ;}
     break;
 
-  case 132:
-#line 1286 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 134:
+#line 1292 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[(2) - (2)].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[(2) - (2)].UInt64Val)))
       GEN_ERROR("Alignment must be a power of two");
@@ -3915,24 +3935,24 @@
   ;}
     break;
 
-  case 140:
-#line 1302 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 142:
+#line 1308 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 141:
-#line 1306 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 143:
+#line 1312 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeVal) = new PATypeHolder((yyvsp[(1) - (1)].PrimType));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 142:
-#line 1310 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 144:
+#line 1316 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {                             // Pointer type?
     if (*(yyvsp[(1) - (2)].TypeVal) == Type::LabelTy)
       GEN_ERROR("Cannot form a pointer to a basic block");
@@ -3942,8 +3962,8 @@
   ;}
     break;
 
-  case 143:
-#line 1317 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 145:
+#line 1323 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {            // Named types are also simple types...
     const Type* tmp = getTypeVal((yyvsp[(1) - (1)].ValIDVal));
     CHECK_FOR_ERROR
@@ -3951,8 +3971,8 @@
   ;}
     break;
 
-  case 144:
-#line 1322 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 146:
+#line 1328 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {                   // Type UpReference
     if ((yyvsp[(2) - (2)].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range");
     OpaqueType *OT = OpaqueType::get();        // Use temporary placeholder
@@ -3963,8 +3983,8 @@
   ;}
     break;
 
-  case 145:
-#line 1330 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 147:
+#line 1336 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     // Allow but ignore attributes on function types; this permits auto-upgrade.
     // FIXME: remove in LLVM 3.0.
@@ -3997,8 +4017,8 @@
   ;}
     break;
 
-  case 146:
-#line 1360 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 148:
+#line 1366 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     // Allow but ignore attributes on function types; this permits auto-upgrade.
     // FIXME: remove in LLVM 3.0.
@@ -4025,8 +4045,8 @@
   ;}
     break;
 
-  case 147:
-#line 1385 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 149:
+#line 1391 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {          // Sized array type?
     (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[(4) - (5)].TypeVal), (unsigned)(yyvsp[(2) - (5)].UInt64Val))));
     delete (yyvsp[(4) - (5)].TypeVal);
@@ -4034,8 +4054,8 @@
   ;}
     break;
 
-  case 148:
-#line 1390 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 150:
+#line 1396 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {          // Vector type?
      const llvm::Type* ElemTy = (yyvsp[(4) - (5)].TypeVal)->get();
      if ((unsigned)(yyvsp[(2) - (5)].UInt64Val) != (yyvsp[(2) - (5)].UInt64Val))
@@ -4048,8 +4068,8 @@
   ;}
     break;
 
-  case 149:
-#line 1400 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 151:
+#line 1406 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {                        // Structure type?
     std::vector<const Type*> Elements;
     for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[(2) - (3)].TypeList)->begin(),
@@ -4062,16 +4082,16 @@
   ;}
     break;
 
-  case 150:
-#line 1410 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 152:
+#line 1416 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {                                  // Empty structure type?
     (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 151:
-#line 1414 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 153:
+#line 1420 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     std::vector<const Type*> Elements;
     for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[(3) - (5)].TypeList)->begin(),
@@ -4084,16 +4104,16 @@
   ;}
     break;
 
-  case 152:
-#line 1424 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 154:
+#line 1430 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {                         // Empty structure type?
     (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 153:
-#line 1431 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 155:
+#line 1437 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     // Allow but ignore attributes on function types; this permits auto-upgrade.
     // FIXME: remove in LLVM 3.0.
@@ -4102,8 +4122,8 @@
   ;}
     break;
 
-  case 154:
-#line 1440 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 156:
+#line 1446 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (1)].TypeVal))->getDescription());
@@ -4113,15 +4133,15 @@
   ;}
     break;
 
-  case 155:
-#line 1447 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 157:
+#line 1453 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
   ;}
     break;
 
-  case 156:
-#line 1452 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 158:
+#line 1458 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
     (yyval.TypeWithAttrsList)->push_back((yyvsp[(1) - (1)].TypeWithAttrs));
@@ -4129,16 +4149,16 @@
   ;}
     break;
 
-  case 157:
-#line 1457 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 159:
+#line 1463 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     ((yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList))->push_back((yyvsp[(3) - (3)].TypeWithAttrs));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 159:
-#line 1465 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 161:
+#line 1471 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList);
     TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
@@ -4148,8 +4168,8 @@
   ;}
     break;
 
-  case 160:
-#line 1472 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 162:
+#line 1478 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
     TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
@@ -4159,16 +4179,16 @@
   ;}
     break;
 
-  case 161:
-#line 1479 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 163:
+#line 1485 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 162:
-#line 1487 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 164:
+#line 1493 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeList) = new std::list<PATypeHolder>();
     (yyval.TypeList)->push_back(*(yyvsp[(1) - (1)].TypeVal)); 
@@ -4177,8 +4197,8 @@
   ;}
     break;
 
-  case 163:
-#line 1493 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 165:
+#line 1499 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     ((yyval.TypeList)=(yyvsp[(1) - (3)].TypeList))->push_back(*(yyvsp[(3) - (3)].TypeVal)); 
     delete (yyvsp[(3) - (3)].TypeVal);
@@ -4186,8 +4206,8 @@
   ;}
     break;
 
-  case 164:
-#line 1505 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 166:
+#line 1511 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { // Nonempty unsized arr
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription());
@@ -4218,8 +4238,8 @@
   ;}
     break;
 
-  case 165:
-#line 1533 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 167:
+#line 1539 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
@@ -4238,8 +4258,8 @@
   ;}
     break;
 
-  case 166:
-#line 1549 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 168:
+#line 1555 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
@@ -4269,8 +4289,8 @@
   ;}
     break;
 
-  case 167:
-#line 1576 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 169:
+#line 1582 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { // Nonempty unsized arr
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription());
@@ -4301,8 +4321,8 @@
   ;}
     break;
 
-  case 168:
-#line 1604 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 170:
+#line 1610 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (4)].TypeVal)->get());
     if (STy == 0)
@@ -4331,8 +4351,8 @@
   ;}
     break;
 
-  case 169:
-#line 1630 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 171:
+#line 1636 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
@@ -4355,8 +4375,8 @@
   ;}
     break;
 
-  case 170:
-#line 1650 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 172:
+#line 1656 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (6)].TypeVal)->get());
     if (STy == 0)
@@ -4385,8 +4405,8 @@
   ;}
     break;
 
-  case 171:
-#line 1676 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 173:
+#line 1682 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (5)].TypeVal))->getDescription());
@@ -4409,8 +4429,8 @@
   ;}
     break;
 
-  case 172:
-#line 1696 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 174:
+#line 1702 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
@@ -4425,8 +4445,8 @@
   ;}
     break;
 
-  case 173:
-#line 1708 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 175:
+#line 1714 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
@@ -4436,8 +4456,8 @@
   ;}
     break;
 
-  case 174:
-#line 1715 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 176:
+#line 1721 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
@@ -4506,8 +4526,8 @@
   ;}
     break;
 
-  case 175:
-#line 1781 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 177:
+#line 1787 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
@@ -4520,8 +4540,8 @@
   ;}
     break;
 
-  case 176:
-#line 1791 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 178:
+#line 1797 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
@@ -4534,8 +4554,8 @@
   ;}
     break;
 
-  case 177:
-#line 1801 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 179:
+#line 1807 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {      // integral constants
     if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].SInt64Val)))
       GEN_ERROR("Constant value doesn't fit in type");
@@ -4544,8 +4564,8 @@
   ;}
     break;
 
-  case 178:
-#line 1807 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 180:
+#line 1813 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {      // arbitrary precision integer constants
     uint32_t BitWidth = cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth();
     if ((yyvsp[(2) - (2)].APIntVal)->getBitWidth() > BitWidth) {
@@ -4558,8 +4578,8 @@
   ;}
     break;
 
-  case 179:
-#line 1817 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 181:
+#line 1823 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {      // integral constants
     if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].UInt64Val)))
       GEN_ERROR("Constant value doesn't fit in type");
@@ -4568,8 +4588,8 @@
   ;}
     break;
 
-  case 180:
-#line 1823 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 182:
+#line 1829 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {      // arbitrary precision integer constants
     uint32_t BitWidth = cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth();
     if ((yyvsp[(2) - (2)].APIntVal)->getBitWidth() > BitWidth) {
@@ -4582,8 +4602,8 @@
   ;}
     break;
 
-  case 181:
-#line 1833 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 183:
+#line 1839 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {                      // Boolean constants
     assert(cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?");
     (yyval.ConstVal) = ConstantInt::getTrue();
@@ -4591,8 +4611,8 @@
   ;}
     break;
 
-  case 182:
-#line 1838 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 184:
+#line 1844 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {                     // Boolean constants
     assert(cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?");
     (yyval.ConstVal) = ConstantInt::getFalse();
@@ -4600,8 +4620,8 @@
   ;}
     break;
 
-  case 183:
-#line 1843 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 185:
+#line 1849 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {                   // Floating point constants
     if (!ConstantFP::isValueValidForType((yyvsp[(1) - (2)].PrimType), *(yyvsp[(2) - (2)].FPVal)))
       GEN_ERROR("Floating point constant invalid for type");
@@ -4615,8 +4635,8 @@
   ;}
     break;
 
-  case 184:
-#line 1856 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 186:
+#line 1862 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (6)].TypeVal))->getDescription());
@@ -4631,8 +4651,8 @@
   ;}
     break;
 
-  case 185:
-#line 1868 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 187:
+#line 1874 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!isa<PointerType>((yyvsp[(3) - (5)].ConstVal)->getType()))
       GEN_ERROR("GetElementPtr requires a pointer operand");
@@ -4657,8 +4677,8 @@
   ;}
     break;
 
-  case 186:
-#line 1890 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 188:
+#line 1896 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[(3) - (8)].ConstVal)->getType() != Type::Int1Ty)
       GEN_ERROR("Select condition must be of boolean type");
@@ -4669,8 +4689,8 @@
   ;}
     break;
 
-  case 187:
-#line 1898 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 189:
+#line 1904 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType())
       GEN_ERROR("Binary operator types must match");
@@ -4679,8 +4699,8 @@
   ;}
     break;
 
-  case 188:
-#line 1904 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 190:
+#line 1910 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType())
       GEN_ERROR("Logical operator types must match");
@@ -4694,8 +4714,8 @@
   ;}
     break;
 
-  case 189:
-#line 1915 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 191:
+#line 1921 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType())
       GEN_ERROR("icmp operand types must match");
@@ -4703,8 +4723,8 @@
   ;}
     break;
 
-  case 190:
-#line 1920 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 192:
+#line 1926 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType())
       GEN_ERROR("fcmp operand types must match");
@@ -4712,8 +4732,8 @@
   ;}
     break;
 
-  case 191:
-#line 1925 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 193:
+#line 1931 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!ExtractElementInst::isValidOperands((yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal)))
       GEN_ERROR("Invalid extractelement operands");
@@ -4722,8 +4742,8 @@
   ;}
     break;
 
-  case 192:
-#line 1931 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 194:
+#line 1937 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!InsertElementInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)))
       GEN_ERROR("Invalid insertelement operands");
@@ -4732,8 +4752,8 @@
   ;}
     break;
 
-  case 193:
-#line 1937 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 195:
+#line 1943 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!ShuffleVectorInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)))
       GEN_ERROR("Invalid shufflevector operands");
@@ -4742,16 +4762,16 @@
   ;}
     break;
 
-  case 194:
-#line 1946 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 196:
+#line 1952 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     ((yyval.ConstVector) = (yyvsp[(1) - (3)].ConstVector))->push_back((yyvsp[(3) - (3)].ConstVal));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 195:
-#line 1950 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 197:
+#line 1956 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ConstVector) = new std::vector<Constant*>();
     (yyval.ConstVector)->push_back((yyvsp[(1) - (1)].ConstVal));
@@ -4759,28 +4779,28 @@
   ;}
     break;
 
-  case 196:
-#line 1958 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 198:
+#line 1964 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.BoolVal) = false; ;}
     break;
 
-  case 197:
-#line 1958 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 199:
+#line 1964 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.BoolVal) = true; ;}
     break;
 
-  case 198:
-#line 1961 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 200:
+#line 1967 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.BoolVal) = true; ;}
     break;
 
-  case 199:
-#line 1961 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 201:
+#line 1967 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.BoolVal) = false; ;}
     break;
 
-  case 200:
-#line 1964 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 202:
+#line 1970 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     const Type* VTy = (yyvsp[(1) - (2)].TypeVal)->get();
     Value *V = getVal(VTy, (yyvsp[(2) - (2)].ValIDVal));
@@ -4795,8 +4815,8 @@
    ;}
     break;
 
-  case 201:
-#line 1976 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 203:
+#line 1982 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     Constant *Val = (yyvsp[(3) - (6)].ConstVal);
     const Type *DestTy = (yyvsp[(5) - (6)].TypeVal)->get();
@@ -4811,8 +4831,8 @@
    ;}
     break;
 
-  case 202:
-#line 1997 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 204:
+#line 2003 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
     CurModule.ModuleDone();
@@ -4820,8 +4840,8 @@
   ;}
     break;
 
-  case 203:
-#line 2002 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 205:
+#line 2008 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
     CurModule.ModuleDone();
@@ -4829,40 +4849,40 @@
   ;}
     break;
 
-  case 206:
-#line 2015 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 208:
+#line 2021 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { CurFun.isDeclare = false; ;}
     break;
 
-  case 207:
-#line 2015 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 209:
+#line 2021 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     CurFun.FunctionDone();
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 208:
-#line 2019 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 210:
+#line 2025 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { CurFun.isDeclare = true; ;}
     break;
 
-  case 209:
-#line 2019 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 211:
+#line 2025 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 210:
-#line 2022 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 212:
+#line 2028 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 211:
-#line 2025 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 213:
+#line 2031 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (3)].TypeVal))->getDescription());
@@ -4889,8 +4909,8 @@
   ;}
     break;
 
-  case 212:
-#line 2049 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 214:
+#line 2055 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     ResolveTypeTo((yyvsp[(1) - (3)].StrVal), (yyvsp[(3) - (3)].PrimType));
 
@@ -4904,8 +4924,8 @@
   ;}
     break;
 
-  case 213:
-#line 2060 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 215:
+#line 2066 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { 
     /* "Externally Visible" Linkage */
     if ((yyvsp[(5) - (5)].ConstVal) == 0) 
@@ -4916,15 +4936,15 @@
   ;}
     break;
 
-  case 214:
-#line 2067 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 216:
+#line 2073 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV = 0;
   ;}
     break;
 
-  case 215:
-#line 2071 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 217:
+#line 2077 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[(6) - (6)].ConstVal) == 0) 
       GEN_ERROR("Global value initializer is not a constant");
@@ -4933,15 +4953,15 @@
   ;}
     break;
 
-  case 216:
-#line 2076 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 218:
+#line 2082 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV = 0;
   ;}
     break;
 
-  case 217:
-#line 2080 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 219:
+#line 2086 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(6) - (6)].TypeVal))->getDescription());
@@ -4951,16 +4971,16 @@
   ;}
     break;
 
-  case 218:
-#line 2086 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 220:
+#line 2092 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV = 0;
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 219:
-#line 2090 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 221:
+#line 2096 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     std::string Name;
     if ((yyvsp[(1) - (5)].StrVal)) {
@@ -5003,22 +5023,22 @@
   ;}
     break;
 
-  case 220:
-#line 2130 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 222:
+#line 2136 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { 
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 221:
-#line 2133 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 223:
+#line 2139 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 222:
-#line 2139 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 224:
+#line 2145 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
   if (AsmSoFar.empty())
@@ -5030,24 +5050,24 @@
 ;}
     break;
 
-  case 223:
-#line 2149 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 225:
+#line 2155 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     CurModule.CurrentModule->setTargetTriple(*(yyvsp[(3) - (3)].StrVal));
     delete (yyvsp[(3) - (3)].StrVal);
   ;}
     break;
 
-  case 224:
-#line 2153 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 226:
+#line 2159 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     CurModule.CurrentModule->setDataLayout(*(yyvsp[(3) - (3)].StrVal));
     delete (yyvsp[(3) - (3)].StrVal);
   ;}
     break;
 
-  case 226:
-#line 2160 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 228:
+#line 2166 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
           CurModule.CurrentModule->addLibrary(*(yyvsp[(3) - (3)].StrVal));
           delete (yyvsp[(3) - (3)].StrVal);
@@ -5055,8 +5075,8 @@
         ;}
     break;
 
-  case 227:
-#line 2165 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 229:
+#line 2171 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
           CurModule.CurrentModule->addLibrary(*(yyvsp[(1) - (1)].StrVal));
           delete (yyvsp[(1) - (1)].StrVal);
@@ -5064,15 +5084,15 @@
         ;}
     break;
 
-  case 228:
-#line 2170 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 230:
+#line 2176 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
           CHECK_FOR_ERROR
         ;}
     break;
 
-  case 229:
-#line 2179 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 231:
+#line 2185 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
@@ -5085,8 +5105,8 @@
   ;}
     break;
 
-  case 230:
-#line 2189 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 232:
+#line 2195 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
@@ -5099,16 +5119,16 @@
   ;}
     break;
 
-  case 231:
-#line 2200 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 233:
+#line 2206 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = (yyvsp[(1) - (1)].ArgList);
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 232:
-#line 2204 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 234:
+#line 2210 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = (yyvsp[(1) - (3)].ArgList);
     struct ArgListEntry E;
@@ -5120,8 +5140,8 @@
   ;}
     break;
 
-  case 233:
-#line 2213 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 235:
+#line 2219 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = new ArgListType;
     struct ArgListEntry E;
@@ -5133,36 +5153,36 @@
   ;}
     break;
 
-  case 234:
-#line 2222 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 236:
+#line 2228 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = 0;
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 235:
-#line 2228 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 237:
+#line 2234 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
-  std::string FunctionName(*(yyvsp[(3) - (9)].StrVal));
-  delete (yyvsp[(3) - (9)].StrVal);  // Free strdup'd memory!
+  std::string FunctionName(*(yyvsp[(3) - (10)].StrVal));
+  delete (yyvsp[(3) - (10)].StrVal);  // Free strdup'd memory!
   
   // Check the function result for abstractness if this is a define. We should
   // have no abstract types at this point
-  if (!CurFun.isDeclare && CurModule.TypeIsUnresolved((yyvsp[(2) - (9)].TypeVal)))
-    GEN_ERROR("Reference to abstract result: "+ (yyvsp[(2) - (9)].TypeVal)->get()->getDescription());
+  if (!CurFun.isDeclare && CurModule.TypeIsUnresolved((yyvsp[(2) - (10)].TypeVal)))
+    GEN_ERROR("Reference to abstract result: "+ (yyvsp[(2) - (10)].TypeVal)->get()->getDescription());
 
   std::vector<const Type*> ParamTypeList;
   ParamAttrsVector Attrs;
-  if ((yyvsp[(7) - (9)].ParamAttrs) != ParamAttr::None) {
+  if ((yyvsp[(7) - (10)].ParamAttrs) != ParamAttr::None) {
     ParamAttrsWithIndex PAWI;
     PAWI.index = 0;
-    PAWI.attrs = (yyvsp[(7) - (9)].ParamAttrs);
+    PAWI.attrs = (yyvsp[(7) - (10)].ParamAttrs);
     Attrs.push_back(PAWI);
   }
-  if ((yyvsp[(5) - (9)].ArgList)) {   // If there are arguments...
+  if ((yyvsp[(5) - (10)].ArgList)) {   // If there are arguments...
     unsigned index = 1;
-    for (ArgListType::iterator I = (yyvsp[(5) - (9)].ArgList)->begin(); I != (yyvsp[(5) - (9)].ArgList)->end(); ++I, ++index) {
+    for (ArgListType::iterator I = (yyvsp[(5) - (10)].ArgList)->begin(); I != (yyvsp[(5) - (10)].ArgList)->end(); ++I, ++index) {
       const Type* Ty = I->Ty->get();
       if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
         GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
@@ -5184,9 +5204,9 @@
   if (!Attrs.empty())
     PAL = ParamAttrsList::get(Attrs);
 
-  FunctionType *FT = FunctionType::get(*(yyvsp[(2) - (9)].TypeVal), ParamTypeList, isVarArg);
+  FunctionType *FT = FunctionType::get(*(yyvsp[(2) - (10)].TypeVal), ParamTypeList, isVarArg);
   const PointerType *PFT = PointerType::get(FT);
-  delete (yyvsp[(2) - (9)].TypeVal);
+  delete (yyvsp[(2) - (10)].TypeVal);
 
   ValID ID;
   if (!FunctionName.empty()) {
@@ -5239,27 +5259,31 @@
     Fn->setLinkage(CurFun.Linkage);
     Fn->setVisibility(CurFun.Visibility);
   }
-  Fn->setCallingConv((yyvsp[(1) - (9)].UIntVal));
+  Fn->setCallingConv((yyvsp[(1) - (10)].UIntVal));
   Fn->setParamAttrs(PAL);
-  Fn->setAlignment((yyvsp[(9) - (9)].UIntVal));
-  if ((yyvsp[(8) - (9)].StrVal)) {
-    Fn->setSection(*(yyvsp[(8) - (9)].StrVal));
-    delete (yyvsp[(8) - (9)].StrVal);
+  Fn->setAlignment((yyvsp[(9) - (10)].UIntVal));
+  if ((yyvsp[(8) - (10)].StrVal)) {
+    Fn->setSection(*(yyvsp[(8) - (10)].StrVal));
+    delete (yyvsp[(8) - (10)].StrVal);
+  }
+  if ((yyvsp[(10) - (10)].StrVal)) {
+    Fn->setCollector((yyvsp[(10) - (10)].StrVal)->c_str());
+    delete (yyvsp[(10) - (10)].StrVal);
   }
 
   // Add all of the arguments we parsed to the function...
-  if ((yyvsp[(5) - (9)].ArgList)) {                     // Is null if empty...
+  if ((yyvsp[(5) - (10)].ArgList)) {                     // Is null if empty...
     if (isVarArg) {  // Nuke the last entry
-      assert((yyvsp[(5) - (9)].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[(5) - (9)].ArgList)->back().Name == 0 &&
+      assert((yyvsp[(5) - (10)].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[(5) - (10)].ArgList)->back().Name == 0 &&
              "Not a varargs marker!");
-      delete (yyvsp[(5) - (9)].ArgList)->back().Ty;
-      (yyvsp[(5) - (9)].ArgList)->pop_back();  // Delete the last entry
+      delete (yyvsp[(5) - (10)].ArgList)->back().Ty;
+      (yyvsp[(5) - (10)].ArgList)->pop_back();  // Delete the last entry
     }
     Function::arg_iterator ArgIt = Fn->arg_begin();
     Function::arg_iterator ArgEnd = Fn->arg_end();
     unsigned Idx = 1;
-    for (ArgListType::iterator I = (yyvsp[(5) - (9)].ArgList)->begin(); 
-         I != (yyvsp[(5) - (9)].ArgList)->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
+    for (ArgListType::iterator I = (yyvsp[(5) - (10)].ArgList)->begin(); 
+         I != (yyvsp[(5) - (10)].ArgList)->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
       delete I->Ty;                          // Delete the typeholder...
       setValueName(ArgIt, I->Name);       // Insert arg into symtab...
       CHECK_FOR_ERROR
@@ -5267,14 +5291,14 @@
       Idx++;
     }
 
-    delete (yyvsp[(5) - (9)].ArgList);                     // We're now done with the argument list
+    delete (yyvsp[(5) - (10)].ArgList);                     // We're now done with the argument list
   }
   CHECK_FOR_ERROR
 ;}
     break;
 
-  case 238:
-#line 2359 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 240:
+#line 2369 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   (yyval.FunctionVal) = CurFun.CurrentFunction;
 
@@ -5285,16 +5309,16 @@
 ;}
     break;
 
-  case 241:
-#line 2370 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 243:
+#line 2380 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
   (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
   CHECK_FOR_ERROR
 ;}
     break;
 
-  case 242:
-#line 2375 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 244:
+#line 2385 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     CurFun.CurrentFunction->setLinkage((yyvsp[(1) - (3)].Linkage));
     CurFun.CurrentFunction->setVisibility((yyvsp[(2) - (3)].Visibility));
@@ -5304,88 +5328,88 @@
   ;}
     break;
 
-  case 243:
-#line 2387 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 245:
+#line 2397 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 244:
-#line 2391 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 246:
+#line 2401 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 245:
-#line 2396 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 247:
+#line 2406 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {    // A reference to a direct constant
     (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].SInt64Val));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 246:
-#line 2400 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 248:
+#line 2410 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].UInt64Val));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 247:
-#line 2404 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 249:
+#line 2414 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {                     // Perhaps it's an FP constant?
     (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].FPVal));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 248:
-#line 2408 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 250:
+#line 2418 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue());
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 249:
-#line 2412 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 251:
+#line 2422 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse());
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 250:
-#line 2416 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 252:
+#line 2426 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::createNull();
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 251:
-#line 2420 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 253:
+#line 2430 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::createUndef();
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 252:
-#line 2424 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 254:
+#line 2434 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {     // A vector zero constant.
     (yyval.ValIDVal) = ValID::createZeroInit();
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 253:
-#line 2428 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 255:
+#line 2438 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { // Nonempty unsized packed vector
     const Type *ETy = (*(yyvsp[(2) - (3)].ConstVector))[0]->getType();
     int NumElements = (yyvsp[(2) - (3)].ConstVector)->size(); 
@@ -5413,16 +5437,16 @@
   ;}
     break;
 
-  case 254:
-#line 2453 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 256:
+#line 2463 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].ConstVal));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 255:
-#line 2457 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 257:
+#line 2467 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::createInlineAsm(*(yyvsp[(3) - (5)].StrVal), *(yyvsp[(5) - (5)].StrVal), (yyvsp[(2) - (5)].BoolVal));
     delete (yyvsp[(3) - (5)].StrVal);
@@ -5431,24 +5455,24 @@
   ;}
     break;
 
-  case 256:
-#line 2467 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 258:
+#line 2477 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {  // Is it an integer reference...?
     (yyval.ValIDVal) = ValID::createLocalID((yyvsp[(1) - (1)].UIntVal));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 257:
-#line 2471 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 259:
+#line 2481 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::createGlobalID((yyvsp[(1) - (1)].UIntVal));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 258:
-#line 2475 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 260:
+#line 2485 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {                   // Is it a named reference...?
     (yyval.ValIDVal) = ValID::createLocalName(*(yyvsp[(1) - (1)].StrVal));
     delete (yyvsp[(1) - (1)].StrVal);
@@ -5456,8 +5480,8 @@
   ;}
     break;
 
-  case 259:
-#line 2480 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 261:
+#line 2490 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {                   // Is it a named reference...?
     (yyval.ValIDVal) = ValID::createGlobalName(*(yyvsp[(1) - (1)].StrVal));
     delete (yyvsp[(1) - (1)].StrVal);
@@ -5465,8 +5489,8 @@
   ;}
     break;
 
-  case 262:
-#line 2493 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 264:
+#line 2503 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
@@ -5476,24 +5500,24 @@
   ;}
     break;
 
-  case 263:
-#line 2502 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 265:
+#line 2512 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 264:
-#line 2506 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 266:
+#line 2516 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { // Do not allow functions with 0 basic blocks   
     (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 265:
-#line 2515 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 267:
+#line 2525 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     setValueName((yyvsp[(3) - (3)].TermInstVal), (yyvsp[(2) - (3)].StrVal));
     CHECK_FOR_ERROR
@@ -5504,8 +5528,8 @@
   ;}
     break;
 
-  case 266:
-#line 2524 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 268:
+#line 2534 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[(2) - (2)].InstVal)))
       if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
@@ -5517,16 +5541,16 @@
   ;}
     break;
 
-  case 267:
-#line 2533 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 269:
+#line 2543 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {          // Empty space between instruction lists
     (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 268:
-#line 2537 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 270:
+#line 2547 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {             // Labelled (named) basic block
     (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalName(*(yyvsp[(1) - (1)].StrVal)));
     delete (yyvsp[(1) - (1)].StrVal);
@@ -5535,24 +5559,24 @@
   ;}
     break;
 
-  case 269:
-#line 2544 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 271:
+#line 2554 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {              // Return with a result...
     (yyval.TermInstVal) = new ReturnInst((yyvsp[(2) - (2)].ValueVal));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 270:
-#line 2548 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 272:
+#line 2558 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {                                    // Return with no result...
     (yyval.TermInstVal) = new ReturnInst();
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 271:
-#line 2552 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 273:
+#line 2562 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {                           // Unconditional Branch...
     BasicBlock* tmpBB = getBBVal((yyvsp[(3) - (3)].ValIDVal));
     CHECK_FOR_ERROR
@@ -5560,8 +5584,8 @@
   ;}
     break;
 
-  case 272:
-#line 2557 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 274:
+#line 2567 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {  
     assert(cast<IntegerType>((yyvsp[(2) - (9)].PrimType))->getBitWidth() == 1 && "Not Bool?");
     BasicBlock* tmpBBA = getBBVal((yyvsp[(6) - (9)].ValIDVal));
@@ -5574,8 +5598,8 @@
   ;}
     break;
 
-  case 273:
-#line 2567 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 275:
+#line 2577 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     Value* tmpVal = getVal((yyvsp[(2) - (9)].PrimType), (yyvsp[(3) - (9)].ValIDVal));
     CHECK_FOR_ERROR
@@ -5597,8 +5621,8 @@
   ;}
     break;
 
-  case 274:
-#line 2586 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 276:
+#line 2596 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     Value* tmpVal = getVal((yyvsp[(2) - (8)].PrimType), (yyvsp[(3) - (8)].ValIDVal));
     CHECK_FOR_ERROR
@@ -5610,8 +5634,8 @@
   ;}
     break;
 
-  case 275:
-#line 2596 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 277:
+#line 2606 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
 
     // Handle the short syntax
@@ -5697,24 +5721,24 @@
   ;}
     break;
 
-  case 276:
-#line 2679 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 278:
+#line 2689 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TermInstVal) = new UnwindInst();
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 277:
-#line 2683 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 279:
+#line 2693 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TermInstVal) = new UnreachableInst();
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 278:
-#line 2690 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 280:
+#line 2700 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.JumpTable) = (yyvsp[(1) - (6)].JumpTable);
     Constant *V = cast<Constant>(getExistingVal((yyvsp[(2) - (6)].PrimType), (yyvsp[(3) - (6)].ValIDVal)));
@@ -5728,8 +5752,8 @@
   ;}
     break;
 
-  case 279:
-#line 2701 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 281:
+#line 2711 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
     Constant *V = cast<Constant>(getExistingVal((yyvsp[(1) - (5)].PrimType), (yyvsp[(2) - (5)].ValIDVal)));
@@ -5744,8 +5768,8 @@
   ;}
     break;
 
-  case 280:
-#line 2714 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 282:
+#line 2724 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     // Is this definition named?? if so, assign the name...
     setValueName((yyvsp[(2) - (2)].InstVal), (yyvsp[(1) - (2)].StrVal));
@@ -5756,8 +5780,8 @@
   ;}
     break;
 
-  case 281:
-#line 2724 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 283:
+#line 2734 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {    // Used for PHI nodes
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (6)].TypeVal))->getDescription());
@@ -5771,8 +5795,8 @@
   ;}
     break;
 
-  case 282:
-#line 2735 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 284:
+#line 2745 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.PHIList) = (yyvsp[(1) - (7)].PHIList);
     Value* tmpVal = getVal((yyvsp[(1) - (7)].PHIList)->front().first->getType(), (yyvsp[(4) - (7)].ValIDVal));
@@ -5783,8 +5807,8 @@
   ;}
     break;
 
-  case 283:
-#line 2745 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 285:
+#line 2755 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     // FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
     if (!UpRefs.empty())
@@ -5798,8 +5822,8 @@
   ;}
     break;
 
-  case 284:
-#line 2756 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 286:
+#line 2766 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     // FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
     // Labels are only valid in ASMs
@@ -5810,8 +5834,8 @@
   ;}
     break;
 
-  case 285:
-#line 2764 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 287:
+#line 2774 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     // FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
     if (!UpRefs.empty())
@@ -5824,8 +5848,8 @@
   ;}
     break;
 
-  case 286:
-#line 2774 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 288:
+#line 2784 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     // FIXME: Remove trailing OptParamAttrs in LLVM 3.0, it was a mistake in 2.0
     (yyval.ParamList) = (yyvsp[(1) - (6)].ParamList);
@@ -5835,18 +5859,18 @@
   ;}
     break;
 
-  case 287:
-#line 2781 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 289:
+#line 2791 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamList) = new ParamList(); ;}
     break;
 
-  case 288:
-#line 2784 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 290:
+#line 2794 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ValueList) = new std::vector<Value*>(); ;}
     break;
 
-  case 289:
-#line 2785 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 291:
+#line 2795 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValueList) = (yyvsp[(1) - (3)].ValueList);
     (yyval.ValueList)->push_back((yyvsp[(3) - (3)].ValueVal));
@@ -5854,24 +5878,24 @@
   ;}
     break;
 
-  case 290:
-#line 2792 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 292:
+#line 2802 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 291:
-#line 2796 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 293:
+#line 2806 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 292:
-#line 2801 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 294:
+#line 2811 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (5)].TypeVal))->getDescription());
@@ -5890,8 +5914,8 @@
   ;}
     break;
 
-  case 293:
-#line 2817 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 295:
+#line 2827 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (5)].TypeVal))->getDescription());
@@ -5911,8 +5935,8 @@
   ;}
     break;
 
-  case 294:
-#line 2834 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 296:
+#line 2844 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription());
@@ -5929,8 +5953,8 @@
   ;}
     break;
 
-  case 295:
-#line 2848 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 297:
+#line 2858 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription());
@@ -5947,8 +5971,8 @@
   ;}
     break;
 
-  case 296:
-#line 2862 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 298:
+#line 2872 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(4) - (4)].TypeVal))->getDescription());
@@ -5963,8 +5987,8 @@
   ;}
     break;
 
-  case 297:
-#line 2874 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 299:
+#line 2884 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[(2) - (6)].ValueVal)->getType() != Type::Int1Ty)
       GEN_ERROR("select condition must be boolean");
@@ -5975,8 +5999,8 @@
   ;}
     break;
 
-  case 298:
-#line 2882 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 300:
+#line 2892 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(4) - (4)].TypeVal))->getDescription());
@@ -5986,8 +6010,8 @@
   ;}
     break;
 
-  case 299:
-#line 2889 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 301:
+#line 2899 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!ExtractElementInst::isValidOperands((yyvsp[(2) - (4)].ValueVal), (yyvsp[(4) - (4)].ValueVal)))
       GEN_ERROR("Invalid extractelement operands");
@@ -5996,8 +6020,8 @@
   ;}
     break;
 
-  case 300:
-#line 2895 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 302:
+#line 2905 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!InsertElementInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)))
       GEN_ERROR("Invalid insertelement operands");
@@ -6006,8 +6030,8 @@
   ;}
     break;
 
-  case 301:
-#line 2901 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 303:
+#line 2911 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!ShuffleVectorInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)))
       GEN_ERROR("Invalid shufflevector operands");
@@ -6016,8 +6040,8 @@
   ;}
     break;
 
-  case 302:
-#line 2907 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 304:
+#line 2917 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     const Type *Ty = (yyvsp[(2) - (2)].PHIList)->front().first->getType();
     if (!Ty->isFirstClassType())
@@ -6035,8 +6059,8 @@
   ;}
     break;
 
-  case 303:
-#line 2923 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 305:
+#line 2933 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
 
     // Handle the short syntax
@@ -6129,32 +6153,32 @@
   ;}
     break;
 
-  case 304:
-#line 3013 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 306:
+#line 3023 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.InstVal) = (yyvsp[(1) - (1)].InstVal);
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 305:
-#line 3018 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 307:
+#line 3028 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 306:
-#line 3022 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 308:
+#line 3032 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 307:
-#line 3029 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 309:
+#line 3039 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (3)].TypeVal))->getDescription());
@@ -6164,8 +6188,8 @@
   ;}
     break;
 
-  case 308:
-#line 3036 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 310:
+#line 3046 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (6)].TypeVal))->getDescription());
@@ -6176,8 +6200,8 @@
   ;}
     break;
 
-  case 309:
-#line 3044 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 311:
+#line 3054 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (3)].TypeVal))->getDescription());
@@ -6187,8 +6211,8 @@
   ;}
     break;
 
-  case 310:
-#line 3051 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 312:
+#line 3061 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (6)].TypeVal))->getDescription());
@@ -6199,8 +6223,8 @@
   ;}
     break;
 
-  case 311:
-#line 3059 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 313:
+#line 3069 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!isa<PointerType>((yyvsp[(2) - (2)].ValueVal)->getType()))
       GEN_ERROR("Trying to free nonpointer type " + 
@@ -6210,8 +6234,8 @@
   ;}
     break;
 
-  case 312:
-#line 3067 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 314:
+#line 3077 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
@@ -6228,8 +6252,8 @@
   ;}
     break;
 
-  case 313:
-#line 3081 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 315:
+#line 3091 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (7)].TypeVal))->getDescription());
@@ -6249,8 +6273,8 @@
   ;}
     break;
 
-  case 314:
-#line 3098 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+  case 316:
+#line 3108 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (4)].TypeVal))->getDescription());
@@ -6270,7 +6294,7 @@
 
 
 /* Line 1267 of yacc.c.  */
-#line 6274 "llvmAsmParser.tab.c"
+#line 6298 "llvmAsmParser.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -6484,7 +6508,7 @@
 }
 
 
-#line 3115 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 3125 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
 
 
 // common code from the two 'RunVMAsmParser' functions

Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs (original)
+++ llvm/trunk/lib/AsmParser/llvmAsmParser.h.cvs Sun Dec  9 21:18:06 2007
@@ -181,9 +181,10 @@
      NEST = 397,
      READNONE = 398,
      READONLY = 399,
-     DEFAULT = 400,
-     HIDDEN = 401,
-     PROTECTED = 402
+     GC = 400,
+     DEFAULT = 401,
+     HIDDEN = 402,
+     PROTECTED = 403
    };
 #endif
 /* Tokens.  */
@@ -329,16 +330,17 @@
 #define NEST 397
 #define READNONE 398
 #define READONLY 399
-#define DEFAULT 400
-#define HIDDEN 401
-#define PROTECTED 402
+#define GC 400
+#define DEFAULT 401
+#define HIDDEN 402
+#define PROTECTED 403
 
 
 
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 945 "/home/asl/proj/llvm/src/lib/AsmParser/llvmAsmParser.y"
+#line 945 "/Users/malichus/Source/llvm/src/llvm/lib/AsmParser/llvmAsmParser.y"
 {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
@@ -385,8 +387,8 @@
   llvm::ICmpInst::Predicate         IPredicate;
   llvm::FCmpInst::Predicate         FPredicate;
 }
-/* Line 1489 of yacc.c.  */
-#line 390 "llvmAsmParser.tab.h"
+/* Line 1529 of yacc.c.  */
+#line 392 "llvmAsmParser.tab.h"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1

Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.y
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.y?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/lib/AsmParser/llvmAsmParser.y (original)
+++ llvm/trunk/lib/AsmParser/llvmAsmParser.y Sun Dec  9 21:18:06 2007
@@ -1046,7 +1046,7 @@
 %token<StrVal> STRINGCONSTANT ATSTRINGCONSTANT PCTSTRINGCONSTANT
 %type <StrVal> LocalName OptLocalName OptLocalAssign
 %type <StrVal> GlobalName OptGlobalAssign GlobalAssign
-%type <StrVal> OptSection SectionString
+%type <StrVal> OptSection SectionString OptGC
 
 %type <UIntVal> OptAlign OptCAlign
 
@@ -1090,7 +1090,7 @@
 
 // Function Attributes
 %token SIGNEXT ZEROEXT NORETURN INREG SRET NOUNWIND NOALIAS BYVAL NEST
-%token READNONE READONLY
+%token READNONE READONLY GC
 
 // Visibility Styles
 %token DEFAULT HIDDEN PROTECTED
@@ -1244,6 +1244,12 @@
               }
               ;
 
+OptGC         : /* empty */ { $$ = 0; }
+              | GC STRINGCONSTANT {
+                $$ = $2;
+              }
+              ;
+
 // OptAlign/OptCAlign - An optional alignment, and an optional alignment with
 // a comma before it.
 OptAlign : /*empty*/        { $$ = 0; } |
@@ -2225,7 +2231,7 @@
   };
 
 FunctionHeaderH : OptCallingConv ResultTypes GlobalName '(' ArgList ')' 
-                  OptFuncAttrs OptSection OptAlign {
+                  OptFuncAttrs OptSection OptAlign OptGC {
   std::string FunctionName(*$3);
   delete $3;  // Free strdup'd memory!
   
@@ -2328,6 +2334,10 @@
     Fn->setSection(*$8);
     delete $8;
   }
+  if ($10) {
+    Fn->setCollector($10->c_str());
+    delete $10;
+  }
 
   // Add all of the arguments we parsed to the function...
   if ($5) {                     // Is null if empty...

Modified: llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs (original)
+++ llvm/trunk/lib/AsmParser/llvmAsmParser.y.cvs Sun Dec  9 21:18:06 2007
@@ -1046,7 +1046,7 @@
 %token<StrVal> STRINGCONSTANT ATSTRINGCONSTANT PCTSTRINGCONSTANT
 %type <StrVal> LocalName OptLocalName OptLocalAssign
 %type <StrVal> GlobalName OptGlobalAssign GlobalAssign
-%type <StrVal> OptSection SectionString
+%type <StrVal> OptSection SectionString OptGC
 
 %type <UIntVal> OptAlign OptCAlign
 
@@ -1090,7 +1090,7 @@
 
 // Function Attributes
 %token SIGNEXT ZEROEXT NORETURN INREG SRET NOUNWIND NOALIAS BYVAL NEST
-%token READNONE READONLY
+%token READNONE READONLY GC
 
 // Visibility Styles
 %token DEFAULT HIDDEN PROTECTED
@@ -1244,6 +1244,12 @@
               }
               ;
 
+OptGC         : /* empty */ { $$ = 0; }
+              | GC STRINGCONSTANT {
+                $$ = $2;
+              }
+              ;
+
 // OptAlign/OptCAlign - An optional alignment, and an optional alignment with
 // a comma before it.
 OptAlign : /*empty*/        { $$ = 0; } |
@@ -2225,7 +2231,7 @@
   };
 
 FunctionHeaderH : OptCallingConv ResultTypes GlobalName '(' ArgList ')' 
-                  OptFuncAttrs OptSection OptAlign {
+                  OptFuncAttrs OptSection OptAlign OptGC {
   std::string FunctionName(*$3);
   delete $3;  // Free strdup'd memory!
   
@@ -2328,6 +2334,10 @@
     Fn->setSection(*$8);
     delete $8;
   }
+  if ($10) {
+    Fn->setCollector($10->c_str());
+    delete $10;
+  }
 
   // Add all of the arguments we parsed to the function...
   if ($5) {                     // Is null if empty...

Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original)
+++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Sun Dec  9 21:18:06 2007
@@ -849,6 +849,7 @@
   
   SmallVector<uint64_t, 64> Record;
   std::vector<std::string> SectionTable;
+  std::vector<std::string> CollectorTable;
 
   // Read all the records for this module.
   while (!Stream.AtEndOfStream()) {
@@ -974,6 +975,13 @@
       SectionTable.push_back(S);
       break;
     }
+    case bitc::MODULE_CODE_COLLECTORNAME: {  // SECTIONNAME: [strchr x N]
+      std::string S;
+      if (ConvertToString(Record, 0, S))
+        return Error("Invalid MODULE_CODE_COLLECTORNAME record");
+      CollectorTable.push_back(S);
+      break;
+    }
     // GLOBALVAR: [type, isconst, initid, 
     //             linkage, alignment, section, visibility, threadlocal]
     case bitc::MODULE_CODE_GLOBALVAR: {
@@ -1016,7 +1024,7 @@
       break;
     }
     // FUNCTION:  [type, callingconv, isproto, linkage, paramattr,
-    //             alignment, section, visibility]
+    //             alignment, section, visibility, collector]
     case bitc::MODULE_CODE_FUNCTION: {
       if (Record.size() < 8)
         return Error("Invalid MODULE_CODE_FUNCTION record");
@@ -1044,6 +1052,11 @@
         Func->setSection(SectionTable[Record[6]-1]);
       }
       Func->setVisibility(GetDecodedVisibility(Record[7]));
+      if (Record.size() > 8 && Record[8]) {
+        if (Record[8]-1 > CollectorTable.size())
+          return Error("Invalid collector ID");
+        Func->setCollector(CollectorTable[Record[8]-1].c_str());
+      }
       
       ValueList.push_back(Func);
       

Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original)
+++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Sun Dec  9 21:18:06 2007
@@ -297,9 +297,10 @@
     WriteStringRecord(bitc::MODULE_CODE_ASM, M->getModuleInlineAsm(),
                       0/*TODO*/, Stream);
 
-  // Emit information about sections, computing how many there are.  Also
-  // compute the maximum alignment value.
+  // Emit information about sections and collectors, computing how many there
+  // are.  Also compute the maximum alignment value.
   std::map<std::string, unsigned> SectionMap;
+  std::map<std::string, unsigned> CollectorMap;
   unsigned MaxAlignment = 0;
   unsigned MaxGlobalType = 0;
   for (Module::const_global_iterator GV = M->global_begin(),E = M->global_end();
@@ -317,13 +318,24 @@
   }
   for (Module::const_iterator F = M->begin(), E = M->end(); F != E; ++F) {
     MaxAlignment = std::max(MaxAlignment, F->getAlignment());
-    if (!F->hasSection()) continue;
-    // Give section names unique ID's.
-    unsigned &Entry = SectionMap[F->getSection()];
-    if (Entry != 0) continue;
-    WriteStringRecord(bitc::MODULE_CODE_SECTIONNAME, F->getSection(),
-                      0/*TODO*/, Stream);
-    Entry = SectionMap.size();
+    if (F->hasSection()) {
+      // Give section names unique ID's.
+      unsigned &Entry = SectionMap[F->getSection()];
+      if (!Entry) {
+        WriteStringRecord(bitc::MODULE_CODE_SECTIONNAME, F->getSection(),
+                          0/*TODO*/, Stream);
+        Entry = SectionMap.size();
+      }
+    }
+    if (F->hasCollector()) {
+      // Same for collector names.
+      unsigned &Entry = CollectorMap[F->getCollector()];
+      if (!Entry) {
+        WriteStringRecord(bitc::MODULE_CODE_COLLECTORNAME, F->getCollector(),
+                          0/*TODO*/, Stream);
+        Entry = CollectorMap.size();
+      }
+    }
   }
   
   // Emit abbrev for globals, now that we know # sections and max alignment.
@@ -383,7 +395,7 @@
   // Emit the function proto information.
   for (Module::const_iterator F = M->begin(), E = M->end(); F != E; ++F) {
     // FUNCTION:  [type, callingconv, isproto, paramattr,
-    //             linkage, alignment, section, visibility]
+    //             linkage, alignment, section, visibility, collector]
     Vals.push_back(VE.getTypeID(F->getType()));
     Vals.push_back(F->getCallingConv());
     Vals.push_back(F->isDeclaration());
@@ -392,6 +404,7 @@
     Vals.push_back(Log2_32(F->getAlignment())+1);
     Vals.push_back(F->hasSection() ? SectionMap[F->getSection()] : 0);
     Vals.push_back(getEncodedVisibility(F));
+    Vals.push_back(F->hasCollector() ? CollectorMap[F->getCollector()] : 0);
     
     unsigned AbbrevToUse = 0;
     Stream.EmitRecord(bitc::MODULE_CODE_FUNCTION, Vals, AbbrevToUse);

Modified: llvm/trunk/lib/Transforms/Utils/CloneModule.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/CloneModule.cpp?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/lib/Transforms/Utils/CloneModule.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/CloneModule.cpp Sun Dec  9 21:18:06 2007
@@ -67,6 +67,8 @@
                    GlobalValue::ExternalLinkage, I->getName(), New);
     NF->setCallingConv(I->getCallingConv());
     NF->setParamAttrs(I->getParamAttrs());
+    if (I->hasCollector())
+      NF->setCollector(I->getCollector());
     ValueMap[I]= NF;
   }
 

Modified: llvm/trunk/lib/VMCore/AsmWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/AsmWriter.cpp?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/lib/VMCore/AsmWriter.cpp (original)
+++ llvm/trunk/lib/VMCore/AsmWriter.cpp Sun Dec  9 21:18:06 2007
@@ -1112,6 +1112,8 @@
     Out << " section \"" << F->getSection() << '"';
   if (F->getAlignment())
     Out << " align " << F->getAlignment();
+  if (F->hasCollector())
+    Out << " gc \"" << F->getCollector() << '"';
 
   if (F->isDeclaration()) {
     Out << "\n";

Modified: llvm/trunk/lib/VMCore/Core.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Core.cpp?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/lib/VMCore/Core.cpp (original)
+++ llvm/trunk/lib/VMCore/Core.cpp Sun Dec  9 21:18:06 2007
@@ -619,6 +619,19 @@
   return unwrap<Function>(Fn)->setCallingConv(CC);
 }
 
+const char *LLVMGetCollector(LLVMValueRef Fn) {
+  Function *F = unwrap<Function>(Fn);
+  return F->hasCollector()? F->getCollector() : 0;
+}
+
+void LLVMSetCollector(LLVMValueRef Fn, const char *Coll) {
+  Function *F = unwrap<Function>(Fn);
+  if (Coll)
+    F->setCollector(Coll);
+  else
+    F->clearCollector();
+}
+
 /*--.. Operations on basic blocks ..........................................--*/
 
 LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef Bb) {

Modified: llvm/trunk/lib/VMCore/Function.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Function.cpp?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/lib/VMCore/Function.cpp (original)
+++ llvm/trunk/lib/VMCore/Function.cpp Sun Dec  9 21:18:06 2007
@@ -17,8 +17,10 @@
 #include "llvm/CodeGen/ValueTypes.h"
 #include "llvm/Support/LeakDetector.h"
 #include "llvm/Support/ManagedStatic.h"
+#include "llvm/Support/StringPool.h"
 #include "SymbolTableListTraitsImpl.h"
 #include "llvm/ADT/BitVector.h"
+#include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/StringExtras.h"
 using namespace llvm;
 
@@ -297,6 +299,9 @@
   // Drop our reference to the parameter attributes, if any.
   if (ParamAttrs)
     ParamAttrs->dropRef();
+  
+  // Remove the function from the on-the-side collector table.
+  clearCollector();
 }
 
 void Function::BuildLazyArguments() const {
@@ -379,6 +384,40 @@
   BasicBlocks.clear();    // Delete all basic blocks...
 }
 
+// Maintain the collector name for each function in an on-the-side table. This
+// saves allocating an additional word in Function for programs which do not use
+// GC (i.e., most programs) at the cost of increased overhead for clients which
+// do use GC.
+static DenseMap<const Function*,PooledStringPtr> *CollectorNames;
+static StringPool *CollectorNamePool;
+
+bool Function::hasCollector() const {
+  return CollectorNames && CollectorNames->count(this);
+}
+
+const char *Function::getCollector() const {
+  assert(hasCollector() && "Function has no collector");
+  return *(*CollectorNames)[this];
+}
+
+void Function::setCollector(const char *Str) {
+  if (!CollectorNamePool)
+    CollectorNamePool = new StringPool();
+  if (!CollectorNames)
+    CollectorNames = new DenseMap<const Function*,PooledStringPtr>();
+  (*CollectorNames)[this] = CollectorNamePool->intern(Str);
+}
+
+void Function::clearCollector() {
+  if (CollectorNames) {
+    CollectorNames->erase(this);
+    if (CollectorNames->empty()) {
+      delete CollectorNames;
+      CollectorNames = 0;
+    }
+  }
+}
+
 /// getIntrinsicID - This method returns the ID number of the specified
 /// function, or Intrinsic::not_intrinsic if the function is not an
 /// intrinsic, or if the pointer is null.  This value is always defined to be

Added: llvm/trunk/test/Assembler/2007-09-29-GC.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/2007-09-29-GC.ll?rev=44769&view=auto

==============================================================================
--- llvm/trunk/test/Assembler/2007-09-29-GC.ll (added)
+++ llvm/trunk/test/Assembler/2007-09-29-GC.ll Sun Dec  9 21:18:06 2007
@@ -0,0 +1,12 @@
+; RUN: llvm-as < %s | llvm-dis | grep {@f.*gc.*shadowstack}
+; RUN: llvm-as < %s | llvm-dis | grep {@g.*gc.*java}
+
+define void @f() gc "shadowstack" {
+entry:
+	ret void
+}
+
+define void @g() gc "java" {
+entry:
+	ret void
+}

Modified: llvm/trunk/test/Bindings/Ocaml/vmcore.ml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bindings/Ocaml/vmcore.ml?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/test/Bindings/Ocaml/vmcore.ml (original)
+++ llvm/trunk/test/Bindings/Ocaml/vmcore.ml Sun Dec  9 21:18:06 2007
@@ -25,7 +25,8 @@
     exit_status := 10;
     "    FAIL "
   end in
-  prerr_endline (msg ^ (string_of_int !case_num))
+  prerr_endline ("    " ^ (string_of_int !case_num) ^ if cond then ""
+                                                              else " FAIL")
 
 let suite name f =
   prerr_endline (name ^ ":");
@@ -490,7 +491,20 @@
   insist (ccc = function_call_conv fn);
   set_function_call_conv fastcc fn;
   insist (fastcc = function_call_conv fn);
-  ignore (build_unreachable (builder_at_end (entry_block fn)))
+  ignore (build_unreachable (builder_at_end (entry_block fn)));
+  
+  begin group "collector";
+    (* RUN: grep {Fn6.*gc.*shadowstack} < %t.ll
+     *)
+    let fn = define_function "Fn6" ty m in
+    insist (None = collector fn);
+    set_collector (Some "ocaml") fn;
+    insist (Some "ocaml" = collector fn);
+    set_collector None fn;
+    insist (None = collector fn);
+    set_collector (Some "shadowstack") fn;
+    ignore (build_unreachable (builder_at_end (entry_block fn)));
+  end
 
 
 (*===-- Basic Blocks ------------------------------------------------------===*)
@@ -749,7 +763,6 @@
     let t3 = const_vector [| one; one; zero; zero |] in
     let vec1 = build_insertelement t1 p1 p2 "Vec1" atentry in
     let vec2 = build_insertelement t2 p1 p2 "Vec2" atentry in
-    let vec3 = build_insertelement t3 p1 p2 "Vec3" atentry in
     
     ignore (build_extractelement vec1 p2 "Inst49" atentry);
     ignore (build_insertelement vec1 p1 p2 "Inst50" atentry);

Modified: llvm/trunk/test/CodeGen/Generic/GC/alloc_loop.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Generic/GC/alloc_loop.ll?rev=44769&r1=44768&r2=44769&view=diff

==============================================================================
--- llvm/trunk/test/CodeGen/Generic/GC/alloc_loop.ll (original)
+++ llvm/trunk/test/CodeGen/Generic/GC/alloc_loop.ll Sun Dec  9 21:18:06 2007
@@ -7,7 +7,7 @@
 declare void @llvm.gcroot(i8**, i8*)
 declare void @llvm.gcwrite(i8*, i8*, i8**)
 
-define i32 @main() {
+define i32 @main() gc "shadow-stack" {
 entry:
 	%A = alloca i8*
 	%B = alloca i8**





More information about the llvm-commits mailing list