10b57cec5SDimitry Andric //===- TableGen.cpp - Top-Level TableGen implementation for Clang ---------===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric // 90b57cec5SDimitry Andric // This file contains the main function for Clang's TableGen. 100b57cec5SDimitry Andric // 110b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 120b57cec5SDimitry Andric 130b57cec5SDimitry Andric #include "TableGenBackends.h" // Declares all backends. 14480093f4SDimitry Andric #include "ASTTableGen.h" 150b57cec5SDimitry Andric #include "llvm/Support/CommandLine.h" 16bdd1243dSDimitry Andric #include "llvm/Support/ManagedStatic.h" 170b57cec5SDimitry Andric #include "llvm/Support/PrettyStackTrace.h" 180b57cec5SDimitry Andric #include "llvm/Support/Signals.h" 190b57cec5SDimitry Andric #include "llvm/TableGen/Error.h" 200b57cec5SDimitry Andric #include "llvm/TableGen/Main.h" 210b57cec5SDimitry Andric #include "llvm/TableGen/Record.h" 220b57cec5SDimitry Andric 230b57cec5SDimitry Andric using namespace llvm; 240b57cec5SDimitry Andric using namespace clang; 250b57cec5SDimitry Andric 260b57cec5SDimitry Andric enum ActionType { 270b57cec5SDimitry Andric PrintRecords, 280b57cec5SDimitry Andric DumpJSON, 290b57cec5SDimitry Andric GenClangAttrClasses, 300b57cec5SDimitry Andric GenClangAttrParserStringSwitches, 310b57cec5SDimitry Andric GenClangAttrSubjectMatchRulesParserStringSwitches, 320b57cec5SDimitry Andric GenClangAttrImpl, 330b57cec5SDimitry Andric GenClangAttrList, 34349cc55cSDimitry Andric GenClangAttrDocTable, 350b57cec5SDimitry Andric GenClangAttrSubjectMatchRuleList, 360b57cec5SDimitry Andric GenClangAttrPCHRead, 370b57cec5SDimitry Andric GenClangAttrPCHWrite, 387a6dacacSDimitry Andric GenClangRegularKeywordAttributeInfo, 390b57cec5SDimitry Andric GenClangAttrHasAttributeImpl, 400b57cec5SDimitry Andric GenClangAttrSpellingListIndex, 410b57cec5SDimitry Andric GenClangAttrASTVisitor, 420b57cec5SDimitry Andric GenClangAttrTemplateInstantiate, 430b57cec5SDimitry Andric GenClangAttrParsedAttrList, 440b57cec5SDimitry Andric GenClangAttrParsedAttrImpl, 450b57cec5SDimitry Andric GenClangAttrParsedAttrKinds, 460b57cec5SDimitry Andric GenClangAttrTextNodeDump, 470b57cec5SDimitry Andric GenClangAttrNodeTraverse, 48480093f4SDimitry Andric GenClangBasicReader, 49480093f4SDimitry Andric GenClangBasicWriter, 50*0fca6ea1SDimitry Andric GenClangBuiltins, 510b57cec5SDimitry Andric GenClangDiagsDefs, 520b57cec5SDimitry Andric GenClangDiagGroups, 530b57cec5SDimitry Andric GenClangDiagsIndexName, 540b57cec5SDimitry Andric GenClangCommentNodes, 550b57cec5SDimitry Andric GenClangDeclNodes, 560b57cec5SDimitry Andric GenClangStmtNodes, 57a7dea167SDimitry Andric GenClangTypeNodes, 58480093f4SDimitry Andric GenClangTypeReader, 59480093f4SDimitry Andric GenClangTypeWriter, 60a7dea167SDimitry Andric GenClangOpcodes, 610b57cec5SDimitry Andric GenClangSACheckers, 62e8d8bef9SDimitry Andric GenClangSyntaxNodeList, 63e8d8bef9SDimitry Andric GenClangSyntaxNodeClasses, 640b57cec5SDimitry Andric GenClangCommentHTMLTags, 650b57cec5SDimitry Andric GenClangCommentHTMLTagsProperties, 660b57cec5SDimitry Andric GenClangCommentHTMLNamedCharacterReferences, 670b57cec5SDimitry Andric GenClangCommentCommandInfo, 680b57cec5SDimitry Andric GenClangCommentCommandList, 690b57cec5SDimitry Andric GenClangOpenCLBuiltins, 7006c3fb27SDimitry Andric GenClangOpenCLBuiltinHeader, 71fe6060f1SDimitry Andric GenClangOpenCLBuiltinTests, 720b57cec5SDimitry Andric GenArmNeon, 730b57cec5SDimitry Andric GenArmFP16, 745ffd83dbSDimitry Andric GenArmBF16, 755f757f3fSDimitry Andric GenArmVectorType, 760b57cec5SDimitry Andric GenArmNeonSema, 770b57cec5SDimitry Andric GenArmNeonTest, 78480093f4SDimitry Andric GenArmMveHeader, 79480093f4SDimitry Andric GenArmMveBuiltinDef, 80480093f4SDimitry Andric GenArmMveBuiltinSema, 81480093f4SDimitry Andric GenArmMveBuiltinCG, 82480093f4SDimitry Andric GenArmMveBuiltinAliases, 835ffd83dbSDimitry Andric GenArmSveHeader, 845ffd83dbSDimitry Andric GenArmSveBuiltins, 855ffd83dbSDimitry Andric GenArmSveBuiltinCG, 865ffd83dbSDimitry Andric GenArmSveTypeFlags, 875ffd83dbSDimitry Andric GenArmSveRangeChecks, 88cb14a3feSDimitry Andric GenArmSveStreamingAttrs, 8906c3fb27SDimitry Andric GenArmSmeHeader, 9006c3fb27SDimitry Andric GenArmSmeBuiltins, 9106c3fb27SDimitry Andric GenArmSmeBuiltinCG, 9206c3fb27SDimitry Andric GenArmSmeRangeChecks, 93cb14a3feSDimitry Andric GenArmSmeStreamingAttrs, 94cb14a3feSDimitry Andric GenArmSmeBuiltinZAState, 955ffd83dbSDimitry Andric GenArmCdeHeader, 965ffd83dbSDimitry Andric GenArmCdeBuiltinDef, 975ffd83dbSDimitry Andric GenArmCdeBuiltinSema, 985ffd83dbSDimitry Andric GenArmCdeBuiltinCG, 995ffd83dbSDimitry Andric GenArmCdeBuiltinAliases, 100fe6060f1SDimitry Andric GenRISCVVectorHeader, 101fe6060f1SDimitry Andric GenRISCVVectorBuiltins, 102fe6060f1SDimitry Andric GenRISCVVectorBuiltinCG, 103972a253aSDimitry Andric GenRISCVVectorBuiltinSema, 10406c3fb27SDimitry Andric GenRISCVSiFiveVectorBuiltins, 10506c3fb27SDimitry Andric GenRISCVSiFiveVectorBuiltinCG, 10606c3fb27SDimitry Andric GenRISCVSiFiveVectorBuiltinSema, 1070b57cec5SDimitry Andric GenAttrDocs, 1080b57cec5SDimitry Andric GenDiagDocs, 1090b57cec5SDimitry Andric GenOptDocs, 1100b57cec5SDimitry Andric GenDataCollectors, 1110b57cec5SDimitry Andric GenTestPragmaAttributeSupportedAttributes 1120b57cec5SDimitry Andric }; 1130b57cec5SDimitry Andric 1140b57cec5SDimitry Andric namespace { 1150b57cec5SDimitry Andric cl::opt<ActionType> Action( 1160b57cec5SDimitry Andric cl::desc("Action to perform:"), 1170b57cec5SDimitry Andric cl::values( 1180b57cec5SDimitry Andric clEnumValN(PrintRecords, "print-records", 1190b57cec5SDimitry Andric "Print all records to stdout (default)"), 1200b57cec5SDimitry Andric clEnumValN(DumpJSON, "dump-json", 1210b57cec5SDimitry Andric "Dump all records as machine-readable JSON"), 1220b57cec5SDimitry Andric clEnumValN(GenClangAttrClasses, "gen-clang-attr-classes", 1230b57cec5SDimitry Andric "Generate clang attribute clases"), 1240b57cec5SDimitry Andric clEnumValN(GenClangAttrParserStringSwitches, 1250b57cec5SDimitry Andric "gen-clang-attr-parser-string-switches", 1260b57cec5SDimitry Andric "Generate all parser-related attribute string switches"), 1270b57cec5SDimitry Andric clEnumValN(GenClangAttrSubjectMatchRulesParserStringSwitches, 1280b57cec5SDimitry Andric "gen-clang-attr-subject-match-rules-parser-string-switches", 1290b57cec5SDimitry Andric "Generate all parser-related attribute subject match rule" 1300b57cec5SDimitry Andric "string switches"), 1310b57cec5SDimitry Andric clEnumValN(GenClangAttrImpl, "gen-clang-attr-impl", 1320b57cec5SDimitry Andric "Generate clang attribute implementations"), 1330b57cec5SDimitry Andric clEnumValN(GenClangAttrList, "gen-clang-attr-list", 1340b57cec5SDimitry Andric "Generate a clang attribute list"), 135349cc55cSDimitry Andric clEnumValN(GenClangAttrDocTable, "gen-clang-attr-doc-table", 136349cc55cSDimitry Andric "Generate a table of attribute documentation"), 1370b57cec5SDimitry Andric clEnumValN(GenClangAttrSubjectMatchRuleList, 1380b57cec5SDimitry Andric "gen-clang-attr-subject-match-rule-list", 1390b57cec5SDimitry Andric "Generate a clang attribute subject match rule list"), 1400b57cec5SDimitry Andric clEnumValN(GenClangAttrPCHRead, "gen-clang-attr-pch-read", 1410b57cec5SDimitry Andric "Generate clang PCH attribute reader"), 1420b57cec5SDimitry Andric clEnumValN(GenClangAttrPCHWrite, "gen-clang-attr-pch-write", 1430b57cec5SDimitry Andric "Generate clang PCH attribute writer"), 1447a6dacacSDimitry Andric clEnumValN(GenClangRegularKeywordAttributeInfo, 1457a6dacacSDimitry Andric "gen-clang-regular-keyword-attr-info", 1467a6dacacSDimitry Andric "Generate a list of regular keyword attributes with info " 1477a6dacacSDimitry Andric "about their arguments"), 1480b57cec5SDimitry Andric clEnumValN(GenClangAttrHasAttributeImpl, 1490b57cec5SDimitry Andric "gen-clang-attr-has-attribute-impl", 1500b57cec5SDimitry Andric "Generate a clang attribute spelling list"), 1510b57cec5SDimitry Andric clEnumValN(GenClangAttrSpellingListIndex, 1520b57cec5SDimitry Andric "gen-clang-attr-spelling-index", 1530b57cec5SDimitry Andric "Generate a clang attribute spelling index"), 1540b57cec5SDimitry Andric clEnumValN(GenClangAttrASTVisitor, "gen-clang-attr-ast-visitor", 1550b57cec5SDimitry Andric "Generate a recursive AST visitor for clang attributes"), 1560b57cec5SDimitry Andric clEnumValN(GenClangAttrTemplateInstantiate, 1570b57cec5SDimitry Andric "gen-clang-attr-template-instantiate", 1580b57cec5SDimitry Andric "Generate a clang template instantiate code"), 1590b57cec5SDimitry Andric clEnumValN(GenClangAttrParsedAttrList, 1600b57cec5SDimitry Andric "gen-clang-attr-parsed-attr-list", 1610b57cec5SDimitry Andric "Generate a clang parsed attribute list"), 1620b57cec5SDimitry Andric clEnumValN(GenClangAttrParsedAttrImpl, 1630b57cec5SDimitry Andric "gen-clang-attr-parsed-attr-impl", 1640b57cec5SDimitry Andric "Generate the clang parsed attribute helpers"), 1650b57cec5SDimitry Andric clEnumValN(GenClangAttrParsedAttrKinds, 1660b57cec5SDimitry Andric "gen-clang-attr-parsed-attr-kinds", 1670b57cec5SDimitry Andric "Generate a clang parsed attribute kinds"), 1680b57cec5SDimitry Andric clEnumValN(GenClangAttrTextNodeDump, "gen-clang-attr-text-node-dump", 1690b57cec5SDimitry Andric "Generate clang attribute text node dumper"), 1700b57cec5SDimitry Andric clEnumValN(GenClangAttrNodeTraverse, "gen-clang-attr-node-traverse", 1710b57cec5SDimitry Andric "Generate clang attribute traverser"), 172*0fca6ea1SDimitry Andric clEnumValN(GenClangBuiltins, "gen-clang-builtins", 173*0fca6ea1SDimitry Andric "Generate clang builtins list"), 1740b57cec5SDimitry Andric clEnumValN(GenClangDiagsDefs, "gen-clang-diags-defs", 1750b57cec5SDimitry Andric "Generate Clang diagnostics definitions"), 1760b57cec5SDimitry Andric clEnumValN(GenClangDiagGroups, "gen-clang-diag-groups", 1770b57cec5SDimitry Andric "Generate Clang diagnostic groups"), 1780b57cec5SDimitry Andric clEnumValN(GenClangDiagsIndexName, "gen-clang-diags-index-name", 1790b57cec5SDimitry Andric "Generate Clang diagnostic name index"), 180480093f4SDimitry Andric clEnumValN(GenClangBasicReader, "gen-clang-basic-reader", 181480093f4SDimitry Andric "Generate Clang BasicReader classes"), 182480093f4SDimitry Andric clEnumValN(GenClangBasicWriter, "gen-clang-basic-writer", 183480093f4SDimitry Andric "Generate Clang BasicWriter classes"), 1840b57cec5SDimitry Andric clEnumValN(GenClangCommentNodes, "gen-clang-comment-nodes", 1850b57cec5SDimitry Andric "Generate Clang AST comment nodes"), 1860b57cec5SDimitry Andric clEnumValN(GenClangDeclNodes, "gen-clang-decl-nodes", 1870b57cec5SDimitry Andric "Generate Clang AST declaration nodes"), 1880b57cec5SDimitry Andric clEnumValN(GenClangStmtNodes, "gen-clang-stmt-nodes", 1890b57cec5SDimitry Andric "Generate Clang AST statement nodes"), 190a7dea167SDimitry Andric clEnumValN(GenClangTypeNodes, "gen-clang-type-nodes", 191a7dea167SDimitry Andric "Generate Clang AST type nodes"), 192480093f4SDimitry Andric clEnumValN(GenClangTypeReader, "gen-clang-type-reader", 193480093f4SDimitry Andric "Generate Clang AbstractTypeReader class"), 194480093f4SDimitry Andric clEnumValN(GenClangTypeWriter, "gen-clang-type-writer", 195480093f4SDimitry Andric "Generate Clang AbstractTypeWriter class"), 196a7dea167SDimitry Andric clEnumValN(GenClangOpcodes, "gen-clang-opcodes", 197a7dea167SDimitry Andric "Generate Clang constexpr interpreter opcodes"), 1980b57cec5SDimitry Andric clEnumValN(GenClangSACheckers, "gen-clang-sa-checkers", 1990b57cec5SDimitry Andric "Generate Clang Static Analyzer checkers"), 200e8d8bef9SDimitry Andric clEnumValN(GenClangSyntaxNodeList, "gen-clang-syntax-node-list", 201e8d8bef9SDimitry Andric "Generate list of Clang Syntax Tree node types"), 202e8d8bef9SDimitry Andric clEnumValN(GenClangSyntaxNodeClasses, "gen-clang-syntax-node-classes", 203e8d8bef9SDimitry Andric "Generate definitions of Clang Syntax Tree node clasess"), 2040b57cec5SDimitry Andric clEnumValN(GenClangCommentHTMLTags, "gen-clang-comment-html-tags", 2050b57cec5SDimitry Andric "Generate efficient matchers for HTML tag " 2060b57cec5SDimitry Andric "names that are used in documentation comments"), 2070b57cec5SDimitry Andric clEnumValN(GenClangCommentHTMLTagsProperties, 2080b57cec5SDimitry Andric "gen-clang-comment-html-tags-properties", 2090b57cec5SDimitry Andric "Generate efficient matchers for HTML tag " 2100b57cec5SDimitry Andric "properties"), 2110b57cec5SDimitry Andric clEnumValN(GenClangCommentHTMLNamedCharacterReferences, 2120b57cec5SDimitry Andric "gen-clang-comment-html-named-character-references", 2130b57cec5SDimitry Andric "Generate function to translate named character " 2140b57cec5SDimitry Andric "references to UTF-8 sequences"), 2150b57cec5SDimitry Andric clEnumValN(GenClangCommentCommandInfo, "gen-clang-comment-command-info", 2160b57cec5SDimitry Andric "Generate command properties for commands that " 2170b57cec5SDimitry Andric "are used in documentation comments"), 2180b57cec5SDimitry Andric clEnumValN(GenClangCommentCommandList, "gen-clang-comment-command-list", 2190b57cec5SDimitry Andric "Generate list of commands that are used in " 2200b57cec5SDimitry Andric "documentation comments"), 2210b57cec5SDimitry Andric clEnumValN(GenClangOpenCLBuiltins, "gen-clang-opencl-builtins", 2220b57cec5SDimitry Andric "Generate OpenCL builtin declaration handlers"), 22306c3fb27SDimitry Andric clEnumValN(GenClangOpenCLBuiltinHeader, 22406c3fb27SDimitry Andric "gen-clang-opencl-builtin-header", 22506c3fb27SDimitry Andric "Generate OpenCL builtin header"), 226fe6060f1SDimitry Andric clEnumValN(GenClangOpenCLBuiltinTests, "gen-clang-opencl-builtin-tests", 227fe6060f1SDimitry Andric "Generate OpenCL builtin declaration tests"), 2280b57cec5SDimitry Andric clEnumValN(GenArmNeon, "gen-arm-neon", "Generate arm_neon.h for clang"), 2290b57cec5SDimitry Andric clEnumValN(GenArmFP16, "gen-arm-fp16", "Generate arm_fp16.h for clang"), 2305ffd83dbSDimitry Andric clEnumValN(GenArmBF16, "gen-arm-bf16", "Generate arm_bf16.h for clang"), 2315f757f3fSDimitry Andric clEnumValN(GenArmVectorType, "gen-arm-vector-type", 2325f757f3fSDimitry Andric "Generate arm_vector_types.h for clang"), 2330b57cec5SDimitry Andric clEnumValN(GenArmNeonSema, "gen-arm-neon-sema", 2340b57cec5SDimitry Andric "Generate ARM NEON sema support for clang"), 2350b57cec5SDimitry Andric clEnumValN(GenArmNeonTest, "gen-arm-neon-test", 2360b57cec5SDimitry Andric "Generate ARM NEON tests for clang"), 2375ffd83dbSDimitry Andric clEnumValN(GenArmSveHeader, "gen-arm-sve-header", 2385ffd83dbSDimitry Andric "Generate arm_sve.h for clang"), 2395ffd83dbSDimitry Andric clEnumValN(GenArmSveBuiltins, "gen-arm-sve-builtins", 2405ffd83dbSDimitry Andric "Generate arm_sve_builtins.inc for clang"), 2415ffd83dbSDimitry Andric clEnumValN(GenArmSveBuiltinCG, "gen-arm-sve-builtin-codegen", 2425ffd83dbSDimitry Andric "Generate arm_sve_builtin_cg_map.inc for clang"), 2435ffd83dbSDimitry Andric clEnumValN(GenArmSveTypeFlags, "gen-arm-sve-typeflags", 2445ffd83dbSDimitry Andric "Generate arm_sve_typeflags.inc for clang"), 2455ffd83dbSDimitry Andric clEnumValN(GenArmSveRangeChecks, "gen-arm-sve-sema-rangechecks", 2465ffd83dbSDimitry Andric "Generate arm_sve_sema_rangechecks.inc for clang"), 247cb14a3feSDimitry Andric clEnumValN(GenArmSveStreamingAttrs, "gen-arm-sve-streaming-attrs", 248cb14a3feSDimitry Andric "Generate arm_sve_streaming_attrs.inc for clang"), 24906c3fb27SDimitry Andric clEnumValN(GenArmSmeHeader, "gen-arm-sme-header", 25006c3fb27SDimitry Andric "Generate arm_sme.h for clang"), 25106c3fb27SDimitry Andric clEnumValN(GenArmSmeBuiltins, "gen-arm-sme-builtins", 25206c3fb27SDimitry Andric "Generate arm_sme_builtins.inc for clang"), 25306c3fb27SDimitry Andric clEnumValN(GenArmSmeBuiltinCG, "gen-arm-sme-builtin-codegen", 25406c3fb27SDimitry Andric "Generate arm_sme_builtin_cg_map.inc for clang"), 25506c3fb27SDimitry Andric clEnumValN(GenArmSmeRangeChecks, "gen-arm-sme-sema-rangechecks", 25606c3fb27SDimitry Andric "Generate arm_sme_sema_rangechecks.inc for clang"), 257cb14a3feSDimitry Andric clEnumValN(GenArmSmeStreamingAttrs, "gen-arm-sme-streaming-attrs", 258cb14a3feSDimitry Andric "Generate arm_sme_streaming_attrs.inc for clang"), 259cb14a3feSDimitry Andric clEnumValN(GenArmSmeBuiltinZAState, "gen-arm-sme-builtin-za-state", 260cb14a3feSDimitry Andric "Generate arm_sme_builtins_za_state.inc for clang"), 261480093f4SDimitry Andric clEnumValN(GenArmMveHeader, "gen-arm-mve-header", 262480093f4SDimitry Andric "Generate arm_mve.h for clang"), 263480093f4SDimitry Andric clEnumValN(GenArmMveBuiltinDef, "gen-arm-mve-builtin-def", 264480093f4SDimitry Andric "Generate ARM MVE builtin definitions for clang"), 265480093f4SDimitry Andric clEnumValN(GenArmMveBuiltinSema, "gen-arm-mve-builtin-sema", 266480093f4SDimitry Andric "Generate ARM MVE builtin sema checks for clang"), 267480093f4SDimitry Andric clEnumValN(GenArmMveBuiltinCG, "gen-arm-mve-builtin-codegen", 268480093f4SDimitry Andric "Generate ARM MVE builtin code-generator for clang"), 269480093f4SDimitry Andric clEnumValN(GenArmMveBuiltinAliases, "gen-arm-mve-builtin-aliases", 270480093f4SDimitry Andric "Generate list of valid ARM MVE builtin aliases for clang"), 2715ffd83dbSDimitry Andric clEnumValN(GenArmCdeHeader, "gen-arm-cde-header", 2725ffd83dbSDimitry Andric "Generate arm_cde.h for clang"), 2735ffd83dbSDimitry Andric clEnumValN(GenArmCdeBuiltinDef, "gen-arm-cde-builtin-def", 2745ffd83dbSDimitry Andric "Generate ARM CDE builtin definitions for clang"), 2755ffd83dbSDimitry Andric clEnumValN(GenArmCdeBuiltinSema, "gen-arm-cde-builtin-sema", 2765ffd83dbSDimitry Andric "Generate ARM CDE builtin sema checks for clang"), 2775ffd83dbSDimitry Andric clEnumValN(GenArmCdeBuiltinCG, "gen-arm-cde-builtin-codegen", 2785ffd83dbSDimitry Andric "Generate ARM CDE builtin code-generator for clang"), 2795ffd83dbSDimitry Andric clEnumValN(GenArmCdeBuiltinAliases, "gen-arm-cde-builtin-aliases", 2805ffd83dbSDimitry Andric "Generate list of valid ARM CDE builtin aliases for clang"), 281fe6060f1SDimitry Andric clEnumValN(GenRISCVVectorHeader, "gen-riscv-vector-header", 282fe6060f1SDimitry Andric "Generate riscv_vector.h for clang"), 283fe6060f1SDimitry Andric clEnumValN(GenRISCVVectorBuiltins, "gen-riscv-vector-builtins", 284fe6060f1SDimitry Andric "Generate riscv_vector_builtins.inc for clang"), 285fe6060f1SDimitry Andric clEnumValN(GenRISCVVectorBuiltinCG, "gen-riscv-vector-builtin-codegen", 286fe6060f1SDimitry Andric "Generate riscv_vector_builtin_cg.inc for clang"), 287972a253aSDimitry Andric clEnumValN(GenRISCVVectorBuiltinSema, "gen-riscv-vector-builtin-sema", 288972a253aSDimitry Andric "Generate riscv_vector_builtin_sema.inc for clang"), 2897a6dacacSDimitry Andric clEnumValN(GenRISCVSiFiveVectorBuiltins, 2907a6dacacSDimitry Andric "gen-riscv-sifive-vector-builtins", 29106c3fb27SDimitry Andric "Generate riscv_sifive_vector_builtins.inc for clang"), 2927a6dacacSDimitry Andric clEnumValN(GenRISCVSiFiveVectorBuiltinCG, 2937a6dacacSDimitry Andric "gen-riscv-sifive-vector-builtin-codegen", 29406c3fb27SDimitry Andric "Generate riscv_sifive_vector_builtin_cg.inc for clang"), 2957a6dacacSDimitry Andric clEnumValN(GenRISCVSiFiveVectorBuiltinSema, 2967a6dacacSDimitry Andric "gen-riscv-sifive-vector-builtin-sema", 29706c3fb27SDimitry Andric "Generate riscv_sifive_vector_builtin_sema.inc for clang"), 2980b57cec5SDimitry Andric clEnumValN(GenAttrDocs, "gen-attr-docs", 2990b57cec5SDimitry Andric "Generate attribute documentation"), 3000b57cec5SDimitry Andric clEnumValN(GenDiagDocs, "gen-diag-docs", 3010b57cec5SDimitry Andric "Generate diagnostic documentation"), 3020b57cec5SDimitry Andric clEnumValN(GenOptDocs, "gen-opt-docs", "Generate option documentation"), 3030b57cec5SDimitry Andric clEnumValN(GenDataCollectors, "gen-clang-data-collectors", 3040b57cec5SDimitry Andric "Generate data collectors for AST nodes"), 3050b57cec5SDimitry Andric clEnumValN(GenTestPragmaAttributeSupportedAttributes, 3060b57cec5SDimitry Andric "gen-clang-test-pragma-attribute-supported-attributes", 3070b57cec5SDimitry Andric "Generate a list of attributes supported by #pragma clang " 3080b57cec5SDimitry Andric "attribute for testing purposes"))); 3090b57cec5SDimitry Andric 3100b57cec5SDimitry Andric cl::opt<std::string> 3110b57cec5SDimitry Andric ClangComponent("clang-component", 3120b57cec5SDimitry Andric cl::desc("Only use warnings from specified component"), 3130b57cec5SDimitry Andric cl::value_desc("component"), cl::Hidden); 3140b57cec5SDimitry Andric 3150b57cec5SDimitry Andric bool ClangTableGenMain(raw_ostream &OS, RecordKeeper &Records) { 3160b57cec5SDimitry Andric switch (Action) { 3170b57cec5SDimitry Andric case PrintRecords: 3180b57cec5SDimitry Andric OS << Records; // No argument, dump all contents 3190b57cec5SDimitry Andric break; 3200b57cec5SDimitry Andric case DumpJSON: 3210b57cec5SDimitry Andric EmitJSON(Records, OS); 3220b57cec5SDimitry Andric break; 3230b57cec5SDimitry Andric case GenClangAttrClasses: 3240b57cec5SDimitry Andric EmitClangAttrClass(Records, OS); 3250b57cec5SDimitry Andric break; 3260b57cec5SDimitry Andric case GenClangAttrParserStringSwitches: 3270b57cec5SDimitry Andric EmitClangAttrParserStringSwitches(Records, OS); 3280b57cec5SDimitry Andric break; 3290b57cec5SDimitry Andric case GenClangAttrSubjectMatchRulesParserStringSwitches: 3300b57cec5SDimitry Andric EmitClangAttrSubjectMatchRulesParserStringSwitches(Records, OS); 3310b57cec5SDimitry Andric break; 3320b57cec5SDimitry Andric case GenClangAttrImpl: 3330b57cec5SDimitry Andric EmitClangAttrImpl(Records, OS); 3340b57cec5SDimitry Andric break; 3350b57cec5SDimitry Andric case GenClangAttrList: 3360b57cec5SDimitry Andric EmitClangAttrList(Records, OS); 3370b57cec5SDimitry Andric break; 338349cc55cSDimitry Andric case GenClangAttrDocTable: 339349cc55cSDimitry Andric EmitClangAttrDocTable(Records, OS); 340349cc55cSDimitry Andric break; 3410b57cec5SDimitry Andric case GenClangAttrSubjectMatchRuleList: 3420b57cec5SDimitry Andric EmitClangAttrSubjectMatchRuleList(Records, OS); 3430b57cec5SDimitry Andric break; 3440b57cec5SDimitry Andric case GenClangAttrPCHRead: 3450b57cec5SDimitry Andric EmitClangAttrPCHRead(Records, OS); 3460b57cec5SDimitry Andric break; 3470b57cec5SDimitry Andric case GenClangAttrPCHWrite: 3480b57cec5SDimitry Andric EmitClangAttrPCHWrite(Records, OS); 3490b57cec5SDimitry Andric break; 3507a6dacacSDimitry Andric case GenClangRegularKeywordAttributeInfo: 3517a6dacacSDimitry Andric EmitClangRegularKeywordAttributeInfo(Records, OS); 35206c3fb27SDimitry Andric break; 3530b57cec5SDimitry Andric case GenClangAttrHasAttributeImpl: 3540b57cec5SDimitry Andric EmitClangAttrHasAttrImpl(Records, OS); 3550b57cec5SDimitry Andric break; 3560b57cec5SDimitry Andric case GenClangAttrSpellingListIndex: 3570b57cec5SDimitry Andric EmitClangAttrSpellingListIndex(Records, OS); 3580b57cec5SDimitry Andric break; 3590b57cec5SDimitry Andric case GenClangAttrASTVisitor: 3600b57cec5SDimitry Andric EmitClangAttrASTVisitor(Records, OS); 3610b57cec5SDimitry Andric break; 3620b57cec5SDimitry Andric case GenClangAttrTemplateInstantiate: 3630b57cec5SDimitry Andric EmitClangAttrTemplateInstantiate(Records, OS); 3640b57cec5SDimitry Andric break; 3650b57cec5SDimitry Andric case GenClangAttrParsedAttrList: 3660b57cec5SDimitry Andric EmitClangAttrParsedAttrList(Records, OS); 3670b57cec5SDimitry Andric break; 3680b57cec5SDimitry Andric case GenClangAttrParsedAttrImpl: 3690b57cec5SDimitry Andric EmitClangAttrParsedAttrImpl(Records, OS); 3700b57cec5SDimitry Andric break; 3710b57cec5SDimitry Andric case GenClangAttrParsedAttrKinds: 3720b57cec5SDimitry Andric EmitClangAttrParsedAttrKinds(Records, OS); 3730b57cec5SDimitry Andric break; 3740b57cec5SDimitry Andric case GenClangAttrTextNodeDump: 3750b57cec5SDimitry Andric EmitClangAttrTextNodeDump(Records, OS); 3760b57cec5SDimitry Andric break; 3770b57cec5SDimitry Andric case GenClangAttrNodeTraverse: 3780b57cec5SDimitry Andric EmitClangAttrNodeTraverse(Records, OS); 3790b57cec5SDimitry Andric break; 380*0fca6ea1SDimitry Andric case GenClangBuiltins: 381*0fca6ea1SDimitry Andric EmitClangBuiltins(Records, OS); 382*0fca6ea1SDimitry Andric break; 3830b57cec5SDimitry Andric case GenClangDiagsDefs: 3840b57cec5SDimitry Andric EmitClangDiagsDefs(Records, OS, ClangComponent); 3850b57cec5SDimitry Andric break; 3860b57cec5SDimitry Andric case GenClangDiagGroups: 3870b57cec5SDimitry Andric EmitClangDiagGroups(Records, OS); 3880b57cec5SDimitry Andric break; 3890b57cec5SDimitry Andric case GenClangDiagsIndexName: 3900b57cec5SDimitry Andric EmitClangDiagsIndexName(Records, OS); 3910b57cec5SDimitry Andric break; 3920b57cec5SDimitry Andric case GenClangCommentNodes: 393480093f4SDimitry Andric EmitClangASTNodes(Records, OS, CommentNodeClassName, ""); 3940b57cec5SDimitry Andric break; 3950b57cec5SDimitry Andric case GenClangDeclNodes: 3961db9f3b2SDimitry Andric EmitClangASTNodes(Records, OS, DeclNodeClassName, "Decl", 3971db9f3b2SDimitry Andric DeclContextNodeClassName); 3980b57cec5SDimitry Andric EmitClangDeclContext(Records, OS); 3990b57cec5SDimitry Andric break; 4000b57cec5SDimitry Andric case GenClangStmtNodes: 401480093f4SDimitry Andric EmitClangASTNodes(Records, OS, StmtNodeClassName, ""); 4020b57cec5SDimitry Andric break; 403a7dea167SDimitry Andric case GenClangTypeNodes: 404a7dea167SDimitry Andric EmitClangTypeNodes(Records, OS); 405a7dea167SDimitry Andric break; 406480093f4SDimitry Andric case GenClangTypeReader: 407480093f4SDimitry Andric EmitClangTypeReader(Records, OS); 408480093f4SDimitry Andric break; 409480093f4SDimitry Andric case GenClangTypeWriter: 410480093f4SDimitry Andric EmitClangTypeWriter(Records, OS); 411480093f4SDimitry Andric break; 412480093f4SDimitry Andric case GenClangBasicReader: 413480093f4SDimitry Andric EmitClangBasicReader(Records, OS); 414480093f4SDimitry Andric break; 415480093f4SDimitry Andric case GenClangBasicWriter: 416480093f4SDimitry Andric EmitClangBasicWriter(Records, OS); 417480093f4SDimitry Andric break; 418a7dea167SDimitry Andric case GenClangOpcodes: 419a7dea167SDimitry Andric EmitClangOpcodes(Records, OS); 420a7dea167SDimitry Andric break; 4210b57cec5SDimitry Andric case GenClangSACheckers: 4220b57cec5SDimitry Andric EmitClangSACheckers(Records, OS); 4230b57cec5SDimitry Andric break; 4240b57cec5SDimitry Andric case GenClangCommentHTMLTags: 4250b57cec5SDimitry Andric EmitClangCommentHTMLTags(Records, OS); 4260b57cec5SDimitry Andric break; 4270b57cec5SDimitry Andric case GenClangCommentHTMLTagsProperties: 4280b57cec5SDimitry Andric EmitClangCommentHTMLTagsProperties(Records, OS); 4290b57cec5SDimitry Andric break; 4300b57cec5SDimitry Andric case GenClangCommentHTMLNamedCharacterReferences: 4310b57cec5SDimitry Andric EmitClangCommentHTMLNamedCharacterReferences(Records, OS); 4320b57cec5SDimitry Andric break; 4330b57cec5SDimitry Andric case GenClangCommentCommandInfo: 4340b57cec5SDimitry Andric EmitClangCommentCommandInfo(Records, OS); 4350b57cec5SDimitry Andric break; 4360b57cec5SDimitry Andric case GenClangCommentCommandList: 4370b57cec5SDimitry Andric EmitClangCommentCommandList(Records, OS); 4380b57cec5SDimitry Andric break; 4390b57cec5SDimitry Andric case GenClangOpenCLBuiltins: 4400b57cec5SDimitry Andric EmitClangOpenCLBuiltins(Records, OS); 4410b57cec5SDimitry Andric break; 44206c3fb27SDimitry Andric case GenClangOpenCLBuiltinHeader: 44306c3fb27SDimitry Andric EmitClangOpenCLBuiltinHeader(Records, OS); 44406c3fb27SDimitry Andric break; 445fe6060f1SDimitry Andric case GenClangOpenCLBuiltinTests: 446fe6060f1SDimitry Andric EmitClangOpenCLBuiltinTests(Records, OS); 447fe6060f1SDimitry Andric break; 448e8d8bef9SDimitry Andric case GenClangSyntaxNodeList: 449e8d8bef9SDimitry Andric EmitClangSyntaxNodeList(Records, OS); 450e8d8bef9SDimitry Andric break; 451e8d8bef9SDimitry Andric case GenClangSyntaxNodeClasses: 452e8d8bef9SDimitry Andric EmitClangSyntaxNodeClasses(Records, OS); 453e8d8bef9SDimitry Andric break; 4540b57cec5SDimitry Andric case GenArmNeon: 4550b57cec5SDimitry Andric EmitNeon(Records, OS); 4560b57cec5SDimitry Andric break; 4570b57cec5SDimitry Andric case GenArmFP16: 4580b57cec5SDimitry Andric EmitFP16(Records, OS); 4590b57cec5SDimitry Andric break; 4605f757f3fSDimitry Andric case GenArmVectorType: 4615f757f3fSDimitry Andric EmitVectorTypes(Records, OS); 4625f757f3fSDimitry Andric break; 4635ffd83dbSDimitry Andric case GenArmBF16: 4645ffd83dbSDimitry Andric EmitBF16(Records, OS); 4655ffd83dbSDimitry Andric break; 4660b57cec5SDimitry Andric case GenArmNeonSema: 4670b57cec5SDimitry Andric EmitNeonSema(Records, OS); 4680b57cec5SDimitry Andric break; 4690b57cec5SDimitry Andric case GenArmNeonTest: 4700b57cec5SDimitry Andric EmitNeonTest(Records, OS); 4710b57cec5SDimitry Andric break; 472480093f4SDimitry Andric case GenArmMveHeader: 473480093f4SDimitry Andric EmitMveHeader(Records, OS); 474480093f4SDimitry Andric break; 475480093f4SDimitry Andric case GenArmMveBuiltinDef: 476480093f4SDimitry Andric EmitMveBuiltinDef(Records, OS); 477480093f4SDimitry Andric break; 478480093f4SDimitry Andric case GenArmMveBuiltinSema: 479480093f4SDimitry Andric EmitMveBuiltinSema(Records, OS); 480480093f4SDimitry Andric break; 481480093f4SDimitry Andric case GenArmMveBuiltinCG: 482480093f4SDimitry Andric EmitMveBuiltinCG(Records, OS); 483480093f4SDimitry Andric break; 484480093f4SDimitry Andric case GenArmMveBuiltinAliases: 485480093f4SDimitry Andric EmitMveBuiltinAliases(Records, OS); 486480093f4SDimitry Andric break; 4875ffd83dbSDimitry Andric case GenArmSveHeader: 4885ffd83dbSDimitry Andric EmitSveHeader(Records, OS); 4895ffd83dbSDimitry Andric break; 4905ffd83dbSDimitry Andric case GenArmSveBuiltins: 4915ffd83dbSDimitry Andric EmitSveBuiltins(Records, OS); 4925ffd83dbSDimitry Andric break; 4935ffd83dbSDimitry Andric case GenArmSveBuiltinCG: 4945ffd83dbSDimitry Andric EmitSveBuiltinCG(Records, OS); 4955ffd83dbSDimitry Andric break; 4965ffd83dbSDimitry Andric case GenArmSveTypeFlags: 4975ffd83dbSDimitry Andric EmitSveTypeFlags(Records, OS); 4985ffd83dbSDimitry Andric break; 4995ffd83dbSDimitry Andric case GenArmSveRangeChecks: 5005ffd83dbSDimitry Andric EmitSveRangeChecks(Records, OS); 5015ffd83dbSDimitry Andric break; 502cb14a3feSDimitry Andric case GenArmSveStreamingAttrs: 503cb14a3feSDimitry Andric EmitSveStreamingAttrs(Records, OS); 504cb14a3feSDimitry Andric break; 50506c3fb27SDimitry Andric case GenArmSmeHeader: 50606c3fb27SDimitry Andric EmitSmeHeader(Records, OS); 50706c3fb27SDimitry Andric break; 50806c3fb27SDimitry Andric case GenArmSmeBuiltins: 50906c3fb27SDimitry Andric EmitSmeBuiltins(Records, OS); 51006c3fb27SDimitry Andric break; 51106c3fb27SDimitry Andric case GenArmSmeBuiltinCG: 51206c3fb27SDimitry Andric EmitSmeBuiltinCG(Records, OS); 51306c3fb27SDimitry Andric break; 51406c3fb27SDimitry Andric case GenArmSmeRangeChecks: 51506c3fb27SDimitry Andric EmitSmeRangeChecks(Records, OS); 51606c3fb27SDimitry Andric break; 517cb14a3feSDimitry Andric case GenArmSmeStreamingAttrs: 518cb14a3feSDimitry Andric EmitSmeStreamingAttrs(Records, OS); 519cb14a3feSDimitry Andric break; 520cb14a3feSDimitry Andric case GenArmSmeBuiltinZAState: 521cb14a3feSDimitry Andric EmitSmeBuiltinZAState(Records, OS); 522cb14a3feSDimitry Andric break; 5235ffd83dbSDimitry Andric case GenArmCdeHeader: 5245ffd83dbSDimitry Andric EmitCdeHeader(Records, OS); 5255ffd83dbSDimitry Andric break; 5265ffd83dbSDimitry Andric case GenArmCdeBuiltinDef: 5275ffd83dbSDimitry Andric EmitCdeBuiltinDef(Records, OS); 5285ffd83dbSDimitry Andric break; 5295ffd83dbSDimitry Andric case GenArmCdeBuiltinSema: 5305ffd83dbSDimitry Andric EmitCdeBuiltinSema(Records, OS); 5315ffd83dbSDimitry Andric break; 5325ffd83dbSDimitry Andric case GenArmCdeBuiltinCG: 5335ffd83dbSDimitry Andric EmitCdeBuiltinCG(Records, OS); 5345ffd83dbSDimitry Andric break; 5355ffd83dbSDimitry Andric case GenArmCdeBuiltinAliases: 5365ffd83dbSDimitry Andric EmitCdeBuiltinAliases(Records, OS); 5375ffd83dbSDimitry Andric break; 538fe6060f1SDimitry Andric case GenRISCVVectorHeader: 539fe6060f1SDimitry Andric EmitRVVHeader(Records, OS); 540fe6060f1SDimitry Andric break; 541fe6060f1SDimitry Andric case GenRISCVVectorBuiltins: 542fe6060f1SDimitry Andric EmitRVVBuiltins(Records, OS); 543fe6060f1SDimitry Andric break; 544fe6060f1SDimitry Andric case GenRISCVVectorBuiltinCG: 545fe6060f1SDimitry Andric EmitRVVBuiltinCG(Records, OS); 546fe6060f1SDimitry Andric break; 547972a253aSDimitry Andric case GenRISCVVectorBuiltinSema: 548972a253aSDimitry Andric EmitRVVBuiltinSema(Records, OS); 549972a253aSDimitry Andric break; 55006c3fb27SDimitry Andric case GenRISCVSiFiveVectorBuiltins: 55106c3fb27SDimitry Andric EmitRVVBuiltins(Records, OS); 55206c3fb27SDimitry Andric break; 55306c3fb27SDimitry Andric case GenRISCVSiFiveVectorBuiltinCG: 55406c3fb27SDimitry Andric EmitRVVBuiltinCG(Records, OS); 55506c3fb27SDimitry Andric break; 55606c3fb27SDimitry Andric case GenRISCVSiFiveVectorBuiltinSema: 55706c3fb27SDimitry Andric EmitRVVBuiltinSema(Records, OS); 55806c3fb27SDimitry Andric break; 5590b57cec5SDimitry Andric case GenAttrDocs: 5600b57cec5SDimitry Andric EmitClangAttrDocs(Records, OS); 5610b57cec5SDimitry Andric break; 5620b57cec5SDimitry Andric case GenDiagDocs: 5630b57cec5SDimitry Andric EmitClangDiagDocs(Records, OS); 5640b57cec5SDimitry Andric break; 5650b57cec5SDimitry Andric case GenOptDocs: 5660b57cec5SDimitry Andric EmitClangOptDocs(Records, OS); 5670b57cec5SDimitry Andric break; 5680b57cec5SDimitry Andric case GenDataCollectors: 5690b57cec5SDimitry Andric EmitClangDataCollectors(Records, OS); 5700b57cec5SDimitry Andric break; 5710b57cec5SDimitry Andric case GenTestPragmaAttributeSupportedAttributes: 5720b57cec5SDimitry Andric EmitTestPragmaAttributeSupportedAttributes(Records, OS); 5730b57cec5SDimitry Andric break; 5740b57cec5SDimitry Andric } 5750b57cec5SDimitry Andric 5760b57cec5SDimitry Andric return false; 5770b57cec5SDimitry Andric } 5780b57cec5SDimitry Andric } 5790b57cec5SDimitry Andric 5800b57cec5SDimitry Andric int main(int argc, char **argv) { 5810b57cec5SDimitry Andric sys::PrintStackTraceOnErrorSignal(argv[0]); 5820b57cec5SDimitry Andric PrettyStackTraceProgram X(argc, argv); 5830b57cec5SDimitry Andric cl::ParseCommandLineOptions(argc, argv); 5840b57cec5SDimitry Andric 5850b57cec5SDimitry Andric llvm_shutdown_obj Y; 5860b57cec5SDimitry Andric 5870b57cec5SDimitry Andric return TableGenMain(argv[0], &ClangTableGenMain); 5880b57cec5SDimitry Andric } 5890b57cec5SDimitry Andric 5900b57cec5SDimitry Andric #ifdef __has_feature 5910b57cec5SDimitry Andric #if __has_feature(address_sanitizer) 5920b57cec5SDimitry Andric #include <sanitizer/lsan_interface.h> 5930b57cec5SDimitry Andric // Disable LeakSanitizer for this binary as it has too many leaks that are not 5940b57cec5SDimitry Andric // very interesting to fix. See compiler-rt/include/sanitizer/lsan_interface.h . 5950b57cec5SDimitry Andric int __lsan_is_turned_off() { return 1; } 5960b57cec5SDimitry Andric #endif // __has_feature(address_sanitizer) 5970b57cec5SDimitry Andric #endif // defined(__has_feature) 598