1*0a6a1f1dSLionel Sambuc================= 2*0a6a1f1dSLionel SambucTableGen BackEnds 3*0a6a1f1dSLionel Sambuc================= 4*0a6a1f1dSLionel Sambuc 5*0a6a1f1dSLionel Sambuc.. contents:: 6*0a6a1f1dSLionel Sambuc :local: 7*0a6a1f1dSLionel Sambuc 8*0a6a1f1dSLionel SambucIntroduction 9*0a6a1f1dSLionel Sambuc============ 10*0a6a1f1dSLionel Sambuc 11*0a6a1f1dSLionel SambucTableGen backends are at the core of TableGen's functionality. The source files 12*0a6a1f1dSLionel Sambucprovide the semantics to a generated (in memory) structure, but it's up to the 13*0a6a1f1dSLionel Sambucbackend to print this out in a way that is meaningful to the user (normally a 14*0a6a1f1dSLionel SambucC program including a file or a textual list of warnings, options and error 15*0a6a1f1dSLionel Sambucmessages). 16*0a6a1f1dSLionel Sambuc 17*0a6a1f1dSLionel SambucTableGen is used by both LLVM and Clang with very different goals. LLVM uses it 18*0a6a1f1dSLionel Sambucas a way to automate the generation of massive amounts of information regarding 19*0a6a1f1dSLionel Sambucinstructions, schedules, cores and architecture features. Some backends generate 20*0a6a1f1dSLionel Sambucoutput that is consumed by more than one source file, so they need to be created 21*0a6a1f1dSLionel Sambucin a way that is easy to use pre-processor tricks. Some backends can also print 22*0a6a1f1dSLionel SambucC code structures, so that they can be directly included as-is. 23*0a6a1f1dSLionel Sambuc 24*0a6a1f1dSLionel SambucClang, on the other hand, uses it mainly for diagnostic messages (errors, 25*0a6a1f1dSLionel Sambucwarnings, tips) and attributes, so more on the textual end of the scale. 26*0a6a1f1dSLionel Sambuc 27*0a6a1f1dSLionel SambucLLVM BackEnds 28*0a6a1f1dSLionel Sambuc============= 29*0a6a1f1dSLionel Sambuc 30*0a6a1f1dSLionel Sambuc.. warning:: 31*0a6a1f1dSLionel Sambuc This document is raw. Each section below needs three sub-sections: description 32*0a6a1f1dSLionel Sambuc of its purpose with a list of users, output generated from generic input, and 33*0a6a1f1dSLionel Sambuc finally why it needed a new backend (in case there's something similar). 34*0a6a1f1dSLionel Sambuc 35*0a6a1f1dSLionel SambucOverall, each backend will take the same TableGen file type and transform into 36*0a6a1f1dSLionel Sambucsimilar output for different targets/uses. There is an implicit contract between 37*0a6a1f1dSLionel Sambucthe TableGen files, the back-ends and their users. 38*0a6a1f1dSLionel Sambuc 39*0a6a1f1dSLionel SambucFor instance, a global contract is that each back-end produces macro-guarded 40*0a6a1f1dSLionel Sambucsections. Based on whether the file is included by a header or a source file, 41*0a6a1f1dSLionel Sambucor even in which context of each file the include is being used, you have 42*0a6a1f1dSLionel Sambuctodefine a macro just before including it, to get the right output: 43*0a6a1f1dSLionel Sambuc 44*0a6a1f1dSLionel Sambuc.. code-block:: c++ 45*0a6a1f1dSLionel Sambuc 46*0a6a1f1dSLionel Sambuc #define GET_REGINFO_TARGET_DESC 47*0a6a1f1dSLionel Sambuc #include "ARMGenRegisterInfo.inc" 48*0a6a1f1dSLionel Sambuc 49*0a6a1f1dSLionel SambucAnd just part of the generated file would be included. This is useful if 50*0a6a1f1dSLionel Sambucyou need the same information in multiple formats (instantiation, initialization, 51*0a6a1f1dSLionel Sambucgetter/setter functions, etc) from the same source TableGen file without having 52*0a6a1f1dSLionel Sambucto re-compile the TableGen file multiple times. 53*0a6a1f1dSLionel Sambuc 54*0a6a1f1dSLionel SambucSometimes, multiple macros might be defined before the same include file to 55*0a6a1f1dSLionel Sambucoutput multiple blocks: 56*0a6a1f1dSLionel Sambuc 57*0a6a1f1dSLionel Sambuc.. code-block:: c++ 58*0a6a1f1dSLionel Sambuc 59*0a6a1f1dSLionel Sambuc #define GET_REGISTER_MATCHER 60*0a6a1f1dSLionel Sambuc #define GET_SUBTARGET_FEATURE_NAME 61*0a6a1f1dSLionel Sambuc #define GET_MATCHER_IMPLEMENTATION 62*0a6a1f1dSLionel Sambuc #include "ARMGenAsmMatcher.inc" 63*0a6a1f1dSLionel Sambuc 64*0a6a1f1dSLionel SambucThe macros will be undef'd automatically as they're used, in the include file. 65*0a6a1f1dSLionel Sambuc 66*0a6a1f1dSLionel SambucOn all LLVM back-ends, the ``llvm-tblgen`` binary will be executed on the root 67*0a6a1f1dSLionel SambucTableGen file ``<Target>.td``, which should include all others. This guarantees 68*0a6a1f1dSLionel Sambucthat all information needed is accessible, and that no duplication is needed 69*0a6a1f1dSLionel Sambucin the TbleGen files. 70*0a6a1f1dSLionel Sambuc 71*0a6a1f1dSLionel SambucCodeEmitter 72*0a6a1f1dSLionel Sambuc----------- 73*0a6a1f1dSLionel Sambuc 74*0a6a1f1dSLionel Sambuc**Purpose**: CodeEmitterGen uses the descriptions of instructions and their fields to 75*0a6a1f1dSLionel Sambucconstruct an automated code emitter: a function that, given a MachineInstr, 76*0a6a1f1dSLionel Sambucreturns the (currently, 32-bit unsigned) value of the instruction. 77*0a6a1f1dSLionel Sambuc 78*0a6a1f1dSLionel Sambuc**Output**: C++ code, implementing the target's CodeEmitter 79*0a6a1f1dSLionel Sambucclass by overriding the virtual functions as ``<Target>CodeEmitter::function()``. 80*0a6a1f1dSLionel Sambuc 81*0a6a1f1dSLionel Sambuc**Usage**: Used to include directly at the end of ``<Target>MCCodeEmitter.cpp``. 82*0a6a1f1dSLionel Sambuc 83*0a6a1f1dSLionel SambucRegisterInfo 84*0a6a1f1dSLionel Sambuc------------ 85*0a6a1f1dSLionel Sambuc 86*0a6a1f1dSLionel Sambuc**Purpose**: This tablegen backend is responsible for emitting a description of a target 87*0a6a1f1dSLionel Sambucregister file for a code generator. It uses instances of the Register, 88*0a6a1f1dSLionel SambucRegisterAliases, and RegisterClass classes to gather this information. 89*0a6a1f1dSLionel Sambuc 90*0a6a1f1dSLionel Sambuc**Output**: C++ code with enums and structures representing the register mappings, 91*0a6a1f1dSLionel Sambucproperties, masks, etc. 92*0a6a1f1dSLionel Sambuc 93*0a6a1f1dSLionel Sambuc**Usage**: Both on ``<Target>BaseRegisterInfo`` and ``<Target>MCTargetDesc`` (headers 94*0a6a1f1dSLionel Sambucand source files) with macros defining in which they are for declaration vs. 95*0a6a1f1dSLionel Sambucinitialization issues. 96*0a6a1f1dSLionel Sambuc 97*0a6a1f1dSLionel SambucInstrInfo 98*0a6a1f1dSLionel Sambuc--------- 99*0a6a1f1dSLionel Sambuc 100*0a6a1f1dSLionel Sambuc**Purpose**: This tablegen backend is responsible for emitting a description of the target 101*0a6a1f1dSLionel Sambucinstruction set for the code generator. (what are the differences from CodeEmitter?) 102*0a6a1f1dSLionel Sambuc 103*0a6a1f1dSLionel Sambuc**Output**: C++ code with enums and structures representing the register mappings, 104*0a6a1f1dSLionel Sambucproperties, masks, etc. 105*0a6a1f1dSLionel Sambuc 106*0a6a1f1dSLionel Sambuc**Usage**: Both on ``<Target>BaseInstrInfo`` and ``<Target>MCTargetDesc`` (headers 107*0a6a1f1dSLionel Sambucand source files) with macros defining in which they are for declaration vs. 108*0a6a1f1dSLionel Sambuc 109*0a6a1f1dSLionel SambucAsmWriter 110*0a6a1f1dSLionel Sambuc--------- 111*0a6a1f1dSLionel Sambuc 112*0a6a1f1dSLionel Sambuc**Purpose**: Emits an assembly printer for the current target. 113*0a6a1f1dSLionel Sambuc 114*0a6a1f1dSLionel Sambuc**Output**: Implementation of ``<Target>InstPrinter::printInstruction()``, among 115*0a6a1f1dSLionel Sambucother things. 116*0a6a1f1dSLionel Sambuc 117*0a6a1f1dSLionel Sambuc**Usage**: Included directly into ``InstPrinter/<Target>InstPrinter.cpp``. 118*0a6a1f1dSLionel Sambuc 119*0a6a1f1dSLionel SambucAsmMatcher 120*0a6a1f1dSLionel Sambuc---------- 121*0a6a1f1dSLionel Sambuc 122*0a6a1f1dSLionel Sambuc**Purpose**: Emits a target specifier matcher for 123*0a6a1f1dSLionel Sambucconverting parsed assembly operands in the MCInst structures. It also 124*0a6a1f1dSLionel Sambucemits a matcher for custom operand parsing. Extensive documentation is 125*0a6a1f1dSLionel Sambucwritten on the ``AsmMatcherEmitter.cpp`` file. 126*0a6a1f1dSLionel Sambuc 127*0a6a1f1dSLionel Sambuc**Output**: Assembler parsers' matcher functions, declarations, etc. 128*0a6a1f1dSLionel Sambuc 129*0a6a1f1dSLionel Sambuc**Usage**: Used in back-ends' ``AsmParser/<Target>AsmParser.cpp`` for 130*0a6a1f1dSLionel Sambucbuilding the AsmParser class. 131*0a6a1f1dSLionel Sambuc 132*0a6a1f1dSLionel SambucDisassembler 133*0a6a1f1dSLionel Sambuc------------ 134*0a6a1f1dSLionel Sambuc 135*0a6a1f1dSLionel Sambuc**Purpose**: Contains disassembler table emitters for various 136*0a6a1f1dSLionel Sambucarchitectures. Extensive documentation is written on the 137*0a6a1f1dSLionel Sambuc``DisassemblerEmitter.cpp`` file. 138*0a6a1f1dSLionel Sambuc 139*0a6a1f1dSLionel Sambuc**Output**: Decoding tables, static decoding functions, etc. 140*0a6a1f1dSLionel Sambuc 141*0a6a1f1dSLionel Sambuc**Usage**: Directly included in ``Disassembler/<Target>Disassembler.cpp`` 142*0a6a1f1dSLionel Sambucto cater for all default decodings, after all hand-made ones. 143*0a6a1f1dSLionel Sambuc 144*0a6a1f1dSLionel SambucPseudoLowering 145*0a6a1f1dSLionel Sambuc-------------- 146*0a6a1f1dSLionel Sambuc 147*0a6a1f1dSLionel Sambuc**Purpose**: Generate pseudo instruction lowering. 148*0a6a1f1dSLionel Sambuc 149*0a6a1f1dSLionel Sambuc**Output**: Implements ``ARMAsmPrinter::emitPseudoExpansionLowering()``. 150*0a6a1f1dSLionel Sambuc 151*0a6a1f1dSLionel Sambuc**Usage**: Included directly into ``<Target>AsmPrinter.cpp``. 152*0a6a1f1dSLionel Sambuc 153*0a6a1f1dSLionel SambucCallingConv 154*0a6a1f1dSLionel Sambuc----------- 155*0a6a1f1dSLionel Sambuc 156*0a6a1f1dSLionel Sambuc**Purpose**: Responsible for emitting descriptions of the calling 157*0a6a1f1dSLionel Sambucconventions supported by this target. 158*0a6a1f1dSLionel Sambuc 159*0a6a1f1dSLionel Sambuc**Output**: Implement static functions to deal with calling conventions 160*0a6a1f1dSLionel Sambucchained by matching styles, returning false on no match. 161*0a6a1f1dSLionel Sambuc 162*0a6a1f1dSLionel Sambuc**Usage**: Used in ISelLowering and FastIsel as function pointers to 163*0a6a1f1dSLionel Sambucimplementation returned by a CC sellection function. 164*0a6a1f1dSLionel Sambuc 165*0a6a1f1dSLionel SambucDAGISel 166*0a6a1f1dSLionel Sambuc------- 167*0a6a1f1dSLionel Sambuc 168*0a6a1f1dSLionel Sambuc**Purpose**: Generate a DAG instruction selector. 169*0a6a1f1dSLionel Sambuc 170*0a6a1f1dSLionel Sambuc**Output**: Creates huge functions for automating DAG selection. 171*0a6a1f1dSLionel Sambuc 172*0a6a1f1dSLionel Sambuc**Usage**: Included in ``<Target>ISelDAGToDAG.cpp`` inside the target's 173*0a6a1f1dSLionel Sambucimplementation of ``SelectionDAGISel``. 174*0a6a1f1dSLionel Sambuc 175*0a6a1f1dSLionel SambucDFAPacketizer 176*0a6a1f1dSLionel Sambuc------------- 177*0a6a1f1dSLionel Sambuc 178*0a6a1f1dSLionel Sambuc**Purpose**: This class parses the Schedule.td file and produces an API that 179*0a6a1f1dSLionel Sambuccan be used to reason about whether an instruction can be added to a packet 180*0a6a1f1dSLionel Sambucon a VLIW architecture. The class internally generates a deterministic finite 181*0a6a1f1dSLionel Sambucautomaton (DFA) that models all possible mappings of machine instructions 182*0a6a1f1dSLionel Sambucto functional units as instructions are added to a packet. 183*0a6a1f1dSLionel Sambuc 184*0a6a1f1dSLionel Sambuc**Output**: Scheduling tables for GPU back-ends (Hexagon, AMD). 185*0a6a1f1dSLionel Sambuc 186*0a6a1f1dSLionel Sambuc**Usage**: Included directly on ``<Target>InstrInfo.cpp``. 187*0a6a1f1dSLionel Sambuc 188*0a6a1f1dSLionel SambucFastISel 189*0a6a1f1dSLionel Sambuc-------- 190*0a6a1f1dSLionel Sambuc 191*0a6a1f1dSLionel Sambuc**Purpose**: This tablegen backend emits code for use by the "fast" 192*0a6a1f1dSLionel Sambucinstruction selection algorithm. See the comments at the top of 193*0a6a1f1dSLionel Sambuclib/CodeGen/SelectionDAG/FastISel.cpp for background. This file 194*0a6a1f1dSLionel Sambucscans through the target's tablegen instruction-info files 195*0a6a1f1dSLionel Sambucand extracts instructions with obvious-looking patterns, and it emits 196*0a6a1f1dSLionel Sambuccode to look up these instructions by type and operator. 197*0a6a1f1dSLionel Sambuc 198*0a6a1f1dSLionel Sambuc**Output**: Generates ``Predicate`` and ``FastEmit`` methods. 199*0a6a1f1dSLionel Sambuc 200*0a6a1f1dSLionel Sambuc**Usage**: Implements private methods of the targets' implementation 201*0a6a1f1dSLionel Sambucof ``FastISel`` class. 202*0a6a1f1dSLionel Sambuc 203*0a6a1f1dSLionel SambucSubtarget 204*0a6a1f1dSLionel Sambuc--------- 205*0a6a1f1dSLionel Sambuc 206*0a6a1f1dSLionel Sambuc**Purpose**: Generate subtarget enumerations. 207*0a6a1f1dSLionel Sambuc 208*0a6a1f1dSLionel Sambuc**Output**: Enums, globals, local tables for sub-target information. 209*0a6a1f1dSLionel Sambuc 210*0a6a1f1dSLionel Sambuc**Usage**: Populates ``<Target>Subtarget`` and 211*0a6a1f1dSLionel Sambuc``MCTargetDesc/<Target>MCTargetDesc`` files (both headers and source). 212*0a6a1f1dSLionel Sambuc 213*0a6a1f1dSLionel SambucIntrinsic 214*0a6a1f1dSLionel Sambuc--------- 215*0a6a1f1dSLionel Sambuc 216*0a6a1f1dSLionel Sambuc**Purpose**: Generate (target) intrinsic information. 217*0a6a1f1dSLionel Sambuc 218*0a6a1f1dSLionel SambucOptParserDefs 219*0a6a1f1dSLionel Sambuc------------- 220*0a6a1f1dSLionel Sambuc 221*0a6a1f1dSLionel Sambuc**Purpose**: Print enum values for a class. 222*0a6a1f1dSLionel Sambuc 223*0a6a1f1dSLionel SambucCTags 224*0a6a1f1dSLionel Sambuc----- 225*0a6a1f1dSLionel Sambuc 226*0a6a1f1dSLionel Sambuc**Purpose**: This tablegen backend emits an index of definitions in ctags(1) 227*0a6a1f1dSLionel Sambucformat. A helper script, utils/TableGen/tdtags, provides an easier-to-use 228*0a6a1f1dSLionel Sambucinterface; run 'tdtags -H' for documentation. 229*0a6a1f1dSLionel Sambuc 230*0a6a1f1dSLionel SambucClang BackEnds 231*0a6a1f1dSLionel Sambuc============== 232*0a6a1f1dSLionel Sambuc 233*0a6a1f1dSLionel SambucClangAttrClasses 234*0a6a1f1dSLionel Sambuc---------------- 235*0a6a1f1dSLionel Sambuc 236*0a6a1f1dSLionel Sambuc**Purpose**: Creates Attrs.inc, which contains semantic attribute class 237*0a6a1f1dSLionel Sambucdeclarations for any attribute in ``Attr.td`` that has not set ``ASTNode = 0``. 238*0a6a1f1dSLionel SambucThis file is included as part of ``Attr.h``. 239*0a6a1f1dSLionel Sambuc 240*0a6a1f1dSLionel SambucClangAttrParserStringSwitches 241*0a6a1f1dSLionel Sambuc----------------------------- 242*0a6a1f1dSLionel Sambuc 243*0a6a1f1dSLionel Sambuc**Purpose**: Creates AttrParserStringSwitches.inc, which contains 244*0a6a1f1dSLionel SambucStringSwitch::Case statements for parser-related string switches. Each switch 245*0a6a1f1dSLionel Sambucis given its own macro (such as ``CLANG_ATTR_ARG_CONTEXT_LIST``, or 246*0a6a1f1dSLionel Sambuc``CLANG_ATTR_IDENTIFIER_ARG_LIST``), which is expected to be defined before 247*0a6a1f1dSLionel Sambucincluding AttrParserStringSwitches.inc, and undefined after. 248*0a6a1f1dSLionel Sambuc 249*0a6a1f1dSLionel SambucClangAttrImpl 250*0a6a1f1dSLionel Sambuc------------- 251*0a6a1f1dSLionel Sambuc 252*0a6a1f1dSLionel Sambuc**Purpose**: Creates AttrImpl.inc, which contains semantic attribute class 253*0a6a1f1dSLionel Sambucdefinitions for any attribute in ``Attr.td`` that has not set ``ASTNode = 0``. 254*0a6a1f1dSLionel SambucThis file is included as part of ``AttrImpl.cpp``. 255*0a6a1f1dSLionel Sambuc 256*0a6a1f1dSLionel SambucClangAttrList 257*0a6a1f1dSLionel Sambuc------------- 258*0a6a1f1dSLionel Sambuc 259*0a6a1f1dSLionel Sambuc**Purpose**: Creates AttrList.inc, which is used when a list of semantic 260*0a6a1f1dSLionel Sambucattribute identifiers is required. For instance, ``AttrKinds.h`` includes this 261*0a6a1f1dSLionel Sambucfile to generate the list of ``attr::Kind`` enumeration values. This list is 262*0a6a1f1dSLionel Sambucseparated out into multiple categories: attributes, inheritable attributes, and 263*0a6a1f1dSLionel Sambucinheritable parameter attributes. This categorization happens automatically 264*0a6a1f1dSLionel Sambucbased on information in ``Attr.td`` and is used to implement the ``classof`` 265*0a6a1f1dSLionel Sambucfunctionality required for ``dyn_cast`` and similar APIs. 266*0a6a1f1dSLionel Sambuc 267*0a6a1f1dSLionel SambucClangAttrPCHRead 268*0a6a1f1dSLionel Sambuc---------------- 269*0a6a1f1dSLionel Sambuc 270*0a6a1f1dSLionel Sambuc**Purpose**: Creates AttrPCHRead.inc, which is used to deserialize attributes 271*0a6a1f1dSLionel Sambucin the ``ASTReader::ReadAttributes`` function. 272*0a6a1f1dSLionel Sambuc 273*0a6a1f1dSLionel SambucClangAttrPCHWrite 274*0a6a1f1dSLionel Sambuc----------------- 275*0a6a1f1dSLionel Sambuc 276*0a6a1f1dSLionel Sambuc**Purpose**: Creates AttrPCHWrite.inc, which is used to serialize attributes in 277*0a6a1f1dSLionel Sambucthe ``ASTWriter::WriteAttributes`` function. 278*0a6a1f1dSLionel Sambuc 279*0a6a1f1dSLionel SambucClangAttrSpellings 280*0a6a1f1dSLionel Sambuc--------------------- 281*0a6a1f1dSLionel Sambuc 282*0a6a1f1dSLionel Sambuc**Purpose**: Creates AttrSpellings.inc, which is used to implement the 283*0a6a1f1dSLionel Sambuc``__has_attribute`` feature test macro. 284*0a6a1f1dSLionel Sambuc 285*0a6a1f1dSLionel SambucClangAttrSpellingListIndex 286*0a6a1f1dSLionel Sambuc-------------------------- 287*0a6a1f1dSLionel Sambuc 288*0a6a1f1dSLionel Sambuc**Purpose**: Creates AttrSpellingListIndex.inc, which is used to map parsed 289*0a6a1f1dSLionel Sambucattribute spellings (including which syntax or scope was used) to an attribute 290*0a6a1f1dSLionel Sambucspelling list index. These spelling list index values are internal 291*0a6a1f1dSLionel Sambucimplementation details exposed via 292*0a6a1f1dSLionel Sambuc``AttributeList::getAttributeSpellingListIndex``. 293*0a6a1f1dSLionel Sambuc 294*0a6a1f1dSLionel SambucClangAttrVisitor 295*0a6a1f1dSLionel Sambuc------------------- 296*0a6a1f1dSLionel Sambuc 297*0a6a1f1dSLionel Sambuc**Purpose**: Creates AttrVisitor.inc, which is used when implementing 298*0a6a1f1dSLionel Sambucrecursive AST visitors. 299*0a6a1f1dSLionel Sambuc 300*0a6a1f1dSLionel SambucClangAttrTemplateInstantiate 301*0a6a1f1dSLionel Sambuc---------------------------- 302*0a6a1f1dSLionel Sambuc 303*0a6a1f1dSLionel Sambuc**Purpose**: Creates AttrTemplateInstantiate.inc, which implements the 304*0a6a1f1dSLionel Sambuc``instantiateTemplateAttribute`` function, used when instantiating a template 305*0a6a1f1dSLionel Sambucthat requires an attribute to be cloned. 306*0a6a1f1dSLionel Sambuc 307*0a6a1f1dSLionel SambucClangAttrParsedAttrList 308*0a6a1f1dSLionel Sambuc----------------------- 309*0a6a1f1dSLionel Sambuc 310*0a6a1f1dSLionel Sambuc**Purpose**: Creates AttrParsedAttrList.inc, which is used to generate the 311*0a6a1f1dSLionel Sambuc``AttributeList::Kind`` parsed attribute enumeration. 312*0a6a1f1dSLionel Sambuc 313*0a6a1f1dSLionel SambucClangAttrParsedAttrImpl 314*0a6a1f1dSLionel Sambuc----------------------- 315*0a6a1f1dSLionel Sambuc 316*0a6a1f1dSLionel Sambuc**Purpose**: Creates AttrParsedAttrImpl.inc, which is used by 317*0a6a1f1dSLionel Sambuc``AttributeList.cpp`` to implement several functions on the ``AttributeList`` 318*0a6a1f1dSLionel Sambucclass. This functionality is implemented via the ``AttrInfoMap ParsedAttrInfo`` 319*0a6a1f1dSLionel Sambucarray, which contains one element per parsed attribute object. 320*0a6a1f1dSLionel Sambuc 321*0a6a1f1dSLionel SambucClangAttrParsedAttrKinds 322*0a6a1f1dSLionel Sambuc------------------------ 323*0a6a1f1dSLionel Sambuc 324*0a6a1f1dSLionel Sambuc**Purpose**: Creates AttrParsedAttrKinds.inc, which is used to implement the 325*0a6a1f1dSLionel Sambuc``AttributeList::getKind`` function, mapping a string (and syntax) to a parsed 326*0a6a1f1dSLionel Sambucattribute ``AttributeList::Kind`` enumeration. 327*0a6a1f1dSLionel Sambuc 328*0a6a1f1dSLionel SambucClangAttrDump 329*0a6a1f1dSLionel Sambuc------------- 330*0a6a1f1dSLionel Sambuc 331*0a6a1f1dSLionel Sambuc**Purpose**: Creates AttrDump.inc, which dumps information about an attribute. 332*0a6a1f1dSLionel SambucIt is used to implement ``ASTDumper::dumpAttr``. 333*0a6a1f1dSLionel Sambuc 334*0a6a1f1dSLionel SambucClangDiagsDefs 335*0a6a1f1dSLionel Sambuc-------------- 336*0a6a1f1dSLionel Sambuc 337*0a6a1f1dSLionel SambucGenerate Clang diagnostics definitions. 338*0a6a1f1dSLionel Sambuc 339*0a6a1f1dSLionel SambucClangDiagGroups 340*0a6a1f1dSLionel Sambuc--------------- 341*0a6a1f1dSLionel Sambuc 342*0a6a1f1dSLionel SambucGenerate Clang diagnostic groups. 343*0a6a1f1dSLionel Sambuc 344*0a6a1f1dSLionel SambucClangDiagsIndexName 345*0a6a1f1dSLionel Sambuc------------------- 346*0a6a1f1dSLionel Sambuc 347*0a6a1f1dSLionel SambucGenerate Clang diagnostic name index. 348*0a6a1f1dSLionel Sambuc 349*0a6a1f1dSLionel SambucClangCommentNodes 350*0a6a1f1dSLionel Sambuc----------------- 351*0a6a1f1dSLionel Sambuc 352*0a6a1f1dSLionel SambucGenerate Clang AST comment nodes. 353*0a6a1f1dSLionel Sambuc 354*0a6a1f1dSLionel SambucClangDeclNodes 355*0a6a1f1dSLionel Sambuc-------------- 356*0a6a1f1dSLionel Sambuc 357*0a6a1f1dSLionel SambucGenerate Clang AST declaration nodes. 358*0a6a1f1dSLionel Sambuc 359*0a6a1f1dSLionel SambucClangStmtNodes 360*0a6a1f1dSLionel Sambuc-------------- 361*0a6a1f1dSLionel Sambuc 362*0a6a1f1dSLionel SambucGenerate Clang AST statement nodes. 363*0a6a1f1dSLionel Sambuc 364*0a6a1f1dSLionel SambucClangSACheckers 365*0a6a1f1dSLionel Sambuc--------------- 366*0a6a1f1dSLionel Sambuc 367*0a6a1f1dSLionel SambucGenerate Clang Static Analyzer checkers. 368*0a6a1f1dSLionel Sambuc 369*0a6a1f1dSLionel SambucClangCommentHTMLTags 370*0a6a1f1dSLionel Sambuc-------------------- 371*0a6a1f1dSLionel Sambuc 372*0a6a1f1dSLionel SambucGenerate efficient matchers for HTML tag names that are used in documentation comments. 373*0a6a1f1dSLionel Sambuc 374*0a6a1f1dSLionel SambucClangCommentHTMLTagsProperties 375*0a6a1f1dSLionel Sambuc------------------------------ 376*0a6a1f1dSLionel Sambuc 377*0a6a1f1dSLionel SambucGenerate efficient matchers for HTML tag properties. 378*0a6a1f1dSLionel Sambuc 379*0a6a1f1dSLionel SambucClangCommentHTMLNamedCharacterReferences 380*0a6a1f1dSLionel Sambuc---------------------------------------- 381*0a6a1f1dSLionel Sambuc 382*0a6a1f1dSLionel SambucGenerate function to translate named character references to UTF-8 sequences. 383*0a6a1f1dSLionel Sambuc 384*0a6a1f1dSLionel SambucClangCommentCommandInfo 385*0a6a1f1dSLionel Sambuc----------------------- 386*0a6a1f1dSLionel Sambuc 387*0a6a1f1dSLionel SambucGenerate command properties for commands that are used in documentation comments. 388*0a6a1f1dSLionel Sambuc 389*0a6a1f1dSLionel SambucClangCommentCommandList 390*0a6a1f1dSLionel Sambuc----------------------- 391*0a6a1f1dSLionel Sambuc 392*0a6a1f1dSLionel SambucGenerate list of commands that are used in documentation comments. 393*0a6a1f1dSLionel Sambuc 394*0a6a1f1dSLionel SambucArmNeon 395*0a6a1f1dSLionel Sambuc------- 396*0a6a1f1dSLionel Sambuc 397*0a6a1f1dSLionel SambucGenerate arm_neon.h for clang. 398*0a6a1f1dSLionel Sambuc 399*0a6a1f1dSLionel SambucArmNeonSema 400*0a6a1f1dSLionel Sambuc----------- 401*0a6a1f1dSLionel Sambuc 402*0a6a1f1dSLionel SambucGenerate ARM NEON sema support for clang. 403*0a6a1f1dSLionel Sambuc 404*0a6a1f1dSLionel SambucArmNeonTest 405*0a6a1f1dSLionel Sambuc----------- 406*0a6a1f1dSLionel Sambuc 407*0a6a1f1dSLionel SambucGenerate ARM NEON tests for clang. 408*0a6a1f1dSLionel Sambuc 409*0a6a1f1dSLionel SambucAttrDocs 410*0a6a1f1dSLionel Sambuc-------- 411*0a6a1f1dSLionel Sambuc 412*0a6a1f1dSLionel Sambuc**Purpose**: Creates ``AttributeReference.rst`` from ``AttrDocs.td``, and is 413*0a6a1f1dSLionel Sambucused for documenting user-facing attributes. 414*0a6a1f1dSLionel Sambuc 415*0a6a1f1dSLionel SambucHow to write a back-end 416*0a6a1f1dSLionel Sambuc======================= 417*0a6a1f1dSLionel Sambuc 418*0a6a1f1dSLionel SambucTODO. 419*0a6a1f1dSLionel Sambuc 420*0a6a1f1dSLionel SambucUntil we get a step-by-step HowTo for writing TableGen backends, you can at 421*0a6a1f1dSLionel Sambucleast grab the boilerplate (build system, new files, etc.) from Clang's 422*0a6a1f1dSLionel Sambucr173931. 423*0a6a1f1dSLionel Sambuc 424*0a6a1f1dSLionel SambucTODO: How they work, how to write one. This section should not contain details 425*0a6a1f1dSLionel Sambucabout any particular backend, except maybe ``-print-enums`` as an example. This 426*0a6a1f1dSLionel Sambucshould highlight the APIs in ``TableGen/Record.h``. 427*0a6a1f1dSLionel Sambuc 428