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