1193323Sed//===- LLVMBitCodes.h - Enum values for the LLVM bitcode format -*- C++ -*-===// 2193323Sed// 3193323Sed// The LLVM Compiler Infrastructure 4193323Sed// 5193323Sed// This file is distributed under the University of Illinois Open Source 6193323Sed// License. See LICENSE.TXT for details. 7193323Sed// 8193323Sed//===----------------------------------------------------------------------===// 9193323Sed// 10193323Sed// This header defines Bitcode enum values for LLVM IR bitcode files. 11193323Sed// 12193323Sed// The enum values defined in this file should be considered permanent. If 13193323Sed// new features are added, they should have values added at the end of the 14193323Sed// respective lists. 15193323Sed// 16193323Sed//===----------------------------------------------------------------------===// 17193323Sed 18193323Sed#ifndef LLVM_BITCODE_LLVMBITCODES_H 19193323Sed#define LLVM_BITCODE_LLVMBITCODES_H 20193323Sed 21193323Sed#include "llvm/Bitcode/BitCodes.h" 22193323Sed 23193323Sednamespace llvm { 24193323Sednamespace bitc { 25193323Sed // The only top-level block type defined is for a module. 26193323Sed enum BlockIDs { 27193323Sed // Blocks 28193323Sed MODULE_BLOCK_ID = FIRST_APPLICATION_BLOCKID, 29193323Sed 30193323Sed // Module sub-block id's. 31193323Sed PARAMATTR_BLOCK_ID, 32249423Sdim PARAMATTR_GROUP_BLOCK_ID, 33234353Sdim 34193323Sed CONSTANTS_BLOCK_ID, 35193323Sed FUNCTION_BLOCK_ID, 36249423Sdim 37249423Sdim UNUSED_ID1, 38249423Sdim 39198090Srdivacky VALUE_SYMTAB_BLOCK_ID, 40198090Srdivacky METADATA_BLOCK_ID, 41224145Sdim METADATA_ATTACHMENT_ID, 42249423Sdim 43234353Sdim TYPE_BLOCK_ID_NEW, 44234353Sdim 45234353Sdim USELIST_BLOCK_ID 46193323Sed }; 47193323Sed 48193323Sed 49193323Sed /// MODULE blocks have a number of optional fields and subblocks. 50193323Sed enum ModuleCodes { 51193323Sed MODULE_CODE_VERSION = 1, // VERSION: [version#] 52193323Sed MODULE_CODE_TRIPLE = 2, // TRIPLE: [strchr x N] 53193323Sed MODULE_CODE_DATALAYOUT = 3, // DATALAYOUT: [strchr x N] 54193323Sed MODULE_CODE_ASM = 4, // ASM: [strchr x N] 55193323Sed MODULE_CODE_SECTIONNAME = 5, // SECTIONNAME: [strchr x N] 56249423Sdim 57249423Sdim // FIXME: Remove DEPLIB in 4.0. 58193323Sed MODULE_CODE_DEPLIB = 6, // DEPLIB: [strchr x N] 59193323Sed 60193323Sed // GLOBALVAR: [pointer type, isconst, initid, 61193323Sed // linkage, alignment, section, visibility, threadlocal] 62193323Sed MODULE_CODE_GLOBALVAR = 7, 63193323Sed 64193323Sed // FUNCTION: [type, callingconv, isproto, linkage, paramattrs, alignment, 65234353Sdim // section, visibility, gc, unnamed_addr] 66193323Sed MODULE_CODE_FUNCTION = 8, 67193323Sed 68234353Sdim // ALIAS: [alias type, aliasee val#, linkage, visibility] 69193323Sed MODULE_CODE_ALIAS = 9, 70193323Sed 71249423Sdim // MODULE_CODE_PURGEVALS: [numvals] 72193323Sed MODULE_CODE_PURGEVALS = 10, 73193323Sed 74193323Sed MODULE_CODE_GCNAME = 11 // GCNAME: [strchr x N] 75193323Sed }; 76193323Sed 77193323Sed /// PARAMATTR blocks have code for defining a parameter attribute set. 78193323Sed enum AttributeCodes { 79249423Sdim // FIXME: Remove `PARAMATTR_CODE_ENTRY_OLD' in 4.0 80249423Sdim PARAMATTR_CODE_ENTRY_OLD = 1, // ENTRY: [paramidx0, attr0, 81249423Sdim // paramidx1, attr1...] 82249423Sdim PARAMATTR_CODE_ENTRY = 2, // ENTRY: [paramidx0, attrgrp0, 83249423Sdim // paramidx1, attrgrp1, ...] 84249423Sdim PARAMATTR_GRP_CODE_ENTRY = 3 // ENTRY: [id, attr0, att1, ...] 85193323Sed }; 86193323Sed 87193323Sed /// TYPE blocks have codes for each type primitive they use. 88193323Sed enum TypeCodes { 89224145Sdim TYPE_CODE_NUMENTRY = 1, // NUMENTRY: [numentries] 90193323Sed 91193323Sed // Type Codes 92224145Sdim TYPE_CODE_VOID = 2, // VOID 93224145Sdim TYPE_CODE_FLOAT = 3, // FLOAT 94224145Sdim TYPE_CODE_DOUBLE = 4, // DOUBLE 95224145Sdim TYPE_CODE_LABEL = 5, // LABEL 96224145Sdim TYPE_CODE_OPAQUE = 6, // OPAQUE 97224145Sdim TYPE_CODE_INTEGER = 7, // INTEGER: [width] 98224145Sdim TYPE_CODE_POINTER = 8, // POINTER: [pointee type] 99234353Sdim 100234353Sdim TYPE_CODE_FUNCTION_OLD = 9, // FUNCTION: [vararg, attrid, retty, 101234353Sdim // paramty x N] 102249423Sdim 103234353Sdim TYPE_CODE_HALF = 10, // HALF 104249423Sdim 105224145Sdim TYPE_CODE_ARRAY = 11, // ARRAY: [numelts, eltty] 106224145Sdim TYPE_CODE_VECTOR = 12, // VECTOR: [numelts, eltty] 107193323Sed 108193323Sed // These are not with the other floating point types because they're 109193323Sed // a late addition, and putting them in the right place breaks 110193323Sed // binary compatibility. 111224145Sdim TYPE_CODE_X86_FP80 = 13, // X86 LONG DOUBLE 112224145Sdim TYPE_CODE_FP128 = 14, // LONG DOUBLE (112 bit mantissa) 113224145Sdim TYPE_CODE_PPC_FP128= 15, // PPC LONG DOUBLE (2 doubles) 114193323Sed 115224145Sdim TYPE_CODE_METADATA = 16, // METADATA 116218893Sdim 117224145Sdim TYPE_CODE_X86_MMX = 17, // X86 MMX 118249423Sdim 119224145Sdim TYPE_CODE_STRUCT_ANON = 18, // STRUCT_ANON: [ispacked, eltty x N] 120224145Sdim TYPE_CODE_STRUCT_NAME = 19, // STRUCT_NAME: [strchr x N] 121234353Sdim TYPE_CODE_STRUCT_NAMED = 20,// STRUCT_NAMED: [ispacked, eltty x N] 122234353Sdim 123234353Sdim TYPE_CODE_FUNCTION = 21 // FUNCTION: [vararg, retty, paramty x N] 124193323Sed }; 125193323Sed 126193323Sed // The type symbol table only has one code (TST_ENTRY_CODE). 127193323Sed enum TypeSymtabCodes { 128193323Sed TST_CODE_ENTRY = 1 // TST_ENTRY: [typeid, namechar x N] 129193323Sed }; 130193323Sed 131193323Sed // The value symbol table only has one code (VST_ENTRY_CODE). 132193323Sed enum ValueSymtabCodes { 133193323Sed VST_CODE_ENTRY = 1, // VST_ENTRY: [valid, namechar x N] 134193323Sed VST_CODE_BBENTRY = 2 // VST_BBENTRY: [bbid, namechar x N] 135193323Sed }; 136193323Sed 137198090Srdivacky enum MetadataCodes { 138198090Srdivacky METADATA_STRING = 1, // MDSTRING: [values] 139224145Sdim // 2 is unused. 140224145Sdim // 3 is unused. 141202375Srdivacky METADATA_NAME = 4, // STRING: [values] 142224145Sdim // 5 is unused. 143202375Srdivacky METADATA_KIND = 6, // [n x [id, name]] 144224145Sdim // 7 is unused. 145224145Sdim METADATA_NODE = 8, // NODE: [n x (type num, value num)] 146224145Sdim METADATA_FN_NODE = 9, // FN_NODE: [n x (type num, value num)] 147224145Sdim METADATA_NAMED_NODE = 10, // NAMED_NODE: [n x mdnodes] 148224145Sdim METADATA_ATTACHMENT = 11 // [m x [value, [n x [id, mdnode]]] 149198090Srdivacky }; 150249423Sdim 151193323Sed // The constants block (CONSTANTS_BLOCK_ID) describes emission for each 152193323Sed // constant and maintains an implicit current type value. 153193323Sed enum ConstantsCodes { 154193323Sed CST_CODE_SETTYPE = 1, // SETTYPE: [typeid] 155193323Sed CST_CODE_NULL = 2, // NULL 156193323Sed CST_CODE_UNDEF = 3, // UNDEF 157193323Sed CST_CODE_INTEGER = 4, // INTEGER: [intval] 158193323Sed CST_CODE_WIDE_INTEGER = 5, // WIDE_INTEGER: [n x intval] 159193323Sed CST_CODE_FLOAT = 6, // FLOAT: [fpval] 160193323Sed CST_CODE_AGGREGATE = 7, // AGGREGATE: [n x value number] 161193323Sed CST_CODE_STRING = 8, // STRING: [values] 162193323Sed CST_CODE_CSTRING = 9, // CSTRING: [values] 163193323Sed CST_CODE_CE_BINOP = 10, // CE_BINOP: [opcode, opval, opval] 164193323Sed CST_CODE_CE_CAST = 11, // CE_CAST: [opcode, opty, opval] 165193323Sed CST_CODE_CE_GEP = 12, // CE_GEP: [n x operands] 166193323Sed CST_CODE_CE_SELECT = 13, // CE_SELECT: [opval, opval, opval] 167193323Sed CST_CODE_CE_EXTRACTELT = 14, // CE_EXTRACTELT: [opty, opval, opval] 168193323Sed CST_CODE_CE_INSERTELT = 15, // CE_INSERTELT: [opval, opval, opval] 169193323Sed CST_CODE_CE_SHUFFLEVEC = 16, // CE_SHUFFLEVEC: [opval, opval, opval] 170193323Sed CST_CODE_CE_CMP = 17, // CE_CMP: [opty, opval, opval, pred] 171243830Sdim CST_CODE_INLINEASM_OLD = 18, // INLINEASM: [sideeffect|alignstack, 172243830Sdim // asmstr,conststr] 173193323Sed CST_CODE_CE_SHUFVEC_EX = 19, // SHUFVEC_EX: [opty, opval, opval, opval] 174198892Srdivacky CST_CODE_CE_INBOUNDS_GEP = 20,// INBOUNDS_GEP: [n x operands] 175234353Sdim CST_CODE_BLOCKADDRESS = 21, // CST_CODE_BLOCKADDRESS [fnty, fnval, bb#] 176243830Sdim CST_CODE_DATA = 22, // DATA: [n x elements] 177243830Sdim CST_CODE_INLINEASM = 23 // INLINEASM: [sideeffect|alignstack| 178243830Sdim // asmdialect,asmstr,conststr] 179193323Sed }; 180193323Sed 181193323Sed /// CastOpcodes - These are values used in the bitcode files to encode which 182193323Sed /// cast a CST_CODE_CE_CAST or a XXX refers to. The values of these enums 183193323Sed /// have no fixed relation to the LLVM IR enum values. Changing these will 184193323Sed /// break compatibility with old files. 185193323Sed enum CastOpcodes { 186193323Sed CAST_TRUNC = 0, 187193323Sed CAST_ZEXT = 1, 188193323Sed CAST_SEXT = 2, 189193323Sed CAST_FPTOUI = 3, 190193323Sed CAST_FPTOSI = 4, 191193323Sed CAST_UITOFP = 5, 192193323Sed CAST_SITOFP = 6, 193193323Sed CAST_FPTRUNC = 7, 194193323Sed CAST_FPEXT = 8, 195193323Sed CAST_PTRTOINT = 9, 196193323Sed CAST_INTTOPTR = 10, 197263508Sdim CAST_BITCAST = 11, 198263508Sdim CAST_ADDRSPACECAST = 12 199193323Sed }; 200193323Sed 201193323Sed /// BinaryOpcodes - These are values used in the bitcode files to encode which 202193323Sed /// binop a CST_CODE_CE_BINOP or a XXX refers to. The values of these enums 203193323Sed /// have no fixed relation to the LLVM IR enum values. Changing these will 204193323Sed /// break compatibility with old files. 205193323Sed enum BinaryOpcodes { 206193323Sed BINOP_ADD = 0, 207193323Sed BINOP_SUB = 1, 208193323Sed BINOP_MUL = 2, 209193323Sed BINOP_UDIV = 3, 210193323Sed BINOP_SDIV = 4, // overloaded for FP 211193323Sed BINOP_UREM = 5, 212193323Sed BINOP_SREM = 6, // overloaded for FP 213193323Sed BINOP_SHL = 7, 214193323Sed BINOP_LSHR = 8, 215193323Sed BINOP_ASHR = 9, 216193323Sed BINOP_AND = 10, 217193323Sed BINOP_OR = 11, 218193323Sed BINOP_XOR = 12 219193323Sed }; 220193323Sed 221226633Sdim /// These are values used in the bitcode files to encode AtomicRMW operations. 222226633Sdim /// The values of these enums have no fixed relation to the LLVM IR enum 223226633Sdim /// values. Changing these will break compatibility with old files. 224226633Sdim enum RMWOperations { 225226633Sdim RMW_XCHG = 0, 226226633Sdim RMW_ADD = 1, 227226633Sdim RMW_SUB = 2, 228226633Sdim RMW_AND = 3, 229226633Sdim RMW_NAND = 4, 230226633Sdim RMW_OR = 5, 231226633Sdim RMW_XOR = 6, 232226633Sdim RMW_MAX = 7, 233226633Sdim RMW_MIN = 8, 234226633Sdim RMW_UMAX = 9, 235226633Sdim RMW_UMIN = 10 236226633Sdim }; 237226633Sdim 238198090Srdivacky /// OverflowingBinaryOperatorOptionalFlags - Flags for serializing 239198090Srdivacky /// OverflowingBinaryOperator's SubclassOptionalData contents. 240198090Srdivacky enum OverflowingBinaryOperatorOptionalFlags { 241198090Srdivacky OBO_NO_UNSIGNED_WRAP = 0, 242198090Srdivacky OBO_NO_SIGNED_WRAP = 1 243198090Srdivacky }; 244193323Sed 245249423Sdim /// PossiblyExactOperatorOptionalFlags - Flags for serializing 246218893Sdim /// PossiblyExactOperator's SubclassOptionalData contents. 247218893Sdim enum PossiblyExactOperatorOptionalFlags { 248218893Sdim PEO_EXACT = 0 249198090Srdivacky }; 250198090Srdivacky 251226633Sdim /// Encoded AtomicOrdering values. 252226633Sdim enum AtomicOrderingCodes { 253226633Sdim ORDERING_NOTATOMIC = 0, 254226633Sdim ORDERING_UNORDERED = 1, 255226633Sdim ORDERING_MONOTONIC = 2, 256226633Sdim ORDERING_ACQUIRE = 3, 257226633Sdim ORDERING_RELEASE = 4, 258226633Sdim ORDERING_ACQREL = 5, 259226633Sdim ORDERING_SEQCST = 6 260226633Sdim }; 261226633Sdim 262226633Sdim /// Encoded SynchronizationScope values. 263226633Sdim enum AtomicSynchScopeCodes { 264226633Sdim SYNCHSCOPE_SINGLETHREAD = 0, 265226633Sdim SYNCHSCOPE_CROSSTHREAD = 1 266226633Sdim }; 267226633Sdim 268193323Sed // The function body block (FUNCTION_BLOCK_ID) describes function bodies. It 269193323Sed // can contain a constant block (CONSTANTS_BLOCK_ID). 270193323Sed enum FunctionCodes { 271193323Sed FUNC_CODE_DECLAREBLOCKS = 1, // DECLAREBLOCKS: [n] 272193323Sed 273193323Sed FUNC_CODE_INST_BINOP = 2, // BINOP: [opcode, ty, opval, opval] 274193323Sed FUNC_CODE_INST_CAST = 3, // CAST: [opcode, ty, opty, opval] 275193323Sed FUNC_CODE_INST_GEP = 4, // GEP: [n x operands] 276193323Sed FUNC_CODE_INST_SELECT = 5, // SELECT: [ty, opval, opval, opval] 277193323Sed FUNC_CODE_INST_EXTRACTELT = 6, // EXTRACTELT: [opty, opval, opval] 278193323Sed FUNC_CODE_INST_INSERTELT = 7, // INSERTELT: [ty, opval, opval, opval] 279193323Sed FUNC_CODE_INST_SHUFFLEVEC = 8, // SHUFFLEVEC: [ty, opval, opval, opval] 280193323Sed FUNC_CODE_INST_CMP = 9, // CMP: [opty, opval, opval, pred] 281193323Sed 282193323Sed FUNC_CODE_INST_RET = 10, // RET: [opty,opval<both optional>] 283193323Sed FUNC_CODE_INST_BR = 11, // BR: [bb#, bb#, cond] or [bb#] 284198892Srdivacky FUNC_CODE_INST_SWITCH = 12, // SWITCH: [opty, op0, op1, ...] 285193323Sed FUNC_CODE_INST_INVOKE = 13, // INVOKE: [attr, fnty, op0,op1, ...] 286234353Sdim // 14 is unused. 287193323Sed FUNC_CODE_INST_UNREACHABLE = 15, // UNREACHABLE 288193323Sed 289193323Sed FUNC_CODE_INST_PHI = 16, // PHI: [ty, val0,bb0, ...] 290224145Sdim // 17 is unused. 291224145Sdim // 18 is unused. 292193323Sed FUNC_CODE_INST_ALLOCA = 19, // ALLOCA: [instty, op, align] 293193323Sed FUNC_CODE_INST_LOAD = 20, // LOAD: [opty, op, align, vol] 294224145Sdim // 21 is unused. 295224145Sdim // 22 is unused. 296193323Sed FUNC_CODE_INST_VAARG = 23, // VAARG: [valistty, valist, instty] 297193323Sed // This store code encodes the pointer type, rather than the value type 298193323Sed // this is so information only available in the pointer type (e.g. address 299193323Sed // spaces) is retained. 300224145Sdim FUNC_CODE_INST_STORE = 24, // STORE: [ptrty,ptr,val, align, vol] 301224145Sdim // 25 is unused. 302193323Sed FUNC_CODE_INST_EXTRACTVAL = 26, // EXTRACTVAL: [n x operands] 303193323Sed FUNC_CODE_INST_INSERTVAL = 27, // INSERTVAL: [n x operands] 304198090Srdivacky // fcmp/icmp returning Int1TY or vector of Int1Ty. Same as CMP, exists to 305198090Srdivacky // support legacy vicmp/vfcmp instructions. 306193323Sed FUNC_CODE_INST_CMP2 = 28, // CMP2: [opty, opval, opval, pred] 307193323Sed // new select on i1 or [N x i1] 308198090Srdivacky FUNC_CODE_INST_VSELECT = 29, // VSELECT: [ty,opval,opval,predty,pred] 309198892Srdivacky FUNC_CODE_INST_INBOUNDS_GEP= 30, // INBOUNDS_GEP: [n x operands] 310206124Srdivacky FUNC_CODE_INST_INDIRECTBR = 31, // INDIRECTBR: [opty, op0, op1, ...] 311224145Sdim // 32 is unused. 312212904Sdim FUNC_CODE_DEBUG_LOC_AGAIN = 33, // DEBUG_LOC_AGAIN 313212904Sdim 314224145Sdim FUNC_CODE_INST_CALL = 34, // CALL: [attr, fnty, fnid, args...] 315212904Sdim 316226633Sdim FUNC_CODE_DEBUG_LOC = 35, // DEBUG_LOC: [Line,Col,ScopeVal, IAVal] 317226633Sdim FUNC_CODE_INST_FENCE = 36, // FENCE: [ordering, synchscope] 318226633Sdim FUNC_CODE_INST_CMPXCHG = 37, // CMPXCHG: [ptrty,ptr,cmp,new, align, vol, 319226633Sdim // ordering, synchscope] 320226633Sdim FUNC_CODE_INST_ATOMICRMW = 38, // ATOMICRMW: [ptrty,ptr,val, operation, 321226633Sdim // align, vol, 322226633Sdim // ordering, synchscope] 323226633Sdim FUNC_CODE_INST_RESUME = 39, // RESUME: [opval] 324226633Sdim FUNC_CODE_INST_LANDINGPAD = 40, // LANDINGPAD: [ty,val,val,num,id0,val0...] 325226633Sdim FUNC_CODE_INST_LOADATOMIC = 41, // LOAD: [opty, op, align, vol, 326226633Sdim // ordering, synchscope] 327226633Sdim FUNC_CODE_INST_STOREATOMIC = 42 // STORE: [ptrty,ptr,val, align, vol 328226633Sdim // ordering, synchscope] 329193323Sed }; 330234353Sdim 331234353Sdim enum UseListCodes { 332234353Sdim USELIST_CODE_ENTRY = 1 // USELIST_CODE_ENTRY: TBD. 333234353Sdim }; 334263508Sdim 335263508Sdim enum AttributeKindCodes { 336263508Sdim // = 0 is unused 337263508Sdim ATTR_KIND_ALIGNMENT = 1, 338263508Sdim ATTR_KIND_ALWAYS_INLINE = 2, 339263508Sdim ATTR_KIND_BY_VAL = 3, 340263508Sdim ATTR_KIND_INLINE_HINT = 4, 341263508Sdim ATTR_KIND_IN_REG = 5, 342263508Sdim ATTR_KIND_MIN_SIZE = 6, 343263508Sdim ATTR_KIND_NAKED = 7, 344263508Sdim ATTR_KIND_NEST = 8, 345263508Sdim ATTR_KIND_NO_ALIAS = 9, 346263508Sdim ATTR_KIND_NO_BUILTIN = 10, 347263508Sdim ATTR_KIND_NO_CAPTURE = 11, 348263508Sdim ATTR_KIND_NO_DUPLICATE = 12, 349263508Sdim ATTR_KIND_NO_IMPLICIT_FLOAT = 13, 350263508Sdim ATTR_KIND_NO_INLINE = 14, 351263508Sdim ATTR_KIND_NON_LAZY_BIND = 15, 352263508Sdim ATTR_KIND_NO_RED_ZONE = 16, 353263508Sdim ATTR_KIND_NO_RETURN = 17, 354263508Sdim ATTR_KIND_NO_UNWIND = 18, 355263508Sdim ATTR_KIND_OPTIMIZE_FOR_SIZE = 19, 356263508Sdim ATTR_KIND_READ_NONE = 20, 357263508Sdim ATTR_KIND_READ_ONLY = 21, 358263508Sdim ATTR_KIND_RETURNED = 22, 359263508Sdim ATTR_KIND_RETURNS_TWICE = 23, 360263508Sdim ATTR_KIND_S_EXT = 24, 361263508Sdim ATTR_KIND_STACK_ALIGNMENT = 25, 362263508Sdim ATTR_KIND_STACK_PROTECT = 26, 363263508Sdim ATTR_KIND_STACK_PROTECT_REQ = 27, 364263508Sdim ATTR_KIND_STACK_PROTECT_STRONG = 28, 365263508Sdim ATTR_KIND_STRUCT_RET = 29, 366263508Sdim ATTR_KIND_SANITIZE_ADDRESS = 30, 367263508Sdim ATTR_KIND_SANITIZE_THREAD = 31, 368263508Sdim ATTR_KIND_SANITIZE_MEMORY = 32, 369263508Sdim ATTR_KIND_UW_TABLE = 33, 370263508Sdim ATTR_KIND_Z_EXT = 34, 371263508Sdim ATTR_KIND_BUILTIN = 35, 372263508Sdim ATTR_KIND_COLD = 36, 373263508Sdim ATTR_KIND_OPTIMIZE_NONE = 37 374263508Sdim }; 375263508Sdim 376193323Sed} // End bitc namespace 377193323Sed} // End llvm namespace 378193323Sed 379193323Sed#endif 380