xref: /freebsd/contrib/llvm-project/llvm/lib/TableGen/TableGenBackendSkeleton.cpp (revision a2fda816eb054d5873be223ef2461741dfcc253c)
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