diff --git a/lib/AsmParser/llvmAsmParser.cpp.cvs b/lib/AsmParser/llvmAsmParser.cpp.cvs
index 4108df2..410aec3 100644
--- a/lib/AsmParser/llvmAsmParser.cpp.cvs
+++ b/lib/AsmParser/llvmAsmParser.cpp.cvs
@@ -1,342 +1,150 @@
-/* A Bison parser, made by GNU Bison 2.1.  */
 
-/* Skeleton parser for Yacc-like parsing with Bison,
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+/*  A Bison parser, made from /Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y
+    by GNU Bison version 1.28  */
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
+#define YYBISON 1  /* Identify Bison output.  */
 
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-/* Written by Richard Stallman by simplifying the original so called
-   ``semantic'' parser.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-/* Identify Bison output.  */
-#define YYBISON 1
-
-/* Bison version.  */
-#define YYBISON_VERSION "2.1"
-
-/* Skeleton name.  */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers.  */
-#define YYPURE 0
-
-/* Using locations.  */
-#define YYLSP_NEEDED 0
-
-/* Substitute the variable and function names.  */
 #define yyparse llvmAsmparse
-#define yylex   llvmAsmlex
+#define yylex llvmAsmlex
 #define yyerror llvmAsmerror
-#define yylval  llvmAsmlval
-#define yychar  llvmAsmchar
+#define yylval llvmAsmlval
+#define yychar llvmAsmchar
 #define yydebug llvmAsmdebug
 #define yynerrs llvmAsmnerrs
+#define	ESINT64VAL	257
+#define	EUINT64VAL	258
+#define	ESAPINTVAL	259
+#define	EUAPINTVAL	260
+#define	LOCALVAL_ID	261
+#define	GLOBALVAL_ID	262
+#define	FPVAL	263
+#define	VOID	264
+#define	INTTYPE	265
+#define	FLOAT	266
+#define	DOUBLE	267
+#define	LABEL	268
+#define	TYPE	269
+#define	LOCALVAR	270
+#define	GLOBALVAR	271
+#define	LABELSTR	272
+#define	STRINGCONSTANT	273
+#define	ATSTRINGCONSTANT	274
+#define	ZEROINITIALIZER	275
+#define	TRUETOK	276
+#define	FALSETOK	277
+#define	BEGINTOK	278
+#define	ENDTOK	279
+#define	DECLARE	280
+#define	DEFINE	281
+#define	GLOBAL	282
+#define	CONSTANT	283
+#define	SECTION	284
+#define	VOLATILE	285
+#define	THREAD_LOCAL	286
+#define	TO	287
+#define	DOTDOTDOT	288
+#define	NULL_TOK	289
+#define	UNDEF	290
+#define	INTERNAL	291
+#define	LINKONCE	292
+#define	WEAK	293
+#define	APPENDING	294
+#define	DLLIMPORT	295
+#define	DLLEXPORT	296
+#define	EXTERN_WEAK	297
+#define	OPAQUE	298
+#define	EXTERNAL	299
+#define	TARGET	300
+#define	TRIPLE	301
+#define	ALIGN	302
+#define	DEPLIBS	303
+#define	CALL	304
+#define	TAIL	305
+#define	ASM_TOK	306
+#define	MODULE	307
+#define	SIDEEFFECT	308
+#define	CC_TOK	309
+#define	CCC_TOK	310
+#define	FASTCC_TOK	311
+#define	COLDCC_TOK	312
+#define	X86_STDCALLCC_TOK	313
+#define	X86_FASTCALLCC_TOK	314
+#define	DATALAYOUT	315
+#define	RET	316
+#define	BR	317
+#define	SWITCH	318
+#define	INVOKE	319
+#define	UNWIND	320
+#define	UNREACHABLE	321
+#define	ADD	322
+#define	SUB	323
+#define	MUL	324
+#define	UDIV	325
+#define	SDIV	326
+#define	FDIV	327
+#define	UREM	328
+#define	SREM	329
+#define	FREM	330
+#define	AND	331
+#define	OR	332
+#define	XOR	333
+#define	SHL	334
+#define	LSHR	335
+#define	ASHR	336
+#define	ICMP	337
+#define	FCMP	338
+#define	EQ	339
+#define	NE	340
+#define	SLT	341
+#define	SGT	342
+#define	SLE	343
+#define	SGE	344
+#define	ULT	345
+#define	UGT	346
+#define	ULE	347
+#define	UGE	348
+#define	OEQ	349
+#define	ONE	350
+#define	OLT	351
+#define	OGT	352
+#define	OLE	353
+#define	OGE	354
+#define	ORD	355
+#define	UNO	356
+#define	UEQ	357
+#define	UNE	358
+#define	MALLOC	359
+#define	ALLOCA	360
+#define	FREE	361
+#define	LOAD	362
+#define	STORE	363
+#define	GETELEMENTPTR	364
+#define	TRUNC	365
+#define	ZEXT	366
+#define	SEXT	367
+#define	FPTRUNC	368
+#define	FPEXT	369
+#define	BITCAST	370
+#define	UITOFP	371
+#define	SITOFP	372
+#define	FPTOUI	373
+#define	FPTOSI	374
+#define	INTTOPTR	375
+#define	PTRTOINT	376
+#define	PHI_TOK	377
+#define	SELECT	378
+#define	VAARG	379
+#define	EXTRACTELEMENT	380
+#define	INSERTELEMENT	381
+#define	SHUFFLEVECTOR	382
+#define	NORETURN	383
+#define	INREG	384
+#define	SRET	385
+#define	NOUNWIND	386
+#define	DEFAULT	387
+#define	HIDDEN	388
 
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     ESINT64VAL = 258,
-     EUINT64VAL = 259,
-     ESAPINTVAL = 260,
-     EUAPINTVAL = 261,
-     LOCALVAL_ID = 262,
-     GLOBALVAL_ID = 263,
-     FPVAL = 264,
-     VOID = 265,
-     INTTYPE = 266,
-     FLOAT = 267,
-     DOUBLE = 268,
-     LABEL = 269,
-     TYPE = 270,
-     LOCALVAR = 271,
-     GLOBALVAR = 272,
-     LABELSTR = 273,
-     STRINGCONSTANT = 274,
-     ATSTRINGCONSTANT = 275,
-     ZEROINITIALIZER = 276,
-     TRUETOK = 277,
-     FALSETOK = 278,
-     BEGINTOK = 279,
-     ENDTOK = 280,
-     DECLARE = 281,
-     DEFINE = 282,
-     GLOBAL = 283,
-     CONSTANT = 284,
-     SECTION = 285,
-     VOLATILE = 286,
-     THREAD_LOCAL = 287,
-     TO = 288,
-     DOTDOTDOT = 289,
-     NULL_TOK = 290,
-     UNDEF = 291,
-     INTERNAL = 292,
-     LINKONCE = 293,
-     WEAK = 294,
-     APPENDING = 295,
-     DLLIMPORT = 296,
-     DLLEXPORT = 297,
-     EXTERN_WEAK = 298,
-     OPAQUE = 299,
-     EXTERNAL = 300,
-     TARGET = 301,
-     TRIPLE = 302,
-     ALIGN = 303,
-     DEPLIBS = 304,
-     CALL = 305,
-     TAIL = 306,
-     ASM_TOK = 307,
-     MODULE = 308,
-     SIDEEFFECT = 309,
-     CC_TOK = 310,
-     CCC_TOK = 311,
-     FASTCC_TOK = 312,
-     COLDCC_TOK = 313,
-     X86_STDCALLCC_TOK = 314,
-     X86_FASTCALLCC_TOK = 315,
-     DATALAYOUT = 316,
-     RET = 317,
-     BR = 318,
-     SWITCH = 319,
-     INVOKE = 320,
-     UNWIND = 321,
-     UNREACHABLE = 322,
-     ADD = 323,
-     SUB = 324,
-     MUL = 325,
-     UDIV = 326,
-     SDIV = 327,
-     FDIV = 328,
-     UREM = 329,
-     SREM = 330,
-     FREM = 331,
-     AND = 332,
-     OR = 333,
-     XOR = 334,
-     SHL = 335,
-     LSHR = 336,
-     ASHR = 337,
-     ICMP = 338,
-     FCMP = 339,
-     EQ = 340,
-     NE = 341,
-     SLT = 342,
-     SGT = 343,
-     SLE = 344,
-     SGE = 345,
-     ULT = 346,
-     UGT = 347,
-     ULE = 348,
-     UGE = 349,
-     OEQ = 350,
-     ONE = 351,
-     OLT = 352,
-     OGT = 353,
-     OLE = 354,
-     OGE = 355,
-     ORD = 356,
-     UNO = 357,
-     UEQ = 358,
-     UNE = 359,
-     MALLOC = 360,
-     ALLOCA = 361,
-     FREE = 362,
-     LOAD = 363,
-     STORE = 364,
-     GETELEMENTPTR = 365,
-     TRUNC = 366,
-     ZEXT = 367,
-     SEXT = 368,
-     FPTRUNC = 369,
-     FPEXT = 370,
-     BITCAST = 371,
-     UITOFP = 372,
-     SITOFP = 373,
-     FPTOUI = 374,
-     FPTOSI = 375,
-     INTTOPTR = 376,
-     PTRTOINT = 377,
-     PHI_TOK = 378,
-     SELECT = 379,
-     VAARG = 380,
-     EXTRACTELEMENT = 381,
-     INSERTELEMENT = 382,
-     SHUFFLEVECTOR = 383,
-     NORETURN = 384,
-     INREG = 385,
-     SRET = 386,
-     NOUNWIND = 387,
-     DEFAULT = 388,
-     HIDDEN = 389
-   };
-#endif
-/* Tokens.  */
-#define ESINT64VAL 258
-#define EUINT64VAL 259
-#define ESAPINTVAL 260
-#define EUAPINTVAL 261
-#define LOCALVAL_ID 262
-#define GLOBALVAL_ID 263
-#define FPVAL 264
-#define VOID 265
-#define INTTYPE 266
-#define FLOAT 267
-#define DOUBLE 268
-#define LABEL 269
-#define TYPE 270
-#define LOCALVAR 271
-#define GLOBALVAR 272
-#define LABELSTR 273
-#define STRINGCONSTANT 274
-#define ATSTRINGCONSTANT 275
-#define ZEROINITIALIZER 276
-#define TRUETOK 277
-#define FALSETOK 278
-#define BEGINTOK 279
-#define ENDTOK 280
-#define DECLARE 281
-#define DEFINE 282
-#define GLOBAL 283
-#define CONSTANT 284
-#define SECTION 285
-#define VOLATILE 286
-#define THREAD_LOCAL 287
-#define TO 288
-#define DOTDOTDOT 289
-#define NULL_TOK 290
-#define UNDEF 291
-#define INTERNAL 292
-#define LINKONCE 293
-#define WEAK 294
-#define APPENDING 295
-#define DLLIMPORT 296
-#define DLLEXPORT 297
-#define EXTERN_WEAK 298
-#define OPAQUE 299
-#define EXTERNAL 300
-#define TARGET 301
-#define TRIPLE 302
-#define ALIGN 303
-#define DEPLIBS 304
-#define CALL 305
-#define TAIL 306
-#define ASM_TOK 307
-#define MODULE 308
-#define SIDEEFFECT 309
-#define CC_TOK 310
-#define CCC_TOK 311
-#define FASTCC_TOK 312
-#define COLDCC_TOK 313
-#define X86_STDCALLCC_TOK 314
-#define X86_FASTCALLCC_TOK 315
-#define DATALAYOUT 316
-#define RET 317
-#define BR 318
-#define SWITCH 319
-#define INVOKE 320
-#define UNWIND 321
-#define UNREACHABLE 322
-#define ADD 323
-#define SUB 324
-#define MUL 325
-#define UDIV 326
-#define SDIV 327
-#define FDIV 328
-#define UREM 329
-#define SREM 330
-#define FREM 331
-#define AND 332
-#define OR 333
-#define XOR 334
-#define SHL 335
-#define LSHR 336
-#define ASHR 337
-#define ICMP 338
-#define FCMP 339
-#define EQ 340
-#define NE 341
-#define SLT 342
-#define SGT 343
-#define SLE 344
-#define SGE 345
-#define ULT 346
-#define UGT 347
-#define ULE 348
-#define UGE 349
-#define OEQ 350
-#define ONE 351
-#define OLT 352
-#define OGT 353
-#define OLE 354
-#define OGE 355
-#define ORD 356
-#define UNO 357
-#define UEQ 358
-#define UNE 359
-#define MALLOC 360
-#define ALLOCA 361
-#define FREE 362
-#define LOAD 363
-#define STORE 364
-#define GETELEMENTPTR 365
-#define TRUNC 366
-#define ZEXT 367
-#define SEXT 368
-#define FPTRUNC 369
-#define FPEXT 370
-#define BITCAST 371
-#define UITOFP 372
-#define SITOFP 373
-#define FPTOUI 374
-#define FPTOSI 375
-#define INTTOPTR 376
-#define PTRTOINT 377
-#define PHI_TOK 378
-#define SELECT 379
-#define VAARG 380
-#define EXTRACTELEMENT 381
-#define INSERTELEMENT 382
-#define SHUFFLEVECTOR 383
-#define NORETURN 384
-#define INREG 385
-#define SRET 386
-#define NOUNWIND 387
-#define DEFAULT 388
-#define HIDDEN 389
-
-
-
-
-/* Copy the first part of user declarations.  */
-#line 14 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+#line 14 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 
 #include "ParserInternals.h"
 #include "llvm/CallingConv.h"
@@ -1260,28 +1068,8 @@
 }
 
 
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
-
-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 938 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-typedef union YYSTYPE {
+#line 938 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+typedef union {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
   llvm::BasicBlock                       *BasicBlockVal;
@@ -1327,1499 +1115,1068 @@
   llvm::ICmpInst::Predicate         IPredicate;
   llvm::FCmpInst::Predicate         FPredicate;
 } YYSTYPE;
-/* Line 196 of yacc.c.  */
-#line 1332 "llvmAsmParser.tab.c"
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
+#include <stdio.h>
+
+#ifndef __cplusplus
+#ifndef __STDC__
+#define const
+#endif
 #endif
 
 
 
-/* Copy the second part of user declarations.  */
+#define	YYFINAL		565
+#define	YYFLAG		-32768
+#define	YYNTBASE	149
 
+#define YYTRANSLATE(x) ((unsigned)(x) <= 388 ? yytranslate[x] : 227)
 
-/* Line 219 of yacc.c.  */
-#line 1344 "llvmAsmParser.tab.c"
+static const short yytranslate[] = {     0,
+     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,     2,     2,     2,     2,     2,   139,
+   140,   137,     2,   136,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,   144,
+   135,   145,     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,
+   141,   138,   143,     2,     2,     2,     2,     2,   148,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,     2,   142,
+     2,     2,   146,     2,   147,     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,     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,     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,     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,     1,     3,     4,     5,     6,
+     7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+    47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+    57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+    77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+    87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+    97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+   107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+   117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+   127,   128,   129,   130,   131,   132,   133,   134
+};
 
-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
-# define YYSIZE_T __SIZE_TYPE__
-#endif
-#if ! defined (YYSIZE_T) && defined (size_t)
-# define YYSIZE_T size_t
-#endif
-#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
-# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-# define YYSIZE_T size_t
-#endif
-#if ! defined (YYSIZE_T)
-# define YYSIZE_T unsigned int
-#endif
+#if YYDEBUG != 0
+static const short yyprhs[] = {     0,
+     0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
+    20,    22,    24,    26,    28,    30,    32,    34,    36,    38,
+    40,    42,    44,    46,    48,    50,    52,    54,    56,    58,
+    60,    62,    64,    66,    68,    70,    72,    74,    76,    78,
+    80,    82,    84,    86,    88,    90,    92,    94,    96,    98,
+   100,   102,   104,   106,   108,   110,   112,   114,   116,   118,
+   119,   122,   123,   125,   127,   130,   131,   133,   135,   137,
+   139,   141,   143,   145,   147,   148,   150,   151,   153,   155,
+   156,   158,   160,   162,   164,   165,   167,   169,   171,   173,
+   175,   178,   180,   182,   184,   186,   187,   190,   192,   194,
+   196,   197,   200,   201,   204,   205,   209,   212,   213,   215,
+   216,   220,   222,   225,   227,   229,   231,   233,   235,   237,
+   240,   242,   245,   251,   257,   263,   269,   273,   276,   282,
+   287,   290,   292,   294,   296,   300,   302,   306,   308,   309,
+   311,   315,   320,   324,   328,   333,   338,   342,   349,   355,
+   358,   361,   364,   367,   370,   373,   376,   379,   382,   385,
+   388,   391,   398,   404,   413,   420,   427,   435,   443,   450,
+   459,   468,   472,   474,   476,   478,   480,   481,   483,   484,
+   486,   489,   490,   494,   495,   499,   503,   507,   511,   512,
+   520,   521,   530,   531,   540,   543,   547,   549,   553,   557,
+   561,   565,   567,   568,   574,   578,   580,   584,   586,   587,
+   597,   599,   601,   606,   608,   610,   613,   617,   618,   620,
+   622,   624,   626,   628,   630,   632,   634,   636,   640,   642,
+   648,   650,   652,   654,   656,   658,   660,   663,   666,   669,
+   673,   676,   677,   679,   682,   685,   689,   699,   709,   718,
+   733,   735,   737,   744,   750,   753,   760,   768,   772,   778,
+   779,   780,   784,   787,   789,   795,   801,   808,   815,   820,
+   827,   832,   837,   844,   851,   854,   863,   865,   867,   868,
+   872,   879,   883,   890,   893,   899,   907
+};
 
-#ifndef YY_
-# if YYENABLE_NLS
-#  if ENABLE_NLS
-#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(msgid) dgettext ("bison-runtime", msgid)
-#  endif
-# endif
-# ifndef YY_
-#  define YY_(msgid) msgid
-# endif
-#endif
-
-#if ! defined (yyoverflow) || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# ifdef YYSTACK_USE_ALLOCA
-#  if YYSTACK_USE_ALLOCA
-#   ifdef __GNUC__
-#    define YYSTACK_ALLOC __builtin_alloca
-#   else
-#    define YYSTACK_ALLOC alloca
-#    if defined (__STDC__) || defined (__cplusplus)
-#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#     define YYINCLUDED_STDLIB_H
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning. */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-    /* The OS might guarantee only one guard page at the bottom of the stack,
-       and a page size can be as small as 4096 bytes.  So we cannot safely
-       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
-       to allow for a few compiler-allocated temporary stack slots.  */
-#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
-#  endif
-# else
-#  define YYSTACK_ALLOC YYMALLOC
-#  define YYSTACK_FREE YYFREE
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-#   define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
-#  endif
-#  ifdef __cplusplus
-extern "C" {
-#  endif
-#  ifndef YYMALLOC
-#   define YYMALLOC malloc
-#   if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
-	&& (defined (__STDC__) || defined (__cplusplus)))
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-#  ifndef YYFREE
-#   define YYFREE free
-#   if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
-	&& (defined (__STDC__) || defined (__cplusplus)))
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-#  ifdef __cplusplus
-}
-#  endif
-# endif
-#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
-
-
-#if (! defined (yyoverflow) \
-     && (! defined (__cplusplus) \
-	 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  short int yyss;
-  YYSTYPE yyvs;
-  };
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (short int) + sizeof (YYSTYPE))			\
-      + YYSTACK_GAP_MAXIMUM)
-
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined (__GNUC__) && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)		\
-      do					\
-	{					\
-	  YYSIZE_T yyi;				\
-	  for (yyi = 0; yyi < (Count); yyi++)	\
-	    (To)[yyi] = (From)[yyi];		\
-	}					\
-      while (0)
-#  endif
-# endif
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack)					\
-    do									\
-      {									\
-	YYSIZE_T yynewbytes;						\
-	YYCOPY (&yyptr->Stack, Stack, yysize);				\
-	Stack = &yyptr->Stack;						\
-	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-	yyptr += yynewbytes / sizeof (*yyptr);				\
-      }									\
-    while (0)
+static const short yyrhs[] = {    68,
+     0,    69,     0,    70,     0,    71,     0,    72,     0,    73,
+     0,    74,     0,    75,     0,    76,     0,    80,     0,    81,
+     0,    82,     0,    77,     0,    78,     0,    79,     0,   111,
+     0,   112,     0,   113,     0,   114,     0,   115,     0,   116,
+     0,   117,     0,   118,     0,   119,     0,   120,     0,   121,
+     0,   122,     0,    85,     0,    86,     0,    87,     0,    88,
+     0,    89,     0,    90,     0,    91,     0,    92,     0,    93,
+     0,    94,     0,    95,     0,    96,     0,    97,     0,    98,
+     0,    99,     0,   100,     0,   101,     0,   102,     0,   103,
+     0,   104,     0,    91,     0,    92,     0,    93,     0,    94,
+     0,    22,     0,    23,     0,    11,     0,    12,     0,    13,
+     0,    16,     0,    19,     0,   156,     0,     0,   156,   135,
+     0,     0,    17,     0,    20,     0,   159,   135,     0,     0,
+    37,     0,    39,     0,    38,     0,    40,     0,    42,     0,
+    41,     0,    43,     0,    45,     0,     0,   134,     0,     0,
+    41,     0,    43,     0,     0,    37,     0,    38,     0,    39,
+     0,    42,     0,     0,    56,     0,    57,     0,    58,     0,
+    59,     0,    60,     0,    55,     4,     0,   112,     0,   113,
+     0,   130,     0,   131,     0,     0,   168,   167,     0,   129,
+     0,   132,     0,   167,     0,     0,   170,   169,     0,     0,
+    48,     4,     0,     0,   136,    48,     4,     0,    30,    19,
+     0,     0,   173,     0,     0,   136,   176,   175,     0,   173,
+     0,    48,     4,     0,    11,     0,    12,     0,    13,     0,
+    14,     0,    44,     0,   177,     0,   178,   137,     0,   211,
+     0,   138,     4,     0,   178,   139,   182,   140,   170,     0,
+    10,   139,   182,   140,   170,     0,   141,     4,   142,   178,
+   143,     0,   144,     4,   142,   178,   145,     0,   146,   183,
+   147,     0,   146,   147,     0,   144,   146,   183,   147,   145,
+     0,   144,   146,   147,   145,     0,   178,   168,     0,   178,
+     0,    10,     0,   179,     0,   181,   136,   179,     0,   181,
+     0,   181,   136,    34,     0,    34,     0,     0,   178,     0,
+   183,   136,   178,     0,   178,   141,   186,   143,     0,   178,
+   141,   143,     0,   178,   148,    19,     0,   178,   144,   186,
+   145,     0,   178,   146,   186,   147,     0,   178,   146,   147,
+     0,   178,   144,   146,   186,   147,   145,     0,   178,   144,
+   146,   147,   145,     0,   178,    35,     0,   178,    36,     0,
+   178,   211,     0,   178,   185,     0,   178,    21,     0,   154,
+     3,     0,   154,     5,     0,   154,     4,     0,   154,     6,
+     0,    11,    22,     0,    11,    23,     0,   155,     9,     0,
+   151,   139,   184,    33,   178,   140,     0,   110,   139,   184,
+   222,   140,     0,   124,   139,   184,   136,   184,   136,   184,
+   140,     0,   149,   139,   184,   136,   184,   140,     0,   150,
+   139,   184,   136,   184,   140,     0,    83,   152,   139,   184,
+   136,   184,   140,     0,    84,   153,   139,   184,   136,   184,
+   140,     0,   126,   139,   184,   136,   184,   140,     0,   127,
+   139,   184,   136,   184,   136,   184,   140,     0,   128,   139,
+   184,   136,   184,   136,   184,   140,     0,   186,   136,   184,
+     0,   184,     0,    28,     0,    29,     0,    32,     0,     0,
+   190,     0,     0,   191,     0,   190,   191,     0,     0,    27,
+   192,   207,     0,     0,    26,   193,   208,     0,    53,    52,
+   197,     0,   158,    15,   178,     0,   158,    15,    10,     0,
+     0,   160,   163,   188,   187,   184,   194,   175,     0,     0,
+   160,   161,   163,   188,   187,   184,   195,   175,     0,     0,
+   160,   162,   163,   188,   187,   178,   196,   175,     0,    46,
+   198,     0,    49,   135,   199,     0,    19,     0,    47,   135,
+    19,     0,    61,   135,    19,     0,   141,   200,   143,     0,
+   200,   136,    19,     0,    19,     0,     0,   201,   136,   178,
+   168,   157,     0,   178,   168,   157,     0,   201,     0,   201,
+   136,    34,     0,    34,     0,     0,   166,   180,   159,   139,
+   202,   140,   170,   174,   171,     0,    24,     0,   146,     0,
+   165,   163,   203,   204,     0,    25,     0,   147,     0,   214,
+   206,     0,   164,   163,   203,     0,     0,    54,     0,     3,
+     0,     4,     0,     9,     0,    22,     0,    23,     0,    35,
+     0,    36,     0,    21,     0,   144,   186,   145,     0,   185,
+     0,    52,   209,    19,   136,    19,     0,     7,     0,     8,
+     0,   156,     0,   159,     0,   211,     0,   210,     0,   178,
+   212,     0,   214,   215,     0,   205,   215,     0,   216,   158,
+   217,     0,   216,   219,     0,     0,    18,     0,    62,   213,
+     0,    62,    10,     0,    63,    14,   212,     0,    63,    11,
+   212,   136,    14,   212,   136,    14,   212,     0,    64,   154,
+   212,   136,    14,   212,   141,   218,   143,     0,    64,   154,
+   212,   136,    14,   212,   141,   143,     0,    65,   166,   180,
+   212,   139,   221,   140,   170,    33,    14,   212,    66,    14,
+   212,     0,    66,     0,    67,     0,   218,   154,   210,   136,
+    14,   212,     0,   154,   210,   136,    14,   212,     0,   158,
+   224,     0,   178,   141,   212,   136,   212,   143,     0,   220,
+   136,   141,   212,   136,   212,   143,     0,   178,   212,   168,
+     0,   221,   136,   178,   212,   168,     0,     0,     0,   222,
+   136,   213,     0,    51,    50,     0,    50,     0,   149,   178,
+   212,   136,   212,     0,   150,   178,   212,   136,   212,     0,
+    83,   152,   178,   212,   136,   212,     0,    84,   153,   178,
+   212,   136,   212,     0,   151,   213,    33,   178,     0,   124,
+   213,   136,   213,   136,   213,     0,   125,   213,   136,   178,
+     0,   126,   213,   136,   213,     0,   127,   213,   136,   213,
+   136,   213,     0,   128,   213,   136,   213,   136,   213,     0,
+   123,   220,     0,   223,   166,   180,   212,   139,   221,   140,
+   170,     0,   226,     0,    31,     0,     0,   105,   178,   172,
+     0,   105,   178,   136,    11,   212,   172,     0,   106,   178,
+   172,     0,   106,   178,   136,    11,   212,   172,     0,   107,
+   213,     0,   225,   108,   178,   212,   172,     0,   225,   109,
+   213,   136,   178,   212,   172,     0,   110,   178,   212,   222,
+     0
+};
 
 #endif
 
-#if defined (__STDC__) || defined (__cplusplus)
-   typedef signed char yysigned_char;
+#if YYDEBUG != 0
+static const short yyrline[] = { 0,
+  1093,  1093,  1093,  1093,  1093,  1093,  1093,  1093,  1093,  1094,
+  1094,  1094,  1094,  1094,  1094,  1095,  1095,  1095,  1095,  1095,
+  1095,  1095,  1096,  1096,  1096,  1096,  1096,  1099,  1099,  1100,
+  1100,  1101,  1101,  1102,  1102,  1103,  1103,  1107,  1107,  1108,
+  1108,  1109,  1109,  1110,  1110,  1111,  1111,  1112,  1112,  1113,
+  1113,  1114,  1115,  1120,  1121,  1121,  1123,  1123,  1124,  1124,
+  1128,  1132,  1137,  1137,  1139,  1143,  1149,  1150,  1151,  1152,
+  1153,  1157,  1158,  1159,  1163,  1164,  1168,  1169,  1170,  1174,
+  1175,  1176,  1177,  1178,  1181,  1181,  1182,  1183,  1184,  1185,
+  1186,  1194,  1195,  1196,  1197,  1200,  1201,  1206,  1207,  1208,
+  1211,  1212,  1219,  1219,  1226,  1226,  1235,  1243,  1243,  1249,
+  1249,  1251,  1256,  1269,  1269,  1269,  1269,  1272,  1276,  1280,
+  1287,  1292,  1300,  1326,  1353,  1358,  1370,  1380,  1384,  1394,
+  1401,  1408,  1415,  1420,  1425,  1432,  1433,  1440,  1447,  1455,
+  1461,  1473,  1501,  1517,  1546,  1574,  1599,  1618,  1644,  1664,
+  1676,  1683,  1749,  1759,  1769,  1775,  1785,  1791,  1801,  1806,
+  1811,  1819,  1831,  1853,  1861,  1867,  1878,  1883,  1888,  1894,
+  1900,  1909,  1913,  1921,  1921,  1924,  1924,  1935,  1940,  1948,
+  1949,  1953,  1953,  1957,  1957,  1960,  1963,  1987,  1998,  2005,
+  2008,  2013,  2016,  2022,  2026,  2029,  2035,  2048,  2052,  2057,
+  2059,  2064,  2069,  2078,  2088,  2099,  2103,  2112,  2121,  2126,
+  2245,  2245,  2247,  2256,  2256,  2258,  2263,  2275,  2279,  2284,
+  2288,  2292,  2296,  2300,  2304,  2308,  2312,  2316,  2341,  2345,
+  2359,  2363,  2367,  2371,  2377,  2377,  2383,  2392,  2396,  2405,
+  2414,  2423,  2427,  2432,  2436,  2440,  2445,  2455,  2474,  2483,
+  2559,  2563,  2570,  2581,  2594,  2604,  2615,  2625,  2634,  2643,
+  2646,  2647,  2654,  2658,  2663,  2684,  2701,  2715,  2729,  2741,
+  2749,  2756,  2762,  2768,  2774,  2789,  2870,  2875,  2879,  2886,
+  2893,  2901,  2908,  2916,  2924,  2938,  2955
+};
+#endif
+
+
+#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
+
+static const char * const yytname[] = {   "$","error","$undefined.","ESINT64VAL",
+"EUINT64VAL","ESAPINTVAL","EUAPINTVAL","LOCALVAL_ID","GLOBALVAL_ID","FPVAL",
+"VOID","INTTYPE","FLOAT","DOUBLE","LABEL","TYPE","LOCALVAR","GLOBALVAR","LABELSTR",
+"STRINGCONSTANT","ATSTRINGCONSTANT","ZEROINITIALIZER","TRUETOK","FALSETOK","BEGINTOK",
+"ENDTOK","DECLARE","DEFINE","GLOBAL","CONSTANT","SECTION","VOLATILE","THREAD_LOCAL",
+"TO","DOTDOTDOT","NULL_TOK","UNDEF","INTERNAL","LINKONCE","WEAK","APPENDING",
+"DLLIMPORT","DLLEXPORT","EXTERN_WEAK","OPAQUE","EXTERNAL","TARGET","TRIPLE",
+"ALIGN","DEPLIBS","CALL","TAIL","ASM_TOK","MODULE","SIDEEFFECT","CC_TOK","CCC_TOK",
+"FASTCC_TOK","COLDCC_TOK","X86_STDCALLCC_TOK","X86_FASTCALLCC_TOK","DATALAYOUT",
+"RET","BR","SWITCH","INVOKE","UNWIND","UNREACHABLE","ADD","SUB","MUL","UDIV",
+"SDIV","FDIV","UREM","SREM","FREM","AND","OR","XOR","SHL","LSHR","ASHR","ICMP",
+"FCMP","EQ","NE","SLT","SGT","SLE","SGE","ULT","UGT","ULE","UGE","OEQ","ONE",
+"OLT","OGT","OLE","OGE","ORD","UNO","UEQ","UNE","MALLOC","ALLOCA","FREE","LOAD",
+"STORE","GETELEMENTPTR","TRUNC","ZEXT","SEXT","FPTRUNC","FPEXT","BITCAST","UITOFP",
+"SITOFP","FPTOUI","FPTOSI","INTTOPTR","PTRTOINT","PHI_TOK","SELECT","VAARG",
+"EXTRACTELEMENT","INSERTELEMENT","SHUFFLEVECTOR","NORETURN","INREG","SRET","NOUNWIND",
+"DEFAULT","HIDDEN","'='","','","'*'","'\\\\'","'('","')'","'['","'x'","']'",
+"'<'","'>'","'{'","'}'","'c'","ArithmeticOps","LogicalOps","CastOps","IPredicates",
+"FPredicates","IntType","FPType","LocalName","OptLocalName","OptLocalAssign",
+"GlobalName","OptGlobalAssign","GVInternalLinkage","GVExternalLinkage","GVVisibilityStyle",
+"FunctionDeclareLinkage","FunctionDefineLinkage","OptCallingConv","ParamAttr",
+"OptParamAttrs","FuncAttr","OptFuncAttrs","OptAlign","OptCAlign","SectionString",
+"OptSection","GlobalVarAttributes","GlobalVarAttribute","PrimType","Types","ArgType",
+"ResultTypes","ArgTypeList","ArgTypeListI","TypeListI","ConstVal","ConstExpr",
+"ConstVector","GlobalType","ThreadLocal","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","ValueRefList","IndexList","OptTailCall","InstVal",
+"OptVolatile","MemoryInst", NULL
+};
+#endif
+
+static const short yyr1[] = {     0,
+   149,   149,   149,   149,   149,   149,   149,   149,   149,   150,
+   150,   150,   150,   150,   150,   151,   151,   151,   151,   151,
+   151,   151,   151,   151,   151,   151,   151,   152,   152,   152,
+   152,   152,   152,   152,   152,   152,   152,   153,   153,   153,
+   153,   153,   153,   153,   153,   153,   153,   153,   153,   153,
+   153,   153,   153,   154,   155,   155,   156,   156,   157,   157,
+   158,   158,   159,   159,   160,   160,   161,   161,   161,   161,
+   161,   162,   162,   162,   163,   163,   164,   164,   164,   165,
+   165,   165,   165,   165,   166,   166,   166,   166,   166,   166,
+   166,   167,   167,   167,   167,   168,   168,   169,   169,   169,
+   170,   170,   171,   171,   172,   172,   173,   174,   174,   175,
+   175,   176,   176,   177,   177,   177,   177,   178,   178,   178,
+   178,   178,   178,   178,   178,   178,   178,   178,   178,   178,
+   179,   180,   180,   181,   181,   182,   182,   182,   182,   183,
+   183,   184,   184,   184,   184,   184,   184,   184,   184,   184,
+   184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
+   184,   185,   185,   185,   185,   185,   185,   185,   185,   185,
+   185,   186,   186,   187,   187,   188,   188,   189,   189,   190,
+   190,   192,   191,   193,   191,   191,   191,   191,   194,   191,
+   195,   191,   196,   191,   191,   191,   197,   198,   198,   199,
+   200,   200,   200,   201,   201,   202,   202,   202,   202,   203,
+   204,   204,   205,   206,   206,   207,   208,   209,   209,   210,
+   210,   210,   210,   210,   210,   210,   210,   210,   210,   210,
+   211,   211,   211,   211,   212,   212,   213,   214,   214,   215,
+   216,   216,   216,   217,   217,   217,   217,   217,   217,   217,
+   217,   217,   218,   218,   219,   220,   220,   221,   221,   221,
+   222,   222,   223,   223,   224,   224,   224,   224,   224,   224,
+   224,   224,   224,   224,   224,   224,   224,   225,   225,   226,
+   226,   226,   226,   226,   226,   226,   226
+};
+
+static const short yyr2[] = {     0,
+     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,     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,
+     1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
+     2,     0,     1,     1,     2,     0,     1,     1,     1,     1,
+     1,     1,     1,     1,     0,     1,     0,     1,     1,     0,
+     1,     1,     1,     1,     0,     1,     1,     1,     1,     1,
+     2,     1,     1,     1,     1,     0,     2,     1,     1,     1,
+     0,     2,     0,     2,     0,     3,     2,     0,     1,     0,
+     3,     1,     2,     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,     1,     0,     1,
+     2,     0,     3,     0,     3,     3,     3,     3,     0,     7,
+     0,     8,     0,     8,     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,     3,     5,     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
+};
+
+static const short yydefact[] = {    66,
+    57,    63,    58,    64,   184,   182,     0,     0,     0,     0,
+     0,     0,    75,    66,   180,    77,    80,     0,     0,   195,
+     0,     0,    61,     0,    65,    67,    69,    68,    70,    72,
+    71,    73,    74,    76,    75,    75,   177,   181,    78,    79,
+    75,   185,    81,    82,    83,    84,    75,   242,   183,   242,
+     0,     0,   203,   196,   197,   186,   231,   232,   188,   114,
+   115,   116,   117,   118,     0,     0,     0,     0,   233,   234,
+   119,   187,   121,   177,   177,   176,     0,    85,    85,   243,
+   239,    62,   214,   215,   216,   238,   198,   199,   202,     0,
+   139,   122,     0,     0,     0,     0,   128,   140,     0,   120,
+   139,     0,     0,   174,   175,     0,     0,    86,    87,    88,
+    89,    90,     0,   217,     0,   279,   241,     0,   200,   138,
+    96,   134,   136,     0,     0,     0,     0,     0,     0,   127,
+     0,     0,     0,   114,   115,   116,     0,     0,     0,   189,
+    91,   133,   132,     0,   211,   212,   213,   278,   264,     0,
+     0,     0,     0,    85,   251,   252,     1,     2,     3,     4,
+     5,     6,     7,     8,     9,    13,    14,    15,    10,    11,
+    12,     0,     0,     0,     0,     0,     0,    16,    17,    18,
+    19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   240,    85,
+   255,     0,   277,   201,   131,     0,   101,     0,     0,   130,
+     0,   141,   101,   191,   193,   159,   160,   155,   157,   156,
+   158,   161,   154,   150,   151,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   153,
+   152,   110,     0,   263,   245,     0,   244,     0,     0,    54,
+     0,     0,    28,    29,    30,    31,    32,    33,    34,    35,
+    36,    37,     0,    52,    53,    48,    49,    50,    51,    38,
+    39,    40,    41,    42,    43,    44,    45,    46,    47,     0,
+   105,   105,   284,     0,     0,   275,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    92,    93,    94,
+    95,    97,   137,   135,   124,   125,   126,   129,   123,   110,
+   110,     0,     0,     0,     0,     0,     0,     0,   143,   173,
+     0,     0,     0,   147,     0,   144,     0,     0,     0,     0,
+   190,   209,   220,   221,   222,   227,   223,   224,   225,   226,
+   218,     0,   229,   236,   235,   237,     0,   246,     0,     0,
+     0,     0,     0,   280,     0,   282,   261,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    98,    99,   100,   102,   192,   194,     0,     0,   261,     0,
+     0,     0,     0,     0,   142,   128,   140,     0,   145,   146,
+     0,     0,     0,     0,     0,   112,   110,   208,    96,   206,
+     0,   219,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   287,     0,     0,     0,   271,   272,     0,     0,
+     0,     0,   269,     0,   105,     0,     0,     0,     0,     0,
+     0,     0,     0,   172,   149,     0,     0,     0,     0,   107,
+   113,   111,    60,     0,   101,     0,   228,     0,     0,   260,
+     0,     0,   105,   106,   105,     0,     0,     0,     0,     0,
+     0,   265,   266,   260,     0,   285,     0,     0,     0,   163,
+     0,     0,     0,     0,   148,     0,     0,     0,    59,   205,
+   207,    96,   108,     0,     0,     0,     0,     0,   267,   268,
+   281,   283,   262,     0,     0,   270,   273,   274,     0,   105,
+     0,     0,     0,   169,     0,     0,   165,   166,   162,    60,
+   109,   103,   230,     0,     0,    96,     0,   101,   256,     0,
+   101,   286,   167,   168,     0,     0,     0,   204,     0,   210,
+     0,   249,     0,     0,   258,     0,     0,   257,   276,   164,
+   170,   171,   104,   247,     0,   248,     0,    96,     0,     0,
+     0,   259,     0,     0,     0,     0,   254,     0,     0,   253,
+     0,   250,     0,     0,     0
+};
+
+static const short yydefgoto[] = {   237,
+   238,   239,   263,   280,   137,   138,    69,   480,    11,    70,
+    13,    35,    36,    37,    41,    47,   113,   302,   205,   374,
+   305,   530,   354,   396,   512,   331,   397,    71,   139,   122,
+   144,   123,   124,    99,   320,   343,   321,   106,    77,   563,
+    14,    15,    17,    16,   242,   310,   311,    56,    20,    54,
+    90,   400,   401,   114,   147,    48,    85,    49,    42,   403,
+   344,    73,   346,   247,    50,    81,    82,   199,   534,   117,
+   286,   488,   413,   200,   201,   202,   203
+};
+
+static const short yypact[] = {   593,
+-32768,-32768,-32768,-32768,-32768,-32768,    -1,   -87,    11,   -41,
+    89,   -13,    46,  1408,-32768,   185,    82,    13,    55,-32768,
+    81,   211,-32768,  1122,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,    98,    98,   206,-32768,-32768,-32768,
+    98,-32768,-32768,-32768,-32768,-32768,    98,   235,-32768,     8,
+   242,   251,   252,-32768,-32768,-32768,-32768,-32768,   128,-32768,
+-32768,-32768,-32768,-32768,   272,   274,     4,   122,-32768,-32768,
+-32768,    61,-32768,   206,   206,-32768,   183,   290,   290,-32768,
+-32768,   121,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   -92,
+   979,-32768,   137,   139,   284,   128,-32768,    61,   -70,-32768,
+   979,   183,   183,-32768,-32768,  1136,   278,-32768,-32768,-32768,
+-32768,-32768,  1178,-32768,   -15,  1277,-32768,   264,-32768,-32768,
+    61,-32768,   148,   153,  1192,  1192,   160,   -66,  1192,-32768,
+   162,  1136,  1192,    32,   297,   298,   215,   301,   761,-32768,
+-32768,   128,    61,   145,-32768,-32768,-32768,-32768,-32768,   262,
+  1234,   248,   304,   290,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   157,   422,  1192,  1192,  1192,  1192,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1192,
+  1192,  1192,  1192,  1192,  1192,  1192,  1192,  1192,-32768,   290,
+-32768,   -34,-32768,-32768,   -33,  1019,-32768,    71,   -22,-32768,
+   173,    61,-32768,-32768,    61,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,   157,   422,   180,   181,   182,
+   184,   186,  1038,  1276,   448,   305,   187,   188,   191,-32768,
+-32768,   193,   192,-32768,   128,   614,-32768,   740,   740,-32768,
+   740,  1178,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,  1192,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1192,
+    88,   119,-32768,   614,    62,   197,   198,   199,   200,   207,
+   217,   614,   614,   309,  1178,  1192,  1192,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   -73,-32768,-32768,-32768,   -73,   193,
+   193,   212,   216,  1136,  1136,  1136,  1136,  1136,-32768,-32768,
+   -44,   933,   -69,-32768,   -40,-32768,  1136,  1136,  1136,    -5,
+-32768,  1077,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+   300,  1136,-32768,-32768,-32768,-32768,   220,-32768,   221,   740,
+   614,   614,    17,-32768,    23,-32768,-32768,   740,   218,  1192,
+  1192,  1192,  1192,  1192,   222,   225,  1192,   740,   614,   226,
+-32768,-32768,-32768,-32768,-32768,-32768,  1136,  1136,-32768,   227,
+   229,   230,   231,  1136,-32768,   228,   761,   -35,-32768,-32768,
+   234,   236,   341,   356,   372,-32768,   193,-32768,    61,   241,
+   238,-32768,   360,   -36,   366,   367,   243,   253,   254,   740,
+   387,   740,   256,   257,   740,   258,    61,-32768,   259,   266,
+   740,   740,    61,   261,   269,  1192,   270,   271,   -67,  1136,
+  1136,  1136,  1136,-32768,-32768,   263,  1136,  1136,  1192,-32768,
+-32768,-32768,    33,  1093,-32768,   273,-32768,   740,   740,  1192,
+   740,   740,   269,-32768,   269,  1192,   740,   275,  1192,  1192,
+  1192,-32768,-32768,  1192,   362,-32768,   614,  1136,  1136,-32768,
+   279,   277,   288,   293,-32768,   280,   292,    42,-32768,-32768,
+-32768,    61,    65,   395,   299,   308,   614,     7,-32768,-32768,
+-32768,-32768,-32768,   291,   740,-32768,-32768,-32768,    73,   269,
+   302,   306,  1136,-32768,  1136,  1136,-32768,-32768,-32768,    33,
+-32768,   391,-32768,   426,     1,-32768,  1192,-32768,-32768,   307,
+-32768,-32768,-32768,-32768,   311,   312,   313,-32768,   453,-32768,
+   740,-32768,   890,    18,   -33,   614,    75,-32768,   -73,-32768,
+-32768,-32768,-32768,-32768,   327,-32768,   890,-32768,   452,   455,
+   337,   -33,   740,   740,   460,   409,-32768,   740,   462,-32768,
+   740,-32768,   477,   479,-32768
+};
+
+static const short yypgoto[] = {   364,
+   365,   368,   260,   255,  -151,-32768,     0,   -27,   403,    16,
+-32768,-32768,-32768,     6,-32768,-32768,  -139,  -298,  -389,-32768,
+  -210,-32768,  -269,    10,-32768,  -279,-32768,-32768,   -23,   281,
+  -233,-32768,   389,   396,    70,  -133,  -217,   134,   190,-32768,
+-32768,   481,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   417,-32768,-32768,-32768,-32768,-32768,-32768,
+  -483,  -135,   120,  -171,-32768,   447,-32768,-32768,-32768,-32768,
+-32768,    34,   125,-32768,-32768,-32768,-32768
+};
+
+
+#define	YYLAST		1461
+
+
+static const short yytable[] = {    10,
+    72,   251,   309,   241,   283,   240,   373,    94,   145,   443,
+   373,   250,   356,    10,   252,    12,   323,   325,   350,   287,
+   288,   289,   290,   291,   394,    80,   294,   410,   250,    12,
+   375,   376,    83,   412,   -54,   -54,   -54,   -54,   298,   299,
+    74,    75,   395,   118,    98,    18,    78,    21,     1,   545,
+   119,     3,    79,   216,   217,   371,   300,   301,   372,    19,
+   295,   368,    22,   551,   411,   129,   384,   121,   456,   129,
+   411,    98,   470,   296,   297,   389,   130,   121,   298,   299,
+   211,    10,    26,    27,    28,    29,    30,    31,    32,   143,
+    33,   384,   510,    23,   394,   384,   300,   301,   385,   384,
+   384,   208,   209,    24,   388,   212,   390,   549,   447,   215,
+   345,   436,   345,   345,   100,   345,   101,   442,    43,    44,
+    45,    25,   307,    46,   404,   370,   535,   246,    57,    58,
+   146,    96,    60,    61,    62,    63,     1,     1,     2,     3,
+     3,     4,   517,   532,   298,   299,   518,    51,   345,    95,
+   281,   282,   246,   284,    84,   466,   345,   345,   552,   243,
+   546,     2,   300,   301,     4,    64,   285,   246,   246,   246,
+   246,   246,   292,   293,   246,   140,   298,   299,   100,    34,
+   101,   509,   121,   491,   373,   492,   298,   299,   416,    52,
+   418,   419,   420,   371,   300,   301,   372,   100,   100,   101,
+   101,   214,   358,   371,   300,   301,   372,   100,   517,   101,
+   104,   105,   521,   306,   345,   345,   345,   218,   219,   220,
+   221,    53,   345,   353,   100,    39,   101,    40,   143,    55,
+   522,    34,   345,   345,   483,   132,   133,    76,   373,   351,
+   373,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+   262,   241,    80,   240,   355,   100,   352,   101,   248,    65,
+    87,   249,    66,   102,   103,    67,    91,    68,    97,    88,
+    89,   143,   369,   246,   345,    92,   345,    93,   125,   345,
+   126,   141,   204,   206,   493,   345,   345,   496,   497,   498,
+    57,    58,   207,    96,    60,    61,    62,    63,   387,     1,
+     2,   213,     3,     4,   210,   -55,   -56,   537,   399,   222,
+   539,   244,   345,   345,   250,   345,   345,   308,   314,   315,
+   316,   345,   317,   326,   318,   327,   328,    64,   330,   329,
+   332,   345,   359,   360,   361,   362,   246,   417,   246,   246,
+   246,   367,   363,   423,   107,   108,   109,   110,   111,   112,
+   377,   345,   364,   402,   378,   405,   406,   421,   415,   345,
+   422,   426,   430,   533,   431,   432,   433,   347,   348,   437,
+   349,   438,   435,   439,   440,   441,   444,   445,   446,   448,
+   449,   450,   547,   379,   380,   381,   382,   383,   451,   452,
+   454,   456,   457,   459,   460,   345,   391,   392,   393,   464,
+   345,   461,   467,   357,   465,   468,   469,   475,   484,   411,
+   495,   365,   366,   513,   503,   478,   504,   345,   345,   507,
+   482,    65,   345,   505,    66,   345,   487,    67,   506,    68,
+   127,   508,   246,   519,   514,   246,   246,   246,   529,   531,
+   487,   523,   479,   264,   265,   524,   427,   428,   515,   538,
+   540,   541,   542,   434,    57,    58,   543,    96,   134,   135,
+   136,    63,   550,     1,     2,   553,     3,     4,   554,   407,
+   408,   409,   555,   558,   559,   561,   564,   414,   565,   196,
+   197,   313,   528,   198,   116,   312,   304,   424,   425,   131,
+   128,    64,   511,   536,    38,   115,    86,   499,     0,   471,
+   472,   473,   474,   429,     0,     0,   476,   477,     0,   479,
+     0,     0,   266,   267,   268,   269,   270,   271,   272,   273,
+   274,   275,   276,   277,   278,   279,     0,     0,     0,   453,
+     0,   455,     0,     0,   458,     0,     0,   501,   502,     0,
+   462,   463,     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,   485,   486,     0,
+   489,   490,   525,     0,   526,   527,   494,     0,     0,     0,
+     0,     0,     0,     0,     0,    65,   500,     0,    66,     0,
+     0,    67,  -179,    68,   324,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   516,   -62,     1,     2,
+     0,     3,     4,     0,   520,     0,   333,   334,     5,     6,
+    57,    58,   335,     0,     0,     0,     0,     0,     0,     1,
+     2,     0,     3,     4,   336,   337,   338,     0,     7,     0,
+     0,     8,     0,     0,     0,     9,     0,     0,   339,   340,
+   544,     0,     0,     0,     0,   548,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   341,     0,     0,     0,     0,
+     0,     0,   556,   557,     0,     0,     0,   560,     0,     0,
+   562,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,   168,   169,   170,   171,   226,   227,     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,   228,   178,   179,   180,   181,   182,   183,
+   184,   185,   186,   187,   188,   189,     0,   229,     0,   230,
+   231,   232,   333,   334,     0,     0,    57,    58,   335,     0,
+   100,     0,   101,     0,     0,     1,     2,   342,     3,     4,
+   336,   337,   338,     0,     0,     0,     0,    57,    58,     0,
+     0,     0,     0,     0,   339,   340,     1,     2,     0,     3,
+     4,   223,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   341,     0,     0,     0,   224,   225,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   157,   158,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+   170,   171,   226,   227,     0,     0,     0,     0,   157,   158,
+   159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+   169,   170,   171,   226,   227,     0,     0,     0,     0,   228,
+   178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+   188,   189,     0,   229,     0,   230,   231,   232,     0,     0,
+   228,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+   187,   188,   189,   342,   229,     0,   230,   231,   232,     0,
+     0,     0,   333,   334,     0,     0,     0,   100,   335,   101,
+     0,   233,     0,     0,   234,     0,   235,     0,   236,     0,
+   336,   337,   338,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   339,   340,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    57,
+    58,   341,    96,   134,   135,   136,    63,     0,     1,     2,
+     0,     3,     4,     0,     0,     0,     0,   157,   158,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+   170,   171,   226,   227,     0,     0,    64,     0,     0,     0,
+     0,     0,     0,     0,     0,    57,    58,     0,    96,    60,
+    61,    62,    63,     0,     1,     2,     0,     3,     4,   228,
+   178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+   188,   189,   120,   229,     0,   230,   231,   232,     0,     0,
+     0,     0,    64,     0,     0,    57,    58,     0,    96,    60,
+    61,    62,    63,   342,     1,     2,     0,     3,     4,     0,
+     0,     0,     0,     0,    57,    58,     0,    96,   134,   135,
+   136,    63,   303,     1,     2,     0,     3,     4,     0,     0,
+     0,     0,    64,     0,     0,     0,     0,     0,     0,     0,
+    65,     0,     0,    66,     0,     0,    67,     0,    68,   386,
+     0,    64,     0,    57,    58,     0,    96,    60,    61,    62,
+    63,     0,     1,     2,     0,     3,     4,     0,     0,    57,
+    58,     0,    96,    60,    61,    62,    63,     0,     1,     2,
+   398,     3,     4,     0,     0,     0,    65,     0,     0,    66,
+    64,     0,    67,     0,    68,     0,   481,     0,    57,    58,
+     0,    59,    60,    61,    62,    63,    64,     1,     2,     0,
+     3,     4,    57,    58,     0,    96,   134,   135,   136,    63,
+     0,     1,     2,     0,     3,     4,    65,     0,     0,    66,
+     0,     0,    67,     0,    68,    64,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    65,     0,     0,    66,    64,
+   319,    67,     0,    68,    57,    58,     0,   142,    60,    61,
+    62,    63,     0,     1,     2,     0,     3,     4,    57,    58,
+     0,    96,    60,    61,    62,    63,     0,     1,     2,     0,
+     3,     4,     0,     0,    65,     0,     0,    66,     0,     0,
+    67,    64,    68,     0,     0,     0,     0,     0,     0,     0,
+    65,     0,     0,    66,     0,    64,    67,     0,    68,     0,
+    57,    58,     0,   245,    60,    61,    62,    63,     0,     1,
+     2,     0,     3,     4,     0,     0,     0,     0,     0,    65,
+     0,     0,    66,     0,     0,    67,     0,    68,     0,     0,
+     0,     0,     0,    65,     0,     0,    66,    64,     0,    67,
+     0,    68,    57,    58,     0,    96,   134,   135,   136,    63,
+     0,     1,     2,     0,     3,     4,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   148,     0,     0,
+     0,     0,     0,     0,     0,    65,     0,     0,    66,    64,
+     0,    67,     0,    68,     0,     0,   149,   150,     0,    65,
+     0,     0,    66,     0,     0,    67,     0,    68,   151,   152,
+   153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+   173,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,    65,     0,     0,    66,     0,     0,    67,     0,    68,
+     0,   174,   175,   176,     0,     0,   177,   178,   179,   180,
+   181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+   191,   192,   193,   194,   195,     0,     0,  -178,     0,     0,
+     0,     0,     0,    65,     0,     0,    66,     0,     0,    67,
+     0,   322,   -62,     1,     2,     0,     3,     4,     0,     0,
+     0,     0,     0,     5,     6,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     7,     0,     0,     8,     0,     0,     0,
+     9
+};
+
+static const short yycheck[] = {     0,
+    24,   153,   213,   139,   176,   139,   305,     4,    24,   399,
+   309,    11,   282,    14,   154,     0,   234,   235,   252,   191,
+   192,   193,   194,   195,    30,    18,   198,    11,    11,    14,
+   310,   311,    25,    11,     3,     4,     5,     6,   112,   113,
+    35,    36,    48,   136,    68,    47,    41,   135,    16,   533,
+   143,    19,    47,    22,    23,   129,   130,   131,   132,    61,
+   200,   295,    52,   547,    48,   136,   136,    91,   136,   136,
+    48,    95,   140,   108,   109,   145,   147,   101,   112,   113,
+   147,    82,    37,    38,    39,    40,    41,    42,    43,   113,
+    45,   136,   482,   135,    30,   136,   130,   131,   143,   136,
+   136,   125,   126,    15,   322,   129,   147,    33,   145,   133,
+   246,   147,   248,   249,   137,   251,   139,   397,    37,    38,
+    39,   135,   145,    42,   342,   297,   516,   151,     7,     8,
+   146,    10,    11,    12,    13,    14,    16,    16,    17,    19,
+    19,    20,   136,   143,   112,   113,   140,   135,   284,   146,
+   174,   175,   176,   177,   147,   425,   292,   293,   548,   144,
+   143,    17,   130,   131,    20,    44,   190,   191,   192,   193,
+   194,   195,   196,   197,   198,   106,   112,   113,   137,   134,
+   139,   140,   206,   453,   483,   455,   112,   113,   360,   135,
+   362,   363,   364,   129,   130,   131,   132,   137,   137,   139,
+   139,   132,   141,   129,   130,   131,   132,   137,   136,   139,
+    28,    29,   140,   143,   350,   351,   352,     3,     4,     5,
+     6,   141,   358,   136,   137,    41,   139,    43,   252,    19,
+   500,   134,   368,   369,   445,   102,   103,    32,   537,   263,
+   539,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+    94,   387,    18,   387,   136,   137,   280,   139,    11,   138,
+    19,    14,   141,    74,    75,   144,   139,   146,   147,    19,
+    19,   295,   296,   297,   410,     4,   412,     4,   142,   415,
+   142,     4,    19,   136,   456,   421,   422,   459,   460,   461,
+     7,     8,   140,    10,    11,    12,    13,    14,   322,    16,
+    17,   140,    19,    20,   145,     9,     9,   518,   332,     9,
+   521,    50,   448,   449,    11,   451,   452,   145,   139,   139,
+   139,   457,   139,    19,   139,   139,   139,    44,   136,   139,
+   139,   467,   136,   136,   136,   136,   360,   361,   362,   363,
+   364,    33,   136,   367,    55,    56,    57,    58,    59,    60,
+   139,   487,   136,    54,   139,   136,   136,   136,   141,   495,
+   136,   136,   136,   515,   136,   136,   136,   248,   249,   136,
+   251,   136,   145,    33,    19,     4,   136,   140,    19,    14,
+    14,   139,   534,   314,   315,   316,   317,   318,   136,   136,
+     4,   136,   136,   136,   136,   531,   327,   328,   329,   139,
+   536,   136,   426,   284,   136,   136,   136,   145,   136,    48,
+   136,   292,   293,    19,   136,   439,   140,   553,   554,   140,
+   444,   138,   558,   136,   141,   561,   450,   144,   136,   146,
+   147,   140,   456,   143,   136,   459,   460,   461,    48,    14,
+   464,   140,   443,    22,    23,   140,   377,   378,   141,   143,
+   140,   140,   140,   384,     7,     8,     4,    10,    11,    12,
+    13,    14,   136,    16,    17,    14,    19,    20,    14,   350,
+   351,   352,   136,    14,    66,    14,     0,   358,     0,   116,
+   116,   227,   510,   116,    82,   226,   206,   368,   369,   101,
+    95,    44,   483,   517,    14,    79,    50,   464,    -1,   430,
+   431,   432,   433,   379,    -1,    -1,   437,   438,    -1,   510,
+    -1,    -1,    91,    92,    93,    94,    95,    96,    97,    98,
+    99,   100,   101,   102,   103,   104,    -1,    -1,    -1,   410,
+    -1,   412,    -1,    -1,   415,    -1,    -1,   468,   469,    -1,
+   421,   422,    -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,   448,   449,    -1,
+   451,   452,   503,    -1,   505,   506,   457,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   138,   467,    -1,   141,    -1,
+    -1,   144,     0,   146,   147,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   487,    15,    16,    17,
+    -1,    19,    20,    -1,   495,    -1,     3,     4,    26,    27,
+     7,     8,     9,    -1,    -1,    -1,    -1,    -1,    -1,    16,
+    17,    -1,    19,    20,    21,    22,    23,    -1,    46,    -1,
+    -1,    49,    -1,    -1,    -1,    53,    -1,    -1,    35,    36,
+   531,    -1,    -1,    -1,    -1,   536,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    52,    -1,    -1,    -1,    -1,
+    -1,    -1,   553,   554,    -1,    -1,    -1,   558,    -1,    -1,
+   561,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+    77,    78,    79,    80,    81,    82,    83,    84,    -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,   110,   111,   112,   113,   114,   115,   116,
+   117,   118,   119,   120,   121,   122,    -1,   124,    -1,   126,
+   127,   128,     3,     4,    -1,    -1,     7,     8,     9,    -1,
+   137,    -1,   139,    -1,    -1,    16,    17,   144,    19,    20,
+    21,    22,    23,    -1,    -1,    -1,    -1,     7,     8,    -1,
+    -1,    -1,    -1,    -1,    35,    36,    16,    17,    -1,    19,
+    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    52,    -1,    -1,    -1,    35,    36,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    69,    70,
+    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+    81,    82,    83,    84,    -1,    -1,    -1,    -1,    68,    69,
+    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,    83,    84,    -1,    -1,    -1,    -1,   110,
+   111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+   121,   122,    -1,   124,    -1,   126,   127,   128,    -1,    -1,
+   110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+   120,   121,   122,   144,   124,    -1,   126,   127,   128,    -1,
+    -1,    -1,     3,     4,    -1,    -1,    -1,   137,     9,   139,
+    -1,   141,    -1,    -1,   144,    -1,   146,    -1,   148,    -1,
+    21,    22,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    35,    36,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     7,
+     8,    52,    10,    11,    12,    13,    14,    -1,    16,    17,
+    -1,    19,    20,    -1,    -1,    -1,    -1,    68,    69,    70,
+    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+    81,    82,    83,    84,    -1,    -1,    44,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,     7,     8,    -1,    10,    11,
+    12,    13,    14,    -1,    16,    17,    -1,    19,    20,   110,
+   111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+   121,   122,    34,   124,    -1,   126,   127,   128,    -1,    -1,
+    -1,    -1,    44,    -1,    -1,     7,     8,    -1,    10,    11,
+    12,    13,    14,   144,    16,    17,    -1,    19,    20,    -1,
+    -1,    -1,    -1,    -1,     7,     8,    -1,    10,    11,    12,
+    13,    14,    34,    16,    17,    -1,    19,    20,    -1,    -1,
+    -1,    -1,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   138,    -1,    -1,   141,    -1,    -1,   144,    -1,   146,   147,
+    -1,    44,    -1,     7,     8,    -1,    10,    11,    12,    13,
+    14,    -1,    16,    17,    -1,    19,    20,    -1,    -1,     7,
+     8,    -1,    10,    11,    12,    13,    14,    -1,    16,    17,
+    34,    19,    20,    -1,    -1,    -1,   138,    -1,    -1,   141,
+    44,    -1,   144,    -1,   146,    -1,    34,    -1,     7,     8,
+    -1,    10,    11,    12,    13,    14,    44,    16,    17,    -1,
+    19,    20,     7,     8,    -1,    10,    11,    12,    13,    14,
+    -1,    16,    17,    -1,    19,    20,   138,    -1,    -1,   141,
+    -1,    -1,   144,    -1,   146,    44,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   138,    -1,    -1,   141,    44,
+   143,   144,    -1,   146,     7,     8,    -1,    10,    11,    12,
+    13,    14,    -1,    16,    17,    -1,    19,    20,     7,     8,
+    -1,    10,    11,    12,    13,    14,    -1,    16,    17,    -1,
+    19,    20,    -1,    -1,   138,    -1,    -1,   141,    -1,    -1,
+   144,    44,   146,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   138,    -1,    -1,   141,    -1,    44,   144,    -1,   146,    -1,
+     7,     8,    -1,    10,    11,    12,    13,    14,    -1,    16,
+    17,    -1,    19,    20,    -1,    -1,    -1,    -1,    -1,   138,
+    -1,    -1,   141,    -1,    -1,   144,    -1,   146,    -1,    -1,
+    -1,    -1,    -1,   138,    -1,    -1,   141,    44,    -1,   144,
+    -1,   146,     7,     8,    -1,    10,    11,    12,    13,    14,
+    -1,    16,    17,    -1,    19,    20,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   138,    -1,    -1,   141,    44,
+    -1,   144,    -1,   146,    -1,    -1,    50,    51,    -1,   138,
+    -1,    -1,   141,    -1,    -1,   144,    -1,   146,    62,    63,
+    64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+    74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   138,    -1,    -1,   141,    -1,    -1,   144,    -1,   146,
+    -1,   105,   106,   107,    -1,    -1,   110,   111,   112,   113,
+   114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+   124,   125,   126,   127,   128,    -1,    -1,     0,    -1,    -1,
+    -1,    -1,    -1,   138,    -1,    -1,   141,    -1,    -1,   144,
+    -1,   146,    15,    16,    17,    -1,    19,    20,    -1,    -1,
+    -1,    -1,    -1,    26,    27,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    46,    -1,    -1,    49,    -1,    -1,    -1,
+    53
+};
+/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
+#line 3 "/usr/share/bison.simple"
+/* This file comes from bison-1.28.  */
+
+/* Skeleton output parser for bison,
+   Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* As a special exception, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */
+
+/* This is the parser code that is written into each bison parser
+  when the %semantic_parser declaration is not specified in the grammar.
+  It was written by Richard Stallman by simplifying the hairy parser
+  used when %semantic_parser is specified.  */
+
+#ifndef YYSTACK_USE_ALLOCA
+#ifdef alloca
+#define YYSTACK_USE_ALLOCA
+#else /* alloca not defined */
+#ifdef __GNUC__
+#define YYSTACK_USE_ALLOCA
+#define alloca __builtin_alloca
+#else /* not GNU C.  */
+#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
+#define YYSTACK_USE_ALLOCA
+#include <alloca.h>
+#else /* not sparc */
+/* We think this test detects Watcom and Microsoft C.  */
+/* This used to test MSDOS, but that is a bad idea
+   since that symbol is in the user namespace.  */
+#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
+#if 0 /* No need for malloc.h, which pollutes the namespace;
+	 instead, just don't use alloca.  */
+#include <malloc.h>
+#endif
+#else /* not MSDOS, or __TURBOC__ */
+#if defined(_AIX)
+/* I don't know what this was needed for, but it pollutes the namespace.
+   So I turned it off.   rms, 2 May 1997.  */
+/* #include <malloc.h>  */
+ #pragma alloca
+#define YYSTACK_USE_ALLOCA
+#else /* not MSDOS, or __TURBOC__, or _AIX */
+#if 0
+#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
+		 and on HPUX 10.  Eventually we can turn this on.  */
+#define YYSTACK_USE_ALLOCA
+#define alloca __builtin_alloca
+#endif /* __hpux */
+#endif
+#endif /* not _AIX */
+#endif /* not MSDOS, or __TURBOC__ */
+#endif /* not sparc */
+#endif /* not GNU C */
+#endif /* alloca not defined */
+#endif /* YYSTACK_USE_ALLOCA not defined */
+
+#ifdef YYSTACK_USE_ALLOCA
+#define YYSTACK_ALLOC alloca
 #else
-   typedef short int yysigned_char;
+#define YYSTACK_ALLOC malloc
 #endif
 
-/* YYFINAL -- State number of the termination state. */
-#define YYFINAL  39
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1317
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS  149
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS  79
-/* YYNRULES -- Number of rules. */
-#define YYNRULES  288
-/* YYNRULES -- Number of states. */
-#define YYNSTATES  563
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   389
-
-#define YYTRANSLATE(YYX)						\
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const unsigned char yytranslate[] =
-{
-       0,     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,     2,     2,     2,     2,     2,
-     139,   140,   137,     2,   136,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     144,   135,   145,     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,   141,   138,   143,     2,     2,     2,     2,     2,   148,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     142,     2,     2,   146,     2,   147,     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,
-       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,     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,     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,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const unsigned short int yyprhs[] =
-{
-       0,     0,     3,     5,     7,     9,    11,    13,    15,    17,
-      19,    21,    23,    25,    27,    29,    31,    33,    35,    37,
-      39,    41,    43,    45,    47,    49,    51,    53,    55,    57,
-      59,    61,    63,    65,    67,    69,    71,    73,    75,    77,
-      79,    81,    83,    85,    87,    89,    91,    93,    95,    97,
-      99,   101,   103,   105,   107,   109,   111,   113,   115,   117,
-     119,   121,   122,   125,   126,   128,   130,   133,   134,   136,
-     138,   140,   142,   144,   146,   148,   150,   151,   153,   154,
-     156,   158,   159,   161,   163,   165,   167,   168,   170,   172,
-     174,   176,   178,   181,   183,   185,   187,   189,   190,   193,
-     195,   197,   199,   200,   203,   204,   207,   208,   212,   215,
-     216,   218,   219,   223,   225,   228,   230,   232,   234,   236,
-     238,   240,   243,   245,   248,   254,   260,   266,   272,   276,
-     279,   285,   290,   293,   295,   297,   299,   303,   305,   309,
-     311,   312,   314,   318,   323,   327,   331,   336,   341,   345,
-     352,   358,   361,   364,   367,   370,   373,   376,   379,   382,
-     385,   388,   391,   394,   401,   407,   416,   423,   430,   438,
-     446,   453,   462,   471,   475,   477,   479,   481,   483,   484,
-     486,   487,   489,   492,   493,   497,   498,   502,   506,   510,
-     514,   515,   523,   524,   533,   534,   543,   546,   550,   552,
-     556,   560,   564,   568,   570,   571,   577,   581,   583,   587,
-     589,   590,   600,   602,   604,   609,   611,   613,   616,   620,
-     621,   623,   625,   627,   629,   631,   633,   635,   637,   639,
-     643,   645,   651,   653,   655,   657,   659,   661,   663,   666,
-     669,   672,   676,   679,   680,   682,   685,   688,   692,   702,
-     712,   721,   736,   738,   740,   747,   753,   756,   763,   771,
-     775,   781,   782,   783,   787,   790,   792,   798,   804,   811,
-     818,   823,   830,   835,   840,   847,   854,   857,   866,   868,
-     870,   871,   875,   882,   886,   893,   896,   901,   908
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const short int yyrhs[] =
-{
-     190,     0,    -1,    68,    -1,    69,    -1,    70,    -1,    71,
-      -1,    72,    -1,    73,    -1,    74,    -1,    75,    -1,    76,
-      -1,    80,    -1,    81,    -1,    82,    -1,    77,    -1,    78,
-      -1,    79,    -1,   111,    -1,   112,    -1,   113,    -1,   114,
-      -1,   115,    -1,   116,    -1,   117,    -1,   118,    -1,   119,
-      -1,   120,    -1,   121,    -1,   122,    -1,    85,    -1,    86,
-      -1,    87,    -1,    88,    -1,    89,    -1,    90,    -1,    91,
-      -1,    92,    -1,    93,    -1,    94,    -1,    95,    -1,    96,
-      -1,    97,    -1,    98,    -1,    99,    -1,   100,    -1,   101,
-      -1,   102,    -1,   103,    -1,   104,    -1,    91,    -1,    92,
-      -1,    93,    -1,    94,    -1,    22,    -1,    23,    -1,    11,
-      -1,    12,    -1,    13,    -1,    16,    -1,    19,    -1,   157,
-      -1,    -1,   157,   135,    -1,    -1,    17,    -1,    20,    -1,
-     160,   135,    -1,    -1,    37,    -1,    39,    -1,    38,    -1,
-      40,    -1,    42,    -1,    41,    -1,    43,    -1,    45,    -1,
-      -1,   134,    -1,    -1,    41,    -1,    43,    -1,    -1,    37,
-      -1,    38,    -1,    39,    -1,    42,    -1,    -1,    56,    -1,
-      57,    -1,    58,    -1,    59,    -1,    60,    -1,    55,     4,
-      -1,   112,    -1,   113,    -1,   130,    -1,   131,    -1,    -1,
-     169,   168,    -1,   129,    -1,   132,    -1,   168,    -1,    -1,
-     171,   170,    -1,    -1,    48,     4,    -1,    -1,   136,    48,
-       4,    -1,    30,    19,    -1,    -1,   174,    -1,    -1,   136,
-     177,   176,    -1,   174,    -1,    48,     4,    -1,    11,    -1,
-      12,    -1,    13,    -1,    14,    -1,    44,    -1,   178,    -1,
-     179,   137,    -1,   212,    -1,   138,     4,    -1,   179,   139,
-     183,   140,   171,    -1,    10,   139,   183,   140,   171,    -1,
-     141,     4,   142,   179,   143,    -1,   144,     4,   142,   179,
-     145,    -1,   146,   184,   147,    -1,   146,   147,    -1,   144,
-     146,   184,   147,   145,    -1,   144,   146,   147,   145,    -1,
-     179,   169,    -1,   179,    -1,    10,    -1,   180,    -1,   182,
-     136,   180,    -1,   182,    -1,   182,   136,    34,    -1,    34,
-      -1,    -1,   179,    -1,   184,   136,   179,    -1,   179,   141,
-     187,   143,    -1,   179,   141,   143,    -1,   179,   148,    19,
-      -1,   179,   144,   187,   145,    -1,   179,   146,   187,   147,
-      -1,   179,   146,   147,    -1,   179,   144,   146,   187,   147,
-     145,    -1,   179,   144,   146,   147,   145,    -1,   179,    35,
-      -1,   179,    36,    -1,   179,   212,    -1,   179,   186,    -1,
-     179,    21,    -1,   155,     3,    -1,   155,     5,    -1,   155,
-       4,    -1,   155,     6,    -1,    11,    22,    -1,    11,    23,
-      -1,   156,     9,    -1,   152,   139,   185,    33,   179,   140,
-      -1,   110,   139,   185,   223,   140,    -1,   124,   139,   185,
-     136,   185,   136,   185,   140,    -1,   150,   139,   185,   136,
-     185,   140,    -1,   151,   139,   185,   136,   185,   140,    -1,
-      83,   153,   139,   185,   136,   185,   140,    -1,    84,   154,
-     139,   185,   136,   185,   140,    -1,   126,   139,   185,   136,
-     185,   140,    -1,   127,   139,   185,   136,   185,   136,   185,
-     140,    -1,   128,   139,   185,   136,   185,   136,   185,   140,
-      -1,   187,   136,   185,    -1,   185,    -1,    28,    -1,    29,
-      -1,    32,    -1,    -1,   191,    -1,    -1,   192,    -1,   191,
-     192,    -1,    -1,    27,   193,   208,    -1,    -1,    26,   194,
-     209,    -1,    53,    52,   198,    -1,   159,    15,   179,    -1,
-     159,    15,    10,    -1,    -1,   161,   164,   189,   188,   185,
-     195,   176,    -1,    -1,   161,   162,   164,   189,   188,   185,
-     196,   176,    -1,    -1,   161,   163,   164,   189,   188,   179,
-     197,   176,    -1,    46,   199,    -1,    49,   135,   200,    -1,
-      19,    -1,    47,   135,    19,    -1,    61,   135,    19,    -1,
-     141,   201,   143,    -1,   201,   136,    19,    -1,    19,    -1,
-      -1,   202,   136,   179,   169,   158,    -1,   179,   169,   158,
-      -1,   202,    -1,   202,   136,    34,    -1,    34,    -1,    -1,
-     167,   181,   160,   139,   203,   140,   171,   175,   172,    -1,
-      24,    -1,   146,    -1,   166,   164,   204,   205,    -1,    25,
-      -1,   147,    -1,   215,   207,    -1,   165,   164,   204,    -1,
-      -1,    54,    -1,     3,    -1,     4,    -1,     9,    -1,    22,
-      -1,    23,    -1,    35,    -1,    36,    -1,    21,    -1,   144,
-     187,   145,    -1,   186,    -1,    52,   210,    19,   136,    19,
-      -1,     7,    -1,     8,    -1,   157,    -1,   160,    -1,   212,
-      -1,   211,    -1,   179,   213,    -1,   215,   216,    -1,   206,
-     216,    -1,   217,   159,   218,    -1,   217,   220,    -1,    -1,
-      18,    -1,    62,   214,    -1,    62,    10,    -1,    63,    14,
-     213,    -1,    63,    11,   213,   136,    14,   213,   136,    14,
-     213,    -1,    64,   155,   213,   136,    14,   213,   141,   219,
-     143,    -1,    64,   155,   213,   136,    14,   213,   141,   143,
-      -1,    65,   167,   181,   213,   139,   222,   140,   171,    33,
-      14,   213,    66,    14,   213,    -1,    66,    -1,    67,    -1,
-     219,   155,   211,   136,    14,   213,    -1,   155,   211,   136,
-      14,   213,    -1,   159,   225,    -1,   179,   141,   213,   136,
-     213,   143,    -1,   221,   136,   141,   213,   136,   213,   143,
-      -1,   179,   213,   169,    -1,   222,   136,   179,   213,   169,
-      -1,    -1,    -1,   223,   136,   214,    -1,    51,    50,    -1,
-      50,    -1,   150,   179,   213,   136,   213,    -1,   151,   179,
-     213,   136,   213,    -1,    83,   153,   179,   213,   136,   213,
-      -1,    84,   154,   179,   213,   136,   213,    -1,   152,   214,
-      33,   179,    -1,   124,   214,   136,   214,   136,   214,    -1,
-     125,   214,   136,   179,    -1,   126,   214,   136,   214,    -1,
-     127,   214,   136,   214,   136,   214,    -1,   128,   214,   136,
-     214,   136,   214,    -1,   123,   221,    -1,   224,   167,   181,
-     213,   139,   222,   140,   171,    -1,   227,    -1,    31,    -1,
-      -1,   105,   179,   173,    -1,   105,   179,   136,    11,   213,
-     173,    -1,   106,   179,   173,    -1,   106,   179,   136,    11,
-     213,   173,    -1,   107,   214,    -1,   226,   108,   179,   213,
-      -1,   226,   109,   214,   136,   179,   213,    -1,   110,   179,
-     213,   223,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const unsigned short int yyrline[] =
-{
-       0,  1093,  1093,  1093,  1093,  1093,  1093,  1093,  1093,  1093,
-    1093,  1094,  1094,  1094,  1094,  1094,  1094,  1095,  1095,  1095,
-    1095,  1095,  1095,  1096,  1096,  1096,  1096,  1096,  1096,  1099,
-    1099,  1100,  1100,  1101,  1101,  1102,  1102,  1103,  1103,  1107,
-    1107,  1108,  1108,  1109,  1109,  1110,  1110,  1111,  1111,  1112,
-    1112,  1113,  1113,  1114,  1115,  1120,  1121,  1121,  1123,  1123,
-    1124,  1124,  1128,  1132,  1137,  1137,  1139,  1143,  1149,  1150,
-    1151,  1152,  1153,  1157,  1158,  1159,  1163,  1164,  1168,  1169,
-    1170,  1174,  1175,  1176,  1177,  1178,  1181,  1182,  1183,  1184,
-    1185,  1186,  1187,  1194,  1195,  1196,  1197,  1200,  1201,  1206,
-    1207,  1208,  1211,  1212,  1219,  1220,  1226,  1227,  1235,  1243,
-    1244,  1249,  1250,  1251,  1256,  1269,  1269,  1269,  1269,  1272,
-    1276,  1280,  1287,  1292,  1300,  1326,  1353,  1358,  1370,  1380,
-    1384,  1394,  1401,  1408,  1415,  1420,  1425,  1432,  1433,  1440,
-    1447,  1455,  1461,  1473,  1501,  1517,  1546,  1574,  1599,  1618,
-    1644,  1664,  1676,  1683,  1749,  1759,  1769,  1775,  1785,  1791,
-    1801,  1806,  1811,  1819,  1831,  1853,  1861,  1867,  1878,  1883,
-    1888,  1894,  1900,  1909,  1913,  1921,  1921,  1924,  1924,  1935,
-    1940,  1948,  1949,  1953,  1953,  1957,  1957,  1960,  1963,  1987,
-    1998,  1998,  2008,  2008,  2016,  2016,  2026,  2029,  2035,  2048,
-    2052,  2057,  2059,  2064,  2069,  2078,  2088,  2099,  2103,  2112,
-    2121,  2126,  2245,  2245,  2247,  2256,  2256,  2258,  2263,  2275,
-    2279,  2284,  2288,  2292,  2296,  2300,  2304,  2308,  2312,  2316,
-    2341,  2345,  2359,  2363,  2367,  2371,  2377,  2377,  2383,  2392,
-    2396,  2405,  2414,  2423,  2427,  2432,  2436,  2440,  2445,  2455,
-    2474,  2483,  2559,  2563,  2570,  2581,  2594,  2604,  2615,  2625,
-    2634,  2643,  2646,  2647,  2654,  2658,  2663,  2684,  2701,  2715,
-    2729,  2741,  2749,  2756,  2762,  2768,  2774,  2789,  2870,  2875,
-    2879,  2886,  2893,  2901,  2908,  2916,  2924,  2938,  2955
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
-static const char *const yytname[] =
-{
-  "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "ESAPINTVAL",
-  "EUAPINTVAL", "LOCALVAL_ID", "GLOBALVAL_ID", "FPVAL", "VOID", "INTTYPE",
-  "FLOAT", "DOUBLE", "LABEL", "TYPE", "LOCALVAR", "GLOBALVAR", "LABELSTR",
-  "STRINGCONSTANT", "ATSTRINGCONSTANT", "ZEROINITIALIZER", "TRUETOK",
-  "FALSETOK", "BEGINTOK", "ENDTOK", "DECLARE", "DEFINE", "GLOBAL",
-  "CONSTANT", "SECTION", "VOLATILE", "THREAD_LOCAL", "TO", "DOTDOTDOT",
-  "NULL_TOK", "UNDEF", "INTERNAL", "LINKONCE", "WEAK", "APPENDING",
-  "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE", "EXTERNAL", "TARGET",
-  "TRIPLE", "ALIGN", "DEPLIBS", "CALL", "TAIL", "ASM_TOK", "MODULE",
-  "SIDEEFFECT", "CC_TOK", "CCC_TOK", "FASTCC_TOK", "COLDCC_TOK",
-  "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT", "RET", "BR",
-  "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE", "ADD", "SUB", "MUL", "UDIV",
-  "SDIV", "FDIV", "UREM", "SREM", "FREM", "AND", "OR", "XOR", "SHL",
-  "LSHR", "ASHR", "ICMP", "FCMP", "EQ", "NE", "SLT", "SGT", "SLE", "SGE",
-  "ULT", "UGT", "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT", "OLE", "OGE",
-  "ORD", "UNO", "UEQ", "UNE", "MALLOC", "ALLOCA", "FREE", "LOAD", "STORE",
-  "GETELEMENTPTR", "TRUNC", "ZEXT", "SEXT", "FPTRUNC", "FPEXT", "BITCAST",
-  "UITOFP", "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR", "PTRTOINT",
-  "PHI_TOK", "SELECT", "VAARG", "EXTRACTELEMENT", "INSERTELEMENT",
-  "SHUFFLEVECTOR", "NORETURN", "INREG", "SRET", "NOUNWIND", "DEFAULT",
-  "HIDDEN", "'='", "','", "'*'", "'\\\\'", "'('", "')'", "'['", "'x'",
-  "']'", "'<'", "'>'", "'{'", "'}'", "'c'", "$accept", "ArithmeticOps",
-  "LogicalOps", "CastOps", "IPredicates", "FPredicates", "IntType",
-  "FPType", "LocalName", "OptLocalName", "OptLocalAssign", "GlobalName",
-  "OptGlobalAssign", "GVInternalLinkage", "GVExternalLinkage",
-  "GVVisibilityStyle", "FunctionDeclareLinkage", "FunctionDefineLinkage",
-  "OptCallingConv", "ParamAttr", "OptParamAttrs", "FuncAttr",
-  "OptFuncAttrs", "OptAlign", "OptCAlign", "SectionString", "OptSection",
-  "GlobalVarAttributes", "GlobalVarAttribute", "PrimType", "Types",
-  "ArgType", "ResultTypes", "ArgTypeList", "ArgTypeListI", "TypeListI",
-  "ConstVal", "ConstExpr", "ConstVector", "GlobalType", "ThreadLocal",
-  "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", "ValueRefList", "IndexList", "OptTailCall", "InstVal",
-  "OptVolatile", "MemoryInst", 0
-};
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
-static const unsigned short int yytoknum[] =
-{
-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     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,    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 unsigned char yyr1[] =
-{
-       0,   149,   150,   150,   150,   150,   150,   150,   150,   150,
-     150,   151,   151,   151,   151,   151,   151,   152,   152,   152,
-     152,   152,   152,   152,   152,   152,   152,   152,   152,   153,
-     153,   153,   153,   153,   153,   153,   153,   153,   153,   154,
-     154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
-     154,   154,   154,   154,   154,   155,   156,   156,   157,   157,
-     158,   158,   159,   159,   160,   160,   161,   161,   162,   162,
-     162,   162,   162,   163,   163,   163,   164,   164,   165,   165,
-     165,   166,   166,   166,   166,   166,   167,   167,   167,   167,
-     167,   167,   167,   168,   168,   168,   168,   169,   169,   170,
-     170,   170,   171,   171,   172,   172,   173,   173,   174,   175,
-     175,   176,   176,   177,   177,   178,   178,   178,   178,   179,
-     179,   179,   179,   179,   179,   179,   179,   179,   179,   179,
-     179,   179,   180,   181,   181,   182,   182,   183,   183,   183,
-     183,   184,   184,   185,   185,   185,   185,   185,   185,   185,
-     185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
-     185,   185,   185,   186,   186,   186,   186,   186,   186,   186,
-     186,   186,   186,   187,   187,   188,   188,   189,   189,   190,
-     190,   191,   191,   193,   192,   194,   192,   192,   192,   192,
-     195,   192,   196,   192,   197,   192,   192,   192,   198,   199,
-     199,   200,   201,   201,   201,   202,   202,   203,   203,   203,
-     203,   204,   205,   205,   206,   207,   207,   208,   209,   210,
-     210,   211,   211,   211,   211,   211,   211,   211,   211,   211,
-     211,   211,   212,   212,   212,   212,   213,   213,   214,   215,
-     215,   216,   217,   217,   217,   218,   218,   218,   218,   218,
-     218,   218,   218,   218,   219,   219,   220,   221,   221,   222,
-     222,   222,   223,   223,   224,   224,   225,   225,   225,   225,
-     225,   225,   225,   225,   225,   225,   225,   225,   225,   226,
-     226,   227,   227,   227,   227,   227,   227,   227,   227
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const unsigned char yyr2[] =
-{
-       0,     2,     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,     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,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     2,     0,     1,     1,     2,     0,     1,     1,
-       1,     1,     1,     1,     1,     1,     0,     1,     0,     1,
-       1,     0,     1,     1,     1,     1,     0,     1,     1,     1,
-       1,     1,     2,     1,     1,     1,     1,     0,     2,     1,
-       1,     1,     0,     2,     0,     2,     0,     3,     2,     0,
-       1,     0,     3,     1,     2,     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,     1,
-       0,     1,     2,     0,     3,     0,     3,     3,     3,     3,
-       0,     7,     0,     8,     0,     8,     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,     3,
-       5,     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,     4,     6,     4
-};
-
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
-static const unsigned short int yydefact[] =
-{
-      67,    58,    64,    59,    65,   185,   183,     0,     0,     0,
-       0,     0,     0,    76,     0,    67,   181,    78,    81,     0,
-       0,   196,     0,     0,    62,     0,    66,    68,    70,    69,
-      71,    73,    72,    74,    75,    77,    76,    76,   178,     1,
-     182,    79,    80,    76,   186,    82,    83,    84,    85,    76,
-     243,   184,   243,     0,     0,   204,   197,   198,   187,   232,
-     233,   189,   115,   116,   117,   118,   119,     0,     0,     0,
-       0,   234,   235,   120,   188,   122,   178,   178,   177,     0,
-      86,    86,   244,   240,    63,   215,   216,   217,   239,   199,
-     200,   203,     0,   140,   123,     0,     0,     0,     0,   129,
-     141,     0,   121,   140,     0,     0,   175,   176,     0,     0,
-      87,    88,    89,    90,    91,     0,   218,     0,   280,   242,
-       0,   201,   139,    97,   135,   137,     0,     0,     0,     0,
-       0,     0,   128,     0,     0,     0,   115,   116,   117,     0,
-       0,     0,   190,    92,   134,   133,     0,   212,   213,   214,
-     279,   265,     0,     0,     0,     0,    86,   252,   253,     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,   241,    86,   256,     0,   278,   202,   132,     0,   102,
-       0,     0,   131,     0,   142,   102,   192,   194,   160,   161,
-     156,   158,   157,   159,   162,   155,   151,   152,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   154,   153,   111,     0,   264,   246,     0,   245,
-       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,   106,   106,   285,     0,     0,   276,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      93,    94,    95,    96,    98,   138,   136,   125,   126,   127,
-     130,   124,   111,   111,     0,     0,     0,     0,     0,     0,
-       0,   144,   174,     0,     0,     0,   148,     0,   145,     0,
-       0,     0,     0,   191,   210,   221,   222,   223,   228,   224,
-     225,   226,   227,   219,     0,   230,   237,   236,   238,     0,
-     247,     0,     0,     0,     0,     0,   281,     0,   283,   262,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    99,   100,   101,   103,   193,   195,     0,
-       0,   262,     0,     0,     0,     0,     0,   143,   129,   141,
-       0,   146,   147,     0,     0,     0,     0,     0,   113,   111,
-     209,    97,   207,     0,   220,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   288,     0,     0,     0,   272,
-     273,     0,     0,     0,     0,   270,     0,   286,     0,     0,
-       0,     0,     0,     0,     0,     0,   173,   150,     0,     0,
-       0,     0,   108,   114,   112,    61,     0,   102,     0,   229,
-       0,     0,   261,     0,     0,   106,   107,   106,     0,     0,
-       0,     0,     0,     0,   266,   267,   261,     0,     0,     0,
-     164,     0,     0,     0,     0,   149,     0,     0,     0,    60,
-     206,   208,    97,   109,     0,     0,     0,     0,     0,   268,
-     269,     0,   282,   284,   263,     0,     0,   271,   274,   275,
-       0,   287,     0,     0,     0,   170,     0,     0,   166,   167,
-     163,    61,   110,   104,   231,     0,     0,    97,     0,   102,
-     257,     0,   102,   168,   169,     0,     0,     0,   205,     0,
-     211,     0,   250,     0,     0,   259,     0,     0,   258,   277,
-     165,   171,   172,   105,   248,     0,   249,     0,    97,     0,
-       0,     0,   260,     0,     0,     0,     0,   255,     0,     0,
-     254,     0,   251
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const short int yydefgoto[] =
-{
-      -1,   239,   240,   241,   265,   282,   139,   140,    71,   480,
-      11,    72,    13,    36,    37,    38,    43,    49,   115,   304,
-     207,   376,   307,   530,   356,   398,   513,   333,   399,    73,
-     141,   124,   146,   125,   126,   101,   322,   345,   323,   108,
-      79,    14,    15,    16,    18,    17,   244,   312,   313,    58,
-      21,    56,    92,   402,   403,   116,   149,    50,    87,    51,
-      44,   405,   346,    75,   348,   249,    52,    83,    84,   201,
-     534,   119,   288,   488,   415,   202,   203,   204,   205
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -476
-static const short int yypact[] =
-{
-      28,  -476,  -476,  -476,  -476,  -476,  -476,   -10,   -55,     8,
-     -33,    97,     3,    55,   167,   394,  -476,   172,   210,    86,
-      98,  -476,   102,   219,  -476,  1017,  -476,  -476,  -476,  -476,
-    -476,  -476,  -476,  -476,  -476,  -476,   123,   123,   218,  -476,
-    -476,  -476,  -476,   123,  -476,  -476,  -476,  -476,  -476,   123,
-     241,  -476,     2,   242,   251,   253,  -476,  -476,  -476,  -476,
-    -476,   137,  -476,  -476,  -476,  -476,  -476,   274,   283,     1,
-     456,  -476,  -476,  -476,    83,  -476,   218,   218,  -476,   103,
-     291,   291,  -476,  -476,   121,  -476,  -476,  -476,  -476,  -476,
-    -476,  -476,   -26,   874,  -476,   148,   149,   470,   137,  -476,
-      83,   -97,  -476,   874,   103,   103,  -476,  -476,  1031,   288,
-    -476,  -476,  -476,  -476,  -476,  1073,  -476,    -7,  1172,  -476,
-     282,  -476,  -476,    83,  -476,   157,   162,  1087,  1087,   158,
-     -61,  1087,  -476,   165,  1031,  1087,    60,   297,   298,   201,
-     299,   656,  -476,  -476,   137,    83,   217,  -476,  -476,  -476,
-    -476,  -476,   262,  1129,   257,   302,   291,  -476,  -476,  -476,
-    -476,  -476,  -476,  -476,  -476,  -476,  -476,  -476,  -476,  -476,
-    -476,  -476,  -476,  -476,   461,   273,  1087,  1087,  1087,  1087,
-    -476,  -476,  -476,  -476,  -476,  -476,  -476,  -476,  -476,  -476,
-    -476,  -476,  1087,  1087,  1087,  1087,  1087,  1087,  1087,  1087,
-    1087,  -476,   291,  -476,    74,  -476,  -476,   -25,   914,  -476,
-      19,    41,  -476,   175,    83,  -476,  -476,    83,  -476,  -476,
-    -476,  -476,  -476,  -476,  -476,  -476,  -476,  -476,   461,   273,
-     178,   182,   183,   184,   186,   933,  1171,   552,   309,   190,
-     191,   194,  -476,  -476,   199,   197,  -476,   137,   509,  -476,
-     635,   635,  -476,   635,  1073,  -476,  -476,  -476,  -476,  -476,
-    -476,  -476,  -476,  -476,  -476,  1087,  -476,  -476,  -476,  -476,
-    -476,  -476,  -476,  -476,  -476,  -476,  -476,  -476,  -476,  -476,
-    -476,  -476,  1087,   -17,    92,  -476,   509,    75,   207,   208,
-     220,   221,   222,   223,   509,   509,   304,  1073,  1087,  1087,
-    -476,  -476,  -476,  -476,  -476,  -476,  -476,   154,  -476,  -476,
-    -476,   154,   199,   199,   214,   215,  1031,  1031,  1031,  1031,
-    1031,  -476,  -476,   -22,   828,   -75,  -476,   -58,  -476,  1031,
-    1031,  1031,     5,  -476,   972,  -476,  -476,  -476,  -476,  -476,
-    -476,  -476,  -476,   301,  1031,  -476,  -476,  -476,  -476,   224,
-    -476,   226,   635,   509,   509,    14,  -476,    23,  -476,  -476,
-     635,   237,  1087,  1087,  1087,  1087,  1087,   243,   244,  1087,
-     635,   509,   246,  -476,  -476,  -476,  -476,  -476,  -476,  1031,
-    1031,  -476,   247,   248,   254,   255,  1031,  -476,   250,   656,
-     -46,  -476,  -476,   256,   261,   360,   383,   399,  -476,   199,
-    -476,    83,   269,   266,  -476,   388,   -60,   398,   401,   277,
-     272,   289,   635,   420,   635,   293,   294,   635,   295,    83,
-    -476,   296,   300,   635,   635,    83,   305,  -476,  1087,   310,
-     314,   -98,  1031,  1031,  1031,  1031,  -476,  -476,   290,  1031,
-    1031,  1087,  -476,  -476,  -476,    33,   988,  -476,   315,  -476,
-     635,   635,  1087,   635,   635,   316,  -476,   316,  1087,   635,
-     317,  1087,  1087,  1087,  -476,  -476,  1087,   509,  1031,  1031,
-    -476,   318,   287,   320,   321,  -476,   319,   322,   116,  -476,
-    -476,  -476,    83,    79,   414,   324,   330,   509,    21,  -476,
-    -476,   393,  -476,  -476,  -476,   331,   635,  -476,  -476,  -476,
-      59,  -476,   325,   339,  1031,  -476,  1031,  1031,  -476,  -476,
-    -476,    33,  -476,   410,  -476,   447,    -2,  -476,  1087,  -476,
-    -476,   342,  -476,  -476,  -476,   348,   351,   352,  -476,   489,
-    -476,   635,  -476,   785,    -1,   -25,   509,   133,  -476,   154,
-    -476,  -476,  -476,  -476,  -476,   359,  -476,   785,  -476,   482,
-     483,   362,   -25,   635,   635,   485,   439,  -476,   635,   492,
-    -476,   635,  -476
-};
-
-/* YYPGOTO[NTERM-NUM].  */
-static const short int yypgoto[] =
-{
-    -476,   389,   392,   397,   292,   306,  -153,  -476,     0,    10,
-     435,     4,  -476,  -476,  -476,    87,  -476,  -476,  -145,  -295,
-    -383,  -476,  -208,  -476,  -276,    39,  -476,  -291,  -476,  -476,
-     -24,   326,  -241,  -476,   421,   426,    69,  -138,  -196,    89,
-     204,  -476,  -476,   512,  -476,  -476,  -476,  -476,  -476,  -476,
-    -476,  -476,  -476,  -476,  -476,   452,  -476,  -476,  -476,  -476,
-    -476,  -476,  -475,  -135,  -227,  -164,  -476,   484,  -476,  -476,
-    -476,  -476,  -476,    73,   159,  -476,  -476,  -476,  -476
-};
-
-/* 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 -181
-static const short int yytable[] =
-{
-      10,    74,   253,   242,    12,    96,   243,   311,   358,   252,
-     252,   254,   375,   352,   285,    10,   375,   147,   445,    12,
-      82,   377,   378,   349,   350,   412,   351,    85,  -180,   289,
-     290,   291,   292,   293,   414,   396,   296,    19,   458,   131,
-     325,   327,   470,   -63,     1,     2,   100,     3,     4,     1,
-     132,    20,     3,   397,     5,     6,   370,   297,   545,   359,
-      23,   386,   413,   -55,   -55,   -55,   -55,   367,   368,   123,
-     391,   413,   551,   100,     7,   131,   386,     8,   386,   123,
-      22,     9,   218,   219,    10,   449,   213,   300,   301,   392,
-     386,   145,    27,    28,    29,    30,    31,    32,    33,   511,
-      34,   438,    24,   210,   211,   302,   303,   214,   444,   396,
-     120,   217,    25,   347,   386,   347,   347,   121,   347,   355,
-     102,   387,   103,    76,    77,   409,   410,   411,   390,   248,
-      80,   106,   107,   416,   535,   372,    81,     1,    26,   148,
-       3,   532,   546,   426,   427,   300,   301,    97,   406,    86,
-     245,   347,   283,   284,   248,   286,   102,   518,   103,   347,
-     347,   519,   308,   302,   303,   552,   549,    39,   287,   248,
-     248,   248,   248,   248,   294,   295,   248,   142,   102,   492,
-     103,   493,   298,   299,   123,   455,   309,   457,   375,    35,
-     460,   300,   301,   134,   135,   518,   464,   465,   418,   522,
-     420,   421,   422,   216,   220,   221,   222,   223,   373,   302,
-     303,   374,   102,    41,   103,    42,   360,   347,   347,   347,
-     102,    53,   103,   485,   486,   347,   489,   490,   357,   102,
-     145,   103,   495,    54,     2,   347,   347,     4,    57,   483,
-     501,   353,   375,    55,   375,   300,   301,    45,    46,    47,
-      78,   242,    48,   102,   243,   103,   510,    35,   354,    82,
-     517,    89,   373,   302,   303,   374,   300,   301,   250,   521,
-      90,   251,    91,   145,   371,   248,    93,   347,    94,   347,
-     104,   105,   347,   373,   302,   303,   374,    95,   347,   347,
-     127,   128,   143,   208,   494,   266,   267,   497,   498,   499,
-     389,   206,   209,   212,   544,   215,   -56,   -57,   224,   548,
-     401,   537,   246,   252,   539,   347,   347,   316,   347,   347,
-     310,   317,   318,   319,   347,   320,   556,   557,   328,   329,
-     330,   560,   347,   331,   562,   332,   334,   369,   248,   419,
-     248,   248,   248,   361,   362,   425,   109,   110,   111,   112,
-     113,   114,   347,   379,   380,   404,   363,   364,   365,   366,
-     407,   347,   408,   533,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   417,   423,
-     424,   547,   428,   432,   433,   381,   382,   383,   384,   385,
-     434,   435,   439,   441,  -179,   437,   347,   440,   393,   394,
-     395,   347,   442,   443,   467,   446,   447,   448,   453,   -63,
-       1,     2,   450,     3,     4,   451,   452,   478,   347,   347,
-       5,     6,   482,   347,   456,   454,   347,   505,   487,   458,
-     459,   461,   462,   514,   248,   475,   463,   248,   248,   248,
-       7,   413,   487,     8,   466,   479,   468,     9,   429,   430,
-     469,   484,   491,   496,   504,   436,   506,   507,   529,   508,
-     515,   531,   509,    59,    60,   523,    98,    62,    63,    64,
-      65,   516,     1,     2,   520,     3,     4,    59,    60,   524,
-      98,    62,    63,    64,    65,   538,     1,     2,   540,     3,
-       4,   541,   542,   543,   536,   550,   553,   554,   555,   558,
-      66,   471,   472,   473,   474,   559,   561,   198,   476,   477,
-     199,   479,   335,   336,    66,   200,    59,    60,   337,   118,
-     314,   528,   512,   130,   133,     1,     2,    40,     3,     4,
-     338,   339,   340,   117,   306,   315,    88,   502,   503,   500,
-     431,     0,     0,     0,   341,   342,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,     0,     0,     0,    59,
-      60,   343,    98,   136,   137,   138,    65,     0,     1,     2,
-       0,     3,     4,   525,     0,   526,   527,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   228,   229,    67,     0,    66,    68,     0,     0,
-      69,     0,    70,    99,     0,     0,     0,     0,    67,     0,
-       0,    68,     0,     0,    69,     0,    70,   129,     0,   230,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,     0,   231,     0,   232,   233,   234,   335,   336,
-       0,     0,    59,    60,   337,     0,   102,     0,   103,     0,
-       0,     1,     2,   344,     3,     4,   338,   339,   340,     0,
-       0,     0,     0,    59,    60,     0,     0,     0,     0,     0,
-     341,   342,     1,     2,     0,     3,     4,   225,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   343,     0,     0,
-      67,   226,   227,    68,     0,     0,    69,     0,    70,   326,
-       0,     0,     0,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   228,   229,
-       0,     0,     0,     0,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   228,
-     229,     0,     0,     0,     0,   230,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,     0,   231,
-       0,   232,   233,   234,     0,     0,   230,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   344,
-     231,     0,   232,   233,   234,     0,     0,     0,   335,   336,
-       0,     0,     0,   102,   337,   103,     0,   235,     0,     0,
-     236,     0,   237,     0,   238,     0,   338,   339,   340,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     341,   342,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    59,    60,   343,    98,   136,
-     137,   138,    65,     0,     1,     2,     0,     3,     4,     0,
-       0,     0,     0,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   228,   229,
-       0,     0,    66,     0,     0,     0,     0,     0,     0,     0,
-       0,    59,    60,     0,    98,    62,    63,    64,    65,     0,
-       1,     2,     0,     3,     4,   230,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   122,   231,
-       0,   232,   233,   234,     0,     0,     0,     0,    66,     0,
-       0,    59,    60,     0,    98,    62,    63,    64,    65,   344,
-       1,     2,     0,     3,     4,     0,     0,     0,     0,     0,
-      59,    60,     0,    98,   136,   137,   138,    65,   305,     1,
-       2,     0,     3,     4,     0,     0,     0,     0,    66,     0,
-       0,     0,     0,     0,     0,     0,    67,     0,     0,    68,
-       0,     0,    69,     0,    70,   388,     0,    66,     0,    59,
-      60,     0,    98,    62,    63,    64,    65,     0,     1,     2,
-       0,     3,     4,     0,     0,    59,    60,     0,    98,    62,
-      63,    64,    65,     0,     1,     2,   400,     3,     4,     0,
-       0,     0,    67,     0,     0,    68,    66,     0,    69,     0,
-      70,     0,   481,     0,    59,    60,     0,    61,    62,    63,
-      64,    65,    66,     1,     2,     0,     3,     4,    59,    60,
-       0,    98,   136,   137,   138,    65,     0,     1,     2,     0,
-       3,     4,    67,     0,     0,    68,     0,     0,    69,     0,
-      70,    66,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    67,     0,     0,    68,    66,   321,    69,     0,    70,
-      59,    60,     0,   144,    62,    63,    64,    65,     0,     1,
-       2,     0,     3,     4,    59,    60,     0,    98,    62,    63,
-      64,    65,     0,     1,     2,     0,     3,     4,     0,     0,
-      67,     0,     0,    68,     0,     0,    69,    66,    70,     0,
-       0,     0,     0,     0,     0,     0,    67,     0,     0,    68,
-       0,    66,    69,     0,    70,     0,    59,    60,     0,   247,
-      62,    63,    64,    65,     0,     1,     2,     0,     3,     4,
-       0,     0,     0,     0,     0,    67,     0,     0,    68,     0,
-       0,    69,     0,    70,     0,     0,     0,     0,     0,    67,
-       0,     0,    68,    66,     0,    69,     0,    70,    59,    60,
-       0,    98,   136,   137,   138,    65,     0,     1,     2,     0,
-       3,     4,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   150,     0,     0,     0,     0,     0,     0,
-       0,    67,     0,     0,    68,    66,     0,    69,     0,    70,
-       0,     0,   151,   152,     0,    67,     0,     0,    68,     0,
-       0,    69,     0,    70,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    67,     0,     0,
-      68,     0,     0,    69,     0,    70,     0,   176,   177,   178,
-       0,     0,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,     0,     0,     0,     0,     0,     0,     0,     0,    67,
-       0,     0,    68,     0,     0,    69,     0,   324
-};
-
-static const short int yycheck[] =
-{
-       0,    25,   155,   141,     0,     4,   141,   215,   284,    11,
-      11,   156,   307,   254,   178,    15,   311,    24,   401,    15,
-      18,   312,   313,   250,   251,    11,   253,    25,     0,   193,
-     194,   195,   196,   197,    11,    30,   200,    47,   136,   136,
-     236,   237,   140,    15,    16,    17,    70,    19,    20,    16,
-     147,    61,    19,    48,    26,    27,   297,   202,   533,   286,
-      52,   136,    48,     3,     4,     5,     6,   294,   295,    93,
-     145,    48,   547,    97,    46,   136,   136,    49,   136,   103,
-     135,    53,    22,    23,    84,   145,   147,   112,   113,   147,
-     136,   115,    37,    38,    39,    40,    41,    42,    43,   482,
-      45,   147,   135,   127,   128,   130,   131,   131,   399,    30,
-     136,   135,    15,   248,   136,   250,   251,   143,   253,   136,
-     137,   143,   139,    36,    37,   352,   353,   354,   324,   153,
-      43,    28,    29,   360,   517,   299,    49,    16,   135,   146,
-      19,   143,   143,   370,   371,   112,   113,   146,   344,   147,
-     146,   286,   176,   177,   178,   179,   137,   136,   139,   294,
-     295,   140,   143,   130,   131,   548,    33,     0,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   108,   137,   455,
-     139,   457,   108,   109,   208,   412,   145,   414,   483,   134,
-     417,   112,   113,   104,   105,   136,   423,   424,   362,   140,
-     364,   365,   366,   134,     3,     4,     5,     6,   129,   130,
-     131,   132,   137,    41,   139,    43,   141,   352,   353,   354,
-     137,   135,   139,   450,   451,   360,   453,   454,   136,   137,
-     254,   139,   459,   135,    17,   370,   371,    20,    19,   447,
-     467,   265,   537,   141,   539,   112,   113,    37,    38,    39,
-      32,   389,    42,   137,   389,   139,   140,   134,   282,    18,
-     487,    19,   129,   130,   131,   132,   112,   113,    11,   496,
-      19,    14,    19,   297,   298,   299,   139,   412,     4,   414,
-      76,    77,   417,   129,   130,   131,   132,     4,   423,   424,
-     142,   142,     4,   136,   458,    22,    23,   461,   462,   463,
-     324,    19,   140,   145,   531,   140,     9,     9,     9,   536,
-     334,   519,    50,    11,   522,   450,   451,   139,   453,   454,
-     145,   139,   139,   139,   459,   139,   553,   554,    19,   139,
-     139,   558,   467,   139,   561,   136,   139,    33,   362,   363,
-     364,   365,   366,   136,   136,   369,    55,    56,    57,    58,
-      59,    60,   487,   139,   139,    54,   136,   136,   136,   136,
-     136,   496,   136,   516,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   141,   136,
-     136,   534,   136,   136,   136,   316,   317,   318,   319,   320,
-     136,   136,   136,    33,     0,   145,   531,   136,   329,   330,
-     331,   536,    19,     4,   428,   136,   140,    19,   136,    15,
-      16,    17,    14,    19,    20,    14,   139,   441,   553,   554,
-      26,    27,   446,   558,     4,   136,   561,   140,   452,   136,
-     136,   136,   136,    19,   458,   145,   136,   461,   462,   463,
-      46,    48,   466,    49,   139,   445,   136,    53,   379,   380,
-     136,   136,   136,   136,   136,   386,   136,   136,    48,   140,
-     136,    14,   140,     7,     8,   140,    10,    11,    12,    13,
-      14,   141,    16,    17,   143,    19,    20,     7,     8,   140,
-      10,    11,    12,    13,    14,   143,    16,    17,   140,    19,
-      20,   140,   140,     4,   518,   136,    14,    14,   136,    14,
-      44,   432,   433,   434,   435,    66,    14,   118,   439,   440,
-     118,   511,     3,     4,    44,   118,     7,     8,     9,    84,
-     228,   511,   483,    97,   103,    16,    17,    15,    19,    20,
-      21,    22,    23,    81,   208,   229,    52,   468,   469,   466,
-     381,    -1,    -1,    -1,    35,    36,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    -1,    -1,    -1,     7,
-       8,    52,    10,    11,    12,    13,    14,    -1,    16,    17,
-      -1,    19,    20,   504,    -1,   506,   507,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,   138,    -1,    44,   141,    -1,    -1,
-     144,    -1,   146,   147,    -1,    -1,    -1,    -1,   138,    -1,
-      -1,   141,    -1,    -1,   144,    -1,   146,   147,    -1,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,    -1,   124,    -1,   126,   127,   128,     3,     4,
-      -1,    -1,     7,     8,     9,    -1,   137,    -1,   139,    -1,
-      -1,    16,    17,   144,    19,    20,    21,    22,    23,    -1,
-      -1,    -1,    -1,     7,     8,    -1,    -1,    -1,    -1,    -1,
-      35,    36,    16,    17,    -1,    19,    20,    21,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    52,    -1,    -1,
-     138,    35,    36,   141,    -1,    -1,   144,    -1,   146,   147,
-      -1,    -1,    -1,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    -1,    -1,    -1,    -1,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,    -1,   124,
-      -1,   126,   127,   128,    -1,    -1,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   144,
-     124,    -1,   126,   127,   128,    -1,    -1,    -1,     3,     4,
-      -1,    -1,    -1,   137,     9,   139,    -1,   141,    -1,    -1,
-     144,    -1,   146,    -1,   148,    -1,    21,    22,    23,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      35,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     7,     8,    52,    10,    11,
-      12,    13,    14,    -1,    16,    17,    -1,    19,    20,    -1,
-      -1,    -1,    -1,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      -1,    -1,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,     7,     8,    -1,    10,    11,    12,    13,    14,    -1,
-      16,    17,    -1,    19,    20,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,    34,   124,
-      -1,   126,   127,   128,    -1,    -1,    -1,    -1,    44,    -1,
-      -1,     7,     8,    -1,    10,    11,    12,    13,    14,   144,
-      16,    17,    -1,    19,    20,    -1,    -1,    -1,    -1,    -1,
-       7,     8,    -1,    10,    11,    12,    13,    14,    34,    16,
-      17,    -1,    19,    20,    -1,    -1,    -1,    -1,    44,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   138,    -1,    -1,   141,
-      -1,    -1,   144,    -1,   146,   147,    -1,    44,    -1,     7,
-       8,    -1,    10,    11,    12,    13,    14,    -1,    16,    17,
-      -1,    19,    20,    -1,    -1,     7,     8,    -1,    10,    11,
-      12,    13,    14,    -1,    16,    17,    34,    19,    20,    -1,
-      -1,    -1,   138,    -1,    -1,   141,    44,    -1,   144,    -1,
-     146,    -1,    34,    -1,     7,     8,    -1,    10,    11,    12,
-      13,    14,    44,    16,    17,    -1,    19,    20,     7,     8,
-      -1,    10,    11,    12,    13,    14,    -1,    16,    17,    -1,
-      19,    20,   138,    -1,    -1,   141,    -1,    -1,   144,    -1,
-     146,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   138,    -1,    -1,   141,    44,   143,   144,    -1,   146,
-       7,     8,    -1,    10,    11,    12,    13,    14,    -1,    16,
-      17,    -1,    19,    20,     7,     8,    -1,    10,    11,    12,
-      13,    14,    -1,    16,    17,    -1,    19,    20,    -1,    -1,
-     138,    -1,    -1,   141,    -1,    -1,   144,    44,   146,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   138,    -1,    -1,   141,
-      -1,    44,   144,    -1,   146,    -1,     7,     8,    -1,    10,
-      11,    12,    13,    14,    -1,    16,    17,    -1,    19,    20,
-      -1,    -1,    -1,    -1,    -1,   138,    -1,    -1,   141,    -1,
-      -1,   144,    -1,   146,    -1,    -1,    -1,    -1,    -1,   138,
-      -1,    -1,   141,    44,    -1,   144,    -1,   146,     7,     8,
-      -1,    10,    11,    12,    13,    14,    -1,    16,    17,    -1,
-      19,    20,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    31,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   138,    -1,    -1,   141,    44,    -1,   144,    -1,   146,
-      -1,    -1,    50,    51,    -1,   138,    -1,    -1,   141,    -1,
-      -1,   144,    -1,   146,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   138,    -1,    -1,
-     141,    -1,    -1,   144,    -1,   146,    -1,   105,   106,   107,
-      -1,    -1,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   138,
-      -1,    -1,   141,    -1,    -1,   144,    -1,   146
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const unsigned char yystos[] =
-{
-       0,    16,    17,    19,    20,    26,    27,    46,    49,    53,
-     157,   159,   160,   161,   190,   191,   192,   194,   193,    47,
-      61,   199,   135,    52,   135,    15,   135,    37,    38,    39,
-      40,    41,    42,    43,    45,   134,   162,   163,   164,     0,
-     192,    41,    43,   165,   209,    37,    38,    39,    42,   166,
-     206,   208,   215,   135,   135,   141,   200,    19,   198,     7,
-       8,    10,    11,    12,    13,    14,    44,   138,   141,   144,
-     146,   157,   160,   178,   179,   212,   164,   164,    32,   189,
-     164,   164,    18,   216,   217,    25,   147,   207,   216,    19,
-      19,    19,   201,   139,     4,     4,     4,   146,    10,   147,
-     179,   184,   137,   139,   189,   189,    28,    29,   188,    55,
-      56,    57,    58,    59,    60,   167,   204,   204,   159,   220,
-     136,   143,    34,   179,   180,   182,   183,   142,   142,   147,
-     184,   136,   147,   183,   188,   188,    11,    12,    13,   155,
-     156,   179,   185,     4,    10,   179,   181,    24,   146,   205,
-      31,    50,    51,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,   105,   106,   107,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   150,   151,
-     152,   218,   224,   225,   226,   227,    19,   169,   136,   140,
-     179,   179,   145,   147,   179,   140,   185,   179,    22,    23,
-       3,     4,     5,     6,     9,    21,    35,    36,    83,    84,
-     110,   124,   126,   127,   128,   141,   144,   146,   148,   150,
-     151,   152,   186,   212,   195,   160,    50,    10,   179,   214,
-      11,    14,    11,   155,   167,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,   153,    22,    23,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   154,   179,   179,   214,   179,   179,   221,   214,
-     214,   214,   214,   214,   179,   179,   214,   167,   108,   109,
-     112,   113,   130,   131,   168,    34,   180,   171,   143,   145,
-     145,   171,   196,   197,   153,   154,   139,   139,   139,   139,
-     139,   143,   185,   187,   146,   187,   147,   187,    19,   139,
-     139,   139,   136,   176,   139,     3,     4,     9,    21,    22,
-      23,    35,    36,    52,   144,   186,   211,   212,   213,   213,
-     213,   213,   181,   179,   179,   136,   173,   136,   173,   213,
-     141,   136,   136,   136,   136,   136,   136,   213,   213,    33,
-     181,   179,   214,   129,   132,   168,   170,   176,   176,   139,
-     139,   185,   185,   185,   185,   185,   136,   143,   147,   179,
-     187,   145,   147,   185,   185,   185,    30,    48,   174,   177,
-      34,   179,   202,   203,    54,   210,   187,   136,   136,   213,
-     213,   213,    11,    48,    11,   223,   213,   141,   214,   179,
-     214,   214,   214,   136,   136,   179,   213,   213,   136,   185,
-     185,   223,   136,   136,   136,   136,   185,   145,   147,   136,
-     136,    33,    19,     4,   176,   169,   136,   140,    19,   145,
-      14,    14,   139,   136,   136,   213,     4,   213,   136,   136,
-     213,   136,   136,   136,   213,   213,   139,   179,   136,   136,
-     140,   185,   185,   185,   185,   145,   185,   185,   179,   157,
-     158,    34,   179,   171,   136,   213,   213,   179,   222,   213,
-     213,   136,   173,   173,   214,   213,   136,   214,   214,   214,
-     222,   213,   185,   185,   136,   140,   136,   136,   140,   140,
-     140,   169,   174,   175,    19,   136,   141,   213,   136,   140,
-     143,   213,   140,   140,   140,   185,   185,   185,   158,    48,
-     172,    14,   143,   155,   219,   169,   179,   171,   143,   171,
-     140,   140,   140,     4,   213,   211,   143,   155,   213,    33,
-     136,   211,   169,    14,    14,   136,   213,   213,    14,    66,
-     213,    14,   213
-};
+/* Note: there must be only one dollar sign in this file.
+   It is replaced by the list of actions, each action
+   as one case of the switch.  */
 
 #define yyerrok		(yyerrstatus = 0)
 #define yyclearin	(yychar = YYEMPTY)
-#define YYEMPTY		(-2)
+#define YYEMPTY		-2
 #define YYEOF		0
-
 #define YYACCEPT	goto yyacceptlab
-#define YYABORT		goto yyabortlab
-#define YYERROR		goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
+#define YYABORT 	goto yyabortlab
+#define YYERROR		goto yyerrlab1
+/* Like YYERROR except do call yyerror.
+   This remains here temporarily to ease the
+   transition to the new meaning of YYERROR, for GCC.
    Once GCC version 2 has supplanted version 1, this can go.  */
-
 #define YYFAIL		goto yyerrlab
-
 #define YYRECOVERING()  (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value)					\
+#define YYBACKUP(token, value) \
 do								\
   if (yychar == YYEMPTY && yylen == 1)				\
-    {								\
-      yychar = (Token);						\
-      yylval = (Value);						\
-      yytoken = YYTRANSLATE (yychar);				\
+    { yychar = (token), yylval = (value);			\
+      yychar1 = YYTRANSLATE (yychar);				\
       YYPOPSTACK;						\
       goto yybackup;						\
     }								\
   else								\
-    {								\
-      yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;							\
-    }								\
+    { yyerror ("syntax error: cannot back up"); YYERROR; }	\
 while (0)
 
-
 #define YYTERROR	1
 #define YYERRCODE	256
 
-
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-   If N is 0, then set CURRENT to the empty location which ends
-   the previous symbol: RHS[0] (always defined).  */
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)				\
-    do									\
-      if (N)								\
-	{								\
-	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
-	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
-	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
-	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
-	}								\
-      else								\
-	{								\
-	  (Current).first_line   = (Current).last_line   =		\
-	    YYRHSLOC (Rhs, 0).last_line;				\
-	  (Current).first_column = (Current).last_column =		\
-	    YYRHSLOC (Rhs, 0).last_column;				\
-	}								\
-    while (0)
+#ifndef YYPURE
+#define YYLEX		yylex()
 #endif
 
-
-/* YY_LOCATION_PRINT -- Print the location on the stream.
-   This macro was not mandated originally: define only if we know
-   we won't break user code: when these are the locations we know.  */
-
-#ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
-#  define YY_LOCATION_PRINT(File, Loc)			\
-     fprintf (File, "%d.%d-%d.%d",			\
-              (Loc).first_line, (Loc).first_column,	\
-              (Loc).last_line,  (Loc).last_column)
-# else
-#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-
+#ifdef YYPURE
+#ifdef YYLSP_NEEDED
 #ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
+#define YYLEX		yylex(&yylval, &yylloc, YYLEX_PARAM)
 #else
-# define YYLEX yylex ()
+#define YYLEX		yylex(&yylval, &yylloc)
+#endif
+#else /* not YYLSP_NEEDED */
+#ifdef YYLEX_PARAM
+#define YYLEX		yylex(&yylval, YYLEX_PARAM)
+#else
+#define YYLEX		yylex(&yylval)
+#endif
+#endif /* not YYLSP_NEEDED */
 #endif
 
-/* Enable debugging if requested.  */
-#if YYDEBUG
+/* If nonreentrant, generate the variables here */
 
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
+#ifndef YYPURE
 
-# define YYDPRINTF(Args)			\
-do {						\
-  if (yydebug)					\
-    YYFPRINTF Args;				\
-} while (0)
+int	yychar;			/*  the lookahead symbol		*/
+YYSTYPE	yylval;			/*  the semantic value of the		*/
+				/*  lookahead symbol			*/
 
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)		\
-do {								\
-  if (yydebug)							\
-    {								\
-      YYFPRINTF (stderr, "%s ", Title);				\
-      yysymprint (stderr,					\
-                  Type, Value);	\
-      YYFPRINTF (stderr, "\n");					\
-    }								\
-} while (0)
-
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included).                                                   |
-`------------------------------------------------------------------*/
-
-#if defined (__STDC__) || defined (__cplusplus)
-static void
-yy_stack_print (short int *bottom, short int *top)
-#else
-static void
-yy_stack_print (bottom, top)
-    short int *bottom;
-    short int *top;
+#ifdef YYLSP_NEEDED
+YYLTYPE yylloc;			/*  location data for the lookahead	*/
+				/*  symbol				*/
 #endif
-{
-  YYFPRINTF (stderr, "Stack now");
-  for (/* Nothing. */; bottom <= top; ++bottom)
-    YYFPRINTF (stderr, " %d", *bottom);
-  YYFPRINTF (stderr, "\n");
-}
 
-# define YY_STACK_PRINT(Bottom, Top)				\
-do {								\
-  if (yydebug)							\
-    yy_stack_print ((Bottom), (Top));				\
-} while (0)
+int yynerrs;			/*  number of parse errors so far       */
+#endif  /* not YYPURE */
 
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced.  |
-`------------------------------------------------*/
-
-#if defined (__STDC__) || defined (__cplusplus)
-static void
-yy_reduce_print (int yyrule)
-#else
-static void
-yy_reduce_print (yyrule)
-    int yyrule;
+#if YYDEBUG != 0
+int yydebug;			/*  nonzero means print parse trace	*/
+/* Since this is uninitialized, it does not stop multiple parsers
+   from coexisting.  */
 #endif
-{
-  int yyi;
-  unsigned long int yylno = yyrline[yyrule];
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
-             yyrule - 1, yylno);
-  /* Print the symbols being reduced, and their result.  */
-  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
-    YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
-  YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
-}
 
-# define YY_REDUCE_PRINT(Rule)		\
-do {					\
-  if (yydebug)				\
-    yy_reduce_print (Rule);		\
-} while (0)
+/*  YYINITDEPTH indicates the initial size of the parser's stacks	*/
 
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
 #ifndef	YYINITDEPTH
-# define YYINITDEPTH 200
+#define YYINITDEPTH 200
 #endif
 
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
+/*  YYMAXDEPTH is the maximum size the stacks can grow to
+    (effective only if the built-in stack extension method is used).  */
 
-   Do not make this value too large; the results are undefined if
-   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
+#if YYMAXDEPTH == 0
+#undef YYMAXDEPTH
+#endif
 
 #ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
+#define YYMAXDEPTH 10000
 #endif
-
 
+/* Define __yy_memcpy.  Note that the size argument
+   should be passed with type unsigned int, because that is what the non-GCC
+   definitions require.  With GCC, __builtin_memcpy takes an arg
+   of type size_t, but it can handle unsigned int.  */
 
-#if YYERROR_VERBOSE
+#if __GNUC__ > 1		/* GNU C and GNU C++ define this.  */
+#define __yy_memcpy(TO,FROM,COUNT)	__builtin_memcpy(TO,FROM,COUNT)
+#else				/* not GNU C or C++ */
+#ifndef __cplusplus
 
-# ifndef yystrlen
-#  if defined (__GLIBC__) && defined (_STRING_H)
-#   define yystrlen strlen
-#  else
-/* Return the length of YYSTR.  */
-static YYSIZE_T
-#   if defined (__STDC__) || defined (__cplusplus)
-yystrlen (const char *yystr)
-#   else
-yystrlen (yystr)
-     const char *yystr;
-#   endif
-{
-  const char *yys = yystr;
-
-  while (*yys++ != '\0')
-    continue;
-
-  return yys - yystr - 1;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-static char *
-#   if defined (__STDC__) || defined (__cplusplus)
-yystpcpy (char *yydest, const char *yysrc)
-#   else
-yystpcpy (yydest, yysrc)
-     char *yydest;
-     const char *yysrc;
-#   endif
-{
-  char *yyd = yydest;
-  const char *yys = yysrc;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-   quotes and backslashes, so that it's suitable for yyerror.  The
-   heuristic is that double-quoting is unnecessary unless the string
-   contains an apostrophe, a comma, or backslash (other than
-   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
-   null, do not copy; instead, return the length of what the result
-   would have been.  */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
-  if (*yystr == '"')
-    {
-      size_t yyn = 0;
-      char const *yyp = yystr;
-
-      for (;;)
-	switch (*++yyp)
-	  {
-	  case '\'':
-	  case ',':
-	    goto do_not_strip_quotes;
-
-	  case '\\':
-	    if (*++yyp != '\\')
-	      goto do_not_strip_quotes;
-	    /* Fall through.  */
-	  default:
-	    if (yyres)
-	      yyres[yyn] = *yyp;
-	    yyn++;
-	    break;
-
-	  case '"':
-	    if (yyres)
-	      yyres[yyn] = '\0';
-	    return yyn;
-	  }
-    do_not_strip_quotes: ;
-    }
-
-  if (! yyres)
-    return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
-
-#endif /* YYERROR_VERBOSE */
-
-
-
-#if YYDEBUG
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-#if defined (__STDC__) || defined (__cplusplus)
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
 static void
-yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
-#else
+__yy_memcpy (to, from, count)
+     char *to;
+     char *from;
+     unsigned int count;
+{
+  register char *f = from;
+  register char *t = to;
+  register int i = count;
+
+  while (i-- > 0)
+    *t++ = *f++;
+}
+
+#else /* __cplusplus */
+
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
 static void
-yysymprint (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE *yyvaluep;
+__yy_memcpy (char *to, char *from, unsigned int count)
+{
+  register char *t = to;
+  register char *f = from;
+  register int i = count;
+
+  while (i-- > 0)
+    *t++ = *f++;
+}
+
 #endif
-{
-  /* Pacify ``unused variable'' warnings.  */
-  (void) yyvaluep;
-
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
-
-# ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# endif
-  switch (yytype)
-    {
-      default:
-        break;
-    }
-  YYFPRINTF (yyoutput, ")");
-}
-
-#endif /* ! YYDEBUG */
-/*-----------------------------------------------.
-| Release the memory associated to this symbol.  |
-`-----------------------------------------------*/
-
-#if defined (__STDC__) || defined (__cplusplus)
-static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep)
-    const char *yymsg;
-    int yytype;
-    YYSTYPE *yyvaluep;
 #endif
-{
-  /* Pacify ``unused variable'' warnings.  */
-  (void) yyvaluep;
-
-  if (!yymsg)
-    yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
-  switch (yytype)
-    {
-
-      default:
-        break;
-    }
-}
 
+#line 217 "/usr/share/bison.simple"
 
-/* Prevent warnings from -Wmissing-prototypes.  */
+/* The user can define YYPARSE_PARAM as the name of an argument to be passed
+   into yyparse.  The argument should have type void *.
+   It should actually point to an object.
+   Grammar actions can access the variable by casting it
+   to the proper pointer type.  */
 
 #ifdef YYPARSE_PARAM
-# if defined (__STDC__) || defined (__cplusplus)
-int yyparse (void *YYPARSE_PARAM);
-# else
-int yyparse ();
-# endif
-#else /* ! YYPARSE_PARAM */
-#if defined (__STDC__) || defined (__cplusplus)
+#ifdef __cplusplus
+#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
+#define YYPARSE_PARAM_DECL
+#else /* not __cplusplus */
+#define YYPARSE_PARAM_ARG YYPARSE_PARAM
+#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
+#endif /* not __cplusplus */
+#else /* not YYPARSE_PARAM */
+#define YYPARSE_PARAM_ARG
+#define YYPARSE_PARAM_DECL
+#endif /* not YYPARSE_PARAM */
+
+/* Prevent warning if -Wstrict-prototypes.  */
+#ifdef __GNUC__
+#ifdef YYPARSE_PARAM
+int yyparse (void *);
+#else
 int yyparse (void);
-#else
-int yyparse ();
 #endif
-#endif /* ! YYPARSE_PARAM */
+#endif
 
-
-
-/* The look-ahead symbol.  */
-int yychar;
-
-/* The semantic value of the look-ahead symbol.  */
-YYSTYPE yylval;
-
-/* Number of syntax errors so far.  */
-int yynerrs;
-
-
-
-/*----------.
-| yyparse.  |
-`----------*/
-
-#ifdef YYPARSE_PARAM
-# if defined (__STDC__) || defined (__cplusplus)
-int yyparse (void *YYPARSE_PARAM)
-# else
-int yyparse (YYPARSE_PARAM)
-  void *YYPARSE_PARAM;
-# endif
-#else /* ! YYPARSE_PARAM */
-#if defined (__STDC__) || defined (__cplusplus)
 int
-yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
+yyparse(YYPARSE_PARAM_ARG)
+     YYPARSE_PARAM_DECL
 {
-  
-  int yystate;
-  int yyn;
-  int yyresult;
-  /* Number of tokens to shift before error messages enabled.  */
-  int yyerrstatus;
-  /* Look-ahead token as an internal (translated) token number.  */
-  int yytoken = 0;
+  register int yystate;
+  register int yyn;
+  register short *yyssp;
+  register YYSTYPE *yyvsp;
+  int yyerrstatus;	/*  number of tokens to shift before error messages enabled */
+  int yychar1 = 0;		/*  lookahead token as an internal (translated) token number */
 
-  /* Three stacks and their tools:
-     `yyss': related to states,
-     `yyvs': related to semantic values,
-     `yyls': related to locations.
+  short	yyssa[YYINITDEPTH];	/*  the state stack			*/
+  YYSTYPE yyvsa[YYINITDEPTH];	/*  the semantic value stack		*/
 
-     Refer to the stacks thru separate pointers, to allow yyoverflow
-     to reallocate them elsewhere.  */
+  short *yyss = yyssa;		/*  refer to the stacks thru separate pointers */
+  YYSTYPE *yyvs = yyvsa;	/*  to allow yyoverflow to reallocate them elsewhere */
 
-  /* The state stack.  */
-  short int yyssa[YYINITDEPTH];
-  short int *yyss = yyssa;
-  short int *yyssp;
+#ifdef YYLSP_NEEDED
+  YYLTYPE yylsa[YYINITDEPTH];	/*  the location stack			*/
+  YYLTYPE *yyls = yylsa;
+  YYLTYPE *yylsp;
 
-  /* The semantic value stack.  */
-  YYSTYPE yyvsa[YYINITDEPTH];
-  YYSTYPE *yyvs = yyvsa;
-  YYSTYPE *yyvsp;
-
-
-
+#define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
+#else
 #define YYPOPSTACK   (yyvsp--, yyssp--)
+#endif
 
-  YYSIZE_T yystacksize = YYINITDEPTH;
+  int yystacksize = YYINITDEPTH;
+  int yyfree_stacks = 0;
 
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
+#ifdef YYPURE
+  int yychar;
+  YYSTYPE yylval;
+  int yynerrs;
+#ifdef YYLSP_NEEDED
+  YYLTYPE yylloc;
+#endif
+#endif
 
+  YYSTYPE yyval;		/*  the variable used to return		*/
+				/*  semantic values from the action	*/
+				/*  routines				*/
 
-  /* When reducing, the number of symbols on the RHS of the reduced
-     rule.  */
   int yylen;
 
-  YYDPRINTF ((stderr, "Starting parse\n"));
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Starting parse\n");
+#endif
 
   yystate = 0;
   yyerrstatus = 0;
@@ -2831,682 +2188,650 @@
      so that they stay on the same level as the state stack.
      The wasted elements are never initialized.  */
 
-  yyssp = yyss;
+  yyssp = yyss - 1;
   yyvsp = yyvs;
+#ifdef YYLSP_NEEDED
+  yylsp = yyls;
+#endif
 
-  goto yysetstate;
+/* Push a new state, which is found in  yystate  .  */
+/* In all cases, when you get here, the value and location stacks
+   have just been pushed. so pushing a state here evens the stacks.  */
+yynewstate:
 
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
-`------------------------------------------------------------*/
- yynewstate:
-  /* In all cases, when you get here, the value and location stacks
-     have just been pushed. so pushing a state here evens the stacks.
-     */
-  yyssp++;
+  *++yyssp = yystate;
 
- yysetstate:
-  *yyssp = yystate;
-
-  if (yyss + yystacksize - 1 <= yyssp)
+  if (yyssp >= yyss + yystacksize - 1)
     {
+      /* Give user a chance to reallocate the stack */
+      /* Use copies of these so that the &'s don't force the real ones into memory. */
+      YYSTYPE *yyvs1 = yyvs;
+      short *yyss1 = yyss;
+#ifdef YYLSP_NEEDED
+      YYLTYPE *yyls1 = yyls;
+#endif
+
       /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
+      int size = yyssp - yyss + 1;
 
 #ifdef yyoverflow
-      {
-	/* Give user a chance to reallocate the stack. Use copies of
-	   these so that the &'s don't force the real ones into
-	   memory.  */
-	YYSTYPE *yyvs1 = yyvs;
-	short int *yyss1 = yyss;
+      /* Each stack pointer address is followed by the size of
+	 the data in use in that stack, in bytes.  */
+#ifdef YYLSP_NEEDED
+      /* This used to be a conditional around just the two extra args,
+	 but that might be undefined if yyoverflow is a macro.  */
+      yyoverflow("parser stack overflow",
+		 &yyss1, size * sizeof (*yyssp),
+		 &yyvs1, size * sizeof (*yyvsp),
+		 &yyls1, size * sizeof (*yylsp),
+		 &yystacksize);
+#else
+      yyoverflow("parser stack overflow",
+		 &yyss1, size * sizeof (*yyssp),
+		 &yyvs1, size * sizeof (*yyvsp),
+		 &yystacksize);
+#endif
 
-
-	/* Each stack pointer address is followed by the size of the
-	   data in use in that stack, in bytes.  This used to be a
-	   conditional around just the two extra args, but that might
-	   be undefined if yyoverflow is a macro.  */
-	yyoverflow (YY_("memory exhausted"),
-		    &yyss1, yysize * sizeof (*yyssp),
-		    &yyvs1, yysize * sizeof (*yyvsp),
-
-		    &yystacksize);
-
-	yyss = yyss1;
-	yyvs = yyvs1;
-      }
+      yyss = yyss1; yyvs = yyvs1;
+#ifdef YYLSP_NEEDED
+      yyls = yyls1;
+#endif
 #else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
       /* Extend the stack our own way.  */
-      if (YYMAXDEPTH <= yystacksize)
-	goto yyexhaustedlab;
+      if (yystacksize >= YYMAXDEPTH)
+	{
+	  yyerror("parser stack overflow");
+	  if (yyfree_stacks)
+	    {
+	      free (yyss);
+	      free (yyvs);
+#ifdef YYLSP_NEEDED
+	      free (yyls);
+#endif
+	    }
+	  return 2;
+	}
       yystacksize *= 2;
-      if (YYMAXDEPTH < yystacksize)
+      if (yystacksize > YYMAXDEPTH)
 	yystacksize = YYMAXDEPTH;
-
-      {
-	short int *yyss1 = yyss;
-	union yyalloc *yyptr =
-	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-	if (! yyptr)
-	  goto yyexhaustedlab;
-	YYSTACK_RELOCATE (yyss);
-	YYSTACK_RELOCATE (yyvs);
-
-#  undef YYSTACK_RELOCATE
-	if (yyss1 != yyssa)
-	  YYSTACK_FREE (yyss1);
-      }
-# endif
+#ifndef YYSTACK_USE_ALLOCA
+      yyfree_stacks = 1;
+#endif
+      yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
+      __yy_memcpy ((char *)yyss, (char *)yyss1,
+		   size * (unsigned int) sizeof (*yyssp));
+      yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
+      __yy_memcpy ((char *)yyvs, (char *)yyvs1,
+		   size * (unsigned int) sizeof (*yyvsp));
+#ifdef YYLSP_NEEDED
+      yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
+      __yy_memcpy ((char *)yyls, (char *)yyls1,
+		   size * (unsigned int) sizeof (*yylsp));
+#endif
 #endif /* no yyoverflow */
 
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
+      yyssp = yyss + size - 1;
+      yyvsp = yyvs + size - 1;
+#ifdef YYLSP_NEEDED
+      yylsp = yyls + size - 1;
+#endif
 
+#if YYDEBUG != 0
+      if (yydebug)
+	fprintf(stderr, "Stack size increased to %d\n", yystacksize);
+#endif
 
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-		  (unsigned long int) yystacksize));
-
-      if (yyss + yystacksize - 1 <= yyssp)
+      if (yyssp >= yyss + yystacksize - 1)
 	YYABORT;
     }
 
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Entering state %d\n", yystate);
+#endif
 
   goto yybackup;
-
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
+ yybackup:
 
 /* Do appropriate processing given the current state.  */
-/* Read a look-ahead token if we need one and don't already have one.  */
+/* Read a lookahead token if we need one and don't already have one.  */
 /* yyresume: */
 
-  /* First try to decide what to do without reference to look-ahead token.  */
+  /* First try to decide what to do without reference to lookahead token.  */
 
   yyn = yypact[yystate];
-  if (yyn == YYPACT_NINF)
+  if (yyn == YYFLAG)
     goto yydefault;
 
-  /* Not known => get a look-ahead token if don't already have one.  */
+  /* Not known => get a lookahead token if don't already have one.  */
 
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  /* yychar is either YYEMPTY or YYEOF
+     or a valid token in external form.  */
+
   if (yychar == YYEMPTY)
     {
-      YYDPRINTF ((stderr, "Reading a token: "));
+#if YYDEBUG != 0
+      if (yydebug)
+	fprintf(stderr, "Reading a token: ");
+#endif
       yychar = YYLEX;
     }
 
-  if (yychar <= YYEOF)
+  /* Convert token to internal form (in yychar1) for indexing tables with */
+
+  if (yychar <= 0)		/* This means end of input. */
     {
-      yychar = yytoken = YYEOF;
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
+      yychar1 = 0;
+      yychar = YYEOF;		/* Don't call YYLEX any more */
+
+#if YYDEBUG != 0
+      if (yydebug)
+	fprintf(stderr, "Now at end of input.\n");
+#endif
     }
   else
     {
-      yytoken = YYTRANSLATE (yychar);
-      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+      yychar1 = YYTRANSLATE(yychar);
+
+#if YYDEBUG != 0
+      if (yydebug)
+	{
+	  fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
+	  /* Give the individual parser a way to print the precise meaning
+	     of a token, for further debugging info.  */
+#ifdef YYPRINT
+	  YYPRINT (stderr, yychar, yylval);
+#endif
+	  fprintf (stderr, ")\n");
+	}
+#endif
     }
 
-  /* If the proper action on seeing token YYTOKEN is to reduce or to
-     detect an error, take that action.  */
-  yyn += yytoken;
-  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+  yyn += yychar1;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
     goto yydefault;
+
   yyn = yytable[yyn];
-  if (yyn <= 0)
+
+  /* yyn is what to do for this token type in this state.
+     Negative => reduce, -yyn is rule number.
+     Positive => shift, yyn is new state.
+       New state is final state => don't bother to shift,
+       just return success.
+     0, or most negative number => error.  */
+
+  if (yyn < 0)
     {
-      if (yyn == 0 || yyn == YYTABLE_NINF)
+      if (yyn == YYFLAG)
 	goto yyerrlab;
       yyn = -yyn;
       goto yyreduce;
     }
+  else if (yyn == 0)
+    goto yyerrlab;
 
   if (yyn == YYFINAL)
     YYACCEPT;
 
-  /* Shift the look-ahead token.  */
-  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+  /* Shift the lookahead token.  */
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
+#endif
 
   /* Discard the token being shifted unless it is eof.  */
   if (yychar != YYEOF)
     yychar = YYEMPTY;
 
   *++yyvsp = yylval;
+#ifdef YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
 
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
+  /* count tokens shifted since error; after three, turn off error status.  */
+  if (yyerrstatus) yyerrstatus--;
 
   yystate = yyn;
   goto yynewstate;
 
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
+/* Do the default action for the current state.  */
 yydefault:
+
   yyn = yydefact[yystate];
   if (yyn == 0)
     goto yyerrlab;
-  goto yyreduce;
 
-
-/*-----------------------------.
-| yyreduce -- Do a reduction.  |
-`-----------------------------*/
+/* Do a reduction.  yyn is the number of a rule to reduce with.  */
 yyreduce:
-  /* yyn is the number of a rule to reduce with.  */
   yylen = yyr2[yyn];
+  if (yylen > 0)
+    yyval = yyvsp[1-yylen]; /* implement default value of the action */
 
-  /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
-
-     Otherwise, the following line sets YYVAL to garbage.
-     This behavior is undocumented and Bison
-     users should not rely upon it.  Assigning to YYVAL
-     unconditionally makes the parser a bit smaller, and it avoids a
-     GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1-yylen];
-
-
-  YY_REDUCE_PRINT (yyn);
-  switch (yyn)
+#if YYDEBUG != 0
+  if (yydebug)
     {
-        case 29:
-#line 1099 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
-    break;
+      int i;
 
-  case 30:
-#line 1099 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
-    break;
+      fprintf (stderr, "Reducing via rule %d (line %d), ",
+	       yyn, yyrline[yyn]);
 
-  case 31:
-#line 1100 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
-    break;
+      /* Print the symbols being reduced, and their result.  */
+      for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
+	fprintf (stderr, "%s ", yytname[yyrhs[i]]);
+      fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
+    }
+#endif
 
-  case 32:
-#line 1100 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
-    break;
 
-  case 33:
-#line 1101 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
-    break;
+  switch (yyn) {
 
-  case 34:
-#line 1101 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
-    break;
-
-  case 35:
-#line 1102 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
-    break;
-
-  case 36:
-#line 1102 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
-    break;
-
-  case 37:
-#line 1103 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
-    break;
-
-  case 38:
-#line 1103 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
-    break;
-
-  case 39:
-#line 1107 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
-    break;
-
-  case 40:
-#line 1107 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
-    break;
-
-  case 41:
-#line 1108 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
-    break;
-
-  case 42:
-#line 1108 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
-    break;
-
-  case 43:
-#line 1109 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
-    break;
-
-  case 44:
-#line 1109 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
-    break;
-
-  case 45:
-#line 1110 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
-    break;
-
-  case 46:
-#line 1110 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
-    break;
-
-  case 47:
-#line 1111 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
-    break;
-
-  case 48:
-#line 1111 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
-    break;
-
-  case 49:
-#line 1112 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
-    break;
-
-  case 50:
-#line 1112 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
-    break;
-
-  case 51:
-#line 1113 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
-    break;
-
-  case 52:
-#line 1113 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
-    break;
-
-  case 53:
-#line 1114 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
-    break;
-
-  case 54:
-#line 1115 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
-    break;
-
-  case 61:
-#line 1124 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = 0; ;}
-    break;
-
-  case 62:
-#line 1128 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = (yyvsp[-1].StrVal);
+case 28:
+#line 1099 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_EQ; ;
+    break;}
+case 29:
+#line 1099 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_NE; ;
+    break;}
+case 30:
+#line 1100 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_SLT; ;
+    break;}
+case 31:
+#line 1100 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_SGT; ;
+    break;}
+case 32:
+#line 1101 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_SLE; ;
+    break;}
+case 33:
+#line 1101 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_SGE; ;
+    break;}
+case 34:
+#line 1102 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_ULT; ;
+    break;}
+case 35:
+#line 1102 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_UGT; ;
+    break;}
+case 36:
+#line 1103 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_ULE; ;
+    break;}
+case 37:
+#line 1103 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.IPredicate = ICmpInst::ICMP_UGE; ;
+    break;}
+case 38:
+#line 1107 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OEQ; ;
+    break;}
+case 39:
+#line 1107 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_ONE; ;
+    break;}
+case 40:
+#line 1108 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OLT; ;
+    break;}
+case 41:
+#line 1108 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OGT; ;
+    break;}
+case 42:
+#line 1109 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OLE; ;
+    break;}
+case 43:
+#line 1109 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_OGE; ;
+    break;}
+case 44:
+#line 1110 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_ORD; ;
+    break;}
+case 45:
+#line 1110 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UNO; ;
+    break;}
+case 46:
+#line 1111 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UEQ; ;
+    break;}
+case 47:
+#line 1111 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UNE; ;
+    break;}
+case 48:
+#line 1112 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_ULT; ;
+    break;}
+case 49:
+#line 1112 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UGT; ;
+    break;}
+case 50:
+#line 1113 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_ULE; ;
+    break;}
+case 51:
+#line 1113 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_UGE; ;
+    break;}
+case 52:
+#line 1114 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_TRUE; ;
+    break;}
+case 53:
+#line 1115 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.FPredicate = FCmpInst::FCMP_FALSE; ;
+    break;}
+case 60:
+#line 1124 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = 0; ;
+    break;}
+case 61:
+#line 1128 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = yyvsp[-1].StrVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 63:
-#line 1132 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = 0;
+  ;
+    break;}
+case 62:
+#line 1132 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 66:
-#line 1139 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = (yyvsp[-1].StrVal);
+  ;
+    break;}
+case 65:
+#line 1139 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = yyvsp[-1].StrVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 67:
-#line 1143 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.StrVal) = 0;
+  ;
+    break;}
+case 66:
+#line 1143 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.StrVal = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 68:
-#line 1149 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
-    break;
-
-  case 69:
-#line 1150 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
-    break;
-
-  case 70:
-#line 1151 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
-    break;
-
-  case 71:
-#line 1152 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
-    break;
-
-  case 72:
-#line 1153 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
-    break;
-
-  case 73:
-#line 1157 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
-    break;
-
-  case 74:
-#line 1158 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
-    break;
-
-  case 75:
-#line 1159 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
-    break;
-
-  case 76:
-#line 1163 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;}
-    break;
-
-  case 77:
-#line 1164 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Visibility) = GlobalValue::HiddenVisibility;  ;}
-    break;
-
-  case 78:
-#line 1168 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
-    break;
-
-  case 79:
-#line 1169 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
-    break;
-
-  case 80:
-#line 1170 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
-    break;
-
-  case 81:
-#line 1174 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
-    break;
-
-  case 82:
-#line 1175 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
-    break;
-
-  case 83:
-#line 1176 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
-    break;
-
-  case 84:
-#line 1177 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
-    break;
-
-  case 85:
-#line 1178 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
-    break;
-
-  case 86:
-#line 1181 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::C; ;}
-    break;
-
-  case 87:
-#line 1182 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::C; ;}
-    break;
-
-  case 88:
-#line 1183 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::Fast; ;}
-    break;
-
-  case 89:
-#line 1184 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::Cold; ;}
-    break;
-
-  case 90:
-#line 1185 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
-    break;
-
-  case 91:
-#line 1186 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
-    break;
-
-  case 92:
-#line 1187 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-                   if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
+  ;
+    break;}
+case 67:
+#line 1149 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::InternalLinkage; ;
+    break;}
+case 68:
+#line 1150 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::WeakLinkage; ;
+    break;}
+case 69:
+#line 1151 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
+    break;}
+case 70:
+#line 1152 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::AppendingLinkage; ;
+    break;}
+case 71:
+#line 1153 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::DLLExportLinkage; ;
+    break;}
+case 72:
+#line 1157 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::DLLImportLinkage; ;
+    break;}
+case 73:
+#line 1158 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
+    break;}
+case 74:
+#line 1159 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
+    break;}
+case 75:
+#line 1163 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Visibility = GlobalValue::DefaultVisibility; ;
+    break;}
+case 76:
+#line 1164 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Visibility = GlobalValue::HiddenVisibility;  ;
+    break;}
+case 77:
+#line 1168 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
+    break;}
+case 78:
+#line 1169 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::DLLImportLinkage; ;
+    break;}
+case 79:
+#line 1170 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
+    break;}
+case 80:
+#line 1174 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::ExternalLinkage; ;
+    break;}
+case 81:
+#line 1175 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::InternalLinkage; ;
+    break;}
+case 82:
+#line 1176 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
+    break;}
+case 83:
+#line 1177 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::WeakLinkage; ;
+    break;}
+case 84:
+#line 1178 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.Linkage = GlobalValue::DLLExportLinkage; ;
+    break;}
+case 85:
+#line 1181 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::C; ;
+    break;}
+case 86:
+#line 1182 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::C; ;
+    break;}
+case 87:
+#line 1183 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::Fast; ;
+    break;}
+case 88:
+#line 1184 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::Cold; ;
+    break;}
+case 89:
+#line 1185 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::X86_StdCall; ;
+    break;}
+case 90:
+#line 1186 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = CallingConv::X86_FastCall; ;
+    break;}
+case 91:
+#line 1187 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+                   if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val)
                      GEN_ERROR("Calling conv too large");
-                   (yyval.UIntVal) = (yyvsp[0].UInt64Val);
+                   yyval.UIntVal = yyvsp[0].UInt64Val;
                   CHECK_FOR_ERROR
-                 ;}
-    break;
-
-  case 93:
-#line 1194 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::ZExt;      ;}
-    break;
-
-  case 94:
-#line 1195 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::SExt;      ;}
-    break;
-
-  case 95:
-#line 1196 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::InReg;     ;}
-    break;
-
-  case 96:
-#line 1197 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::StructRet; ;}
-    break;
-
-  case 97:
-#line 1200 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::None; ;}
-    break;
-
-  case 98:
-#line 1201 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-                (yyval.ParamAttrs) = (yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs);
-              ;}
-    break;
-
-  case 99:
-#line 1206 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::NoReturn; ;}
-    break;
-
-  case 100:
-#line 1207 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::NoUnwind; ;}
-    break;
-
-  case 102:
-#line 1211 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ParamAttrs) = ParamAttr::None; ;}
-    break;
-
-  case 103:
-#line 1212 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-                (yyval.ParamAttrs) = (yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs);
-              ;}
-    break;
-
-  case 104:
-#line 1219 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = 0; ;}
-    break;
-
-  case 105:
-#line 1220 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
-  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
+                 ;
+    break;}
+case 92:
+#line 1194 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::ZExt;      ;
+    break;}
+case 93:
+#line 1195 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::SExt;      ;
+    break;}
+case 94:
+#line 1196 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::InReg;     ;
+    break;}
+case 95:
+#line 1197 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::StructRet; ;
+    break;}
+case 96:
+#line 1200 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::None; ;
+    break;}
+case 97:
+#line 1201 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+                yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs;
+              ;
+    break;}
+case 98:
+#line 1206 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::NoReturn; ;
+    break;}
+case 99:
+#line 1207 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::NoUnwind; ;
+    break;}
+case 101:
+#line 1211 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ParamAttrs = ParamAttr::None; ;
+    break;}
+case 102:
+#line 1212 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+                yyval.ParamAttrs = yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs;
+              ;
+    break;}
+case 103:
+#line 1219 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = 0; ;
+    break;}
+case 104:
+#line 1220 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  yyval.UIntVal = yyvsp[0].UInt64Val;
+  if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
     GEN_ERROR("Alignment must be a power of two");
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 106:
-#line 1226 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = 0; ;}
-    break;
-
-  case 107:
-#line 1227 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
-  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
+;
+    break;}
+case 105:
+#line 1226 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.UIntVal = 0; ;
+    break;}
+case 106:
+#line 1227 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  yyval.UIntVal = yyvsp[0].UInt64Val;
+  if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
     GEN_ERROR("Alignment must be a power of two");
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 108:
-#line 1235 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-  for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
-    if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
+;
+    break;}
+case 107:
+#line 1235 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  for (unsigned i = 0, e = strlen(yyvsp[0].StrVal); i != e; ++i)
+    if (yyvsp[0].StrVal[i] == '"' || yyvsp[0].StrVal[i] == '\\')
       GEN_ERROR("Invalid character in section name");
-  (yyval.StrVal) = (yyvsp[0].StrVal);
+  yyval.StrVal = yyvsp[0].StrVal;
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 109:
-#line 1243 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = 0; ;}
-    break;
-
-  case 110:
-#line 1244 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
-    break;
-
-  case 111:
-#line 1249 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {;}
-    break;
-
-  case 112:
-#line 1250 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {;}
-    break;
-
-  case 113:
-#line 1251 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurGV->setSection((yyvsp[0].StrVal));
-    free((yyvsp[0].StrVal));
+;
+    break;}
+case 108:
+#line 1243 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = 0; ;
+    break;}
+case 109:
+#line 1244 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.StrVal = yyvsp[0].StrVal; ;
+    break;}
+case 110:
+#line 1249 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{;
+    break;}
+case 111:
+#line 1250 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{;
+    break;}
+case 112:
+#line 1251 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurGV->setSection(yyvsp[0].StrVal);
+    free(yyvsp[0].StrVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 114:
-#line 1256 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
+  ;
+    break;}
+case 113:
+#line 1256 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[0].UInt64Val != 0 && !isPowerOf2_32(yyvsp[0].UInt64Val))
       GEN_ERROR("Alignment must be a power of two");
-    CurGV->setAlignment((yyvsp[0].UInt64Val));
+    CurGV->setAlignment(yyvsp[0].UInt64Val);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 119:
-#line 1272 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
+  ;
+    break;}
+case 118:
+#line 1272 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeVal = new PATypeHolder(OpaqueType::get());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 120:
-#line 1276 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
+  ;
+    break;}
+case 119:
+#line 1276 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 121:
-#line 1280 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {                             // Pointer type?
-    if (*(yyvsp[-1].TypeVal) == Type::LabelTy)
+  ;
+    break;}
+case 120:
+#line 1280 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                             // Pointer type?
+    if (*yyvsp[-1].TypeVal == Type::LabelTy)
       GEN_ERROR("Cannot form a pointer to a basic block");
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[-1].TypeVal))));
-    delete (yyvsp[-1].TypeVal);
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(PointerType::get(*yyvsp[-1].TypeVal)));
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 122:
-#line 1287 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {            // Named types are also simple types...
-    const Type* tmp = getTypeVal((yyvsp[0].ValIDVal));
+  ;
+    break;}
+case 121:
+#line 1287 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{            // Named types are also simple types...
+    const Type* tmp = getTypeVal(yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.TypeVal) = new PATypeHolder(tmp);
-  ;}
-    break;
-
-  case 123:
-#line 1292 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {                   // Type UpReference
-    if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range");
+    yyval.TypeVal = new PATypeHolder(tmp);
+  ;
+    break;}
+case 122:
+#line 1292 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                   // Type UpReference
+    if (yyvsp[0].UInt64Val > (uint64_t)~0U) GEN_ERROR("Value out of range");
     OpaqueType *OT = OpaqueType::get();        // Use temporary placeholder
-    UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[0].UInt64Val), OT));  // Add to vector...
-    (yyval.TypeVal) = new PATypeHolder(OT);
+    UpRefs.push_back(UpRefRecord((unsigned)yyvsp[0].UInt64Val, OT));  // Add to vector...
+    yyval.TypeVal = new PATypeHolder(OT);
     UR_OUT("New Upreference!\n");
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 124:
-#line 1300 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 123:
+#line 1300 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     std::vector<const Type*> Params;
     ParamAttrsList Attrs;
-    if ((yyvsp[0].ParamAttrs) != ParamAttr::None)
-      Attrs.addAttributes(0, (yyvsp[0].ParamAttrs));
+    if (yyvsp[0].ParamAttrs != ParamAttr::None)
+      Attrs.addAttributes(0, yyvsp[0].ParamAttrs);
     unsigned index = 1;
-    TypeWithAttrsList::iterator I = (yyvsp[-2].TypeWithAttrsList)->begin(), E = (yyvsp[-2].TypeWithAttrsList)->end();
+    TypeWithAttrsList::iterator I = yyvsp[-2].TypeWithAttrsList->begin(), E = yyvsp[-2].TypeWithAttrsList->end();
     for (; I != E; ++I, ++index) {
       const Type *Ty = I->Ty->get();
       Params.push_back(Ty);
@@ -3520,22 +2845,21 @@
     ParamAttrsList *ActualAttrs = 0;
     if (!Attrs.empty())
       ActualAttrs = new ParamAttrsList(Attrs);
-    FunctionType *FT = FunctionType::get(*(yyvsp[-4].TypeVal), Params, isVarArg, ActualAttrs);
-    delete (yyvsp[-2].TypeWithAttrsList);   // Delete the argument list
-    delete (yyvsp[-4].TypeVal);   // Delete the return type handle
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); 
+    FunctionType *FT = FunctionType::get(*yyvsp[-4].TypeVal, Params, isVarArg, ActualAttrs);
+    delete yyvsp[-2].TypeWithAttrsList;   // Delete the argument list
+    delete yyvsp[-4].TypeVal;   // Delete the return type handle
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); 
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 125:
-#line 1326 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 124:
+#line 1326 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     std::vector<const Type*> Params;
     ParamAttrsList Attrs;
-    if ((yyvsp[0].ParamAttrs) != ParamAttr::None)
-      Attrs.addAttributes(0, (yyvsp[0].ParamAttrs));
-    TypeWithAttrsList::iterator I = (yyvsp[-2].TypeWithAttrsList)->begin(), E = (yyvsp[-2].TypeWithAttrsList)->end();
+    if (yyvsp[0].ParamAttrs != ParamAttr::None)
+      Attrs.addAttributes(0, yyvsp[0].ParamAttrs);
+    TypeWithAttrsList::iterator I = yyvsp[-2].TypeWithAttrsList->begin(), E = yyvsp[-2].TypeWithAttrsList->end();
     unsigned index = 1;
     for ( ; I != E; ++I, ++index) {
       const Type* Ty = I->Ty->get();
@@ -3551,305 +2875,284 @@
     if (!Attrs.empty())
       ActualAttrs = new ParamAttrsList(Attrs);
 
-    FunctionType *FT = FunctionType::get((yyvsp[-4].PrimType), Params, isVarArg, ActualAttrs);
-    delete (yyvsp[-2].TypeWithAttrsList);      // Delete the argument list
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT)); 
+    FunctionType *FT = FunctionType::get(yyvsp[-4].PrimType, Params, isVarArg, ActualAttrs);
+    delete yyvsp[-2].TypeWithAttrsList;      // Delete the argument list
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT)); 
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 126:
-#line 1353 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {          // Sized array type?
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
-    delete (yyvsp[-1].TypeVal);
+  ;
+    break;}
+case 125:
+#line 1353 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{          // Sized array type?
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(ArrayType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 127:
-#line 1358 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {          // Vector type?
-     const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get();
-     if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
+  ;
+    break;}
+case 126:
+#line 1358 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{          // Vector type?
+     const llvm::Type* ElemTy = yyvsp[-1].TypeVal->get();
+     if ((unsigned)yyvsp[-3].UInt64Val != yyvsp[-3].UInt64Val)
         GEN_ERROR("Unsigned result not equal to signed result");
      if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
         GEN_ERROR("Element type of a VectorType must be primitive");
-     if (!isPowerOf2_32((yyvsp[-3].UInt64Val)))
+     if (!isPowerOf2_32(yyvsp[-3].UInt64Val))
        GEN_ERROR("Vector length should be a power of 2");
-     (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(VectorType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
-     delete (yyvsp[-1].TypeVal);
+     yyval.TypeVal = new PATypeHolder(HandleUpRefs(VectorType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
+     delete yyvsp[-1].TypeVal;
      CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 128:
-#line 1370 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {                        // Structure type?
+  ;
+    break;}
+case 127:
+#line 1370 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                        // Structure type?
     std::vector<const Type*> Elements;
-    for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
-           E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
+    for (std::list<llvm::PATypeHolder>::iterator I = yyvsp[-1].TypeList->begin(),
+           E = yyvsp[-1].TypeList->end(); I != E; ++I)
       Elements.push_back(*I);
 
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
-    delete (yyvsp[-1].TypeList);
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
+    delete yyvsp[-1].TypeList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 129:
-#line 1380 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {                                  // Empty structure type?
-    (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
+  ;
+    break;}
+case 128:
+#line 1380 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                                  // Empty structure type?
+    yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>()));
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 130:
-#line 1384 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 129:
+#line 1384 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     std::vector<const Type*> Elements;
-    for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-2].TypeList)->begin(),
-           E = (yyvsp[-2].TypeList)->end(); I != E; ++I)
+    for (std::list<llvm::PATypeHolder>::iterator I = yyvsp[-2].TypeList->begin(),
+           E = yyvsp[-2].TypeList->end(); I != E; ++I)
       Elements.push_back(*I);
 
-    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
-    delete (yyvsp[-2].TypeList);
+    yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
+    delete yyvsp[-2].TypeList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 131:
-#line 1394 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {                         // Empty structure type?
-    (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
+  ;
+    break;}
+case 130:
+#line 1394 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                         // Empty structure type?
+    yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 132:
-#line 1401 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { 
-    (yyval.TypeWithAttrs).Ty = (yyvsp[-1].TypeVal); 
-    (yyval.TypeWithAttrs).Attrs = (yyvsp[0].ParamAttrs); 
-  ;}
-    break;
-
-  case 133:
-#line 1408 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 131:
+#line 1401 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
+    yyval.TypeWithAttrs.Ty = yyvsp[-1].TypeVal; 
+    yyval.TypeWithAttrs.Attrs = yyvsp[0].ParamAttrs; 
+  ;
+    break;}
+case 132:
+#line 1408 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
-    if (!(*(yyvsp[0].TypeVal))->isFirstClassType())
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
+    if (!(*yyvsp[0].TypeVal)->isFirstClassType())
       GEN_ERROR("LLVM functions cannot return aggregate types");
-    (yyval.TypeVal) = (yyvsp[0].TypeVal);
-  ;}
-    break;
-
-  case 134:
-#line 1415 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
-  ;}
-    break;
-
-  case 135:
-#line 1420 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
-    (yyval.TypeWithAttrsList)->push_back((yyvsp[0].TypeWithAttrs));
+    yyval.TypeVal = yyvsp[0].TypeVal;
+  ;
+    break;}
+case 133:
+#line 1415 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeVal = new PATypeHolder(Type::VoidTy);
+  ;
+    break;}
+case 134:
+#line 1420 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeWithAttrsList = new TypeWithAttrsList();
+    yyval.TypeWithAttrsList->push_back(yyvsp[0].TypeWithAttrs);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 136:
-#line 1425 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList))->push_back((yyvsp[0].TypeWithAttrs));
+  ;
+    break;}
+case 135:
+#line 1425 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    (yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList)->push_back(yyvsp[0].TypeWithAttrs);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 138:
-#line 1433 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList);
+  ;
+    break;}
+case 137:
+#line 1433 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList;
     TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
     TWA.Ty = new PATypeHolder(Type::VoidTy);
-    (yyval.TypeWithAttrsList)->push_back(TWA);
+    yyval.TypeWithAttrsList->push_back(TWA);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 139:
-#line 1440 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
+  ;
+    break;}
+case 138:
+#line 1440 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeWithAttrsList = new TypeWithAttrsList;
     TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
     TWA.Ty = new PATypeHolder(Type::VoidTy);
-    (yyval.TypeWithAttrsList)->push_back(TWA);
+    yyval.TypeWithAttrsList->push_back(TWA);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 140:
-#line 1447 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
+  ;
+    break;}
+case 139:
+#line 1447 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeWithAttrsList = new TypeWithAttrsList();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 141:
-#line 1455 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TypeList) = new std::list<PATypeHolder>();
-    (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal)); 
-    delete (yyvsp[0].TypeVal);
+  ;
+    break;}
+case 140:
+#line 1455 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TypeList = new std::list<PATypeHolder>();
+    yyval.TypeList->push_back(*yyvsp[0].TypeVal); 
+    delete yyvsp[0].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 142:
-#line 1461 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal)); 
-    delete (yyvsp[0].TypeVal);
+  ;
+    break;}
+case 141:
+#line 1461 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    (yyval.TypeList=yyvsp[-2].TypeList)->push_back(*yyvsp[0].TypeVal); 
+    delete yyvsp[0].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 143:
-#line 1473 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { // Nonempty unsized arr
+  ;
+    break;}
+case 142:
+#line 1473 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ // Nonempty unsized arr
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
-    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
+    const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-3].TypeVal->get());
     if (ATy == 0)
       GEN_ERROR("Cannot make array constant with type: '" + 
-                     (*(yyvsp[-3].TypeVal))->getDescription() + "'");
+                     (*yyvsp[-3].TypeVal)->getDescription() + "'");
     const Type *ETy = ATy->getElementType();
     int NumElements = ATy->getNumElements();
 
     // Verify that we have the correct size...
-    if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
+    if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
       GEN_ERROR("Type mismatch: constant sized array initialized with " +
-                     utostr((yyvsp[-1].ConstVector)->size()) +  " arguments, but has size of " + 
+                     utostr(yyvsp[-1].ConstVector->size()) +  " arguments, but has size of " + 
                      itostr(NumElements) + "");
 
     // Verify all elements are correct type!
-    for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
-      if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
+    for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
+      if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
                        ETy->getDescription() +"' as required!\nIt is of type '"+
-                       (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
+                       (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
     }
 
-    (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[-1].ConstVector));
-    delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
+    yyval.ConstVal = ConstantArray::get(ATy, *yyvsp[-1].ConstVector);
+    delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 144:
-#line 1501 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 143:
+#line 1501 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
-    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal->get());
     if (ATy == 0)
       GEN_ERROR("Cannot make array constant with type: '" + 
-                     (*(yyvsp[-2].TypeVal))->getDescription() + "'");
+                     (*yyvsp[-2].TypeVal)->getDescription() + "'");
 
     int NumElements = ATy->getNumElements();
     if (NumElements != -1 && NumElements != 0) 
       GEN_ERROR("Type mismatch: constant sized array initialized with 0"
                      " arguments, but has size of " + itostr(NumElements) +"");
-    (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
-    delete (yyvsp[-2].TypeVal);
+    yyval.ConstVal = ConstantArray::get(ATy, std::vector<Constant*>());
+    delete yyvsp[-2].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 145:
-#line 1517 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 144:
+#line 1517 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
-    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal->get());
     if (ATy == 0)
       GEN_ERROR("Cannot make array constant with type: '" + 
-                     (*(yyvsp[-2].TypeVal))->getDescription() + "'");
+                     (*yyvsp[-2].TypeVal)->getDescription() + "'");
 
     int NumElements = ATy->getNumElements();
     const Type *ETy = ATy->getElementType();
-    char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
-    if (NumElements != -1 && NumElements != (EndStr-(yyvsp[0].StrVal)))
+    char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
+    if (NumElements != -1 && NumElements != (EndStr-yyvsp[0].StrVal))
       GEN_ERROR("Can't build string constant of size " + 
-                     itostr((int)(EndStr-(yyvsp[0].StrVal))) +
+                     itostr((int)(EndStr-yyvsp[0].StrVal)) +
                      " when array has size " + itostr(NumElements) + "");
     std::vector<Constant*> Vals;
     if (ETy == Type::Int8Ty) {
-      for (unsigned char *C = (unsigned char *)(yyvsp[0].StrVal); 
+      for (unsigned char *C = (unsigned char *)yyvsp[0].StrVal; 
         C != (unsigned char*)EndStr; ++C)
       Vals.push_back(ConstantInt::get(ETy, *C));
     } else {
-      free((yyvsp[0].StrVal));
+      free(yyvsp[0].StrVal);
       GEN_ERROR("Cannot build string arrays of non byte sized elements");
     }
-    free((yyvsp[0].StrVal));
-    (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
-    delete (yyvsp[-2].TypeVal);
+    free(yyvsp[0].StrVal);
+    yyval.ConstVal = ConstantArray::get(ATy, Vals);
+    delete yyvsp[-2].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 146:
-#line 1546 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { // Nonempty unsized arr
+  ;
+    break;}
+case 145:
+#line 1546 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ // Nonempty unsized arr
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
-    const VectorType *PTy = dyn_cast<VectorType>((yyvsp[-3].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
+    const VectorType *PTy = dyn_cast<VectorType>(yyvsp[-3].TypeVal->get());
     if (PTy == 0)
       GEN_ERROR("Cannot make packed constant with type: '" + 
-                     (*(yyvsp[-3].TypeVal))->getDescription() + "'");
+                     (*yyvsp[-3].TypeVal)->getDescription() + "'");
     const Type *ETy = PTy->getElementType();
     int NumElements = PTy->getNumElements();
 
     // Verify that we have the correct size...
-    if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
+    if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
       GEN_ERROR("Type mismatch: constant sized packed initialized with " +
-                     utostr((yyvsp[-1].ConstVector)->size()) +  " arguments, but has size of " + 
+                     utostr(yyvsp[-1].ConstVector->size()) +  " arguments, but has size of " + 
                      itostr(NumElements) + "");
 
     // Verify all elements are correct type!
-    for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
-      if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
+    for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
+      if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
            ETy->getDescription() +"' as required!\nIt is of type '"+
-           (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
+           (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
     }
 
-    (yyval.ConstVal) = ConstantVector::get(PTy, *(yyvsp[-1].ConstVector));
-    delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
+    yyval.ConstVal = ConstantVector::get(PTy, *yyvsp[-1].ConstVector);
+    delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 147:
-#line 1574 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
+  ;
+    break;}
+case 146:
+#line 1574 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    const StructType *STy = dyn_cast<StructType>(yyvsp[-3].TypeVal->get());
     if (STy == 0)
       GEN_ERROR("Cannot make struct constant with type: '" + 
-                     (*(yyvsp[-3].TypeVal))->getDescription() + "'");
+                     (*yyvsp[-3].TypeVal)->getDescription() + "'");
 
-    if ((yyvsp[-1].ConstVector)->size() != STy->getNumContainedTypes())
+    if (yyvsp[-1].ConstVector->size() != STy->getNumContainedTypes())
       GEN_ERROR("Illegal number of initializers for structure type");
 
     // Check to ensure that constants are compatible with the type initializer!
-    for (unsigned i = 0, e = (yyvsp[-1].ConstVector)->size(); i != e; ++i)
-      if ((*(yyvsp[-1].ConstVector))[i]->getType() != STy->getElementType(i))
+    for (unsigned i = 0, e = yyvsp[-1].ConstVector->size(); i != e; ++i)
+      if ((*yyvsp[-1].ConstVector)[i]->getType() != STy->getElementType(i))
         GEN_ERROR("Expected type '" +
                        STy->getElementType(i)->getDescription() +
                        "' for element #" + utostr(i) +
@@ -3859,21 +3162,20 @@
     if (STy->isPacked())
       GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'");
 
-    (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-1].ConstVector));
-    delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
+    yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-1].ConstVector);
+    delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 148:
-#line 1599 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 147:
+#line 1599 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
-    const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    const StructType *STy = dyn_cast<StructType>(yyvsp[-2].TypeVal->get());
     if (STy == 0)
       GEN_ERROR("Cannot make struct constant with type: '" + 
-                     (*(yyvsp[-2].TypeVal))->getDescription() + "'");
+                     (*yyvsp[-2].TypeVal)->getDescription() + "'");
 
     if (STy->getNumContainedTypes() != 0)
       GEN_ERROR("Illegal number of initializers for structure type");
@@ -3882,26 +3184,25 @@
     if (STy->isPacked())
       GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'");
 
-    (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
-    delete (yyvsp[-2].TypeVal);
+    yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
+    delete yyvsp[-2].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 149:
-#line 1618 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    const StructType *STy = dyn_cast<StructType>((yyvsp[-5].TypeVal)->get());
+  ;
+    break;}
+case 148:
+#line 1618 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    const StructType *STy = dyn_cast<StructType>(yyvsp[-5].TypeVal->get());
     if (STy == 0)
       GEN_ERROR("Cannot make struct constant with type: '" + 
-                     (*(yyvsp[-5].TypeVal))->getDescription() + "'");
+                     (*yyvsp[-5].TypeVal)->getDescription() + "'");
 
-    if ((yyvsp[-2].ConstVector)->size() != STy->getNumContainedTypes())
+    if (yyvsp[-2].ConstVector->size() != STy->getNumContainedTypes())
       GEN_ERROR("Illegal number of initializers for structure type");
 
     // Check to ensure that constants are compatible with the type initializer!
-    for (unsigned i = 0, e = (yyvsp[-2].ConstVector)->size(); i != e; ++i)
-      if ((*(yyvsp[-2].ConstVector))[i]->getType() != STy->getElementType(i))
+    for (unsigned i = 0, e = yyvsp[-2].ConstVector->size(); i != e; ++i)
+      if ((*yyvsp[-2].ConstVector)[i]->getType() != STy->getElementType(i))
         GEN_ERROR("Expected type '" +
                        STy->getElementType(i)->getDescription() +
                        "' for element #" + utostr(i) +
@@ -3912,21 +3213,20 @@
       GEN_ERROR("Vector initializer to non-vector type '" + 
                 STy->getDescription() + "'");
 
-    (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-2].ConstVector));
-    delete (yyvsp[-5].TypeVal); delete (yyvsp[-2].ConstVector);
+    yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-2].ConstVector);
+    delete yyvsp[-5].TypeVal; delete yyvsp[-2].ConstVector;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 150:
-#line 1644 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 149:
+#line 1644 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
-    const StructType *STy = dyn_cast<StructType>((yyvsp[-4].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
+    const StructType *STy = dyn_cast<StructType>(yyvsp[-4].TypeVal->get());
     if (STy == 0)
       GEN_ERROR("Cannot make struct constant with type: '" + 
-                     (*(yyvsp[-4].TypeVal))->getDescription() + "'");
+                     (*yyvsp[-4].TypeVal)->getDescription() + "'");
 
     if (STy->getNumContainedTypes() != 0)
       GEN_ERROR("Illegal number of initializers for structure type");
@@ -3936,45 +3236,42 @@
       GEN_ERROR("Vector initializer to non-vector type '" + 
                 STy->getDescription() + "'");
 
-    (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
-    delete (yyvsp[-4].TypeVal);
+    yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
+    delete yyvsp[-4].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 151:
-#line 1664 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 150:
+#line 1664 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    const PointerType *PTy = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
     if (PTy == 0)
       GEN_ERROR("Cannot make null pointer constant with type: '" + 
-                     (*(yyvsp[-1].TypeVal))->getDescription() + "'");
+                     (*yyvsp[-1].TypeVal)->getDescription() + "'");
 
-    (yyval.ConstVal) = ConstantPointerNull::get(PTy);
-    delete (yyvsp[-1].TypeVal);
+    yyval.ConstVal = ConstantPointerNull::get(PTy);
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 152:
-#line 1676 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 151:
+#line 1676 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
-    delete (yyvsp[-1].TypeVal);
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    yyval.ConstVal = UndefValue::get(yyvsp[-1].TypeVal->get());
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 153:
-#line 1683 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 152:
+#line 1683 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    const PointerType *Ty = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
     if (Ty == 0)
       GEN_ERROR("Global const reference must be a pointer type");
 
@@ -3988,7 +3285,7 @@
     Function *SavedCurFn = CurFun.CurrentFunction;
     CurFun.CurrentFunction = 0;
 
-    Value *V = getExistingVal(Ty, (yyvsp[0].ValIDVal));
+    Value *V = getExistingVal(Ty, yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
 
     CurFun.CurrentFunction = SavedCurFn;
@@ -4003,16 +3300,16 @@
 
       // First check to see if the forward references value is already created!
       PerModuleInfo::GlobalRefsType::iterator I =
-        CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[0].ValIDVal)));
+        CurModule.GlobalRefs.find(std::make_pair(PT, yyvsp[0].ValIDVal));
     
       if (I != CurModule.GlobalRefs.end()) {
         V = I->second;             // Placeholder already exists, use it...
-        (yyvsp[0].ValIDVal).destroy();
+        yyvsp[0].ValIDVal.destroy();
       } else {
         std::string Name;
-        if ((yyvsp[0].ValIDVal).Type == ValID::GlobalName)
-          Name = (yyvsp[0].ValIDVal).Name;
-        else if ((yyvsp[0].ValIDVal).Type != ValID::GlobalID)
+        if (yyvsp[0].ValIDVal.Type == ValID::GlobalName)
+          Name = yyvsp[0].ValIDVal.Name;
+        else if (yyvsp[0].ValIDVal.Type != ValID::GlobalID)
           GEN_ERROR("Invalid reference to global");
 
         // Create the forward referenced global.
@@ -4028,340 +3325,307 @@
         }
 
         // Keep track of the fact that we have a forward ref to recycle it
-        CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[0].ValIDVal)), GV));
+        CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, yyvsp[0].ValIDVal), GV));
         V = GV;
       }
     }
 
-    (yyval.ConstVal) = cast<GlobalValue>(V);
-    delete (yyvsp[-1].TypeVal);            // Free the type handle
+    yyval.ConstVal = cast<GlobalValue>(V);
+    delete yyvsp[-1].TypeVal;            // Free the type handle
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 154:
-#line 1749 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 153:
+#line 1749 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    if ((yyvsp[-1].TypeVal)->get() != (yyvsp[0].ConstVal)->getType())
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    if (yyvsp[-1].TypeVal->get() != yyvsp[0].ConstVal->getType())
       GEN_ERROR("Mismatched types for constant expression: " + 
-        (*(yyvsp[-1].TypeVal))->getDescription() + " and " + (yyvsp[0].ConstVal)->getType()->getDescription());
-    (yyval.ConstVal) = (yyvsp[0].ConstVal);
-    delete (yyvsp[-1].TypeVal);
+        (*yyvsp[-1].TypeVal)->getDescription() + " and " + yyvsp[0].ConstVal->getType()->getDescription());
+    yyval.ConstVal = yyvsp[0].ConstVal;
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 155:
-#line 1759 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 154:
+#line 1759 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    const Type *Ty = (yyvsp[-1].TypeVal)->get();
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    const Type *Ty = yyvsp[-1].TypeVal->get();
     if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
       GEN_ERROR("Cannot create a null initialized value of this type");
-    (yyval.ConstVal) = Constant::getNullValue(Ty);
-    delete (yyvsp[-1].TypeVal);
+    yyval.ConstVal = Constant::getNullValue(Ty);
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 156:
-#line 1769 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {      // integral constants
-    if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
+  ;
+    break;}
+case 155:
+#line 1769 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{      // integral constants
+    if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].SInt64Val))
       GEN_ERROR("Constant value doesn't fit in type");
-    (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val), true);
+    yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].SInt64Val, true);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 157:
-#line 1775 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {      // arbitrary precision integer constants
-    uint32_t BitWidth = cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth();
-    if ((yyvsp[0].APIntVal)->getBitWidth() > BitWidth) {
+  ;
+    break;}
+case 156:
+#line 1775 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{      // arbitrary precision integer constants
+    uint32_t BitWidth = cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth();
+    if (yyvsp[0].APIntVal->getBitWidth() > BitWidth) {
       GEN_ERROR("Constant value does not fit in type");
     }
-    (yyvsp[0].APIntVal)->sextOrTrunc(BitWidth);
-    (yyval.ConstVal) = ConstantInt::get(*(yyvsp[0].APIntVal));
-    delete (yyvsp[0].APIntVal);
+    yyvsp[0].APIntVal->sextOrTrunc(BitWidth);
+    yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal);
+    delete yyvsp[0].APIntVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 158:
-#line 1785 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {      // integral constants
-    if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
+  ;
+    break;}
+case 157:
+#line 1785 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{      // integral constants
+    if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].UInt64Val))
       GEN_ERROR("Constant value doesn't fit in type");
-    (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val), false);
+    yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].UInt64Val, false);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 159:
-#line 1791 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {      // arbitrary precision integer constants
-    uint32_t BitWidth = cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth();
-    if ((yyvsp[0].APIntVal)->getBitWidth() > BitWidth) {
+  ;
+    break;}
+case 158:
+#line 1791 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{      // arbitrary precision integer constants
+    uint32_t BitWidth = cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth();
+    if (yyvsp[0].APIntVal->getBitWidth() > BitWidth) {
       GEN_ERROR("Constant value does not fit in type");
     } 
-    (yyvsp[0].APIntVal)->zextOrTrunc(BitWidth);
-    (yyval.ConstVal) = ConstantInt::get(*(yyvsp[0].APIntVal));
-    delete (yyvsp[0].APIntVal);
+    yyvsp[0].APIntVal->zextOrTrunc(BitWidth);
+    yyval.ConstVal = ConstantInt::get(*yyvsp[0].APIntVal);
+    delete yyvsp[0].APIntVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 160:
-#line 1801 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {                      // Boolean constants
-    assert(cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth() == 1 && "Not Bool?");
-    (yyval.ConstVal) = ConstantInt::getTrue();
+  ;
+    break;}
+case 159:
+#line 1801 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                      // Boolean constants
+    assert(cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?");
+    yyval.ConstVal = ConstantInt::getTrue();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 161:
-#line 1806 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {                     // Boolean constants
-    assert(cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth() == 1 && "Not Bool?");
-    (yyval.ConstVal) = ConstantInt::getFalse();
+  ;
+    break;}
+case 160:
+#line 1806 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                     // Boolean constants
+    assert(cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?");
+    yyval.ConstVal = ConstantInt::getFalse();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 162:
-#line 1811 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {                   // Float & Double constants
-    if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
+  ;
+    break;}
+case 161:
+#line 1811 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                   // Float & Double constants
+    if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].FPVal))
       GEN_ERROR("Floating point constant invalid for type");
-    (yyval.ConstVal) = ConstantFP::get((yyvsp[-1].PrimType), (yyvsp[0].FPVal));
+    yyval.ConstVal = ConstantFP::get(yyvsp[-1].PrimType, yyvsp[0].FPVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 163:
-#line 1819 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 162:
+#line 1819 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    Constant *Val = (yyvsp[-3].ConstVal);
-    const Type *DestTy = (yyvsp[-1].TypeVal)->get();
-    if (!CastInst::castIsValid((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy))
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    Constant *Val = yyvsp[-3].ConstVal;
+    const Type *DestTy = yyvsp[-1].TypeVal->get();
+    if (!CastInst::castIsValid(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy))
       GEN_ERROR("invalid cast opcode for cast from '" +
                 Val->getType()->getDescription() + "' to '" +
                 DestTy->getDescription() + "'"); 
-    (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy);
-    delete (yyvsp[-1].TypeVal);
-  ;}
-    break;
-
-  case 164:
-#line 1831 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
+    yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy);
+    delete yyvsp[-1].TypeVal;
+  ;
+    break;}
+case 163:
+#line 1831 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (!isa<PointerType>(yyvsp[-2].ConstVal->getType()))
       GEN_ERROR("GetElementPtr requires a pointer operand");
 
     const Type *IdxTy =
-      GetElementPtrInst::getIndexedType((yyvsp[-2].ConstVal)->getType(), &(*(yyvsp[-1].ValueList))[0], (yyvsp[-1].ValueList)->size(),
+      GetElementPtrInst::getIndexedType(yyvsp[-2].ConstVal->getType(), &(*yyvsp[-1].ValueList)[0], yyvsp[-1].ValueList->size(),
                                         true);
     if (!IdxTy)
       GEN_ERROR("Index list invalid for constant getelementptr");
 
     SmallVector<Constant*, 8> IdxVec;
-    for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e; ++i)
-      if (Constant *C = dyn_cast<Constant>((*(yyvsp[-1].ValueList))[i]))
+    for (unsigned i = 0, e = yyvsp[-1].ValueList->size(); i != e; ++i)
+      if (Constant *C = dyn_cast<Constant>((*yyvsp[-1].ValueList)[i]))
         IdxVec.push_back(C);
       else
         GEN_ERROR("Indices to constant getelementptr must be constants");
 
-    delete (yyvsp[-1].ValueList);
+    delete yyvsp[-1].ValueList;
 
-    (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), &IdxVec[0], IdxVec.size());
+    yyval.ConstVal = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal, &IdxVec[0], IdxVec.size());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 165:
-#line 1853 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-5].ConstVal)->getType() != Type::Int1Ty)
+  ;
+    break;}
+case 164:
+#line 1853 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-5].ConstVal->getType() != Type::Int1Ty)
       GEN_ERROR("Select condition must be of boolean type");
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
       GEN_ERROR("Select operand types must match");
-    (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    yyval.ConstVal = ConstantExpr::getSelect(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 166:
-#line 1861 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+  ;
+    break;}
+case 165:
+#line 1861 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
       GEN_ERROR("Binary operator types must match");
     CHECK_FOR_ERROR;
-    (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
-  ;}
-    break;
-
-  case 167:
-#line 1867 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+    yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+  ;
+    break;}
+case 166:
+#line 1867 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
       GEN_ERROR("Logical operator types must match");
-    if (!(yyvsp[-3].ConstVal)->getType()->isInteger()) {
-      if (Instruction::isShift((yyvsp[-5].BinaryOpVal)) || !isa<VectorType>((yyvsp[-3].ConstVal)->getType()) || 
-          !cast<VectorType>((yyvsp[-3].ConstVal)->getType())->getElementType()->isInteger())
+    if (!yyvsp[-3].ConstVal->getType()->isInteger()) {
+      if (Instruction::isShift(yyvsp[-5].BinaryOpVal) || !isa<VectorType>(yyvsp[-3].ConstVal->getType()) || 
+          !cast<VectorType>(yyvsp[-3].ConstVal->getType())->getElementType()->isInteger())
         GEN_ERROR("Logical operator requires integral operands");
     }
-    (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 168:
-#line 1878 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+  ;
+    break;}
+case 167:
+#line 1878 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
       GEN_ERROR("icmp operand types must match");
-    (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[-5].IPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
-  ;}
-    break;
-
-  case 169:
-#line 1883 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+    yyval.ConstVal = ConstantExpr::getICmp(yyvsp[-5].IPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+  ;
+    break;}
+case 168:
+#line 1883 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
       GEN_ERROR("fcmp operand types must match");
-    (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[-5].FPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
-  ;}
-    break;
-
-  case 170:
-#line 1888 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
+    yyval.ConstVal = ConstantExpr::getFCmp(yyvsp[-5].FPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
+  ;
+    break;}
+case 169:
+#line 1888 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
       GEN_ERROR("Invalid extractelement operands");
-    (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    yyval.ConstVal = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 171:
-#line 1894 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
+  ;
+    break;}
+case 170:
+#line 1894 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (!InsertElementInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
       GEN_ERROR("Invalid insertelement operands");
-    (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    yyval.ConstVal = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 172:
-#line 1900 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
+  ;
+    break;}
+case 171:
+#line 1900 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (!ShuffleVectorInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
       GEN_ERROR("Invalid shufflevector operands");
-    (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    yyval.ConstVal = ConstantExpr::getShuffleVector(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 173:
-#line 1909 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
+  ;
+    break;}
+case 172:
+#line 1909 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 174:
-#line 1913 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ConstVector) = new std::vector<Constant*>();
-    (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
+  ;
+    break;}
+case 173:
+#line 1913 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ConstVector = new std::vector<Constant*>();
+    yyval.ConstVector->push_back(yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 175:
-#line 1921 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.BoolVal) = false; ;}
-    break;
-
-  case 176:
-#line 1921 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.BoolVal) = true; ;}
-    break;
-
-  case 177:
-#line 1924 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.BoolVal) = true; ;}
-    break;
-
-  case 178:
-#line 1924 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.BoolVal) = false; ;}
-    break;
-
-  case 179:
-#line 1935 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
+  ;
+    break;}
+case 174:
+#line 1921 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.BoolVal = false; ;
+    break;}
+case 175:
+#line 1921 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.BoolVal = true; ;
+    break;}
+case 176:
+#line 1924 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.BoolVal = true; ;
+    break;}
+case 177:
+#line 1924 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.BoolVal = false; ;
+    break;}
+case 178:
+#line 1935 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
     CurModule.ModuleDone();
     CHECK_FOR_ERROR;
-  ;}
-    break;
-
-  case 180:
-#line 1940 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
+  ;
+    break;}
+case 179:
+#line 1940 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
     CurModule.ModuleDone();
     CHECK_FOR_ERROR;
-  ;}
-    break;
-
-  case 183:
-#line 1953 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { CurFun.isDeclare = false; ;}
-    break;
-
-  case 184:
-#line 1953 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 182:
+#line 1953 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ CurFun.isDeclare = false; ;
+    break;}
+case 183:
+#line 1953 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurFun.FunctionDone();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 185:
-#line 1957 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { CurFun.isDeclare = true; ;}
-    break;
-
-  case 186:
-#line 1957 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 184:
+#line 1957 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ CurFun.isDeclare = true; ;
+    break;}
+case 185:
+#line 1957 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 187:
-#line 1960 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 186:
+#line 1960 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 188:
-#line 1963 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 187:
+#line 1963 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
     // Eagerly resolve types.  This is not an optimization, this is a
     // requirement that is due to the fact that we could have this:
     //
@@ -4371,250 +3635,228 @@
     // If types are not resolved eagerly, then the two types will not be
     // determined to be the same type!
     //
-    ResolveTypeTo((yyvsp[-2].StrVal), *(yyvsp[0].TypeVal));
+    ResolveTypeTo(yyvsp[-2].StrVal, *yyvsp[0].TypeVal);
 
-    if (!setTypeName(*(yyvsp[0].TypeVal), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
+    if (!setTypeName(*yyvsp[0].TypeVal, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
       CHECK_FOR_ERROR
       // If this is a named type that is not a redefinition, add it to the slot
       // table.
-      CurModule.Types.push_back(*(yyvsp[0].TypeVal));
+      CurModule.Types.push_back(*yyvsp[0].TypeVal);
     }
 
-    delete (yyvsp[0].TypeVal);
+    delete yyvsp[0].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
+  ;
+    break;}
+case 188:
+#line 1987 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    ResolveTypeTo(yyvsp[-2].StrVal, yyvsp[0].PrimType);
 
-  case 189:
-#line 1987 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    ResolveTypeTo((yyvsp[-2].StrVal), (yyvsp[0].PrimType));
-
-    if (!setTypeName((yyvsp[0].PrimType), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
+    if (!setTypeName(yyvsp[0].PrimType, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
       CHECK_FOR_ERROR
       // If this is a named type that is not a redefinition, add it to the slot
       // table.
-      CurModule.Types.push_back((yyvsp[0].PrimType));
+      CurModule.Types.push_back(yyvsp[0].PrimType);
     }
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 190:
-#line 1998 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { 
+  ;
+    break;}
+case 189:
+#line 1998 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
     /* "Externally Visible" Linkage */
-    if ((yyvsp[0].ConstVal) == 0) 
+    if (yyvsp[0].ConstVal == 0) 
       GEN_ERROR("Global value initializer is not a constant");
-    CurGV = ParseGlobalVariable((yyvsp[-4].StrVal), GlobalValue::ExternalLinkage,
-                                (yyvsp[-3].Visibility), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal), (yyvsp[-2].BoolVal));
+    CurGV = ParseGlobalVariable(yyvsp[-4].StrVal, GlobalValue::ExternalLinkage,
+                                yyvsp[-3].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal, yyvsp[-2].BoolVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 191:
-#line 2005 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 190:
+#line 2005 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 0;
-  ;}
-    break;
-
-  case 192:
-#line 2008 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[0].ConstVal) == 0) 
+  ;
+    break;}
+case 191:
+#line 2008 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[0].ConstVal == 0) 
       GEN_ERROR("Global value initializer is not a constant");
-    CurGV = ParseGlobalVariable((yyvsp[-5].StrVal), (yyvsp[-4].Linkage), (yyvsp[-3].Visibility), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal), (yyvsp[-2].BoolVal));
+    CurGV = ParseGlobalVariable(yyvsp[-5].StrVal, yyvsp[-4].Linkage, yyvsp[-3].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal, yyvsp[-2].BoolVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 193:
-#line 2013 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 192:
+#line 2013 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 0;
-  ;}
-    break;
-
-  case 194:
-#line 2016 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 193:
+#line 2016 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
-    CurGV = ParseGlobalVariable((yyvsp[-5].StrVal), (yyvsp[-4].Linkage), (yyvsp[-3].Visibility), (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0, (yyvsp[-2].BoolVal));
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
+    CurGV = ParseGlobalVariable(yyvsp[-5].StrVal, yyvsp[-4].Linkage, yyvsp[-3].Visibility, yyvsp[-1].BoolVal, *yyvsp[0].TypeVal, 0, yyvsp[-2].BoolVal);
     CHECK_FOR_ERROR
-    delete (yyvsp[0].TypeVal);
-  ;}
-    break;
-
-  case 195:
-#line 2022 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[0].TypeVal;
+  ;
+    break;}
+case 194:
+#line 2022 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CurGV = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 196:
-#line 2026 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { 
+  ;
+    break;}
+case 195:
+#line 2026 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ 
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 197:
-#line 2029 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 196:
+#line 2029 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 198:
-#line 2035 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 197:
+#line 2035 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
   const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
-  char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
-  std::string NewAsm((yyvsp[0].StrVal), EndStr);
-  free((yyvsp[0].StrVal));
+  char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
+  std::string NewAsm(yyvsp[0].StrVal, EndStr);
+  free(yyvsp[0].StrVal);
 
   if (AsmSoFar.empty())
     CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
   else
     CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 199:
-#line 2048 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
-    free((yyvsp[0].StrVal));
-  ;}
-    break;
-
-  case 200:
-#line 2052 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
-    free((yyvsp[0].StrVal));
-  ;}
-    break;
-
-  case 202:
-#line 2059 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
-          free((yyvsp[0].StrVal));
+;
+    break;}
+case 198:
+#line 2048 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal);
+    free(yyvsp[0].StrVal);
+  ;
+    break;}
+case 199:
+#line 2052 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurModule.CurrentModule->setDataLayout(yyvsp[0].StrVal);
+    free(yyvsp[0].StrVal);
+  ;
+    break;}
+case 201:
+#line 2059 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+          CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
+          free(yyvsp[0].StrVal);
           CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 203:
-#line 2064 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
-          free((yyvsp[0].StrVal));
+        ;
+    break;}
+case 202:
+#line 2064 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+          CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
+          free(yyvsp[0].StrVal);
           CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 204:
-#line 2069 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+        ;
+    break;}
+case 203:
+#line 2069 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
           CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 205:
-#line 2078 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+        ;
+    break;}
+case 204:
+#line 2078 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
-    if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    if (*yyvsp[-2].TypeVal == Type::VoidTy)
       GEN_ERROR("void typed arguments are invalid");
-    ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
-    (yyval.ArgList) = (yyvsp[-4].ArgList);
-    (yyvsp[-4].ArgList)->push_back(E);
+    ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal;
+    yyval.ArgList = yyvsp[-4].ArgList;
+    yyvsp[-4].ArgList->push_back(E);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 206:
-#line 2088 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 205:
+#line 2088 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
-    if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    if (*yyvsp[-2].TypeVal == Type::VoidTy)
       GEN_ERROR("void typed arguments are invalid");
-    ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
-    (yyval.ArgList) = new ArgListType;
-    (yyval.ArgList)->push_back(E);
+    ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal;
+    yyval.ArgList = new ArgListType;
+    yyval.ArgList->push_back(E);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 207:
-#line 2099 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = (yyvsp[0].ArgList);
+  ;
+    break;}
+case 206:
+#line 2099 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = yyvsp[0].ArgList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 208:
-#line 2103 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = (yyvsp[-2].ArgList);
+  ;
+    break;}
+case 207:
+#line 2103 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = yyvsp[-2].ArgList;
     struct ArgListEntry E;
     E.Ty = new PATypeHolder(Type::VoidTy);
     E.Name = 0;
     E.Attrs = ParamAttr::None;
-    (yyval.ArgList)->push_back(E);
+    yyval.ArgList->push_back(E);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 209:
-#line 2112 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = new ArgListType;
+  ;
+    break;}
+case 208:
+#line 2112 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = new ArgListType;
     struct ArgListEntry E;
     E.Ty = new PATypeHolder(Type::VoidTy);
     E.Name = 0;
     E.Attrs = ParamAttr::None;
-    (yyval.ArgList)->push_back(E);
+    yyval.ArgList->push_back(E);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 210:
-#line 2121 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ArgList) = 0;
+  ;
+    break;}
+case 209:
+#line 2121 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ArgList = 0;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 211:
-#line 2127 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-  UnEscapeLexed((yyvsp[-6].StrVal));
-  std::string FunctionName((yyvsp[-6].StrVal));
-  free((yyvsp[-6].StrVal));  // Free strdup'd memory!
+  ;
+    break;}
+case 210:
+#line 2127 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  UnEscapeLexed(yyvsp[-6].StrVal);
+  std::string FunctionName(yyvsp[-6].StrVal);
+  free(yyvsp[-6].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[-7].TypeVal)))
-    GEN_ERROR("Reference to abstract result: "+ (yyvsp[-7].TypeVal)->get()->getDescription());
+  if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(yyvsp[-7].TypeVal))
+    GEN_ERROR("Reference to abstract result: "+ yyvsp[-7].TypeVal->get()->getDescription());
 
   std::vector<const Type*> ParamTypeList;
   ParamAttrsList ParamAttrs;
-  if ((yyvsp[-2].ParamAttrs) != ParamAttr::None)
-    ParamAttrs.addAttributes(0, (yyvsp[-2].ParamAttrs));
-  if ((yyvsp[-4].ArgList)) {   // If there are arguments...
+  if (yyvsp[-2].ParamAttrs != ParamAttr::None)
+    ParamAttrs.addAttributes(0, yyvsp[-2].ParamAttrs);
+  if (yyvsp[-4].ArgList) {   // If there are arguments...
     unsigned index = 1;
-    for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin(); I != (yyvsp[-4].ArgList)->end(); ++I, ++index) {
+    for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); I != yyvsp[-4].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());
@@ -4632,10 +3874,10 @@
   if (!ParamAttrs.empty())
     ActualAttrs = new ParamAttrsList(ParamAttrs);
 
-  FunctionType *FT = FunctionType::get(*(yyvsp[-7].TypeVal), ParamTypeList, isVarArg, 
+  FunctionType *FT = FunctionType::get(*yyvsp[-7].TypeVal, ParamTypeList, isVarArg, 
                                        ActualAttrs);
   const PointerType *PFT = PointerType::get(FT);
-  delete (yyvsp[-7].TypeVal);
+  delete yyvsp[-7].TypeVal;
 
   ValID ID;
   if (!FunctionName.empty()) {
@@ -4684,26 +3926,26 @@
     Fn->setLinkage(CurFun.Linkage);
     Fn->setVisibility(CurFun.Visibility);
   }
-  Fn->setCallingConv((yyvsp[-8].UIntVal));
-  Fn->setAlignment((yyvsp[0].UIntVal));
-  if ((yyvsp[-1].StrVal)) {
-    Fn->setSection((yyvsp[-1].StrVal));
-    free((yyvsp[-1].StrVal));
+  Fn->setCallingConv(yyvsp[-8].UIntVal);
+  Fn->setAlignment(yyvsp[0].UIntVal);
+  if (yyvsp[-1].StrVal) {
+    Fn->setSection(yyvsp[-1].StrVal);
+    free(yyvsp[-1].StrVal);
   }
 
   // Add all of the arguments we parsed to the function...
-  if ((yyvsp[-4].ArgList)) {                     // Is null if empty...
+  if (yyvsp[-4].ArgList) {                     // Is null if empty...
     if (isVarArg) {  // Nuke the last entry
-      assert((yyvsp[-4].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[-4].ArgList)->back().Name == 0 &&
+      assert(yyvsp[-4].ArgList->back().Ty->get() == Type::VoidTy && yyvsp[-4].ArgList->back().Name == 0 &&
              "Not a varargs marker!");
-      delete (yyvsp[-4].ArgList)->back().Ty;
-      (yyvsp[-4].ArgList)->pop_back();  // Delete the last entry
+      delete yyvsp[-4].ArgList->back().Ty;
+      yyvsp[-4].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[-4].ArgList)->begin(); 
-         I != (yyvsp[-4].ArgList)->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
+    for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); 
+         I != yyvsp[-4].ArgList->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
       delete I->Ty;                          // Delete the typeholder...
       setValueName(ArgIt, I->Name);          // Insert arg into symtab...
       CHECK_FOR_ERROR
@@ -4711,128 +3953,114 @@
       Idx++;
     }
 
-    delete (yyvsp[-4].ArgList);                     // We're now done with the argument list
+    delete yyvsp[-4].ArgList;                     // We're now done with the argument list
   }
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 214:
-#line 2247 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.FunctionVal) = CurFun.CurrentFunction;
+;
+    break;}
+case 213:
+#line 2247 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  yyval.FunctionVal = CurFun.CurrentFunction;
 
   // Make sure that we keep track of the linkage type even if there was a
   // previous "declare".
-  (yyval.FunctionVal)->setLinkage((yyvsp[-3].Linkage));
-  (yyval.FunctionVal)->setVisibility((yyvsp[-2].Visibility));
-;}
-    break;
-
-  case 217:
-#line 2258 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
+  yyval.FunctionVal->setLinkage(yyvsp[-3].Linkage);
+  yyval.FunctionVal->setVisibility(yyvsp[-2].Visibility);
+;
+    break;}
+case 216:
+#line 2258 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+  yyval.FunctionVal = yyvsp[-1].FunctionVal;
   CHECK_FOR_ERROR
-;}
-    break;
-
-  case 218:
-#line 2263 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    CurFun.CurrentFunction->setLinkage((yyvsp[-2].Linkage));
-    CurFun.CurrentFunction->setVisibility((yyvsp[-1].Visibility));
-    (yyval.FunctionVal) = CurFun.CurrentFunction;
+;
+    break;}
+case 217:
+#line 2263 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    CurFun.CurrentFunction->setLinkage(yyvsp[-2].Linkage);
+    CurFun.CurrentFunction->setVisibility(yyvsp[-1].Visibility);
+    yyval.FunctionVal = CurFun.CurrentFunction;
     CurFun.FunctionDone();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 219:
-#line 2275 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = false;
+  ;
+    break;}
+case 218:
+#line 2275 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = false;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 220:
-#line 2279 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = true;
+  ;
+    break;}
+case 219:
+#line 2279 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = true;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 221:
-#line 2284 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {    // A reference to a direct constant
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
+  ;
+    break;}
+case 220:
+#line 2284 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{    // A reference to a direct constant
+    yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 222:
-#line 2288 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
+  ;
+    break;}
+case 221:
+#line 2288 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 223:
-#line 2292 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {                     // Perhaps it's an FP constant?
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
+  ;
+    break;}
+case 222:
+#line 2292 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                     // Perhaps it's an FP constant?
+    yyval.ValIDVal = ValID::create(yyvsp[0].FPVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 224:
-#line 2296 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue());
+  ;
+    break;}
+case 223:
+#line 2296 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(ConstantInt::getTrue());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 225:
-#line 2300 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse());
+  ;
+    break;}
+case 224:
+#line 2300 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(ConstantInt::getFalse());
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 226:
-#line 2304 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::createNull();
+  ;
+    break;}
+case 225:
+#line 2304 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::createNull();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 227:
-#line 2308 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::createUndef();
+  ;
+    break;}
+case 226:
+#line 2308 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::createUndef();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 228:
-#line 2312 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {     // A vector zero constant.
-    (yyval.ValIDVal) = ValID::createZeroInit();
+  ;
+    break;}
+case 227:
+#line 2312 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{     // A vector zero constant.
+    yyval.ValIDVal = ValID::createZeroInit();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 229:
-#line 2316 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { // Nonempty unsized packed vector
-    const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
-    int NumElements = (yyvsp[-1].ConstVector)->size(); 
+  ;
+    break;}
+case 228:
+#line 2316 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ // Nonempty unsized packed vector
+    const Type *ETy = (*yyvsp[-1].ConstVector)[0]->getType();
+    int NumElements = yyvsp[-1].ConstVector->size(); 
     
     VectorType* pt = VectorType::get(ETy, NumElements);
     PATypeHolder* PTy = new PATypeHolder(
@@ -4844,231 +4072,211 @@
                                          );
     
     // Verify all elements are correct type!
-    for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
-      if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
+    for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
+      if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
                      ETy->getDescription() +"' as required!\nIt is of type '" +
-                     (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
+                     (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
     }
 
-    (yyval.ValIDVal) = ValID::create(ConstantVector::get(pt, *(yyvsp[-1].ConstVector)));
-    delete PTy; delete (yyvsp[-1].ConstVector);
+    yyval.ValIDVal = ValID::create(ConstantVector::get(pt, *yyvsp[-1].ConstVector));
+    delete PTy; delete yyvsp[-1].ConstVector;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 230:
-#line 2341 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
+  ;
+    break;}
+case 229:
+#line 2341 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 231:
-#line 2345 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
-    std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
-    End = UnEscapeLexed((yyvsp[0].StrVal), true);
-    std::string Constraints = std::string((yyvsp[0].StrVal), End);
-    (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[-3].BoolVal));
-    free((yyvsp[-2].StrVal));
-    free((yyvsp[0].StrVal));
+  ;
+    break;}
+case 230:
+#line 2345 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    char *End = UnEscapeLexed(yyvsp[-2].StrVal, true);
+    std::string AsmStr = std::string(yyvsp[-2].StrVal, End);
+    End = UnEscapeLexed(yyvsp[0].StrVal, true);
+    std::string Constraints = std::string(yyvsp[0].StrVal, End);
+    yyval.ValIDVal = ValID::createInlineAsm(AsmStr, Constraints, yyvsp[-3].BoolVal);
+    free(yyvsp[-2].StrVal);
+    free(yyvsp[0].StrVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 232:
-#line 2359 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {  // Is it an integer reference...?
-    (yyval.ValIDVal) = ValID::createLocalID((yyvsp[0].UIntVal));
+  ;
+    break;}
+case 231:
+#line 2359 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{  // Is it an integer reference...?
+    yyval.ValIDVal = ValID::createLocalID(yyvsp[0].UIntVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 233:
-#line 2363 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValIDVal) = ValID::createGlobalID((yyvsp[0].UIntVal));
+  ;
+    break;}
+case 232:
+#line 2363 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValIDVal = ValID::createGlobalID(yyvsp[0].UIntVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 234:
-#line 2367 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {                   // Is it a named reference...?
-    (yyval.ValIDVal) = ValID::createLocalName((yyvsp[0].StrVal));
+  ;
+    break;}
+case 233:
+#line 2367 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                   // Is it a named reference...?
+    yyval.ValIDVal = ValID::createLocalName(yyvsp[0].StrVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 235:
-#line 2371 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {                   // Is it a named reference...?
-    (yyval.ValIDVal) = ValID::createGlobalName((yyvsp[0].StrVal));
+  ;
+    break;}
+case 234:
+#line 2371 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                   // Is it a named reference...?
+    yyval.ValIDVal = ValID::createGlobalName(yyvsp[0].StrVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 238:
-#line 2383 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 237:
+#line 2383 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    (yyval.ValueVal) = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal)); 
-    delete (yyvsp[-1].TypeVal);
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    yyval.ValueVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal); 
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 239:
-#line 2392 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
+  ;
+    break;}
+case 238:
+#line 2392 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.FunctionVal = yyvsp[-1].FunctionVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 240:
-#line 2396 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { // Do not allow functions with 0 basic blocks   
-    (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
+  ;
+    break;}
+case 239:
+#line 2396 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ // Do not allow functions with 0 basic blocks   
+    yyval.FunctionVal = yyvsp[-1].FunctionVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 241:
-#line 2405 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
+  ;
+    break;}
+case 240:
+#line 2405 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal);
     CHECK_FOR_ERROR
-    InsertValue((yyvsp[0].TermInstVal));
-    (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal));
-    (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal);
+    InsertValue(yyvsp[0].TermInstVal);
+    yyvsp[-2].BasicBlockVal->getInstList().push_back(yyvsp[0].TermInstVal);
+    yyval.BasicBlockVal = yyvsp[-2].BasicBlockVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 242:
-#line 2414 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[0].InstVal)))
+  ;
+    break;}
+case 241:
+#line 2414 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (CastInst *CI1 = dyn_cast<CastInst>(yyvsp[0].InstVal))
       if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
         if (CI2->getParent() == 0)
-          (yyvsp[-1].BasicBlockVal)->getInstList().push_back(CI2);
-    (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
-    (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
+          yyvsp[-1].BasicBlockVal->getInstList().push_back(CI2);
+    yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal);
+    yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
+  ;
+    break;}
+case 242:
+#line 2423 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{          // Empty space between instruction lists
+    yyval.BasicBlockVal = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
+    CHECK_FOR_ERROR
+  ;
+    break;}
+case 243:
+#line 2427 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{             // Labelled (named) basic block
+    yyval.BasicBlockVal = defineBBVal(ValID::createLocalName(yyvsp[0].StrVal));
+    CHECK_FOR_ERROR
+  ;
+    break;}
+case 244:
+#line 2432 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{              // Return with a result...
+    yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal);
+    CHECK_FOR_ERROR
+  ;
+    break;}
+case 245:
+#line 2436 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                                    // Return with no result...
+    yyval.TermInstVal = new ReturnInst();
+    CHECK_FOR_ERROR
+  ;
+    break;}
+case 246:
+#line 2440 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{                           // Unconditional Branch...
+    BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
+    CHECK_FOR_ERROR
+    yyval.TermInstVal = new BranchInst(tmpBB);
+  ;
+    break;}
+case 247:
+#line 2445 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{  
+    assert(cast<IntegerType>(yyvsp[-7].PrimType)->getBitWidth() == 1 && "Not Bool?");
+    BasicBlock* tmpBBA = getBBVal(yyvsp[-3].ValIDVal);
+    CHECK_FOR_ERROR
+    BasicBlock* tmpBBB = getBBVal(yyvsp[0].ValIDVal);
+    CHECK_FOR_ERROR
+    Value* tmpVal = getVal(Type::Int1Ty, yyvsp[-6].ValIDVal);
+    CHECK_FOR_ERROR
+    yyval.TermInstVal = new BranchInst(tmpBBA, tmpBBB, tmpVal);
+  ;
+    break;}
+case 248:
+#line 2455 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    Value* tmpVal = getVal(yyvsp[-7].PrimType, yyvsp[-6].ValIDVal);
+    CHECK_FOR_ERROR
+    BasicBlock* tmpBB = getBBVal(yyvsp[-3].ValIDVal);
+    CHECK_FOR_ERROR
+    SwitchInst *S = new SwitchInst(tmpVal, tmpBB, yyvsp[-1].JumpTable->size());
+    yyval.TermInstVal = S;
 
-  case 243:
-#line 2423 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {          // Empty space between instruction lists
-    (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
-    CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 244:
-#line 2427 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {             // Labelled (named) basic block
-    (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalName((yyvsp[0].StrVal)));
-    CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 245:
-#line 2432 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {              // Return with a result...
-    (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
-    CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 246:
-#line 2436 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {                                    // Return with no result...
-    (yyval.TermInstVal) = new ReturnInst();
-    CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 247:
-#line 2440 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {                           // Unconditional Branch...
-    BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
-    CHECK_FOR_ERROR
-    (yyval.TermInstVal) = new BranchInst(tmpBB);
-  ;}
-    break;
-
-  case 248:
-#line 2445 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {  
-    assert(cast<IntegerType>((yyvsp[-7].PrimType))->getBitWidth() == 1 && "Not Bool?");
-    BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
-    CHECK_FOR_ERROR
-    BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal));
-    CHECK_FOR_ERROR
-    Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[-6].ValIDVal));
-    CHECK_FOR_ERROR
-    (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
-  ;}
-    break;
-
-  case 249:
-#line 2455 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    Value* tmpVal = getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal));
-    CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal));
-    CHECK_FOR_ERROR
-    SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[-1].JumpTable)->size());
-    (yyval.TermInstVal) = S;
-
-    std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[-1].JumpTable)->begin(),
-      E = (yyvsp[-1].JumpTable)->end();
+    std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = yyvsp[-1].JumpTable->begin(),
+      E = yyvsp[-1].JumpTable->end();
     for (; I != E; ++I) {
       if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
           S->addCase(CI, I->second);
       else
         GEN_ERROR("Switch case is constant, but not a simple integer");
     }
-    delete (yyvsp[-1].JumpTable);
+    delete yyvsp[-1].JumpTable;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 250:
-#line 2474 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal));
+  ;
+    break;}
+case 249:
+#line 2474 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    Value* tmpVal = getVal(yyvsp[-6].PrimType, yyvsp[-5].ValIDVal);
     CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal));
+    BasicBlock* tmpBB = getBBVal(yyvsp[-2].ValIDVal);
     CHECK_FOR_ERROR
     SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
-    (yyval.TermInstVal) = S;
+    yyval.TermInstVal = S;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 251:
-#line 2484 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 250:
+#line 2484 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
 
     // Handle the short syntax
     const PointerType *PFTy = 0;
     const FunctionType *Ty = 0;
-    if (!(PFTy = dyn_cast<PointerType>((yyvsp[-11].TypeVal)->get())) ||
+    if (!(PFTy = dyn_cast<PointerType>(yyvsp[-11].TypeVal->get())) ||
         !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
       // Pull out the types of all of the arguments...
       std::vector<const Type*> ParamTypes;
       ParamAttrsList ParamAttrs;
-      if ((yyvsp[-6].ParamAttrs) != ParamAttr::None)
-        ParamAttrs.addAttributes(0, (yyvsp[-6].ParamAttrs));
-      ValueRefList::iterator I = (yyvsp[-8].ValueRefList)->begin(), E = (yyvsp[-8].ValueRefList)->end();
+      if (yyvsp[-6].ParamAttrs != ParamAttr::None)
+        ParamAttrs.addAttributes(0, yyvsp[-6].ParamAttrs);
+      ValueRefList::iterator I = yyvsp[-8].ValueRefList->begin(), E = yyvsp[-8].ValueRefList->end();
       unsigned index = 1;
       for (; I != E; ++I, ++index) {
         const Type *Ty = I->Val->getType();
@@ -5082,22 +4290,22 @@
       ParamAttrsList *Attrs = 0;
       if (!ParamAttrs.empty())
         Attrs = new ParamAttrsList(ParamAttrs);
-      Ty = FunctionType::get((yyvsp[-11].TypeVal)->get(), ParamTypes, false, Attrs);
+      Ty = FunctionType::get(yyvsp[-11].TypeVal->get(), ParamTypes, false, Attrs);
       PFTy = PointerType::get(Ty);
     }
 
-    delete (yyvsp[-11].TypeVal);
+    delete yyvsp[-11].TypeVal;
 
-    Value *V = getVal(PFTy, (yyvsp[-10].ValIDVal));   // Get the function we're calling...
+    Value *V = getVal(PFTy, yyvsp[-10].ValIDVal);   // Get the function we're calling...
     CHECK_FOR_ERROR
-    BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal));
+    BasicBlock *Normal = getBBVal(yyvsp[-3].ValIDVal);
     CHECK_FOR_ERROR
-    BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal));
+    BasicBlock *Except = getBBVal(yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
 
     // Check the arguments
     ValueList Args;
-    if ((yyvsp[-8].ValueRefList)->empty()) {                                   // Has no arguments?
+    if (yyvsp[-8].ValueRefList->empty()) {                                   // Has no arguments?
       // Make sure no arguments is a good thing!
       if (Ty->getNumParams() != 0)
         GEN_ERROR("No arguments passed to a function that "
@@ -5107,7 +4315,7 @@
       // correctly!
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      ValueRefList::iterator ArgI = (yyvsp[-8].ValueRefList)->begin(), ArgE = (yyvsp[-8].ValueRefList)->end();
+      ValueRefList::iterator ArgI = yyvsp[-8].ValueRefList->begin(), ArgE = yyvsp[-8].ValueRefList->end();
 
       for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
         if (ArgI->Val->getType() != *I)
@@ -5126,346 +4334,320 @@
 
     // Create the InvokeInst
     InvokeInst *II = new InvokeInst(V, Normal, Except, &Args[0], Args.size());
-    II->setCallingConv((yyvsp[-12].UIntVal));
-    (yyval.TermInstVal) = II;
-    delete (yyvsp[-8].ValueRefList);
+    II->setCallingConv(yyvsp[-12].UIntVal);
+    yyval.TermInstVal = II;
+    delete yyvsp[-8].ValueRefList;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 252:
-#line 2559 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TermInstVal) = new UnwindInst();
+  ;
+    break;}
+case 251:
+#line 2559 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TermInstVal = new UnwindInst();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 253:
-#line 2563 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.TermInstVal) = new UnreachableInst();
+  ;
+    break;}
+case 252:
+#line 2563 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.TermInstVal = new UnreachableInst();
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 254:
-#line 2570 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.JumpTable) = (yyvsp[-5].JumpTable);
-    Constant *V = cast<Constant>(getExistingVal((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
+  ;
+    break;}
+case 253:
+#line 2570 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.JumpTable = yyvsp[-5].JumpTable;
+    Constant *V = cast<Constant>(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
     CHECK_FOR_ERROR
     if (V == 0)
       GEN_ERROR("May only switch on a constant pool value");
 
-    BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
+    BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
-  ;}
-    break;
-
-  case 255:
-#line 2581 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
-    Constant *V = cast<Constant>(getExistingVal((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
+    yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
+  ;
+    break;}
+case 254:
+#line 2581 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.JumpTable = new std::vector<std::pair<Constant*, BasicBlock*> >();
+    Constant *V = cast<Constant>(getExistingVal(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
     CHECK_FOR_ERROR
 
     if (V == 0)
       GEN_ERROR("May only switch on a constant pool value");
 
-    BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
+    BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB)); 
-  ;}
-    break;
-
-  case 256:
-#line 2594 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.JumpTable->push_back(std::make_pair(V, tmpBB)); 
+  ;
+    break;}
+case 255:
+#line 2594 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     // Is this definition named?? if so, assign the name...
-    setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
+    setValueName(yyvsp[0].InstVal, yyvsp[-1].StrVal);
     CHECK_FOR_ERROR
-    InsertValue((yyvsp[0].InstVal));
-    (yyval.InstVal) = (yyvsp[0].InstVal);
+    InsertValue(yyvsp[0].InstVal);
+    yyval.InstVal = yyvsp[0].InstVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 257:
-#line 2604 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {    // Used for PHI nodes
+  ;
+    break;}
+case 256:
+#line 2604 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{    // Used for PHI nodes
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-5].TypeVal))->getDescription());
-    (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
-    Value* tmpVal = getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal));
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-5].TypeVal)->getDescription());
+    yyval.PHIList = new std::list<std::pair<Value*, BasicBlock*> >();
+    Value* tmpVal = getVal(*yyvsp[-5].TypeVal, yyvsp[-3].ValIDVal);
     CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
+    BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
-    delete (yyvsp[-5].TypeVal);
-  ;}
-    break;
-
-  case 258:
-#line 2615 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.PHIList) = (yyvsp[-6].PHIList);
-    Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
+    yyval.PHIList->push_back(std::make_pair(tmpVal, tmpBB));
+    delete yyvsp[-5].TypeVal;
+  ;
+    break;}
+case 257:
+#line 2615 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.PHIList = yyvsp[-6].PHIList;
+    Value* tmpVal = getVal(yyvsp[-6].PHIList->front().first->getType(), yyvsp[-3].ValIDVal);
     CHECK_FOR_ERROR
-    BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
+    BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
     CHECK_FOR_ERROR
-    (yyvsp[-6].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
-  ;}
-    break;
-
-  case 259:
-#line 2625 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {    
+    yyvsp[-6].PHIList->push_back(std::make_pair(tmpVal, tmpBB));
+  ;
+    break;}
+case 258:
+#line 2625 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{    
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
     // Used for call and invoke instructions
-    (yyval.ValueRefList) = new ValueRefList();
-    ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
-    (yyval.ValueRefList)->push_back(E);
-    delete (yyvsp[-2].TypeVal);
-  ;}
-    break;
-
-  case 260:
-#line 2634 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.ValueRefList = new ValueRefList();
+    ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
+    yyval.ValueRefList->push_back(E);
+    delete yyvsp[-2].TypeVal;
+  ;
+    break;}
+case 259:
+#line 2634 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
-    (yyval.ValueRefList) = (yyvsp[-4].ValueRefList);
-    ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
-    (yyval.ValueRefList)->push_back(E);
-    delete (yyvsp[-2].TypeVal);
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    yyval.ValueRefList = yyvsp[-4].ValueRefList;
+    ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
+    yyval.ValueRefList->push_back(E);
+    delete yyvsp[-2].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 261:
-#line 2643 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ValueRefList) = new ValueRefList(); ;}
-    break;
-
-  case 262:
-#line 2646 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ValueList) = new std::vector<Value*>(); ;}
-    break;
-
-  case 263:
-#line 2647 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.ValueList) = (yyvsp[-2].ValueList);
-    (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
+  ;
+    break;}
+case 260:
+#line 2643 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ValueRefList = new ValueRefList(); ;
+    break;}
+case 261:
+#line 2646 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{ yyval.ValueList = new std::vector<Value*>(); ;
+    break;}
+case 262:
+#line 2647 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.ValueList = yyvsp[-2].ValueList;
+    yyval.ValueList->push_back(yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 264:
-#line 2654 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = true;
+  ;
+    break;}
+case 263:
+#line 2654 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = true;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 265:
-#line 2658 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = false;
+  ;
+    break;}
+case 264:
+#line 2658 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = false;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 266:
-#line 2663 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 265:
+#line 2663 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
-    if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() && 
-        !isa<VectorType>((*(yyvsp[-3].TypeVal)).get()))
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
+    if (!(*yyvsp[-3].TypeVal)->isInteger() && !(*yyvsp[-3].TypeVal)->isFloatingPoint() && 
+        !isa<VectorType>((*yyvsp[-3].TypeVal).get()))
       GEN_ERROR(
         "Arithmetic operator requires integer, FP, or packed operands");
-    if (isa<VectorType>((*(yyvsp[-3].TypeVal)).get()) && 
-        ((yyvsp[-4].BinaryOpVal) == Instruction::URem || 
-         (yyvsp[-4].BinaryOpVal) == Instruction::SRem ||
-         (yyvsp[-4].BinaryOpVal) == Instruction::FRem))
+    if (isa<VectorType>((*yyvsp[-3].TypeVal).get()) && 
+        (yyvsp[-4].BinaryOpVal == Instruction::URem || 
+         yyvsp[-4].BinaryOpVal == Instruction::SRem ||
+         yyvsp[-4].BinaryOpVal == Instruction::FRem))
       GEN_ERROR("Remainder not supported on vector types");
-    Value* val1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal)); 
+    Value* val1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal); 
     CHECK_FOR_ERROR
-    Value* val2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
+    Value* val2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), val1, val2);
-    if ((yyval.InstVal) == 0)
+    yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, val1, val2);
+    if (yyval.InstVal == 0)
       GEN_ERROR("binary operator returned null");
-    delete (yyvsp[-3].TypeVal);
-  ;}
-    break;
-
-  case 267:
-#line 2684 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[-3].TypeVal;
+  ;
+    break;}
+case 266:
+#line 2684 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
-    if (!(*(yyvsp[-3].TypeVal))->isInteger()) {
-      if (Instruction::isShift((yyvsp[-4].BinaryOpVal)) || !isa<VectorType>((yyvsp[-3].TypeVal)->get()) ||
-          !cast<VectorType>((yyvsp[-3].TypeVal)->get())->getElementType()->isInteger())
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
+    if (!(*yyvsp[-3].TypeVal)->isInteger()) {
+      if (Instruction::isShift(yyvsp[-4].BinaryOpVal) || !isa<VectorType>(yyvsp[-3].TypeVal->get()) ||
+          !cast<VectorType>(yyvsp[-3].TypeVal->get())->getElementType()->isInteger())
         GEN_ERROR("Logical operator requires integral operands");
     }
-    Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
+    Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
     CHECK_FOR_ERROR
-    Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
+    Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
-    if ((yyval.InstVal) == 0)
+    yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, tmpVal1, tmpVal2);
+    if (yyval.InstVal == 0)
       GEN_ERROR("binary operator returned null");
-    delete (yyvsp[-3].TypeVal);
-  ;}
-    break;
-
-  case 268:
-#line 2701 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[-3].TypeVal;
+  ;
+    break;}
+case 267:
+#line 2701 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
-    if (isa<VectorType>((*(yyvsp[-3].TypeVal)).get()))
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
+    if (isa<VectorType>((*yyvsp[-3].TypeVal).get()))
       GEN_ERROR("Vector types not supported by icmp instruction");
-    Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
+    Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
     CHECK_FOR_ERROR
-    Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
+    Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].IPredicate), tmpVal1, tmpVal2);
-    if ((yyval.InstVal) == 0)
+    yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].IPredicate, tmpVal1, tmpVal2);
+    if (yyval.InstVal == 0)
       GEN_ERROR("icmp operator returned null");
-    delete (yyvsp[-3].TypeVal);
-  ;}
-    break;
-
-  case 269:
-#line 2715 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[-3].TypeVal;
+  ;
+    break;}
+case 268:
+#line 2715 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
-    if (isa<VectorType>((*(yyvsp[-3].TypeVal)).get()))
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
+    if (isa<VectorType>((*yyvsp[-3].TypeVal).get()))
       GEN_ERROR("Vector types not supported by fcmp instruction");
-    Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
+    Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
     CHECK_FOR_ERROR
-    Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
+    Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].FPredicate), tmpVal1, tmpVal2);
-    if ((yyval.InstVal) == 0)
+    yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].FPredicate, tmpVal1, tmpVal2);
+    if (yyval.InstVal == 0)
       GEN_ERROR("fcmp operator returned null");
-    delete (yyvsp[-3].TypeVal);
-  ;}
-    break;
-
-  case 270:
-#line 2729 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+    delete yyvsp[-3].TypeVal;
+  ;
+    break;}
+case 269:
+#line 2729 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
-    Value* Val = (yyvsp[-2].ValueVal);
-    const Type* DestTy = (yyvsp[0].TypeVal)->get();
-    if (!CastInst::castIsValid((yyvsp[-3].CastOpVal), Val, DestTy))
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
+    Value* Val = yyvsp[-2].ValueVal;
+    const Type* DestTy = yyvsp[0].TypeVal->get();
+    if (!CastInst::castIsValid(yyvsp[-3].CastOpVal, Val, DestTy))
       GEN_ERROR("invalid cast opcode for cast from '" +
                 Val->getType()->getDescription() + "' to '" +
                 DestTy->getDescription() + "'"); 
-    (yyval.InstVal) = CastInst::create((yyvsp[-3].CastOpVal), Val, DestTy);
-    delete (yyvsp[0].TypeVal);
-  ;}
-    break;
-
-  case 271:
-#line 2741 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    if ((yyvsp[-4].ValueVal)->getType() != Type::Int1Ty)
+    yyval.InstVal = CastInst::create(yyvsp[-3].CastOpVal, Val, DestTy);
+    delete yyvsp[0].TypeVal;
+  ;
+    break;}
+case 270:
+#line 2741 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (yyvsp[-4].ValueVal->getType() != Type::Int1Ty)
       GEN_ERROR("select condition must be boolean");
-    if ((yyvsp[-2].ValueVal)->getType() != (yyvsp[0].ValueVal)->getType())
+    if (yyvsp[-2].ValueVal->getType() != yyvsp[0].ValueVal->getType())
       GEN_ERROR("select value types should match");
-    (yyval.InstVal) = new SelectInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
+    yyval.InstVal = new SelectInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 272:
-#line 2749 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 271:
+#line 2749 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
-    (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
-    delete (yyvsp[0].TypeVal);
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
+    yyval.InstVal = new VAArgInst(yyvsp[-2].ValueVal, *yyvsp[0].TypeVal);
+    delete yyvsp[0].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 273:
-#line 2756 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
+  ;
+    break;}
+case 272:
+#line 2756 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
       GEN_ERROR("Invalid extractelement operands");
-    (yyval.InstVal) = new ExtractElementInst((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
+    yyval.InstVal = new ExtractElementInst(yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 274:
-#line 2762 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
+  ;
+    break;}
+case 273:
+#line 2762 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (!InsertElementInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
       GEN_ERROR("Invalid insertelement operands");
-    (yyval.InstVal) = new InsertElementInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
+    yyval.InstVal = new InsertElementInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 275:
-#line 2768 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
+  ;
+    break;}
+case 274:
+#line 2768 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (!ShuffleVectorInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
       GEN_ERROR("Invalid shufflevector operands");
-    (yyval.InstVal) = new ShuffleVectorInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
+    yyval.InstVal = new ShuffleVectorInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 276:
-#line 2774 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
+  ;
+    break;}
+case 275:
+#line 2774 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    const Type *Ty = yyvsp[0].PHIList->front().first->getType();
     if (!Ty->isFirstClassType())
       GEN_ERROR("PHI node operands must be of first class type");
-    (yyval.InstVal) = new PHINode(Ty);
-    ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[0].PHIList)->size());
-    while ((yyvsp[0].PHIList)->begin() != (yyvsp[0].PHIList)->end()) {
-      if ((yyvsp[0].PHIList)->front().first->getType() != Ty) 
+    yyval.InstVal = new PHINode(Ty);
+    ((PHINode*)yyval.InstVal)->reserveOperandSpace(yyvsp[0].PHIList->size());
+    while (yyvsp[0].PHIList->begin() != yyvsp[0].PHIList->end()) {
+      if (yyvsp[0].PHIList->front().first->getType() != Ty) 
         GEN_ERROR("All elements of a PHI node must be of the same type");
-      cast<PHINode>((yyval.InstVal))->addIncoming((yyvsp[0].PHIList)->front().first, (yyvsp[0].PHIList)->front().second);
-      (yyvsp[0].PHIList)->pop_front();
+      cast<PHINode>(yyval.InstVal)->addIncoming(yyvsp[0].PHIList->front().first, yyvsp[0].PHIList->front().second);
+      yyvsp[0].PHIList->pop_front();
     }
-    delete (yyvsp[0].PHIList);  // Free the list...
+    delete yyvsp[0].PHIList;  // Free the list...
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 277:
-#line 2790 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 276:
+#line 2790 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
 
     // Handle the short syntax
     const PointerType *PFTy = 0;
     const FunctionType *Ty = 0;
-    if (!(PFTy = dyn_cast<PointerType>((yyvsp[-5].TypeVal)->get())) ||
+    if (!(PFTy = dyn_cast<PointerType>(yyvsp[-5].TypeVal->get())) ||
         !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
       // Pull out the types of all of the arguments...
       std::vector<const Type*> ParamTypes;
       ParamAttrsList ParamAttrs;
-      if ((yyvsp[0].ParamAttrs) != ParamAttr::None)
-        ParamAttrs.addAttributes(0, (yyvsp[0].ParamAttrs));
+      if (yyvsp[0].ParamAttrs != ParamAttr::None)
+        ParamAttrs.addAttributes(0, yyvsp[0].ParamAttrs);
       unsigned index = 1;
-      ValueRefList::iterator I = (yyvsp[-2].ValueRefList)->begin(), E = (yyvsp[-2].ValueRefList)->end();
+      ValueRefList::iterator I = yyvsp[-2].ValueRefList->begin(), E = yyvsp[-2].ValueRefList->end();
       for (; I != E; ++I, ++index) {
         const Type *Ty = I->Val->getType();
         if (Ty == Type::VoidTy)
@@ -5479,11 +4661,11 @@
       if (!ParamAttrs.empty())
         Attrs = new ParamAttrsList(ParamAttrs);
 
-      Ty = FunctionType::get((yyvsp[-5].TypeVal)->get(), ParamTypes, false, Attrs);
+      Ty = FunctionType::get(yyvsp[-5].TypeVal->get(), ParamTypes, false, Attrs);
       PFTy = PointerType::get(Ty);
     }
 
-    Value *V = getVal(PFTy, (yyvsp[-4].ValIDVal));   // Get the function we're calling...
+    Value *V = getVal(PFTy, yyvsp[-4].ValIDVal);   // Get the function we're calling...
     CHECK_FOR_ERROR
 
     // Check for call to invalid intrinsic to avoid crashing later.
@@ -5497,7 +4679,7 @@
 
     // Check the arguments 
     ValueList Args;
-    if ((yyvsp[-2].ValueRefList)->empty()) {                                   // Has no arguments?
+    if (yyvsp[-2].ValueRefList->empty()) {                                   // Has no arguments?
       // Make sure no arguments is a good thing!
       if (Ty->getNumParams() != 0)
         GEN_ERROR("No arguments passed to a function that "
@@ -5508,7 +4690,7 @@
       //
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      ValueRefList::iterator ArgI = (yyvsp[-2].ValueRefList)->begin(), ArgE = (yyvsp[-2].ValueRefList)->end();
+      ValueRefList::iterator ArgI = yyvsp[-2].ValueRefList->begin(), ArgE = yyvsp[-2].ValueRefList->end();
 
       for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
         if (ArgI->Val->getType() != *I)
@@ -5525,428 +4707,365 @@
     }
     // Create the call node
     CallInst *CI = new CallInst(V, &Args[0], Args.size());
-    CI->setTailCall((yyvsp[-7].BoolVal));
-    CI->setCallingConv((yyvsp[-6].UIntVal));
-    (yyval.InstVal) = CI;
-    delete (yyvsp[-2].ValueRefList);
-    delete (yyvsp[-5].TypeVal);
+    CI->setTailCall(yyvsp[-7].BoolVal);
+    CI->setCallingConv(yyvsp[-6].UIntVal);
+    yyval.InstVal = CI;
+    delete yyvsp[-2].ValueRefList;
+    delete yyvsp[-5].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 278:
-#line 2870 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.InstVal) = (yyvsp[0].InstVal);
+  ;
+    break;}
+case 277:
+#line 2870 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.InstVal = yyvsp[0].InstVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 279:
-#line 2875 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = true;
+  ;
+    break;}
+case 278:
+#line 2875 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = true;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 280:
-#line 2879 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    (yyval.BoolVal) = false;
+  ;
+    break;}
+case 279:
+#line 2879 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    yyval.BoolVal = false;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 281:
-#line 2886 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 280:
+#line 2886 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
-    delete (yyvsp[-1].TypeVal);
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    yyval.InstVal = new MallocInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 282:
-#line 2893 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 281:
+#line 2893 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
-    Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
+    Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = new MallocInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
-    delete (yyvsp[-4].TypeVal);
-  ;}
-    break;
-
-  case 283:
-#line 2901 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
+    delete yyvsp[-4].TypeVal;
+  ;
+    break;}
+case 282:
+#line 2901 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
-    delete (yyvsp[-1].TypeVal);
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
+    yyval.InstVal = new AllocaInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
+    delete yyvsp[-1].TypeVal;
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 284:
-#line 2908 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 283:
+#line 2908 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
-    Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
+    Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = new AllocaInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
-    delete (yyvsp[-4].TypeVal);
-  ;}
-    break;
-
-  case 285:
-#line 2916 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
-    if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
+    yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
+    delete yyvsp[-4].TypeVal;
+  ;
+    break;}
+case 284:
+#line 2916 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
+    if (!isa<PointerType>(yyvsp[0].ValueVal->getType()))
       GEN_ERROR("Trying to free nonpointer type " + 
-                     (yyvsp[0].ValueVal)->getType()->getDescription() + "");
-    (yyval.InstVal) = new FreeInst((yyvsp[0].ValueVal));
+                     yyvsp[0].ValueVal->getType()->getDescription() + "");
+    yyval.InstVal = new FreeInst(yyvsp[0].ValueVal);
     CHECK_FOR_ERROR
-  ;}
-    break;
-
-  case 286:
-#line 2924 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+  ;
+    break;}
+case 285:
+#line 2924 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    if (!isa<PointerType>((yyvsp[-1].TypeVal)->get()))
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    if (!isa<PointerType>(yyvsp[-2].TypeVal->get()))
       GEN_ERROR("Can't load from nonpointer type: " +
-                     (*(yyvsp[-1].TypeVal))->getDescription());
-    if (!cast<PointerType>((yyvsp[-1].TypeVal)->get())->getElementType()->isFirstClassType())
+                     (*yyvsp[-2].TypeVal)->getDescription());
+    if (!cast<PointerType>(yyvsp[-2].TypeVal->get())->getElementType()->isFirstClassType())
       GEN_ERROR("Can't load from pointer of non-first-class type: " +
-                     (*(yyvsp[-1].TypeVal))->getDescription());
-    Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
+                     (*yyvsp[-2].TypeVal)->getDescription());
+    Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[-3].BoolVal));
-    delete (yyvsp[-1].TypeVal);
-  ;}
-    break;
-
-  case 287:
-#line 2938 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.InstVal = new LoadInst(tmpVal, "", yyvsp[-4].BoolVal, yyvsp[0].UIntVal);
+    delete yyvsp[-2].TypeVal;
+  ;
+    break;}
+case 286:
+#line 2938 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
-    const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    const PointerType *PT = dyn_cast<PointerType>(yyvsp[-2].TypeVal->get());
     if (!PT)
       GEN_ERROR("Can't store to a nonpointer type: " +
-                     (*(yyvsp[-1].TypeVal))->getDescription());
+                     (*yyvsp[-2].TypeVal)->getDescription());
     const Type *ElTy = PT->getElementType();
-    if (ElTy != (yyvsp[-3].ValueVal)->getType())
-      GEN_ERROR("Can't store '" + (yyvsp[-3].ValueVal)->getType()->getDescription() +
+    if (ElTy != yyvsp[-4].ValueVal->getType())
+      GEN_ERROR("Can't store '" + yyvsp[-4].ValueVal->getType()->getDescription() +
                      "' into space of type '" + ElTy->getDescription() + "'");
 
-    Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
+    Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = new StoreInst((yyvsp[-3].ValueVal), tmpVal, (yyvsp[-5].BoolVal));
-    delete (yyvsp[-1].TypeVal);
-  ;}
-    break;
-
-  case 288:
-#line 2955 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-    {
+    yyval.InstVal = new StoreInst(yyvsp[-4].ValueVal, tmpVal, yyvsp[-6].BoolVal, yyvsp[0].UIntVal);
+    delete yyvsp[-2].TypeVal;
+  ;
+    break;}
+case 287:
+#line 2955 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+{
     if (!UpRefs.empty())
-      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
-    if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
+      GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
+    if (!isa<PointerType>(yyvsp[-2].TypeVal->get()))
       GEN_ERROR("getelementptr insn requires pointer operand");
 
-    if (!GetElementPtrInst::getIndexedType(*(yyvsp[-2].TypeVal), &(*(yyvsp[0].ValueList))[0], (yyvsp[0].ValueList)->size(), true))
+    if (!GetElementPtrInst::getIndexedType(*yyvsp[-2].TypeVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size(), true))
       GEN_ERROR("Invalid getelementptr indices for type '" +
-                     (*(yyvsp[-2].TypeVal))->getDescription()+ "'");
-    Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
+                     (*yyvsp[-2].TypeVal)->getDescription()+ "'");
+    Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
     CHECK_FOR_ERROR
-    (yyval.InstVal) = new GetElementPtrInst(tmpVal, &(*(yyvsp[0].ValueList))[0], (yyvsp[0].ValueList)->size());
-    delete (yyvsp[-2].TypeVal); 
-    delete (yyvsp[0].ValueList);
-  ;}
-    break;
-
-
-      default: break;
-    }
-
-/* Line 1126 of yacc.c.  */
-#line 5682 "llvmAsmParser.tab.c"
+    yyval.InstVal = new GetElementPtrInst(tmpVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size());
+    delete yyvsp[-2].TypeVal; 
+    delete yyvsp[0].ValueList;
+  ;
+    break;}
+}
+   /* the action file gets copied in in place of this dollarsign */
+#line 543 "/usr/share/bison.simple"
 
   yyvsp -= yylen;
   yyssp -= yylen;
+#ifdef YYLSP_NEEDED
+  yylsp -= yylen;
+#endif
 
-
-  YY_STACK_PRINT (yyss, yyssp);
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      short *ssp1 = yyss - 1;
+      fprintf (stderr, "state stack now");
+      while (ssp1 != yyssp)
+	fprintf (stderr, " %d", *++ssp1);
+      fprintf (stderr, "\n");
+    }
+#endif
 
   *++yyvsp = yyval;
 
+#ifdef YYLSP_NEEDED
+  yylsp++;
+  if (yylen == 0)
+    {
+      yylsp->first_line = yylloc.first_line;
+      yylsp->first_column = yylloc.first_column;
+      yylsp->last_line = (yylsp-1)->last_line;
+      yylsp->last_column = (yylsp-1)->last_column;
+      yylsp->text = 0;
+    }
+  else
+    {
+      yylsp->last_line = (yylsp+yylen-1)->last_line;
+      yylsp->last_column = (yylsp+yylen-1)->last_column;
+    }
+#endif
 
-  /* Now `shift' the result of the reduction.  Determine what state
-     that goes to, based on the state we popped back to and the rule
-     number reduced by.  */
+  /* Now "shift" the result of the reduction.
+     Determine what state that goes to,
+     based on the state we popped back to
+     and the rule number reduced by.  */
 
   yyn = yyr1[yyn];
 
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
+  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
     yystate = yytable[yystate];
   else
-    yystate = yydefgoto[yyn - YYNTOKENS];
+    yystate = yydefgoto[yyn - YYNTBASE];
 
   goto yynewstate;
 
+yyerrlab:   /* here on detecting error */
 
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
+  if (! yyerrstatus)
+    /* If not already recovering from an error, report this error.  */
     {
       ++yynerrs;
-#if YYERROR_VERBOSE
+
+#ifdef YYERROR_VERBOSE
       yyn = yypact[yystate];
 
-      if (YYPACT_NINF < yyn && yyn < YYLAST)
+      if (yyn > YYFLAG && yyn < YYLAST)
 	{
-	  int yytype = YYTRANSLATE (yychar);
-	  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
-	  YYSIZE_T yysize = yysize0;
-	  YYSIZE_T yysize1;
-	  int yysize_overflow = 0;
-	  char *yymsg = 0;
-#	  define YYERROR_VERBOSE_ARGS_MAXIMUM 5
-	  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-	  int yyx;
+	  int size = 0;
+	  char *msg;
+	  int x, count;
 
-#if 0
-	  /* This is so xgettext sees the translatable formats that are
-	     constructed on the fly.  */
-	  YY_("syntax error, unexpected %s");
-	  YY_("syntax error, unexpected %s, expecting %s");
-	  YY_("syntax error, unexpected %s, expecting %s or %s");
-	  YY_("syntax error, unexpected %s, expecting %s or %s or %s");
-	  YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-#endif
-	  char *yyfmt;
-	  char const *yyf;
-	  static char const yyunexpected[] = "syntax error, unexpected %s";
-	  static char const yyexpecting[] = ", expecting %s";
-	  static char const yyor[] = " or %s";
-	  char yyformat[sizeof yyunexpected
-			+ sizeof yyexpecting - 1
-			+ ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-			   * (sizeof yyor - 1))];
-	  char const *yyprefix = yyexpecting;
-
-	  /* Start YYX at -YYN if negative to avoid negative indexes in
-	     YYCHECK.  */
-	  int yyxbegin = yyn < 0 ? -yyn : 0;
-
-	  /* Stay within bounds of both yycheck and yytname.  */
-	  int yychecklim = YYLAST - yyn;
-	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-	  int yycount = 1;
-
-	  yyarg[0] = yytname[yytype];
-	  yyfmt = yystpcpy (yyformat, yyunexpected);
-
-	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-	      {
-		if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-		  {
-		    yycount = 1;
-		    yysize = yysize0;
-		    yyformat[sizeof yyunexpected - 1] = '\0';
-		    break;
-		  }
-		yyarg[yycount++] = yytname[yyx];
-		yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-		yysize_overflow |= yysize1 < yysize;
-		yysize = yysize1;
-		yyfmt = yystpcpy (yyfmt, yyprefix);
-		yyprefix = yyor;
-	      }
-
-	  yyf = YY_(yyformat);
-	  yysize1 = yysize + yystrlen (yyf);
-	  yysize_overflow |= yysize1 < yysize;
-	  yysize = yysize1;
-
-	  if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
-	    yymsg = (char *) YYSTACK_ALLOC (yysize);
-	  if (yymsg)
+	  count = 0;
+	  /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
+	  for (x = (yyn < 0 ? -yyn : 0);
+	       x < (sizeof(yytname) / sizeof(char *)); x++)
+	    if (yycheck[x + yyn] == x)
+	      size += strlen(yytname[x]) + 15, count++;
+	  msg = (char *) malloc(size + 15);
+	  if (msg != 0)
 	    {
-	      /* Avoid sprintf, as that infringes on the user's name space.
-		 Don't have undefined behavior even if the translation
-		 produced a string with the wrong number of "%s"s.  */
-	      char *yyp = yymsg;
-	      int yyi = 0;
-	      while ((*yyp = *yyf))
+	      strcpy(msg, "parse error");
+
+	      if (count < 5)
 		{
-		  if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-		    {
-		      yyp += yytnamerr (yyp, yyarg[yyi++]);
-		      yyf += 2;
-		    }
-		  else
-		    {
-		      yyp++;
-		      yyf++;
-		    }
+		  count = 0;
+		  for (x = (yyn < 0 ? -yyn : 0);
+		       x < (sizeof(yytname) / sizeof(char *)); x++)
+		    if (yycheck[x + yyn] == x)
+		      {
+			strcat(msg, count == 0 ? ", expecting `" : " or `");
+			strcat(msg, yytname[x]);
+			strcat(msg, "'");
+			count++;
+		      }
 		}
-	      yyerror (yymsg);
-	      YYSTACK_FREE (yymsg);
+	      yyerror(msg);
+	      free(msg);
 	    }
 	  else
-	    {
-	      yyerror (YY_("syntax error"));
-	      goto yyexhaustedlab;
-	    }
+	    yyerror ("parse error; also virtual memory exceeded");
 	}
       else
 #endif /* YYERROR_VERBOSE */
-	yyerror (YY_("syntax error"));
+	yyerror("parse error");
     }
 
-
+  goto yyerrlab1;
+yyerrlab1:   /* here on error raised explicitly by an action */
 
   if (yyerrstatus == 3)
     {
-      /* If just tried and failed to reuse look-ahead token after an
-	 error, discard it.  */
+      /* if just tried and failed to reuse lookahead token after an error, discard it.  */
 
-      if (yychar <= YYEOF)
-        {
-	  /* Return failure if at end of input.  */
-	  if (yychar == YYEOF)
-	    YYABORT;
-        }
-      else
-	{
-	  yydestruct ("Error: discarding", yytoken, &yylval);
-	  yychar = YYEMPTY;
-	}
-    }
-
-  /* Else will try to reuse look-ahead token after shifting the error
-     token.  */
-  goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR.  |
-`---------------------------------------------------*/
-yyerrorlab:
-
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  if (0)
-     goto yyerrorlab;
-
-yyvsp -= yylen;
-  yyssp -= yylen;
-  yystate = *yyssp;
-  goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR.  |
-`-------------------------------------------------------------*/
-yyerrlab1:
-  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
-
-  for (;;)
-    {
-      yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
-	{
-	  yyn += YYTERROR;
-	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-	    {
-	      yyn = yytable[yyn];
-	      if (0 < yyn)
-		break;
-	    }
-	}
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (yyssp == yyss)
+      /* return failure if at end of input */
+      if (yychar == YYEOF)
 	YYABORT;
 
+#if YYDEBUG != 0
+      if (yydebug)
+	fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
+#endif
 
-      yydestruct ("Error: popping", yystos[yystate], yyvsp);
-      YYPOPSTACK;
-      yystate = *yyssp;
-      YY_STACK_PRINT (yyss, yyssp);
+      yychar = YYEMPTY;
     }
 
+  /* Else will try to reuse lookahead token
+     after shifting the error token.  */
+
+  yyerrstatus = 3;		/* Each real token shifted decrements this */
+
+  goto yyerrhandle;
+
+yyerrdefault:  /* current state does not do anything special for the error token. */
+
+#if 0
+  /* This is wrong; only states that explicitly want error tokens
+     should shift them.  */
+  yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
+  if (yyn) goto yydefault;
+#endif
+
+yyerrpop:   /* pop the current state because it cannot handle the error token */
+
+  if (yyssp == yyss) YYABORT;
+  yyvsp--;
+  yystate = *--yyssp;
+#ifdef YYLSP_NEEDED
+  yylsp--;
+#endif
+
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      short *ssp1 = yyss - 1;
+      fprintf (stderr, "Error: state stack now");
+      while (ssp1 != yyssp)
+	fprintf (stderr, " %d", *++ssp1);
+      fprintf (stderr, "\n");
+    }
+#endif
+
+yyerrhandle:
+
+  yyn = yypact[yystate];
+  if (yyn == YYFLAG)
+    goto yyerrdefault;
+
+  yyn += YYTERROR;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
+    goto yyerrdefault;
+
+  yyn = yytable[yyn];
+  if (yyn < 0)
+    {
+      if (yyn == YYFLAG)
+	goto yyerrpop;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  else if (yyn == 0)
+    goto yyerrpop;
+
   if (yyn == YYFINAL)
     YYACCEPT;
 
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Shifting error token, ");
+#endif
+
   *++yyvsp = yylval;
-
-
-  /* Shift the error token. */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+#ifdef YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
 
   yystate = yyn;
   goto yynewstate;
 
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-#ifndef yyoverflow
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here.  |
-`-------------------------------------------------*/
-yyexhaustedlab:
-  yyerror (YY_("memory exhausted"));
-  yyresult = 2;
-  /* Fall through.  */
-#endif
-
-yyreturn:
-  if (yychar != YYEOF && yychar != YYEMPTY)
-     yydestruct ("Cleanup: discarding lookahead",
-		 yytoken, &yylval);
-  while (yyssp != yyss)
+ yyacceptlab:
+  /* YYACCEPT comes here.  */
+  if (yyfree_stacks)
     {
-      yydestruct ("Cleanup: popping",
-		  yystos[*yyssp], yyvsp);
-      YYPOPSTACK;
-    }
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
+      free (yyss);
+      free (yyvs);
+#ifdef YYLSP_NEEDED
+      free (yyls);
 #endif
-  return yyresult;
+    }
+  return 0;
+
+ yyabortlab:
+  /* YYABORT comes here.  */
+  if (yyfree_stacks)
+    {
+      free (yyss);
+      free (yyvs);
+#ifdef YYLSP_NEEDED
+      free (yyls);
+#endif
+    }
+  return 1;
 }
-
-
-#line 2972 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
+#line 2972 "/Users/clamb/Documents/ageia/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 
 
 // common code from the two 'RunVMAsmParser' functions
@@ -6027,4 +5146,3 @@
   GenerateError(errMsg);
   return 0;
 }
-
diff --git a/lib/AsmParser/llvmAsmParser.h.cvs b/lib/AsmParser/llvmAsmParser.h.cvs
index ed6a34f..a242ab1 100644
--- a/lib/AsmParser/llvmAsmParser.h.cvs
+++ b/lib/AsmParser/llvmAsmParser.h.cvs
@@ -1,308 +1,4 @@
-/* A Bison parser, made by GNU Bison 2.1.  */
-
-/* Skeleton parser for Yacc-like parsing with Bison,
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     ESINT64VAL = 258,
-     EUINT64VAL = 259,
-     ESAPINTVAL = 260,
-     EUAPINTVAL = 261,
-     LOCALVAL_ID = 262,
-     GLOBALVAL_ID = 263,
-     FPVAL = 264,
-     VOID = 265,
-     INTTYPE = 266,
-     FLOAT = 267,
-     DOUBLE = 268,
-     LABEL = 269,
-     TYPE = 270,
-     LOCALVAR = 271,
-     GLOBALVAR = 272,
-     LABELSTR = 273,
-     STRINGCONSTANT = 274,
-     ATSTRINGCONSTANT = 275,
-     ZEROINITIALIZER = 276,
-     TRUETOK = 277,
-     FALSETOK = 278,
-     BEGINTOK = 279,
-     ENDTOK = 280,
-     DECLARE = 281,
-     DEFINE = 282,
-     GLOBAL = 283,
-     CONSTANT = 284,
-     SECTION = 285,
-     VOLATILE = 286,
-     THREAD_LOCAL = 287,
-     TO = 288,
-     DOTDOTDOT = 289,
-     NULL_TOK = 290,
-     UNDEF = 291,
-     INTERNAL = 292,
-     LINKONCE = 293,
-     WEAK = 294,
-     APPENDING = 295,
-     DLLIMPORT = 296,
-     DLLEXPORT = 297,
-     EXTERN_WEAK = 298,
-     OPAQUE = 299,
-     EXTERNAL = 300,
-     TARGET = 301,
-     TRIPLE = 302,
-     ALIGN = 303,
-     DEPLIBS = 304,
-     CALL = 305,
-     TAIL = 306,
-     ASM_TOK = 307,
-     MODULE = 308,
-     SIDEEFFECT = 309,
-     CC_TOK = 310,
-     CCC_TOK = 311,
-     FASTCC_TOK = 312,
-     COLDCC_TOK = 313,
-     X86_STDCALLCC_TOK = 314,
-     X86_FASTCALLCC_TOK = 315,
-     DATALAYOUT = 316,
-     RET = 317,
-     BR = 318,
-     SWITCH = 319,
-     INVOKE = 320,
-     UNWIND = 321,
-     UNREACHABLE = 322,
-     ADD = 323,
-     SUB = 324,
-     MUL = 325,
-     UDIV = 326,
-     SDIV = 327,
-     FDIV = 328,
-     UREM = 329,
-     SREM = 330,
-     FREM = 331,
-     AND = 332,
-     OR = 333,
-     XOR = 334,
-     SHL = 335,
-     LSHR = 336,
-     ASHR = 337,
-     ICMP = 338,
-     FCMP = 339,
-     EQ = 340,
-     NE = 341,
-     SLT = 342,
-     SGT = 343,
-     SLE = 344,
-     SGE = 345,
-     ULT = 346,
-     UGT = 347,
-     ULE = 348,
-     UGE = 349,
-     OEQ = 350,
-     ONE = 351,
-     OLT = 352,
-     OGT = 353,
-     OLE = 354,
-     OGE = 355,
-     ORD = 356,
-     UNO = 357,
-     UEQ = 358,
-     UNE = 359,
-     MALLOC = 360,
-     ALLOCA = 361,
-     FREE = 362,
-     LOAD = 363,
-     STORE = 364,
-     GETELEMENTPTR = 365,
-     TRUNC = 366,
-     ZEXT = 367,
-     SEXT = 368,
-     FPTRUNC = 369,
-     FPEXT = 370,
-     BITCAST = 371,
-     UITOFP = 372,
-     SITOFP = 373,
-     FPTOUI = 374,
-     FPTOSI = 375,
-     INTTOPTR = 376,
-     PTRTOINT = 377,
-     PHI_TOK = 378,
-     SELECT = 379,
-     VAARG = 380,
-     EXTRACTELEMENT = 381,
-     INSERTELEMENT = 382,
-     SHUFFLEVECTOR = 383,
-     NORETURN = 384,
-     INREG = 385,
-     SRET = 386,
-     NOUNWIND = 387,
-     DEFAULT = 388,
-     HIDDEN = 389
-   };
-#endif
-/* Tokens.  */
-#define ESINT64VAL 258
-#define EUINT64VAL 259
-#define ESAPINTVAL 260
-#define EUAPINTVAL 261
-#define LOCALVAL_ID 262
-#define GLOBALVAL_ID 263
-#define FPVAL 264
-#define VOID 265
-#define INTTYPE 266
-#define FLOAT 267
-#define DOUBLE 268
-#define LABEL 269
-#define TYPE 270
-#define LOCALVAR 271
-#define GLOBALVAR 272
-#define LABELSTR 273
-#define STRINGCONSTANT 274
-#define ATSTRINGCONSTANT 275
-#define ZEROINITIALIZER 276
-#define TRUETOK 277
-#define FALSETOK 278
-#define BEGINTOK 279
-#define ENDTOK 280
-#define DECLARE 281
-#define DEFINE 282
-#define GLOBAL 283
-#define CONSTANT 284
-#define SECTION 285
-#define VOLATILE 286
-#define THREAD_LOCAL 287
-#define TO 288
-#define DOTDOTDOT 289
-#define NULL_TOK 290
-#define UNDEF 291
-#define INTERNAL 292
-#define LINKONCE 293
-#define WEAK 294
-#define APPENDING 295
-#define DLLIMPORT 296
-#define DLLEXPORT 297
-#define EXTERN_WEAK 298
-#define OPAQUE 299
-#define EXTERNAL 300
-#define TARGET 301
-#define TRIPLE 302
-#define ALIGN 303
-#define DEPLIBS 304
-#define CALL 305
-#define TAIL 306
-#define ASM_TOK 307
-#define MODULE 308
-#define SIDEEFFECT 309
-#define CC_TOK 310
-#define CCC_TOK 311
-#define FASTCC_TOK 312
-#define COLDCC_TOK 313
-#define X86_STDCALLCC_TOK 314
-#define X86_FASTCALLCC_TOK 315
-#define DATALAYOUT 316
-#define RET 317
-#define BR 318
-#define SWITCH 319
-#define INVOKE 320
-#define UNWIND 321
-#define UNREACHABLE 322
-#define ADD 323
-#define SUB 324
-#define MUL 325
-#define UDIV 326
-#define SDIV 327
-#define FDIV 328
-#define UREM 329
-#define SREM 330
-#define FREM 331
-#define AND 332
-#define OR 333
-#define XOR 334
-#define SHL 335
-#define LSHR 336
-#define ASHR 337
-#define ICMP 338
-#define FCMP 339
-#define EQ 340
-#define NE 341
-#define SLT 342
-#define SGT 343
-#define SLE 344
-#define SGE 345
-#define ULT 346
-#define UGT 347
-#define ULE 348
-#define UGE 349
-#define OEQ 350
-#define ONE 351
-#define OLT 352
-#define OGT 353
-#define OLE 354
-#define OGE 355
-#define ORD 356
-#define UNO 357
-#define UEQ 358
-#define UNE 359
-#define MALLOC 360
-#define ALLOCA 361
-#define FREE 362
-#define LOAD 363
-#define STORE 364
-#define GETELEMENTPTR 365
-#define TRUNC 366
-#define ZEXT 367
-#define SEXT 368
-#define FPTRUNC 369
-#define FPEXT 370
-#define BITCAST 371
-#define UITOFP 372
-#define SITOFP 373
-#define FPTOUI 374
-#define FPTOSI 375
-#define INTTOPTR 376
-#define PTRTOINT 377
-#define PHI_TOK 378
-#define SELECT 379
-#define VAARG 380
-#define EXTRACTELEMENT 381
-#define INSERTELEMENT 382
-#define SHUFFLEVECTOR 383
-#define NORETURN 384
-#define INREG 385
-#define SRET 386
-#define NOUNWIND 387
-#define DEFAULT 388
-#define HIDDEN 389
-
-
-
-
-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 938 "/proj/llvm/llvm-2/lib/AsmParser/llvmAsmParser.y"
-typedef union YYSTYPE {
+typedef union {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
   llvm::BasicBlock                       *BasicBlockVal;
@@ -348,14 +44,138 @@
   llvm::ICmpInst::Predicate         IPredicate;
   llvm::FCmpInst::Predicate         FPredicate;
 } YYSTYPE;
-/* Line 1447 of yacc.c.  */
-#line 353 "llvmAsmParser.tab.h"
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
+#define	ESINT64VAL	257
+#define	EUINT64VAL	258
+#define	ESAPINTVAL	259
+#define	EUAPINTVAL	260
+#define	LOCALVAL_ID	261
+#define	GLOBALVAL_ID	262
+#define	FPVAL	263
+#define	VOID	264
+#define	INTTYPE	265
+#define	FLOAT	266
+#define	DOUBLE	267
+#define	LABEL	268
+#define	TYPE	269
+#define	LOCALVAR	270
+#define	GLOBALVAR	271
+#define	LABELSTR	272
+#define	STRINGCONSTANT	273
+#define	ATSTRINGCONSTANT	274
+#define	ZEROINITIALIZER	275
+#define	TRUETOK	276
+#define	FALSETOK	277
+#define	BEGINTOK	278
+#define	ENDTOK	279
+#define	DECLARE	280
+#define	DEFINE	281
+#define	GLOBAL	282
+#define	CONSTANT	283
+#define	SECTION	284
+#define	VOLATILE	285
+#define	THREAD_LOCAL	286
+#define	TO	287
+#define	DOTDOTDOT	288
+#define	NULL_TOK	289
+#define	UNDEF	290
+#define	INTERNAL	291
+#define	LINKONCE	292
+#define	WEAK	293
+#define	APPENDING	294
+#define	DLLIMPORT	295
+#define	DLLEXPORT	296
+#define	EXTERN_WEAK	297
+#define	OPAQUE	298
+#define	EXTERNAL	299
+#define	TARGET	300
+#define	TRIPLE	301
+#define	ALIGN	302
+#define	DEPLIBS	303
+#define	CALL	304
+#define	TAIL	305
+#define	ASM_TOK	306
+#define	MODULE	307
+#define	SIDEEFFECT	308
+#define	CC_TOK	309
+#define	CCC_TOK	310
+#define	FASTCC_TOK	311
+#define	COLDCC_TOK	312
+#define	X86_STDCALLCC_TOK	313
+#define	X86_FASTCALLCC_TOK	314
+#define	DATALAYOUT	315
+#define	RET	316
+#define	BR	317
+#define	SWITCH	318
+#define	INVOKE	319
+#define	UNWIND	320
+#define	UNREACHABLE	321
+#define	ADD	322
+#define	SUB	323
+#define	MUL	324
+#define	UDIV	325
+#define	SDIV	326
+#define	FDIV	327
+#define	UREM	328
+#define	SREM	329
+#define	FREM	330
+#define	AND	331
+#define	OR	332
+#define	XOR	333
+#define	SHL	334
+#define	LSHR	335
+#define	ASHR	336
+#define	ICMP	337
+#define	FCMP	338
+#define	EQ	339
+#define	NE	340
+#define	SLT	341
+#define	SGT	342
+#define	SLE	343
+#define	SGE	344
+#define	ULT	345
+#define	UGT	346
+#define	ULE	347
+#define	UGE	348
+#define	OEQ	349
+#define	ONE	350
+#define	OLT	351
+#define	OGT	352
+#define	OLE	353
+#define	OGE	354
+#define	ORD	355
+#define	UNO	356
+#define	UEQ	357
+#define	UNE	358
+#define	MALLOC	359
+#define	ALLOCA	360
+#define	FREE	361
+#define	LOAD	362
+#define	STORE	363
+#define	GETELEMENTPTR	364
+#define	TRUNC	365
+#define	ZEXT	366
+#define	SEXT	367
+#define	FPTRUNC	368
+#define	FPEXT	369
+#define	BITCAST	370
+#define	UITOFP	371
+#define	SITOFP	372
+#define	FPTOUI	373
+#define	FPTOSI	374
+#define	INTTOPTR	375
+#define	PTRTOINT	376
+#define	PHI_TOK	377
+#define	SELECT	378
+#define	VAARG	379
+#define	EXTRACTELEMENT	380
+#define	INSERTELEMENT	381
+#define	SHUFFLEVECTOR	382
+#define	NORETURN	383
+#define	INREG	384
+#define	SRET	385
+#define	NOUNWIND	386
+#define	DEFAULT	387
+#define	HIDDEN	388
+
 
 extern YYSTYPE llvmAsmlval;
-
-
-
diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y
index a0c2e25..e3a592f 100644
--- a/lib/AsmParser/llvmAsmParser.y
+++ b/lib/AsmParser/llvmAsmParser.y
@@ -2921,7 +2921,7 @@
     CHECK_FOR_ERROR
   }
 
-  | OptVolatile LOAD Types ValueRef {
+  | OptVolatile LOAD Types ValueRef OptCAlign {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*$3)->getDescription());
     if (!isa<PointerType>($3->get()))
@@ -2932,10 +2932,10 @@
                      (*$3)->getDescription());
     Value* tmpVal = getVal(*$3, $4);
     CHECK_FOR_ERROR
-    $$ = new LoadInst(tmpVal, "", $1);
+    $$ = new LoadInst(tmpVal, "", $1, $5);
     delete $3;
   }
-  | OptVolatile STORE ResolvedVal ',' Types ValueRef {
+  | OptVolatile STORE ResolvedVal ',' Types ValueRef OptCAlign {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*$5)->getDescription());
     const PointerType *PT = dyn_cast<PointerType>($5->get());
@@ -2949,7 +2949,7 @@
 
     Value* tmpVal = getVal(*$5, $6);
     CHECK_FOR_ERROR
-    $$ = new StoreInst($3, tmpVal, $1);
+    $$ = new StoreInst($3, tmpVal, $1, $7);
     delete $5;
   }
   | GETELEMENTPTR Types ValueRef IndexList {
diff --git a/lib/AsmParser/llvmAsmParser.y.cvs b/lib/AsmParser/llvmAsmParser.y.cvs
index a0c2e25..e3a592f 100644
--- a/lib/AsmParser/llvmAsmParser.y.cvs
+++ b/lib/AsmParser/llvmAsmParser.y.cvs
@@ -2921,7 +2921,7 @@
     CHECK_FOR_ERROR
   }
 
-  | OptVolatile LOAD Types ValueRef {
+  | OptVolatile LOAD Types ValueRef OptCAlign {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*$3)->getDescription());
     if (!isa<PointerType>($3->get()))
@@ -2932,10 +2932,10 @@
                      (*$3)->getDescription());
     Value* tmpVal = getVal(*$3, $4);
     CHECK_FOR_ERROR
-    $$ = new LoadInst(tmpVal, "", $1);
+    $$ = new LoadInst(tmpVal, "", $1, $5);
     delete $3;
   }
-  | OptVolatile STORE ResolvedVal ',' Types ValueRef {
+  | OptVolatile STORE ResolvedVal ',' Types ValueRef OptCAlign {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*$5)->getDescription());
     const PointerType *PT = dyn_cast<PointerType>($5->get());
@@ -2949,7 +2949,7 @@
 
     Value* tmpVal = getVal(*$5, $6);
     CHECK_FOR_ERROR
-    $$ = new StoreInst($3, tmpVal, $1);
+    $$ = new StoreInst($3, tmpVal, $1, $7);
     delete $5;
   }
   | GETELEMENTPTR Types ValueRef IndexList {
diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp
index 4979269..59c69d7 100644
--- a/lib/Bytecode/Reader/Reader.cpp
+++ b/lib/Bytecode/Reader/Reader.cpp
@@ -831,13 +831,31 @@
                                      &Idx[0], Idx.size());
       break;
     }
-    case 62:   // volatile load
+    case 62: {   // attributed load
+        if (Oprnds.size() != 2 || !isa<PointerType>(InstTy))
+          error("Invalid attributed load instruction!");
+        signed Log2AlignVal = ((Oprnds[1]>>1)-1);
+        Result = new LoadInst(getValue(iType, Oprnds[0]), "", (Oprnds[1] & 1),
+                              ((Log2AlignVal < 0) ? 0 : 1<<Log2AlignVal));
+        break;
+      }
     case Instruction::Load:
       if (Oprnds.size() != 1 || !isa<PointerType>(InstTy))
         error("Invalid load instruction!");
-      Result = new LoadInst(getValue(iType, Oprnds[0]), "", Opcode == 62);
+      Result = new LoadInst(getValue(iType, Oprnds[0]), "");
       break;
-    case 63:   // volatile store
+    case 63: {   // attributed store
+        if (!isa<PointerType>(InstTy) || Oprnds.size() != 3)
+          error("Invalid store instruction!");
+
+        Value *Ptr = getValue(iType, Oprnds[1]);
+        const Type *ValTy = cast<PointerType>(Ptr->getType())->getElementType();
+        signed Log2AlignVal = ((Oprnds[2]>>1)-1);
+        Result = new StoreInst(getValue(getTypeSlot(ValTy), Oprnds[0]), Ptr,
+                               (Oprnds[2] & 1), 
+                               ((Log2AlignVal < 0) ? 0 : 1<<Log2AlignVal));
+        break;
+      }
     case Instruction::Store: {
       if (!isa<PointerType>(InstTy) || Oprnds.size() != 2)
         error("Invalid store instruction!");
diff --git a/lib/Bytecode/Writer/Writer.cpp b/lib/Bytecode/Writer/Writer.cpp
index 4688e69..1dd0dc9 100644
--- a/lib/Bytecode/Writer/Writer.cpp
+++ b/lib/Bytecode/Writer/Writer.cpp
@@ -616,7 +616,7 @@
   unsigned Opcode = I.getOpcode();
   unsigned NumOperands = I.getNumOperands();
 
-  // Encode 'tail call' as 61, 'volatile load' as 62, and 'volatile store' as
+  // Encode 'tail call' as 61
   // 63.
   if (const CallInst *CI = dyn_cast<CallInst>(&I)) {
     if (CI->getCallingConv() == CallingConv::C) {
@@ -632,10 +632,6 @@
     } else {
       Opcode = 58;      // Call escape sequence.
     }
-  } else if (isa<LoadInst>(I) && cast<LoadInst>(I).isVolatile()) {
-    Opcode = 62;
-  } else if (isa<StoreInst>(I) && cast<StoreInst>(I).isVolatile()) {
-    Opcode = 63;
   }
 
   // Figure out which type to encode with the instruction.  Typically we want
@@ -744,6 +740,32 @@
     } else if (isa<InvokeInst>(I)) {
       // Invoke escape seq has at least 4 operands to encode.
       ++NumOperands;
+    } else if (const LoadInst *LI = dyn_cast<LoadInst>(&I)) {
+      // Encode attributed load as opcode 62
+      // We need to encode the attributes of the load instruction as the second
+      // operand. Its not really a slot, but we don't want to break the 
+      // instruction format for these instructions.
+      if (LI->getAlignment() || LI->isVolatile()) {
+        NumOperands = 2;
+        Slots[1] = ((Log2_32(LI->getAlignment())+1)<<1) + 
+                    (LI->isVolatile() ? 1 : 0);
+        if (Slots[1] > MaxOpSlot) 
+          MaxOpSlot = Slots[1];
+        Opcode = 62;
+      }
+    } else if (const StoreInst *SI = dyn_cast<StoreInst>(&I)) {
+      // Encode attributed store as opcode 63
+      // We need to encode the attributes of the store instruction as the third
+      // operand. Its not really a slot, but we don't want to break the 
+      // instruction format for these instructions.
+      if (SI->getAlignment() || SI->isVolatile()) {
+        NumOperands = 3;
+        Slots[2] = ((Log2_32(SI->getAlignment())+1)<<1) + 
+                    (SI->isVolatile() ? 1 : 0);
+        if (Slots[2] > MaxOpSlot) 
+          MaxOpSlot = Slots[2];
+        Opcode = 63;
+      }
     }
 
     // Decide which instruction encoding to use.  This is determined primarily
diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 88596d6..2cbd10d 100644
--- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -1263,7 +1263,9 @@
         (!AfterLegalize || TLI.isLoadXLegal(ISD::ZEXTLOAD, EVT))) {
       SDOperand ExtLoad = DAG.getExtLoad(ISD::ZEXTLOAD, VT, LN0->getChain(),
                                          LN0->getBasePtr(), LN0->getSrcValue(),
-                                         LN0->getSrcValueOffset(), EVT);
+                                         LN0->getSrcValueOffset(), EVT,
+                                         LN0->isVolatile(), 
+                                         LN0->getAlignment());
       AddToWorkList(N);
       CombineTo(N0.Val, ExtLoad, ExtLoad.getValue(1));
       return SDOperand(N, 0);   // Return N so it doesn't get rechecked!
@@ -1280,7 +1282,9 @@
         (!AfterLegalize || TLI.isLoadXLegal(ISD::ZEXTLOAD, EVT))) {
       SDOperand ExtLoad = DAG.getExtLoad(ISD::ZEXTLOAD, VT, LN0->getChain(),
                                          LN0->getBasePtr(), LN0->getSrcValue(),
-                                         LN0->getSrcValueOffset(), EVT);
+                                         LN0->getSrcValueOffset(), EVT,
+                                         LN0->isVolatile(), 
+                                         LN0->getAlignment());
       AddToWorkList(N);
       CombineTo(N0.Val, ExtLoad, ExtLoad.getValue(1));
       return SDOperand(N, 0);   // Return N so it doesn't get rechecked!
@@ -1320,7 +1324,8 @@
         AddToWorkList(NewPtr.Val);
         SDOperand Load =
           DAG.getExtLoad(ISD::ZEXTLOAD, VT, LN0->getChain(), NewPtr,
-                         LN0->getSrcValue(), LN0->getSrcValueOffset(), EVT);
+                         LN0->getSrcValue(), LN0->getSrcValueOffset(), EVT,
+                         LN0->isVolatile(), LN0->getAlignment());
         AddToWorkList(N);
         CombineTo(N0.Val, Load, Load.getValue(1));
         return SDOperand(N, 0);   // Return N so it doesn't get rechecked!
@@ -2120,7 +2125,8 @@
     SDOperand ExtLoad = DAG.getExtLoad(ISD::SEXTLOAD, VT, LN0->getChain(),
                                        LN0->getBasePtr(), LN0->getSrcValue(),
                                        LN0->getSrcValueOffset(),
-                                       N0.getValueType());
+                                       N0.getValueType(), 
+                                       LN0->isVolatile());
     CombineTo(N, ExtLoad);
     CombineTo(N0.Val, DAG.getNode(ISD::TRUNCATE, N0.getValueType(), ExtLoad),
               ExtLoad.getValue(1));
@@ -2136,7 +2142,9 @@
     if (!AfterLegalize || TLI.isLoadXLegal(ISD::SEXTLOAD, EVT)) {
       SDOperand ExtLoad = DAG.getExtLoad(ISD::SEXTLOAD, VT, LN0->getChain(),
                                          LN0->getBasePtr(), LN0->getSrcValue(),
-                                         LN0->getSrcValueOffset(), EVT);
+                                         LN0->getSrcValueOffset(), EVT,
+                                         LN0->isVolatile(), 
+                                         LN0->getAlignment());
       CombineTo(N, ExtLoad);
       CombineTo(N0.Val, DAG.getNode(ISD::TRUNCATE, N0.getValueType(), ExtLoad),
                 ExtLoad.getValue(1));
@@ -2212,7 +2220,9 @@
     SDOperand ExtLoad = DAG.getExtLoad(ISD::ZEXTLOAD, VT, LN0->getChain(),
                                        LN0->getBasePtr(), LN0->getSrcValue(),
                                        LN0->getSrcValueOffset(),
-                                       N0.getValueType());
+                                       N0.getValueType(),
+                                       LN0->isVolatile(), 
+                                       LN0->getAlignment());
     CombineTo(N, ExtLoad);
     CombineTo(N0.Val, DAG.getNode(ISD::TRUNCATE, N0.getValueType(), ExtLoad),
               ExtLoad.getValue(1));
@@ -2227,7 +2237,9 @@
     MVT::ValueType EVT = LN0->getLoadedVT();
     SDOperand ExtLoad = DAG.getExtLoad(ISD::ZEXTLOAD, VT, LN0->getChain(),
                                        LN0->getBasePtr(), LN0->getSrcValue(),
-                                       LN0->getSrcValueOffset(), EVT);
+                                       LN0->getSrcValueOffset(), EVT,
+                                       LN0->isVolatile(), 
+                                       LN0->getAlignment());
     CombineTo(N, ExtLoad);
     CombineTo(N0.Val, DAG.getNode(ISD::TRUNCATE, N0.getValueType(), ExtLoad),
               ExtLoad.getValue(1));
@@ -2303,7 +2315,9 @@
     SDOperand ExtLoad = DAG.getExtLoad(ISD::EXTLOAD, VT, LN0->getChain(),
                                        LN0->getBasePtr(), LN0->getSrcValue(),
                                        LN0->getSrcValueOffset(),
-                                       N0.getValueType());
+                                       N0.getValueType(),
+                                       LN0->isVolatile(), 
+                                       LN0->getAlignment());
     CombineTo(N, ExtLoad);
     CombineTo(N0.Val, DAG.getNode(ISD::TRUNCATE, N0.getValueType(), ExtLoad),
               ExtLoad.getValue(1));
@@ -2321,7 +2335,9 @@
     SDOperand ExtLoad = DAG.getExtLoad(LN0->getExtensionType(), VT,
                                        LN0->getChain(), LN0->getBasePtr(),
                                        LN0->getSrcValue(),
-                                       LN0->getSrcValueOffset(), EVT);
+                                       LN0->getSrcValueOffset(), EVT,
+                                       LN0->isVolatile(), 
+                                       LN0->getAlignment());
     CombineTo(N, ExtLoad);
     CombineTo(N0.Val, DAG.getNode(ISD::TRUNCATE, N0.getValueType(), ExtLoad),
               ExtLoad.getValue(1));
@@ -2398,9 +2414,11 @@
     AddToWorkList(NewPtr.Val);
     SDOperand Load = (ExtType == ISD::NON_EXTLOAD)
       ? DAG.getLoad(VT, LN0->getChain(), NewPtr,
-                    LN0->getSrcValue(), LN0->getSrcValueOffset())
+                    LN0->getSrcValue(), LN0->getSrcValueOffset(),
+                    LN0->isVolatile(), LN0->getAlignment())
       : DAG.getExtLoad(ExtType, VT, LN0->getChain(), NewPtr,
-                       LN0->getSrcValue(), LN0->getSrcValueOffset(), EVT);
+                       LN0->getSrcValue(), LN0->getSrcValueOffset(), EVT,
+                       LN0->isVolatile(), LN0->getAlignment());
     AddToWorkList(N);
     if (CombineSRL) {
       std::vector<SDNode*> NowDead;
@@ -2479,7 +2497,9 @@
     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
     SDOperand ExtLoad = DAG.getExtLoad(ISD::SEXTLOAD, VT, LN0->getChain(),
                                        LN0->getBasePtr(), LN0->getSrcValue(),
-                                       LN0->getSrcValueOffset(), EVT);
+                                       LN0->getSrcValueOffset(), EVT,
+                                       LN0->isVolatile(), 
+                                       LN0->getAlignment());
     CombineTo(N, ExtLoad);
     CombineTo(N0.Val, ExtLoad, ExtLoad.getValue(1));
     return SDOperand(N, 0);   // Return N so it doesn't get rechecked!
@@ -2492,7 +2512,9 @@
     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
     SDOperand ExtLoad = DAG.getExtLoad(ISD::SEXTLOAD, VT, LN0->getChain(),
                                        LN0->getBasePtr(), LN0->getSrcValue(),
-                                       LN0->getSrcValueOffset(), EVT);
+                                       LN0->getSrcValueOffset(), EVT,
+                                       LN0->isVolatile(), 
+                                       LN0->getAlignment());
     CombineTo(N, ExtLoad);
     CombineTo(N0.Val, ExtLoad, ExtLoad.getValue(1));
     return SDOperand(N, 0);   // Return N so it doesn't get rechecked!
@@ -2552,7 +2574,8 @@
   if (0 && ISD::isNON_EXTLoad(N0.Val) && N0.hasOneUse()) {
     LoadSDNode *LN0 = cast<LoadSDNode>(N0);
     SDOperand Load = DAG.getLoad(VT, LN0->getChain(), LN0->getBasePtr(),
-                                 LN0->getSrcValue(), LN0->getSrcValueOffset());
+                                 LN0->getSrcValue(), LN0->getSrcValueOffset(),
+                                 LN0->isVolatile(), LN0->getAlignment());
     AddToWorkList(N);
     CombineTo(N0.Val, DAG.getNode(ISD::BIT_CONVERT, N0.getValueType(), Load),
               Load.getValue(1));
@@ -2942,7 +2965,9 @@
     SDOperand ExtLoad = DAG.getExtLoad(ISD::EXTLOAD, VT, LN0->getChain(),
                                        LN0->getBasePtr(), LN0->getSrcValue(),
                                        LN0->getSrcValueOffset(),
-                                       N0.getValueType());
+                                       N0.getValueType(),
+                                       LN0->isVolatile(), 
+                                       LN0->getAlignment());
     CombineTo(N, ExtLoad);
     CombineTo(N0.Val, DAG.getNode(ISD::FP_ROUND, N0.getValueType(), ExtLoad),
               ExtLoad.getValue(1));
@@ -3331,13 +3356,16 @@
       // Replace the chain to void dependency.
       if (LD->getExtensionType() == ISD::NON_EXTLOAD) {
         ReplLoad = DAG.getLoad(N->getValueType(0), BetterChain, Ptr,
-                              LD->getSrcValue(), LD->getSrcValueOffset());
+                              LD->getSrcValue(), LD->getSrcValueOffset(),
+                              LD->isVolatile(), LD->getAlignment());
       } else {
         ReplLoad = DAG.getExtLoad(LD->getExtensionType(),
                                   LD->getValueType(0),
                                   BetterChain, Ptr, LD->getSrcValue(),
                                   LD->getSrcValueOffset(),
-                                  LD->getLoadedVT());
+                                  LD->getLoadedVT(),
+                                  LD->isVolatile(), 
+                                  LD->getAlignment());
       }
 
       // Create token factor to keep old chain connected.
@@ -4040,13 +4068,17 @@
           if (LLD->getExtensionType() == ISD::NON_EXTLOAD)
             Load = DAG.getLoad(TheSelect->getValueType(0), LLD->getChain(),
                                Addr,LLD->getSrcValue(), 
-                               LLD->getSrcValueOffset());
+                               LLD->getSrcValueOffset(),
+                               LLD->isVolatile(), 
+                               LLD->getAlignment());
           else {
             Load = DAG.getExtLoad(LLD->getExtensionType(),
                                   TheSelect->getValueType(0),
                                   LLD->getChain(), Addr, LLD->getSrcValue(),
                                   LLD->getSrcValueOffset(),
-                                  LLD->getLoadedVT());
+                                  LLD->getLoadedVT(),
+                                  LLD->isVolatile(), 
+                                  LLD->getAlignment());
           }
           // Users of the select now use the result of the load.
           CombineTo(TheSelect, Load);
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 75fbf8a..7562f66 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -20,6 +20,7 @@
 #include "llvm/CodeGen/MachineBasicBlock.h"
 #include "llvm/CodeGen/MachineConstantPool.h"
 #include "llvm/Support/MathExtras.h"
+#include "llvm/Target/TargetData.h"
 #include "llvm/Target/MRegisterInfo.h"
 #include "llvm/Target/TargetLowering.h"
 #include "llvm/Target/TargetInstrInfo.h"
@@ -1539,9 +1540,7 @@
 SDOperand SelectionDAG::getLoad(MVT::ValueType VT,
                                 SDOperand Chain, SDOperand Ptr,
                                 const Value *SV, int SVOffset,
-                                bool isVolatile) {
-  // FIXME: Alignment == 1 for now.
-  unsigned Alignment = 1;
+                                bool isVolatile, unsigned Alignment) {
   SDVTList VTs = getVTList(VT, MVT::Other);
   SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
   SDOperand Ops[] = { Chain, Ptr, Undef };
@@ -1557,6 +1556,10 @@
   void *IP = 0;
   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
     return SDOperand(E, 0);
+  if (Alignment == 0) { // Ensure that codegen never sees alignment 0
+    const Type *Ty = MVT::getTypeForValueType(VT);
+    Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
+  }
   SDNode *N = new LoadSDNode(Ops, VTs, ISD::UNINDEXED,
                              ISD::NON_EXTLOAD, VT, SV, SVOffset, Alignment,
                              isVolatile);
@@ -1569,7 +1572,7 @@
                                    SDOperand Chain, SDOperand Ptr,
                                    const Value *SV,
                                    int SVOffset, MVT::ValueType EVT,
-                                   bool isVolatile) {
+                                   bool isVolatile, unsigned Alignment) {
   // If they are asking for an extending load from/to the same thing, return a
   // normal load.
   if (VT == EVT)
@@ -1584,8 +1587,6 @@
   assert(MVT::isInteger(VT) == MVT::isInteger(EVT) &&
          "Cannot convert from FP to Int or Int -> FP!");
 
-  // FIXME: Alignment == 1 for now.
-  unsigned Alignment = 1;
   SDVTList VTs = getVTList(VT, MVT::Other);
   SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
   SDOperand Ops[] = { Chain, Ptr, Undef };
@@ -1601,6 +1602,10 @@
   void *IP = 0;
   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
     return SDOperand(E, 0);
+  if (Alignment == 0) { // Ensure that codegen never sees alignment 0
+    const Type *Ty = MVT::getTypeForValueType(VT);
+    Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
+  }
   SDNode *N = new LoadSDNode(Ops, VTs, ISD::UNINDEXED, ExtType, EVT,
                              SV, SVOffset, Alignment, isVolatile);
   CSEMap.InsertNode(N, IP);
@@ -1648,11 +1653,9 @@
 
 SDOperand SelectionDAG::getStore(SDOperand Chain, SDOperand Val,
                                  SDOperand Ptr, const Value *SV, int SVOffset,
-                                 bool isVolatile) {
+                                 bool isVolatile, unsigned Alignment) {
   MVT::ValueType VT = Val.getValueType();
 
-  // FIXME: Alignment == 1 for now.
-  unsigned Alignment = 1;
   SDVTList VTs = getVTList(MVT::Other);
   SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
   SDOperand Ops[] = { Chain, Val, Ptr, Undef };
@@ -1668,6 +1671,10 @@
   void *IP = 0;
   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
     return SDOperand(E, 0);
+  if (Alignment == 0) { // Ensure that codegen never sees alignment 0
+    const Type *Ty = MVT::getTypeForValueType(VT);
+    Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
+  }
   SDNode *N = new StoreSDNode(Ops, VTs, ISD::UNINDEXED, false,
                               VT, SV, SVOffset, Alignment, isVolatile);
   CSEMap.InsertNode(N, IP);
@@ -1678,7 +1685,7 @@
 SDOperand SelectionDAG::getTruncStore(SDOperand Chain, SDOperand Val,
                                       SDOperand Ptr, const Value *SV,
                                       int SVOffset, MVT::ValueType SVT,
-                                      bool isVolatile) {
+                                      bool isVolatile, unsigned Alignment) {
   MVT::ValueType VT = Val.getValueType();
   bool isTrunc = VT != SVT;
 
@@ -1686,8 +1693,6 @@
   assert(MVT::isInteger(VT) == MVT::isInteger(SVT) &&
          "Can't do FP-INT conversion!");
 
-  // FIXME: Alignment == 1 for now.
-  unsigned Alignment = 1;
   SDVTList VTs = getVTList(MVT::Other);
   SDOperand Undef = getNode(ISD::UNDEF, Ptr.getValueType());
   SDOperand Ops[] = { Chain, Val, Ptr, Undef };
@@ -1703,6 +1708,10 @@
   void *IP = 0;
   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
     return SDOperand(E, 0);
+  if (Alignment == 0) { // Ensure that codegen never sees alignment 0
+    const Type *Ty = MVT::getTypeForValueType(VT);
+    Alignment = TLI.getTargetData()->getABITypeAlignment(Ty);
+  }
   SDNode *N = new StoreSDNode(Ops, VTs, ISD::UNINDEXED, isTrunc,
                               SVT, SV, SVOffset, Alignment, isVolatile);
   CSEMap.InsertNode(N, IP);
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index e009488..f2833c7 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -498,7 +498,7 @@
 
   SDOperand getLoadFrom(const Type *Ty, SDOperand Ptr,
                         const Value *SV, SDOperand Root,
-                        bool isVolatile);
+                        bool isVolatile, unsigned Alignment);
 
   SDOperand getIntPtrConstant(uint64_t Val) {
     return DAG.getConstant(Val, TLI.getPointerTy());
@@ -2313,19 +2313,21 @@
   }
 
   setValue(&I, getLoadFrom(I.getType(), Ptr, I.getOperand(0),
-                           Root, I.isVolatile()));
+                           Root, I.isVolatile(), I.getAlignment()));
 }
 
 SDOperand SelectionDAGLowering::getLoadFrom(const Type *Ty, SDOperand Ptr,
                                             const Value *SV, SDOperand Root,
-                                            bool isVolatile) {
+                                            bool isVolatile, 
+                                            unsigned Alignment) {
   SDOperand L;
   if (const VectorType *PTy = dyn_cast<VectorType>(Ty)) {
     MVT::ValueType PVT = TLI.getValueType(PTy->getElementType());
     L = DAG.getVecLoad(PTy->getNumElements(), PVT, Root, Ptr,
                        DAG.getSrcValue(SV));
   } else {
-    L = DAG.getLoad(TLI.getValueType(Ty), Root, Ptr, SV, 0, isVolatile);
+    L = DAG.getLoad(TLI.getValueType(Ty), Root, Ptr, SV, 0, 
+                    isVolatile, Alignment);
   }
 
   if (isVolatile)
@@ -2342,7 +2344,7 @@
   SDOperand Src = getValue(SrcV);
   SDOperand Ptr = getValue(I.getOperand(1));
   DAG.setRoot(DAG.getStore(getRoot(), Src, Ptr, I.getOperand(1), 0,
-                           I.isVolatile()));
+                           I.isVolatile(), I.getAlignment()));
 }
 
 /// IntrinsicCannotAccessMemory - Return true if the specified intrinsic cannot
diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp
index da3b1d7..8895eac 100644
--- a/lib/VMCore/AsmWriter.cpp
+++ b/lib/VMCore/AsmWriter.cpp
@@ -1307,6 +1307,13 @@
       writeOperand(I.getOperand(i), PrintAllTypes);
     }
   }
+  
+  // Print post operand alignment for load/store
+  if (isa<LoadInst>(I) && cast<LoadInst>(I).getAlignment()) {
+    Out << ", align " << cast<LoadInst>(I).getAlignment();
+  } else if (isa<StoreInst>(I) && cast<StoreInst>(I).getAlignment()) {
+    Out << ", align " << cast<StoreInst>(I).getAlignment();
+  }
 
   printInfoComment(I);
   Out << "\n";
diff --git a/lib/VMCore/Instructions.cpp b/lib/VMCore/Instructions.cpp
index bfda46d..91f3b58 100644
--- a/lib/VMCore/Instructions.cpp
+++ b/lib/VMCore/Instructions.cpp
@@ -20,6 +20,7 @@
 #include "llvm/ParameterAttributes.h"
 #include "llvm/Support/CallSite.h"
 #include "llvm/Support/ConstantRange.h"
+#include "llvm/Support/MathExtras.h"
 using namespace llvm;
 
 unsigned CallSite::getCallingConv() const {
@@ -685,6 +686,7 @@
   : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
                      Load, Ptr, InsertBef) {
   setVolatile(false);
+  setAlignment(0);
   AssertOK();
   setName(Name);
 }
@@ -693,6 +695,7 @@
   : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
                      Load, Ptr, InsertAE) {
   setVolatile(false);
+  setAlignment(0);
   AssertOK();
   setName(Name);
 }
@@ -702,6 +705,17 @@
   : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
                      Load, Ptr, InsertBef) {
   setVolatile(isVolatile);
+  setAlignment(0);
+  AssertOK();
+  setName(Name);
+}
+
+LoadInst::LoadInst(Value *Ptr, const std::string &Name, bool isVolatile, 
+                   unsigned Align, Instruction *InsertBef)
+  : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
+                     Load, Ptr, InsertBef) {
+  setVolatile(isVolatile);
+  setAlignment(Align);
   AssertOK();
   setName(Name);
 }
@@ -711,6 +725,7 @@
   : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
                      Load, Ptr, InsertAE) {
   setVolatile(isVolatile);
+  setAlignment(0);
   AssertOK();
   setName(Name);
 }
@@ -721,6 +736,7 @@
   : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
                      Load, Ptr, InsertBef) {
   setVolatile(false);
+  setAlignment(0);
   AssertOK();
   if (Name && Name[0]) setName(Name);
 }
@@ -729,6 +745,7 @@
   : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
                      Load, Ptr, InsertAE) {
   setVolatile(false);
+  setAlignment(0);
   AssertOK();
   if (Name && Name[0]) setName(Name);
 }
@@ -738,6 +755,7 @@
 : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
                    Load, Ptr, InsertBef) {
   setVolatile(isVolatile);
+  setAlignment(0);
   AssertOK();
   if (Name && Name[0]) setName(Name);
 }
@@ -747,10 +765,15 @@
   : UnaryInstruction(cast<PointerType>(Ptr->getType())->getElementType(),
                      Load, Ptr, InsertAE) {
   setVolatile(isVolatile);
+  setAlignment(0);
   AssertOK();
   if (Name && Name[0]) setName(Name);
 }
 
+void LoadInst::setAlignment(unsigned Align) {
+  assert((Align & (Align-1)) == 0 && "Alignment is not a power of 2!");
+  SubclassData = (SubclassData & 1) | ((Log2_32(Align)+1)<<1);
+}
 
 //===----------------------------------------------------------------------===//
 //                           StoreInst Implementation
@@ -770,6 +793,7 @@
   Ops[0].init(val, this);
   Ops[1].init(addr, this);
   setVolatile(false);
+  setAlignment(0);
   AssertOK();
 }
 
@@ -778,6 +802,7 @@
   Ops[0].init(val, this);
   Ops[1].init(addr, this);
   setVolatile(false);
+  setAlignment(0);
   AssertOK();
 }
 
@@ -787,6 +812,17 @@
   Ops[0].init(val, this);
   Ops[1].init(addr, this);
   setVolatile(isVolatile);
+  setAlignment(0);
+  AssertOK();
+}
+
+StoreInst::StoreInst(Value *val, Value *addr, bool isVolatile,
+                     unsigned Align, Instruction *InsertBefore)
+  : Instruction(Type::VoidTy, Store, Ops, 2, InsertBefore) {
+  Ops[0].init(val, this);
+  Ops[1].init(addr, this);
+  setVolatile(isVolatile);
+  setAlignment(Align);
   AssertOK();
 }
 
@@ -796,9 +832,15 @@
   Ops[0].init(val, this);
   Ops[1].init(addr, this);
   setVolatile(isVolatile);
+  setAlignment(0);
   AssertOK();
 }
 
+void StoreInst::setAlignment(unsigned Align) {
+  assert((Align & (Align-1)) == 0 && "Alignment is not a power of 2!");
+  SubclassData = (SubclassData & 1) | ((Log2_32(Align)+1)<<1);
+}
+
 //===----------------------------------------------------------------------===//
 //                       GetElementPtrInst Implementation
 //===----------------------------------------------------------------------===//
