typedef union {
  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::ValueRefList                     *ValueRefList;

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


extern YYSTYPE llvmAsmlval;
