xref: /freebsd/contrib/llvm-project/llvm/include/llvm/AsmParser/LLToken.h (revision 700637cbb5e582861067a11aaca4d053546871d2)
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