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