1//===-- TableGen.cpp - Top-Level TableGen implementation for Clang --------===//
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 contains the main function for Clang's TableGen.
10//
11//===----------------------------------------------------------------------===//
12
13#include "ASTTableGen.h"
14#include "TableGenBackends.h" // Declares all backends.
15#include "llvm/Support/CommandLine.h"
16#include "llvm/Support/ManagedStatic.h"
17#include "llvm/Support/PrettyStackTrace.h"
18#include "llvm/Support/Signals.h"
19#include "llvm/TableGen/Main.h"
20#include "llvm/TableGen/Record.h"
21
22using namespace llvm;
23using namespace clang;
24
25enum ActionType {
26 PrintRecords,
27 DumpJSON,
28 GenCIRLowering,
29 GenClangAttrClasses,
30 GenClangAttrParserStringSwitches,
31 GenClangAttrSubjectMatchRulesParserStringSwitches,
32 GenClangAttrImpl,
33 GenClangAttrList,
34 GenClangAttrDocTable,
35 GenClangAttrSubjectMatchRuleList,
36 GenClangAttrPCHRead,
37 GenClangAttrPCHWrite,
38 GenClangRegularKeywordAttributeInfo,
39 GenClangAttrHasAttributeImpl,
40 GenClangAttrSpellingListIndex,
41 GenClangAttrASTVisitor,
42 GenClangAttrTemplateInstantiate,
43 GenClangAttrParsedAttrList,
44 GenClangAttrParsedAttrImpl,
45 GenClangAttrParsedAttrKinds,
46 GenClangAttrIsTypeDependent,
47 GenClangAttrTextNodeDump,
48 GenClangAttrNodeTraverse,
49 GenClangBasicReader,
50 GenClangBasicWriter,
51 GenClangBuiltins,
52 GenClangBuiltinTemplates,
53 GenClangDiagsCompatIDs,
54 GenClangDiagsDefs,
55 GenClangDiagsEnums,
56 GenClangDiagGroups,
57 GenClangDiagsIndexName,
58 GenClangDiagsInterface,
59 GenClangCommentNodes,
60 GenClangDeclNodes,
61 GenClangStmtNodes,
62 GenClangTypeNodes,
63 GenClangTypeReader,
64 GenClangTypeWriter,
65 GenClangOpcodes,
66 GenClangSACheckers,
67 GenClangSyntaxNodeList,
68 GenClangSyntaxNodeClasses,
69 GenClangCommentHTMLTags,
70 GenClangCommentHTMLTagsProperties,
71 GenClangCommentHTMLNamedCharacterReferences,
72 GenClangCommentCommandInfo,
73 GenClangCommentCommandList,
74 GenClangOpenCLBuiltins,
75 GenClangOpenCLBuiltinHeader,
76 GenClangOpenCLBuiltinTests,
77 GenCXX11AttributeInfo,
78 GenAttributeSpellingList,
79 GenArmNeon,
80 GenArmFP16,
81 GenArmBF16,
82 GenArmVectorType,
83 GenArmNeonSema,
84 GenArmNeonTest,
85 GenArmImmCheckTypes,
86 GenArmMveHeader,
87 GenArmMveBuiltinDef,
88 GenArmMveBuiltinSema,
89 GenArmMveBuiltinCG,
90 GenArmMveBuiltinAliases,
91 GenArmSveHeader,
92 GenArmSveBuiltins,
93 GenArmSveBuiltinsJSON,
94 GenArmSveBuiltinCG,
95 GenArmSveTypeFlags,
96 GenArmSveRangeChecks,
97 GenArmSveStreamingAttrs,
98 GenArmSmeHeader,
99 GenArmSmeBuiltins,
100 GenArmSmeBuiltinsJSON,
101 GenArmSmeBuiltinCG,
102 GenArmSmeRangeChecks,
103 GenArmSmeStreamingAttrs,
104 GenArmSmeBuiltinZAState,
105 GenArmCdeHeader,
106 GenArmCdeBuiltinDef,
107 GenArmCdeBuiltinSema,
108 GenArmCdeBuiltinCG,
109 GenArmCdeBuiltinAliases,
110 GenRISCVVectorHeader,
111 GenRISCVVectorBuiltins,
112 GenRISCVVectorBuiltinCG,
113 GenRISCVVectorBuiltinSema,
114 GenRISCVSiFiveVectorBuiltins,
115 GenRISCVSiFiveVectorBuiltinCG,
116 GenRISCVSiFiveVectorBuiltinSema,
117 GenRISCVAndesVectorBuiltins,
118 GenRISCVAndesVectorBuiltinCG,
119 GenRISCVAndesVectorBuiltinSema,
120 GenAttrDocs,
121 GenBuiltinDocs,
122 GenDiagDocs,
123 GenOptDocs,
124 GenDataCollectors,
125 GenTestPragmaAttributeSupportedAttributes
126};
127
128namespace {
129cl::opt<ActionType> Action(
130 cl::desc("Action to perform:"),
131 cl::values(
132 clEnumValN(PrintRecords, "print-records",
133 "Print all records to stdout (default)"),
134 clEnumValN(DumpJSON, "dump-json",
135 "Dump all records as machine-readable JSON"),
136 clEnumValN(GenCIRLowering, "gen-cir-lowering",
137 "Generate CIR operation lowering patterns"),
138 clEnumValN(GenClangAttrClasses, "gen-clang-attr-classes",
139 "Generate clang attribute clases"),
140 clEnumValN(GenClangAttrParserStringSwitches,
141 "gen-clang-attr-parser-string-switches",
142 "Generate all parser-related attribute string switches"),
143 clEnumValN(GenClangAttrSubjectMatchRulesParserStringSwitches,
144 "gen-clang-attr-subject-match-rules-parser-string-switches",
145 "Generate all parser-related attribute subject match rule"
146 "string switches"),
147 clEnumValN(GenClangAttrImpl, "gen-clang-attr-impl",
148 "Generate clang attribute implementations"),
149 clEnumValN(GenClangAttrList, "gen-clang-attr-list",
150 "Generate a clang attribute list"),
151 clEnumValN(GenClangAttrDocTable, "gen-clang-attr-doc-table",
152 "Generate a table of attribute documentation"),
153 clEnumValN(GenClangAttrSubjectMatchRuleList,
154 "gen-clang-attr-subject-match-rule-list",
155 "Generate a clang attribute subject match rule list"),
156 clEnumValN(GenClangAttrPCHRead, "gen-clang-attr-pch-read",
157 "Generate clang PCH attribute reader"),
158 clEnumValN(GenClangAttrPCHWrite, "gen-clang-attr-pch-write",
159 "Generate clang PCH attribute writer"),
160 clEnumValN(GenClangRegularKeywordAttributeInfo,
161 "gen-clang-regular-keyword-attr-info",
162 "Generate a list of regular keyword attributes with info "
163 "about their arguments"),
164 clEnumValN(GenClangAttrHasAttributeImpl,
165 "gen-clang-attr-has-attribute-impl",
166 "Generate a clang attribute spelling list"),
167 clEnumValN(GenClangAttrSpellingListIndex,
168 "gen-clang-attr-spelling-index",
169 "Generate a clang attribute spelling index"),
170 clEnumValN(GenClangAttrASTVisitor, "gen-clang-attr-ast-visitor",
171 "Generate a recursive AST visitor for clang attributes"),
172 clEnumValN(GenClangAttrTemplateInstantiate,
173 "gen-clang-attr-template-instantiate",
174 "Generate a clang template instantiate code"),
175 clEnumValN(GenClangAttrParsedAttrList,
176 "gen-clang-attr-parsed-attr-list",
177 "Generate a clang parsed attribute list"),
178 clEnumValN(GenClangAttrParsedAttrImpl,
179 "gen-clang-attr-parsed-attr-impl",
180 "Generate the clang parsed attribute helpers"),
181 clEnumValN(GenClangAttrParsedAttrKinds,
182 "gen-clang-attr-parsed-attr-kinds",
183 "Generate a clang parsed attribute kinds"),
184 clEnumValN(GenClangAttrIsTypeDependent,
185 "gen-clang-attr-is-type-dependent",
186 "Generate clang is type dependent attribute code"),
187 clEnumValN(GenClangAttrTextNodeDump, "gen-clang-attr-text-node-dump",
188 "Generate clang attribute text node dumper"),
189 clEnumValN(GenClangAttrNodeTraverse, "gen-clang-attr-node-traverse",
190 "Generate clang attribute traverser"),
191 clEnumValN(GenClangBuiltins, "gen-clang-builtins",
192 "Generate clang builtins list"),
193 clEnumValN(GenClangBuiltinTemplates, "gen-clang-builtin-templates",
194 "Generate clang builtins list"),
195 clEnumValN(GenClangDiagsCompatIDs, "gen-clang-diags-compat-ids",
196 "Generate Clang diagnostic compatibility ids"),
197 clEnumValN(GenClangDiagsDefs, "gen-clang-diags-defs",
198 "Generate Clang diagnostics definitions"),
199 clEnumValN(GenClangDiagsEnums, "gen-clang-diags-enums",
200 "Generate Clang diagnostic enums for selects"),
201 clEnumValN(GenClangDiagGroups, "gen-clang-diag-groups",
202 "Generate Clang diagnostic groups"),
203 clEnumValN(GenClangDiagsIndexName, "gen-clang-diags-index-name",
204 "Generate Clang diagnostic name index"),
205 clEnumValN(GenClangDiagsInterface, "gen-clang-diags-iface",
206 "Generate Clang diagnostic interface headers"),
207 clEnumValN(GenClangBasicReader, "gen-clang-basic-reader",
208 "Generate Clang BasicReader classes"),
209 clEnumValN(GenClangBasicWriter, "gen-clang-basic-writer",
210 "Generate Clang BasicWriter classes"),
211 clEnumValN(GenClangCommentNodes, "gen-clang-comment-nodes",
212 "Generate Clang AST comment nodes"),
213 clEnumValN(GenClangDeclNodes, "gen-clang-decl-nodes",
214 "Generate Clang AST declaration nodes"),
215 clEnumValN(GenClangStmtNodes, "gen-clang-stmt-nodes",
216 "Generate Clang AST statement nodes"),
217 clEnumValN(GenClangTypeNodes, "gen-clang-type-nodes",
218 "Generate Clang AST type nodes"),
219 clEnumValN(GenClangTypeReader, "gen-clang-type-reader",
220 "Generate Clang AbstractTypeReader class"),
221 clEnumValN(GenClangTypeWriter, "gen-clang-type-writer",
222 "Generate Clang AbstractTypeWriter class"),
223 clEnumValN(GenClangOpcodes, "gen-clang-opcodes",
224 "Generate Clang constexpr interpreter opcodes"),
225 clEnumValN(GenClangSACheckers, "gen-clang-sa-checkers",
226 "Generate Clang Static Analyzer checkers"),
227 clEnumValN(GenClangSyntaxNodeList, "gen-clang-syntax-node-list",
228 "Generate list of Clang Syntax Tree node types"),
229 clEnumValN(GenClangSyntaxNodeClasses, "gen-clang-syntax-node-classes",
230 "Generate definitions of Clang Syntax Tree node clasess"),
231 clEnumValN(GenClangCommentHTMLTags, "gen-clang-comment-html-tags",
232 "Generate efficient matchers for HTML tag "
233 "names that are used in documentation comments"),
234 clEnumValN(GenClangCommentHTMLTagsProperties,
235 "gen-clang-comment-html-tags-properties",
236 "Generate efficient matchers for HTML tag "
237 "properties"),
238 clEnumValN(GenClangCommentHTMLNamedCharacterReferences,
239 "gen-clang-comment-html-named-character-references",
240 "Generate function to translate named character "
241 "references to UTF-8 sequences"),
242 clEnumValN(GenClangCommentCommandInfo, "gen-clang-comment-command-info",
243 "Generate command properties for commands that "
244 "are used in documentation comments"),
245 clEnumValN(GenClangCommentCommandList, "gen-clang-comment-command-list",
246 "Generate list of commands that are used in "
247 "documentation comments"),
248 clEnumValN(GenClangOpenCLBuiltins, "gen-clang-opencl-builtins",
249 "Generate OpenCL builtin declaration handlers"),
250 clEnumValN(GenClangOpenCLBuiltinHeader,
251 "gen-clang-opencl-builtin-header",
252 "Generate OpenCL builtin header"),
253 clEnumValN(GenClangOpenCLBuiltinTests, "gen-clang-opencl-builtin-tests",
254 "Generate OpenCL builtin declaration tests"),
255 clEnumValN(GenCXX11AttributeInfo, "gen-cxx11-attribute-info",
256 "Generate CXX11 attributes info"),
257 clEnumValN(GenAttributeSpellingList, "gen-attribute-spelling-list",
258 "Generate attribute spelling list"),
259 clEnumValN(GenArmNeon, "gen-arm-neon", "Generate arm_neon.h for clang"),
260 clEnumValN(GenArmFP16, "gen-arm-fp16", "Generate arm_fp16.h for clang"),
261 clEnumValN(GenArmBF16, "gen-arm-bf16", "Generate arm_bf16.h for clang"),
262 clEnumValN(GenArmVectorType, "gen-arm-vector-type",
263 "Generate arm_vector_types.h for clang"),
264 clEnumValN(GenArmNeonSema, "gen-arm-neon-sema",
265 "Generate ARM NEON sema support for clang"),
266 clEnumValN(GenArmNeonTest, "gen-arm-neon-test",
267 "Generate ARM NEON tests for clang"),
268 clEnumValN(
269 GenArmImmCheckTypes, "gen-arm-immcheck-types",
270 "Generate arm_immcheck_types.inc (immediate range check types)"
271 " for clang"),
272 clEnumValN(GenArmSveHeader, "gen-arm-sve-header",
273 "Generate arm_sve.h for clang"),
274 clEnumValN(GenArmSveBuiltins, "gen-arm-sve-builtins",
275 "Generate arm_sve_builtins.inc for clang"),
276 clEnumValN(GenArmSveBuiltinsJSON, "gen-arm-sve-builtins-json",
277 "Generate arm_sve_buitins.json"),
278 clEnumValN(GenArmSveBuiltinCG, "gen-arm-sve-builtin-codegen",
279 "Generate arm_sve_builtin_cg_map.inc for clang"),
280 clEnumValN(GenArmSveTypeFlags, "gen-arm-sve-typeflags",
281 "Generate arm_sve_typeflags.inc for clang"),
282 clEnumValN(GenArmSveRangeChecks, "gen-arm-sve-sema-rangechecks",
283 "Generate arm_sve_sema_rangechecks.inc for clang"),
284 clEnumValN(GenArmSveStreamingAttrs, "gen-arm-sve-streaming-attrs",
285 "Generate arm_sve_streaming_attrs.inc for clang"),
286 clEnumValN(GenArmSmeHeader, "gen-arm-sme-header",
287 "Generate arm_sme.h for clang"),
288 clEnumValN(GenArmSmeBuiltins, "gen-arm-sme-builtins",
289 "Generate arm_sme_builtins.inc for clang"),
290 clEnumValN(GenArmSmeBuiltinsJSON, "gen-arm-sme-builtins-json",
291 "Generate arm_sme_buitins.json"),
292 clEnumValN(GenArmSmeBuiltinCG, "gen-arm-sme-builtin-codegen",
293 "Generate arm_sme_builtin_cg_map.inc for clang"),
294 clEnumValN(GenArmSmeRangeChecks, "gen-arm-sme-sema-rangechecks",
295 "Generate arm_sme_sema_rangechecks.inc for clang"),
296 clEnumValN(GenArmSmeStreamingAttrs, "gen-arm-sme-streaming-attrs",
297 "Generate arm_sme_streaming_attrs.inc for clang"),
298 clEnumValN(GenArmSmeBuiltinZAState, "gen-arm-sme-builtin-za-state",
299 "Generate arm_sme_builtins_za_state.inc for clang"),
300 clEnumValN(GenArmMveHeader, "gen-arm-mve-header",
301 "Generate arm_mve.h for clang"),
302 clEnumValN(GenArmMveBuiltinDef, "gen-arm-mve-builtin-def",
303 "Generate ARM MVE builtin definitions for clang"),
304 clEnumValN(GenArmMveBuiltinSema, "gen-arm-mve-builtin-sema",
305 "Generate ARM MVE builtin sema checks for clang"),
306 clEnumValN(GenArmMveBuiltinCG, "gen-arm-mve-builtin-codegen",
307 "Generate ARM MVE builtin code-generator for clang"),
308 clEnumValN(GenArmMveBuiltinAliases, "gen-arm-mve-builtin-aliases",
309 "Generate list of valid ARM MVE builtin aliases for clang"),
310 clEnumValN(GenArmCdeHeader, "gen-arm-cde-header",
311 "Generate arm_cde.h for clang"),
312 clEnumValN(GenArmCdeBuiltinDef, "gen-arm-cde-builtin-def",
313 "Generate ARM CDE builtin definitions for clang"),
314 clEnumValN(GenArmCdeBuiltinSema, "gen-arm-cde-builtin-sema",
315 "Generate ARM CDE builtin sema checks for clang"),
316 clEnumValN(GenArmCdeBuiltinCG, "gen-arm-cde-builtin-codegen",
317 "Generate ARM CDE builtin code-generator for clang"),
318 clEnumValN(GenArmCdeBuiltinAliases, "gen-arm-cde-builtin-aliases",
319 "Generate list of valid ARM CDE builtin aliases for clang"),
320 clEnumValN(GenRISCVVectorHeader, "gen-riscv-vector-header",
321 "Generate riscv_vector.h for clang"),
322 clEnumValN(GenRISCVVectorBuiltins, "gen-riscv-vector-builtins",
323 "Generate riscv_vector_builtins.inc for clang"),
324 clEnumValN(GenRISCVVectorBuiltinCG, "gen-riscv-vector-builtin-codegen",
325 "Generate riscv_vector_builtin_cg.inc for clang"),
326 clEnumValN(GenRISCVVectorBuiltinSema, "gen-riscv-vector-builtin-sema",
327 "Generate riscv_vector_builtin_sema.inc for clang"),
328 clEnumValN(GenRISCVSiFiveVectorBuiltins,
329 "gen-riscv-sifive-vector-builtins",
330 "Generate riscv_sifive_vector_builtins.inc for clang"),
331 clEnumValN(GenRISCVSiFiveVectorBuiltinCG,
332 "gen-riscv-sifive-vector-builtin-codegen",
333 "Generate riscv_sifive_vector_builtin_cg.inc for clang"),
334 clEnumValN(GenRISCVSiFiveVectorBuiltinSema,
335 "gen-riscv-sifive-vector-builtin-sema",
336 "Generate riscv_sifive_vector_builtin_sema.inc for clang"),
337 clEnumValN(GenRISCVAndesVectorBuiltins,
338 "gen-riscv-andes-vector-builtins",
339 "Generate riscv_andes_vector_builtins.inc for clang"),
340 clEnumValN(GenRISCVAndesVectorBuiltinCG,
341 "gen-riscv-andes-vector-builtin-codegen",
342 "Generate riscv_andes_vector_builtin_cg.inc for clang"),
343 clEnumValN(GenRISCVAndesVectorBuiltinSema,
344 "gen-riscv-andes-vector-builtin-sema",
345 "Generate riscv_andes_vector_builtin_sema.inc for clang"),
346 clEnumValN(GenAttrDocs, "gen-attr-docs",
347 "Generate attribute documentation"),
348 clEnumValN(GenBuiltinDocs, "gen-builtin-docs",
349 "Generate builtin documentation"),
350 clEnumValN(GenDiagDocs, "gen-diag-docs",
351 "Generate diagnostic documentation"),
352 clEnumValN(GenOptDocs, "gen-opt-docs", "Generate option documentation"),
353 clEnumValN(GenDataCollectors, "gen-clang-data-collectors",
354 "Generate data collectors for AST nodes"),
355 clEnumValN(GenTestPragmaAttributeSupportedAttributes,
356 "gen-clang-test-pragma-attribute-supported-attributes",
357 "Generate a list of attributes supported by #pragma clang "
358 "attribute for testing purposes")));
359
360cl::opt<std::string>
361ClangComponent("clang-component",
362 cl::desc("Only use warnings from specified component"),
363 cl::value_desc("component"), cl::Hidden);
364
365bool ClangTableGenMain(raw_ostream &OS, const RecordKeeper &Records) {
366 switch (Action) {
367 case PrintRecords:
368 OS << Records; // No argument, dump all contents
369 break;
370 case DumpJSON:
371 EmitJSON(RK: Records, OS);
372 break;
373 case GenCIRLowering:
374 EmitCIRLowering(RK: Records, OS);
375 break;
376 case GenClangAttrClasses:
377 EmitClangAttrClass(Records, OS);
378 break;
379 case GenClangAttrParserStringSwitches:
380 EmitClangAttrParserStringSwitches(Records, OS);
381 break;
382 case GenClangAttrSubjectMatchRulesParserStringSwitches:
383 EmitClangAttrSubjectMatchRulesParserStringSwitches(Records, OS);
384 break;
385 case GenCXX11AttributeInfo:
386 EmitCXX11AttributeInfo(Records, OS);
387 break;
388 case GenAttributeSpellingList:
389 EmitAttributeSpellingList(Records, OS);
390 break;
391 case GenClangAttrImpl:
392 EmitClangAttrImpl(Records, OS);
393 break;
394 case GenClangAttrList:
395 EmitClangAttrList(Records, OS);
396 break;
397 case GenClangAttrDocTable:
398 EmitClangAttrDocTable(Records, OS);
399 break;
400 case GenClangAttrSubjectMatchRuleList:
401 EmitClangAttrSubjectMatchRuleList(Records, OS);
402 break;
403 case GenClangAttrPCHRead:
404 EmitClangAttrPCHRead(Records, OS);
405 break;
406 case GenClangAttrPCHWrite:
407 EmitClangAttrPCHWrite(Records, OS);
408 break;
409 case GenClangRegularKeywordAttributeInfo:
410 EmitClangRegularKeywordAttributeInfo(Records, OS);
411 break;
412 case GenClangAttrHasAttributeImpl:
413 EmitClangAttrHasAttrImpl(Records, OS);
414 break;
415 case GenClangAttrSpellingListIndex:
416 EmitClangAttrSpellingListIndex(Records, OS);
417 break;
418 case GenClangAttrASTVisitor:
419 EmitClangAttrASTVisitor(Records, OS);
420 break;
421 case GenClangAttrTemplateInstantiate:
422 EmitClangAttrTemplateInstantiate(Records, OS);
423 break;
424 case GenClangAttrParsedAttrList:
425 EmitClangAttrParsedAttrList(Records, OS);
426 break;
427 case GenClangAttrParsedAttrImpl:
428 EmitClangAttrParsedAttrImpl(Records, OS);
429 break;
430 case GenClangAttrParsedAttrKinds:
431 EmitClangAttrParsedAttrKinds(Records, OS);
432 break;
433 case GenClangAttrIsTypeDependent:
434 EmitClangAttrIsTypeDependent(Records, OS);
435 break;
436 case GenClangAttrTextNodeDump:
437 EmitClangAttrTextNodeDump(Records, OS);
438 break;
439 case GenClangAttrNodeTraverse:
440 EmitClangAttrNodeTraverse(Records, OS);
441 break;
442 case GenClangBuiltins:
443 EmitClangBuiltins(Records, OS);
444 break;
445 case GenClangBuiltinTemplates:
446 EmitClangBuiltinTemplates(Records, OS);
447 break;
448 case GenClangDiagsCompatIDs:
449 EmitClangDiagsCompatIDs(Records, OS, Component: ClangComponent);
450 break;
451 case GenClangDiagsDefs:
452 EmitClangDiagsDefs(Records, OS, Component: ClangComponent);
453 break;
454 case GenClangDiagsEnums:
455 EmitClangDiagsEnums(Records, OS, Component: ClangComponent);
456 break;
457 case GenClangDiagGroups:
458 EmitClangDiagGroups(Records, OS);
459 break;
460 case GenClangDiagsIndexName:
461 EmitClangDiagsIndexName(Records, OS);
462 break;
463 case GenClangDiagsInterface:
464 EmitClangDiagsInterface(OS, Component: ClangComponent);
465 break;
466 case GenClangCommentNodes:
467 EmitClangASTNodes(RK: Records, OS, CommentNodeClassName, S: "");
468 break;
469 case GenClangDeclNodes:
470 EmitClangASTNodes(RK: Records, OS, DeclNodeClassName, S: "Decl",
471 DeclContextNodeClassName);
472 EmitClangDeclContext(RK: Records, OS);
473 break;
474 case GenClangStmtNodes:
475 EmitClangASTNodes(RK: Records, OS, StmtNodeClassName, S: "");
476 break;
477 case GenClangTypeNodes:
478 EmitClangTypeNodes(Records, OS);
479 break;
480 case GenClangTypeReader:
481 EmitClangTypeReader(Records, OS);
482 break;
483 case GenClangTypeWriter:
484 EmitClangTypeWriter(Records, OS);
485 break;
486 case GenClangBasicReader:
487 EmitClangBasicReader(Records, OS);
488 break;
489 case GenClangBasicWriter:
490 EmitClangBasicWriter(Records, OS);
491 break;
492 case GenClangOpcodes:
493 EmitClangOpcodes(Records, OS);
494 break;
495 case GenClangSACheckers:
496 EmitClangSACheckers(Records, OS);
497 break;
498 case GenClangCommentHTMLTags:
499 EmitClangCommentHTMLTags(Records, OS);
500 break;
501 case GenClangCommentHTMLTagsProperties:
502 EmitClangCommentHTMLTagsProperties(Records, OS);
503 break;
504 case GenClangCommentHTMLNamedCharacterReferences:
505 EmitClangCommentHTMLNamedCharacterReferences(Records, OS);
506 break;
507 case GenClangCommentCommandInfo:
508 EmitClangCommentCommandInfo(Records, OS);
509 break;
510 case GenClangCommentCommandList:
511 EmitClangCommentCommandList(Records, OS);
512 break;
513 case GenClangOpenCLBuiltins:
514 EmitClangOpenCLBuiltins(Records, OS);
515 break;
516 case GenClangOpenCLBuiltinHeader:
517 EmitClangOpenCLBuiltinHeader(Records, OS);
518 break;
519 case GenClangOpenCLBuiltinTests:
520 EmitClangOpenCLBuiltinTests(Records, OS);
521 break;
522 case GenClangSyntaxNodeList:
523 EmitClangSyntaxNodeList(Records, OS);
524 break;
525 case GenClangSyntaxNodeClasses:
526 EmitClangSyntaxNodeClasses(Records, OS);
527 break;
528 case GenArmNeon:
529 EmitNeon(Records, OS);
530 break;
531 case GenArmFP16:
532 EmitFP16(Records, OS);
533 break;
534 case GenArmVectorType:
535 EmitVectorTypes(Records, OS);
536 break;
537 case GenArmBF16:
538 EmitBF16(Records, OS);
539 break;
540 case GenArmNeonSema:
541 EmitNeonSema(Records, OS);
542 break;
543 case GenArmNeonTest:
544 EmitNeonTest(Records, OS);
545 break;
546 case GenArmImmCheckTypes:
547 EmitImmCheckTypes(Records, OS);
548 break;
549 case GenArmMveHeader:
550 EmitMveHeader(Records, OS);
551 break;
552 case GenArmMveBuiltinDef:
553 EmitMveBuiltinDef(Records, OS);
554 break;
555 case GenArmMveBuiltinSema:
556 EmitMveBuiltinSema(Records, OS);
557 break;
558 case GenArmMveBuiltinCG:
559 EmitMveBuiltinCG(Records, OS);
560 break;
561 case GenArmMveBuiltinAliases:
562 EmitMveBuiltinAliases(Records, OS);
563 break;
564 case GenArmSveHeader:
565 EmitSveHeader(Records, OS);
566 break;
567 case GenArmSveBuiltins:
568 EmitSveBuiltins(Records, OS);
569 break;
570 case GenArmSveBuiltinsJSON:
571 EmitSveBuiltinsJSON(Records, OS);
572 break;
573 case GenArmSveBuiltinCG:
574 EmitSveBuiltinCG(Records, OS);
575 break;
576 case GenArmSveTypeFlags:
577 EmitSveTypeFlags(Records, OS);
578 break;
579 case GenArmSveRangeChecks:
580 EmitSveRangeChecks(Records, OS);
581 break;
582 case GenArmSveStreamingAttrs:
583 EmitSveStreamingAttrs(Records, OS);
584 break;
585 case GenArmSmeHeader:
586 EmitSmeHeader(Records, OS);
587 break;
588 case GenArmSmeBuiltins:
589 EmitSmeBuiltins(Records, OS);
590 break;
591 case GenArmSmeBuiltinsJSON:
592 EmitSmeBuiltinsJSON(Records, OS);
593 break;
594 case GenArmSmeBuiltinCG:
595 EmitSmeBuiltinCG(Records, OS);
596 break;
597 case GenArmSmeRangeChecks:
598 EmitSmeRangeChecks(Records, OS);
599 break;
600 case GenArmSmeStreamingAttrs:
601 EmitSmeStreamingAttrs(Records, OS);
602 break;
603 case GenArmSmeBuiltinZAState:
604 EmitSmeBuiltinZAState(Records, OS);
605 break;
606 case GenArmCdeHeader:
607 EmitCdeHeader(Records, OS);
608 break;
609 case GenArmCdeBuiltinDef:
610 EmitCdeBuiltinDef(Records, OS);
611 break;
612 case GenArmCdeBuiltinSema:
613 EmitCdeBuiltinSema(Records, OS);
614 break;
615 case GenArmCdeBuiltinCG:
616 EmitCdeBuiltinCG(Records, OS);
617 break;
618 case GenArmCdeBuiltinAliases:
619 EmitCdeBuiltinAliases(Records, OS);
620 break;
621 case GenRISCVVectorHeader:
622 EmitRVVHeader(Records, OS);
623 break;
624 case GenRISCVVectorBuiltins:
625 EmitRVVBuiltins(Records, OS);
626 break;
627 case GenRISCVVectorBuiltinCG:
628 EmitRVVBuiltinCG(Records, OS);
629 break;
630 case GenRISCVVectorBuiltinSema:
631 EmitRVVBuiltinSema(Records, OS);
632 break;
633 case GenRISCVSiFiveVectorBuiltins:
634 EmitRVVBuiltins(Records, OS);
635 break;
636 case GenRISCVSiFiveVectorBuiltinCG:
637 EmitRVVBuiltinCG(Records, OS);
638 break;
639 case GenRISCVSiFiveVectorBuiltinSema:
640 EmitRVVBuiltinSema(Records, OS);
641 break;
642 case GenRISCVAndesVectorBuiltins:
643 EmitRVVBuiltins(Records, OS);
644 break;
645 case GenRISCVAndesVectorBuiltinCG:
646 EmitRVVBuiltinCG(Records, OS);
647 break;
648 case GenRISCVAndesVectorBuiltinSema:
649 EmitRVVBuiltinSema(Records, OS);
650 break;
651 case GenAttrDocs:
652 EmitClangAttrDocs(Records, OS);
653 break;
654 case GenBuiltinDocs:
655 EmitClangBuiltinDocs(Records, OS);
656 break;
657 case GenDiagDocs:
658 EmitClangDiagDocs(Records, OS);
659 break;
660 case GenOptDocs:
661 EmitClangOptDocs(Records, OS);
662 break;
663 case GenDataCollectors:
664 EmitClangDataCollectors(Records, OS);
665 break;
666 case GenTestPragmaAttributeSupportedAttributes:
667 EmitTestPragmaAttributeSupportedAttributes(Records, OS);
668 break;
669 }
670
671 return false;
672}
673}
674
675int main(int argc, char **argv) {
676 sys::PrintStackTraceOnErrorSignal(Argv0: argv[0]);
677 PrettyStackTraceProgram X(argc, argv);
678 cl::ParseCommandLineOptions(argc, argv);
679
680 llvm_shutdown_obj Y;
681
682 return TableGenMain(argv0: argv[0], MainFn: &ClangTableGenMain);
683}
684
685#ifdef __has_feature
686#if __has_feature(address_sanitizer)
687#include <sanitizer/lsan_interface.h>
688// Disable LeakSanitizer for this binary as it has too many leaks that are not
689// very interesting to fix. See compiler-rt/include/sanitizer/lsan_interface.h .
690int __lsan_is_turned_off() { return 1; }
691#endif // __has_feature(address_sanitizer)
692#endif // defined(__has_feature)
693