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