xref: /llvm-project/llvm/lib/TableGen/TableGenBackendSkeleton.cpp (revision a86e966a2017ae1934cb9681260207f557329bba)
1*a86e966aSRahul Joshi //===- TableGenBackendSkeleton.cpp - Skeleton TableGen backend --*- C++ -*-===//
2848d66faSPaul C. Anagnostopoulos //
3848d66faSPaul C. Anagnostopoulos // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4848d66faSPaul C. Anagnostopoulos // See https://llvm.org/LICENSE.txt for license information.
5848d66faSPaul C. Anagnostopoulos // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6848d66faSPaul C. Anagnostopoulos //
7848d66faSPaul C. Anagnostopoulos //===----------------------------------------------------------------------===//
8848d66faSPaul C. Anagnostopoulos //
9848d66faSPaul C. Anagnostopoulos // This Tablegen backend emits ...
10848d66faSPaul C. Anagnostopoulos //
11848d66faSPaul C. Anagnostopoulos //===----------------------------------------------------------------------===//
12848d66faSPaul C. Anagnostopoulos 
1392f49b89Sserge-sans-paille #include "llvm/ADT/StringRef.h"
14848d66faSPaul C. Anagnostopoulos #include "llvm/TableGen/TableGenBackend.h"
15848d66faSPaul C. Anagnostopoulos 
16848d66faSPaul C. Anagnostopoulos #define DEBUG_TYPE "skeleton-emitter"
17848d66faSPaul C. Anagnostopoulos 
1892f49b89Sserge-sans-paille namespace llvm {
1992f49b89Sserge-sans-paille class RecordKeeper;
2092f49b89Sserge-sans-paille class raw_ostream;
2192f49b89Sserge-sans-paille } // namespace llvm
2292f49b89Sserge-sans-paille 
23848d66faSPaul C. Anagnostopoulos using namespace llvm;
24848d66faSPaul C. Anagnostopoulos 
25848d66faSPaul C. Anagnostopoulos namespace {
26848d66faSPaul C. Anagnostopoulos 
27848d66faSPaul C. Anagnostopoulos // Any helper data structures can be defined here. Some backends use
28848d66faSPaul C. Anagnostopoulos // structs to collect information from the records.
29848d66faSPaul C. Anagnostopoulos 
30848d66faSPaul C. Anagnostopoulos class SkeletonEmitter {
31848d66faSPaul C. Anagnostopoulos private:
32*a86e966aSRahul Joshi   const RecordKeeper &Records;
33848d66faSPaul C. Anagnostopoulos 
34848d66faSPaul C. Anagnostopoulos public:
35*a86e966aSRahul Joshi   SkeletonEmitter(const RecordKeeper &RK) : Records(RK) {}
36848d66faSPaul C. Anagnostopoulos 
37848d66faSPaul C. Anagnostopoulos   void run(raw_ostream &OS);
380c1bb4f8SPaul C. Anagnostopoulos }; // emitter class
39848d66faSPaul C. Anagnostopoulos 
400c1bb4f8SPaul C. Anagnostopoulos } // anonymous namespace
41848d66faSPaul C. Anagnostopoulos 
42848d66faSPaul C. Anagnostopoulos void SkeletonEmitter::run(raw_ostream &OS) {
43848d66faSPaul C. Anagnostopoulos   emitSourceFileHeader("Skeleton data structures", OS);
4421f5f509SPaul C. Anagnostopoulos 
4521f5f509SPaul C. Anagnostopoulos   (void)Records; // To suppress unused variable warning; remove on use.
46848d66faSPaul C. Anagnostopoulos }
47848d66faSPaul C. Anagnostopoulos 
484178ef43SNAKAMURA Takumi // Choose either option A or B.
49848d66faSPaul C. Anagnostopoulos 
504178ef43SNAKAMURA Takumi //===----------------------------------------------------------------------===//
514178ef43SNAKAMURA Takumi // Option A: Register the backed as class <SkeletonEmitter>
524178ef43SNAKAMURA Takumi static TableGen::Emitter::OptClass<SkeletonEmitter>
534178ef43SNAKAMURA Takumi     X("gen-skeleton-class", "Generate example skeleton class");
54848d66faSPaul C. Anagnostopoulos 
554178ef43SNAKAMURA Takumi //===----------------------------------------------------------------------===//
564178ef43SNAKAMURA Takumi // Option B: Register "EmitSkeleton" directly
574178ef43SNAKAMURA Takumi // The emitter entry may be private scope.
58*a86e966aSRahul Joshi static void EmitSkeleton(const RecordKeeper &RK, raw_ostream &OS) {
59848d66faSPaul C. Anagnostopoulos   // Instantiate the emitter class and invoke run().
60848d66faSPaul C. Anagnostopoulos   SkeletonEmitter(RK).run(OS);
61848d66faSPaul C. Anagnostopoulos }
62848d66faSPaul C. Anagnostopoulos 
634178ef43SNAKAMURA Takumi static TableGen::Emitter::Opt Y("gen-skeleton-entry", EmitSkeleton,
644178ef43SNAKAMURA Takumi                                 "Generate example skeleton entry");
65