/* 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,
     OPAQUE = 304,
     EXTERNAL = 305,
     TARGET = 306,
     TRIPLE = 307,
     ALIGN = 308,
     ADDRSPACE = 309,
     DEPLIBS = 310,
     CALL = 311,
     TAIL = 312,
     ASM_TOK = 313,
     MODULE = 314,
     SIDEEFFECT = 315,
     CC_TOK = 316,
     CCC_TOK = 317,
     FASTCC_TOK = 318,
     COLDCC_TOK = 319,
     X86_STDCALLCC_TOK = 320,
     X86_FASTCALLCC_TOK = 321,
     DATALAYOUT = 322,
     RET = 323,
     BR = 324,
     SWITCH = 325,
     INVOKE = 326,
     UNWIND = 327,
     UNREACHABLE = 328,
     ADD = 329,
     SUB = 330,
     MUL = 331,
     UDIV = 332,
     SDIV = 333,
     FDIV = 334,
     UREM = 335,
     SREM = 336,
     FREM = 337,
     AND = 338,
     OR = 339,
     XOR = 340,
     SHL = 341,
     LSHR = 342,
     ASHR = 343,
     ICMP = 344,
     FCMP = 345,
     EQ = 346,
     NE = 347,
     SLT = 348,
     SGT = 349,
     SLE = 350,
     SGE = 351,
     ULT = 352,
     UGT = 353,
     ULE = 354,
     UGE = 355,
     OEQ = 356,
     ONE = 357,
     OLT = 358,
     OGT = 359,
     OLE = 360,
     OGE = 361,
     ORD = 362,
     UNO = 363,
     UEQ = 364,
     UNE = 365,
     MALLOC = 366,
     ALLOCA = 367,
     FREE = 368,
     LOAD = 369,
     STORE = 370,
     GETELEMENTPTR = 371,
     TRUNC = 372,
     ZEXT = 373,
     SEXT = 374,
     FPTRUNC = 375,
     FPEXT = 376,
     BITCAST = 377,
     UITOFP = 378,
     SITOFP = 379,
     FPTOUI = 380,
     FPTOSI = 381,
     INTTOPTR = 382,
     PTRTOINT = 383,
     PHI_TOK = 384,
     SELECT = 385,
     VAARG = 386,
     EXTRACTELEMENT = 387,
     INSERTELEMENT = 388,
     SHUFFLEVECTOR = 389,
     GETRESULT = 390,
     SIGNEXT = 391,
     ZEROEXT = 392,
     NORETURN = 393,
     INREG = 394,
     SRET = 395,
     NOUNWIND = 396,
     NOALIAS = 397,
     BYVAL = 398,
     NEST = 399,
     READNONE = 400,
     READONLY = 401,
     GC = 402,
     DEFAULT = 403,
     HIDDEN = 404,
     PROTECTED = 405
   };
#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 OPAQUE 304
#define EXTERNAL 305
#define TARGET 306
#define TRIPLE 307
#define ALIGN 308
#define ADDRSPACE 309
#define DEPLIBS 310
#define CALL 311
#define TAIL 312
#define ASM_TOK 313
#define MODULE 314
#define SIDEEFFECT 315
#define CC_TOK 316
#define CCC_TOK 317
#define FASTCC_TOK 318
#define COLDCC_TOK 319
#define X86_STDCALLCC_TOK 320
#define X86_FASTCALLCC_TOK 321
#define DATALAYOUT 322
#define RET 323
#define BR 324
#define SWITCH 325
#define INVOKE 326
#define UNWIND 327
#define UNREACHABLE 328
#define ADD 329
#define SUB 330
#define MUL 331
#define UDIV 332
#define SDIV 333
#define FDIV 334
#define UREM 335
#define SREM 336
#define FREM 337
#define AND 338
#define OR 339
#define XOR 340
#define SHL 341
#define LSHR 342
#define ASHR 343
#define ICMP 344
#define FCMP 345
#define EQ 346
#define NE 347
#define SLT 348
#define SGT 349
#define SLE 350
#define SGE 351
#define ULT 352
#define UGT 353
#define ULE 354
#define UGE 355
#define OEQ 356
#define ONE 357
#define OLT 358
#define OGT 359
#define OLE 360
#define OGE 361
#define ORD 362
#define UNO 363
#define UEQ 364
#define UNE 365
#define MALLOC 366
#define ALLOCA 367
#define FREE 368
#define LOAD 369
#define STORE 370
#define GETELEMENTPTR 371
#define TRUNC 372
#define ZEXT 373
#define SEXT 374
#define FPTRUNC 375
#define FPEXT 376
#define BITCAST 377
#define UITOFP 378
#define SITOFP 379
#define FPTOUI 380
#define FPTOSI 381
#define INTTOPTR 382
#define PTRTOINT 383
#define PHI_TOK 384
#define SELECT 385
#define VAARG 386
#define EXTRACTELEMENT 387
#define INSERTELEMENT 388
#define SHUFFLEVECTOR 389
#define GETRESULT 390
#define SIGNEXT 391
#define ZEROEXT 392
#define NORETURN 393
#define INREG 394
#define SRET 395
#define NOUNWIND 396
#define NOALIAS 397
#define BYVAL 398
#define NEST 399
#define READNONE 400
#define READONLY 401
#define GC 402
#define DEFAULT 403
#define HIDDEN 404
#define PROTECTED 405




#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
#line 949 "/Users/sabre/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 396 "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;

