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