1 //===- LLToken.h - Token Codes for LLVM Assembly Files ----------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file defines the enums for the .ll lexer. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #ifndef LLVM_ASMPARSER_LLTOKEN_H 14 #define LLVM_ASMPARSER_LLTOKEN_H 15 16 namespace llvm { 17 namespace lltok { 18 enum Kind { 19 // Markers 20 Eof, 21 Error, 22 23 // Tokens with no info. 24 dotdotdot, // ... 25 equal, 26 comma, // = , 27 star, // * 28 lsquare, 29 rsquare, // [ ] 30 lbrace, 31 rbrace, // { } 32 less, 33 greater, // < > 34 lparen, 35 rparen, // ( ) 36 exclaim, // ! 37 bar, // | 38 colon, // : 39 hash, // # 40 41 kw_vscale, 42 kw_x, 43 kw_true, 44 kw_false, 45 kw_declare, 46 kw_define, 47 kw_global, 48 kw_constant, 49 50 kw_dso_local, 51 kw_dso_preemptable, 52 53 kw_private, 54 kw_internal, 55 kw_linkonce, 56 kw_linkonce_odr, 57 kw_weak, // Used as a linkage, and a modifier for "cmpxchg". 58 kw_weak_odr, 59 kw_appending, 60 kw_dllimport, 61 kw_dllexport, 62 kw_common, 63 kw_available_externally, 64 kw_default, 65 kw_hidden, 66 kw_protected, 67 kw_unnamed_addr, 68 kw_local_unnamed_addr, 69 kw_externally_initialized, 70 kw_extern_weak, 71 kw_external, 72 kw_thread_local, 73 kw_localdynamic, 74 kw_initialexec, 75 kw_localexec, 76 kw_zeroinitializer, 77 kw_undef, 78 kw_poison, 79 kw_null, 80 kw_none, 81 kw_to, 82 kw_caller, 83 kw_within, 84 kw_from, 85 kw_tail, 86 kw_musttail, 87 kw_notail, 88 kw_target, 89 kw_triple, 90 kw_source_filename, 91 kw_unwind, 92 kw_datalayout, 93 kw_volatile, 94 kw_atomic, 95 kw_unordered, 96 kw_monotonic, 97 kw_acquire, 98 kw_release, 99 kw_acq_rel, 100 kw_seq_cst, 101 kw_syncscope, 102 kw_nnan, 103 kw_ninf, 104 kw_nsz, 105 kw_arcp, 106 kw_contract, 107 kw_reassoc, 108 kw_afn, 109 kw_fast, 110 kw_nuw, 111 kw_nsw, 112 kw_nusw, 113 kw_exact, 114 kw_disjoint, 115 kw_inbounds, 116 kw_nneg, 117 kw_samesign, 118 kw_inrange, 119 kw_addrspace, 120 kw_section, 121 kw_partition, 122 kw_code_model, 123 kw_alias, 124 kw_ifunc, 125 kw_module, 126 kw_asm, 127 kw_sideeffect, 128 kw_inteldialect, 129 kw_gc, 130 kw_prefix, 131 kw_prologue, 132 kw_c, 133 134 kw_cc, 135 kw_ccc, 136 kw_fastcc, 137 kw_coldcc, 138 kw_intel_ocl_bicc, 139 kw_cfguard_checkcc, 140 kw_x86_stdcallcc, 141 kw_x86_fastcallcc, 142 kw_x86_thiscallcc, 143 kw_x86_vectorcallcc, 144 kw_x86_regcallcc, 145 kw_arm_apcscc, 146 kw_arm_aapcscc, 147 kw_arm_aapcs_vfpcc, 148 kw_aarch64_vector_pcs, 149 kw_aarch64_sve_vector_pcs, 150 kw_aarch64_sme_preservemost_from_x0, 151 kw_aarch64_sme_preservemost_from_x1, 152 kw_aarch64_sme_preservemost_from_x2, 153 kw_msp430_intrcc, 154 kw_avr_intrcc, 155 kw_avr_signalcc, 156 kw_ptx_kernel, 157 kw_ptx_device, 158 kw_spir_kernel, 159 kw_spir_func, 160 kw_x86_64_sysvcc, 161 kw_win64cc, 162 kw_anyregcc, 163 kw_swiftcc, 164 kw_swifttailcc, 165 kw_preserve_mostcc, 166 kw_preserve_allcc, 167 kw_preserve_nonecc, 168 kw_ghccc, 169 kw_x86_intrcc, 170 kw_hhvmcc, 171 kw_hhvm_ccc, 172 kw_cxx_fast_tlscc, 173 kw_amdgpu_vs, 174 kw_amdgpu_ls, 175 kw_amdgpu_hs, 176 kw_amdgpu_es, 177 kw_amdgpu_gs, 178 kw_amdgpu_ps, 179 kw_amdgpu_cs, 180 kw_amdgpu_cs_chain, 181 kw_amdgpu_cs_chain_preserve, 182 kw_amdgpu_kernel, 183 kw_amdgpu_gfx, 184 kw_tailcc, 185 kw_m68k_rtdcc, 186 kw_graalcc, 187 kw_riscv_vector_cc, 188 kw_riscv_vls_cc, 189 190 // Attributes: 191 kw_attributes, 192 kw_sync, 193 kw_async, 194 #define GET_ATTR_NAMES 195 #define ATTRIBUTE_ENUM(ENUM_NAME, DISPLAY_NAME) \ 196 kw_##DISPLAY_NAME, 197 #include "llvm/IR/Attributes.inc" 198 199 // Memory attribute: 200 kw_read, 201 kw_write, 202 kw_readwrite, 203 kw_argmem, 204 kw_inaccessiblemem, 205 kw_errnomem, 206 207 // Legacy attributes: 208 kw_argmemonly, 209 kw_inaccessiblememonly, 210 kw_inaccessiblemem_or_argmemonly, 211 kw_nocapture, 212 213 // Captures attribute: 214 kw_address, 215 kw_address_is_null, 216 kw_provenance, 217 kw_read_provenance, 218 219 // nofpclass attribute: 220 kw_all, 221 kw_nan, 222 kw_snan, 223 kw_qnan, 224 kw_inf, 225 // kw_ninf, - already an fmf 226 kw_pinf, 227 kw_norm, 228 kw_nnorm, 229 kw_pnorm, 230 // kw_sub, - already an instruction 231 kw_nsub, 232 kw_psub, 233 kw_zero, 234 kw_nzero, 235 kw_pzero, 236 237 kw_type, 238 kw_opaque, 239 240 kw_comdat, 241 242 // Comdat types 243 kw_any, 244 kw_exactmatch, 245 kw_largest, 246 kw_nodeduplicate, 247 kw_samesize, 248 249 kw_eq, 250 kw_ne, 251 kw_slt, 252 kw_sgt, 253 kw_sle, 254 kw_sge, 255 kw_ult, 256 kw_ugt, 257 kw_ule, 258 kw_uge, 259 kw_oeq, 260 kw_one, 261 kw_olt, 262 kw_ogt, 263 kw_ole, 264 kw_oge, 265 kw_ord, 266 kw_uno, 267 kw_ueq, 268 kw_une, 269 270 // atomicrmw operations that aren't also instruction keywords. 271 kw_xchg, 272 kw_nand, 273 kw_max, 274 kw_min, 275 kw_umax, 276 kw_umin, 277 kw_fmax, 278 kw_fmin, 279 kw_fmaximum, 280 kw_fminimum, 281 kw_uinc_wrap, 282 kw_udec_wrap, 283 kw_usub_cond, 284 kw_usub_sat, 285 286 // Instruction Opcodes (Opcode in UIntVal). 287 kw_fneg, 288 kw_add, 289 kw_fadd, 290 kw_sub, 291 kw_fsub, 292 kw_mul, 293 kw_fmul, 294 kw_udiv, 295 kw_sdiv, 296 kw_fdiv, 297 kw_urem, 298 kw_srem, 299 kw_frem, 300 kw_shl, 301 kw_lshr, 302 kw_ashr, 303 kw_and, 304 kw_or, 305 kw_xor, 306 kw_icmp, 307 kw_fcmp, 308 309 kw_phi, 310 kw_call, 311 kw_trunc, 312 kw_zext, 313 kw_sext, 314 kw_fptrunc, 315 kw_fpext, 316 kw_uitofp, 317 kw_sitofp, 318 kw_fptoui, 319 kw_fptosi, 320 kw_inttoptr, 321 kw_ptrtoint, 322 kw_bitcast, 323 kw_addrspacecast, 324 kw_select, 325 kw_va_arg, 326 327 kw_landingpad, 328 kw_personality, 329 kw_cleanup, 330 kw_catch, 331 kw_filter, 332 333 kw_ret, 334 kw_br, 335 kw_switch, 336 kw_indirectbr, 337 kw_invoke, 338 kw_resume, 339 kw_unreachable, 340 kw_cleanupret, 341 kw_catchswitch, 342 kw_catchret, 343 kw_catchpad, 344 kw_cleanuppad, 345 kw_callbr, 346 347 kw_alloca, 348 kw_load, 349 kw_store, 350 kw_fence, 351 kw_cmpxchg, 352 kw_atomicrmw, 353 kw_getelementptr, 354 355 kw_extractelement, 356 kw_insertelement, 357 kw_shufflevector, 358 kw_splat, 359 kw_extractvalue, 360 kw_insertvalue, 361 kw_blockaddress, 362 kw_dso_local_equivalent, 363 kw_no_cfi, 364 kw_ptrauth, 365 366 kw_freeze, 367 368 // Metadata types. 369 kw_distinct, 370 371 // Use-list order directives. 372 kw_uselistorder, 373 kw_uselistorder_bb, 374 375 // Summary index keywords 376 kw_path, 377 kw_hash, 378 kw_gv, 379 kw_guid, 380 kw_name, 381 kw_summaries, 382 kw_flags, 383 kw_blockcount, 384 kw_linkage, 385 kw_visibility, 386 kw_notEligibleToImport, 387 kw_live, 388 kw_dsoLocal, 389 kw_canAutoHide, 390 kw_importType, 391 kw_definition, 392 kw_declaration, 393 kw_function, 394 kw_insts, 395 kw_funcFlags, 396 kw_readNone, 397 kw_readOnly, 398 kw_noRecurse, 399 kw_returnDoesNotAlias, 400 kw_noInline, 401 kw_alwaysInline, 402 kw_noUnwind, 403 kw_mayThrow, 404 kw_hasUnknownCall, 405 kw_mustBeUnreachable, 406 kw_calls, 407 kw_callee, 408 kw_params, 409 kw_param, 410 kw_hotness, 411 kw_unknown, 412 kw_critical, 413 kw_relbf, 414 kw_variable, 415 kw_vTableFuncs, 416 kw_virtFunc, 417 kw_aliasee, 418 kw_refs, 419 kw_typeIdInfo, 420 kw_typeTests, 421 kw_typeTestAssumeVCalls, 422 kw_typeCheckedLoadVCalls, 423 kw_typeTestAssumeConstVCalls, 424 kw_typeCheckedLoadConstVCalls, 425 kw_vFuncId, 426 kw_offset, 427 kw_args, 428 kw_typeid, 429 kw_typeidCompatibleVTable, 430 kw_summary, 431 kw_typeTestRes, 432 kw_kind, 433 kw_unsat, 434 kw_byteArray, 435 kw_inline, 436 kw_single, 437 kw_allOnes, 438 kw_sizeM1BitWidth, 439 kw_alignLog2, 440 kw_sizeM1, 441 kw_bitMask, 442 kw_inlineBits, 443 kw_vcall_visibility, 444 kw_wpdResolutions, 445 kw_wpdRes, 446 kw_indir, 447 kw_singleImpl, 448 kw_branchFunnel, 449 kw_singleImplName, 450 kw_resByArg, 451 kw_byArg, 452 kw_uniformRetVal, 453 kw_uniqueRetVal, 454 kw_virtualConstProp, 455 kw_info, 456 kw_byte, 457 kw_bit, 458 kw_varFlags, 459 // The following are used by MemProf summary info. 460 kw_callsites, 461 kw_clones, 462 kw_stackIds, 463 kw_allocs, 464 kw_versions, 465 kw_memProf, 466 kw_notcold, 467 468 // GV's with __attribute__((no_sanitize("address"))), or things in 469 // -fsanitize-ignorelist when built with ASan. 470 kw_no_sanitize_address, 471 // GV's with __attribute__((no_sanitize("hwaddress"))), or things in 472 // -fsanitize-ignorelist when built with HWASan. 473 kw_no_sanitize_hwaddress, 474 // GV's where the clang++ frontend (when ASan is used) notes that this is 475 // dynamically initialized, and thus needs ODR detection. 476 kw_sanitize_address_dyninit, 477 478 // Unsigned Valued tokens (UIntVal). 479 LabelID, // 42: 480 GlobalID, // @42 481 LocalVarID, // %42 482 AttrGrpID, // #42 483 SummaryID, // ^42 484 485 // String valued tokens (StrVal). 486 LabelStr, // foo: 487 GlobalVar, // @foo @"foo" 488 ComdatVar, // $foo 489 LocalVar, // %foo %"foo" 490 MetadataVar, // !foo 491 StringConstant, // "foo" 492 DwarfTag, // DW_TAG_foo 493 DwarfAttEncoding, // DW_ATE_foo 494 DwarfVirtuality, // DW_VIRTUALITY_foo 495 DwarfLang, // DW_LANG_foo 496 DwarfCC, // DW_CC_foo 497 EmissionKind, // lineTablesOnly 498 NameTableKind, // GNU 499 FixedPointKind, // Fixed point 500 DwarfOp, // DW_OP_foo 501 DIFlag, // DIFlagFoo 502 DISPFlag, // DISPFlagFoo 503 DwarfMacinfo, // DW_MACINFO_foo 504 ChecksumKind, // CSK_foo 505 DbgRecordType, // dbg_foo 506 DwarfEnumKind, // DW_APPLE_ENUM_KIND_foo 507 508 // Type valued tokens (TyVal). 509 Type, 510 511 APFloat, // APFloatVal 512 APSInt // APSInt 513 }; 514 } // end namespace lltok 515 } // end namespace llvm 516 517 #endif 518