1 //===- SkeletonEmitter.cpp - Skeleton TableGen backend          -*- C++ -*-===//
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 Tablegen backend emits ...
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "llvm/ADT/StringRef.h"
14 #include "llvm/TableGen/TableGenBackend.h"
15 
16 #define DEBUG_TYPE "skeleton-emitter"
17 
18 namespace llvm {
19 class RecordKeeper;
20 class raw_ostream;
21 } // namespace llvm
22 
23 using namespace llvm;
24 
25 namespace {
26 
27 // Any helper data structures can be defined here. Some backends use
28 // structs to collect information from the records.
29 
30 class SkeletonEmitter {
31 private:
32   RecordKeeper &Records;
33 
34 public:
35   SkeletonEmitter(RecordKeeper &RK) : Records(RK) {}
36 
37   void run(raw_ostream &OS);
38 }; // emitter class
39 
40 } // anonymous namespace
41 
42 void SkeletonEmitter::run(raw_ostream &OS) {
43   emitSourceFileHeader("Skeleton data structures", OS);
44 
45   (void)Records; // To suppress unused variable warning; remove on use.
46 }
47 
48 // Choose either option A or B.
49 
50 //===----------------------------------------------------------------------===//
51 // Option A: Register the backed as class <SkeletonEmitter>
52 static TableGen::Emitter::OptClass<SkeletonEmitter>
53     X("gen-skeleton-class", "Generate example skeleton class");
54 
55 //===----------------------------------------------------------------------===//
56 // Option B: Register "EmitSkeleton" directly
57 // The emitter entry may be private scope.
58 static void EmitSkeleton(RecordKeeper &RK, raw_ostream &OS) {
59   // Instantiate the emitter class and invoke run().
60   SkeletonEmitter(RK).run(OS);
61 }
62 
63 static TableGen::Emitter::Opt Y("gen-skeleton-entry", EmitSkeleton,
64                                 "Generate example skeleton entry");
65