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


extern YYSTYPE llvmAsmlval;
