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