/* A Bison parser, made by GNU Bison 2.3.  */

/* Skeleton interface for Bison's Yacc-like parsers in C

   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
   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, you may create a larger work that contains
   part or all of the Bison parser skeleton and distribute that work
   under terms of your choice, so long as that work isn't itself a
   parser generator using the skeleton or a modified version thereof
   as a parser skeleton.  Alternatively, if you modify or redistribute
   the parser skeleton itself, you may (at your option) remove this
   special exception, which will cause the skeleton and the resulting
   Bison output files to be licensed under the GNU General Public
   License without this special exception.

   This special exception was added by the Free Software Foundation in
   version 2.2 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,
     X86_FP80 = 269,
     FP128 = 270,
     PPC_FP128 = 271,
     LABEL = 272,
     TYPE = 273,
     LOCALVAR = 274,
     GLOBALVAR = 275,
     LABELSTR = 276,
     STRINGCONSTANT = 277,
     ATSTRINGCONSTANT = 278,
     PCTSTRINGCONSTANT = 279,
     ZEROINITIALIZER = 280,
     TRUETOK = 281,
     FALSETOK = 282,
     BEGINTOK = 283,
     ENDTOK = 284,
     DECLARE = 285,
     DEFINE = 286,
     GLOBAL = 287,
     CONSTANT = 288,
     SECTION = 289,
     ALIAS = 290,
     VOLATILE = 291,
     THREAD_LOCAL = 292,
     TO = 293,
     DOTDOTDOT = 294,
     NULL_TOK = 295,
     UNDEF = 296,
     INTERNAL = 297,
     LINKONCE = 298,
     WEAK = 299,
     APPENDING = 300,
     DLLIMPORT = 301,
     DLLEXPORT = 302,
     EXTERN_WEAK = 303,
     COMMON = 304,
     OPAQUE = 305,
     EXTERNAL = 306,
     TARGET = 307,
     TRIPLE = 308,
     ALIGN = 309,
     ADDRSPACE = 310,
     DEPLIBS = 311,
     CALL = 312,
     TAIL = 313,
     ASM_TOK = 314,
     MODULE = 315,
     SIDEEFFECT = 316,
     CC_TOK = 317,
     CCC_TOK = 318,
     FASTCC_TOK = 319,
     COLDCC_TOK = 320,
     X86_STDCALLCC_TOK = 321,
     X86_FASTCALLCC_TOK = 322,
     DATALAYOUT = 323,
     RET = 324,
     BR = 325,
     SWITCH = 326,
     INVOKE = 327,
     UNWIND = 328,
     UNREACHABLE = 329,
     ADD = 330,
     SUB = 331,
     MUL = 332,
     UDIV = 333,
     SDIV = 334,
     FDIV = 335,
     UREM = 336,
     SREM = 337,
     FREM = 338,
     AND = 339,
     OR = 340,
     XOR = 341,
     SHL = 342,
     LSHR = 343,
     ASHR = 344,
     ICMP = 345,
     FCMP = 346,
     VICMP = 347,
     VFCMP = 348,
     EQ = 349,
     NE = 350,
     SLT = 351,
     SGT = 352,
     SLE = 353,
     SGE = 354,
     ULT = 355,
     UGT = 356,
     ULE = 357,
     UGE = 358,
     OEQ = 359,
     ONE = 360,
     OLT = 361,
     OGT = 362,
     OLE = 363,
     OGE = 364,
     ORD = 365,
     UNO = 366,
     UEQ = 367,
     UNE = 368,
     MALLOC = 369,
     ALLOCA = 370,
     FREE = 371,
     LOAD = 372,
     STORE = 373,
     GETELEMENTPTR = 374,
     TRUNC = 375,
     ZEXT = 376,
     SEXT = 377,
     FPTRUNC = 378,
     FPEXT = 379,
     BITCAST = 380,
     UITOFP = 381,
     SITOFP = 382,
     FPTOUI = 383,
     FPTOSI = 384,
     INTTOPTR = 385,
     PTRTOINT = 386,
     PHI_TOK = 387,
     SELECT = 388,
     VAARG = 389,
     EXTRACTELEMENT = 390,
     INSERTELEMENT = 391,
     SHUFFLEVECTOR = 392,
     GETRESULT = 393,
     SIGNEXT = 394,
     ZEROEXT = 395,
     NORETURN = 396,
     INREG = 397,
     SRET = 398,
     NOUNWIND = 399,
     NOALIAS = 400,
     BYVAL = 401,
     NEST = 402,
     READNONE = 403,
     READONLY = 404,
     GC = 405,
     DEFAULT = 406,
     HIDDEN = 407,
     PROTECTED = 408
   };
#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 X86_FP80 269
#define FP128 270
#define PPC_FP128 271
#define LABEL 272
#define TYPE 273
#define LOCALVAR 274
#define GLOBALVAR 275
#define LABELSTR 276
#define STRINGCONSTANT 277
#define ATSTRINGCONSTANT 278
#define PCTSTRINGCONSTANT 279
#define ZEROINITIALIZER 280
#define TRUETOK 281
#define FALSETOK 282
#define BEGINTOK 283
#define ENDTOK 284
#define DECLARE 285
#define DEFINE 286
#define GLOBAL 287
#define CONSTANT 288
#define SECTION 289
#define ALIAS 290
#define VOLATILE 291
#define THREAD_LOCAL 292
#define TO 293
#define DOTDOTDOT 294
#define NULL_TOK 295
#define UNDEF 296
#define INTERNAL 297
#define LINKONCE 298
#define WEAK 299
#define APPENDING 300
#define DLLIMPORT 301
#define DLLEXPORT 302
#define EXTERN_WEAK 303
#define COMMON 304
#define OPAQUE 305
#define EXTERNAL 306
#define TARGET 307
#define TRIPLE 308
#define ALIGN 309
#define ADDRSPACE 310
#define DEPLIBS 311
#define CALL 312
#define TAIL 313
#define ASM_TOK 314
#define MODULE 315
#define SIDEEFFECT 316
#define CC_TOK 317
#define CCC_TOK 318
#define FASTCC_TOK 319
#define COLDCC_TOK 320
#define X86_STDCALLCC_TOK 321
#define X86_FASTCALLCC_TOK 322
#define DATALAYOUT 323
#define RET 324
#define BR 325
#define SWITCH 326
#define INVOKE 327
#define UNWIND 328
#define UNREACHABLE 329
#define ADD 330
#define SUB 331
#define MUL 332
#define UDIV 333
#define SDIV 334
#define FDIV 335
#define UREM 336
#define SREM 337
#define FREM 338
#define AND 339
#define OR 340
#define XOR 341
#define SHL 342
#define LSHR 343
#define ASHR 344
#define ICMP 345
#define FCMP 346
#define VICMP 347
#define VFCMP 348
#define EQ 349
#define NE 350
#define SLT 351
#define SGT 352
#define SLE 353
#define SGE 354
#define ULT 355
#define UGT 356
#define ULE 357
#define UGE 358
#define OEQ 359
#define ONE 360
#define OLT 361
#define OGT 362
#define OLE 363
#define OGE 364
#define ORD 365
#define UNO 366
#define UEQ 367
#define UNE 368
#define MALLOC 369
#define ALLOCA 370
#define FREE 371
#define LOAD 372
#define STORE 373
#define GETELEMENTPTR 374
#define TRUNC 375
#define ZEXT 376
#define SEXT 377
#define FPTRUNC 378
#define FPEXT 379
#define BITCAST 380
#define UITOFP 381
#define SITOFP 382
#define FPTOUI 383
#define FPTOSI 384
#define INTTOPTR 385
#define PTRTOINT 386
#define PHI_TOK 387
#define SELECT 388
#define VAARG 389
#define EXTRACTELEMENT 390
#define INSERTELEMENT 391
#define SHUFFLEVECTOR 392
#define GETRESULT 393
#define SIGNEXT 394
#define ZEROEXT 395
#define NORETURN 396
#define INREG 397
#define SRET 398
#define NOUNWIND 399
#define NOALIAS 400
#define BYVAL 401
#define NEST 402
#define READNONE 403
#define READONLY 404
#define GC 405
#define DEFAULT 406
#define HIDDEN 407
#define PROTECTED 408




#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
#line 949 "/Users/malichus/Source/LLVM/src/svn/llvm/lib/AsmParser/llvmAsmParser.y"
{
  llvm::Module                           *ModuleVal;
  llvm::Function                         *FunctionVal;
  llvm::BasicBlock                       *BasicBlockVal;
  llvm::TerminatorInst                   *TermInstVal;
  llvm::Instruction                      *InstVal;
  llvm::Constant                         *ConstVal;

  const llvm::Type                       *PrimType;
  std::list<llvm::PATypeHolder>          *TypeList;
  llvm::PATypeHolder                     *TypeVal;
  llvm::Value                            *ValueVal;
  std::vector<llvm::Value*>              *ValueList;
  llvm::ArgListType                      *ArgList;
  llvm::TypeWithAttrs                     TypeWithAttrs;
  llvm::TypeWithAttrsList                *TypeWithAttrsList;
  llvm::ParamList                        *ParamList;

  // Represent the RHS of PHI node
  std::list<std::pair<llvm::Value*,
                      llvm::BasicBlock*> > *PHIList;
  std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
  std::vector<llvm::Constant*>           *ConstVector;

  llvm::GlobalValue::LinkageTypes         Linkage;
  llvm::GlobalValue::VisibilityTypes      Visibility;
  llvm::ParameterAttributes         ParamAttrs;
  llvm::APInt                       *APIntVal;
  int64_t                           SInt64Val;
  uint64_t                          UInt64Val;
  int                               SIntVal;
  unsigned                          UIntVal;
  llvm::APFloat                    *FPVal;
  bool                              BoolVal;

  std::string                      *StrVal;   // This memory must be deleted
  llvm::ValID                       ValIDVal;

  llvm::Instruction::BinaryOps      BinaryOpVal;
  llvm::Instruction::TermOps        TermOpVal;
  llvm::Instruction::MemoryOps      MemOpVal;
  llvm::Instruction::CastOps        CastOpVal;
  llvm::Instruction::OtherOps       OtherOpVal;
  llvm::ICmpInst::Predicate         IPredicate;
  llvm::FCmpInst::Predicate         FPredicate;
}
/* Line 1529 of yacc.c.  */
#line 402 "llvmAsmParser.tab.h"
	YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
#endif

extern YYSTYPE llvmAsmlval;

