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
18namespace llvm {
19class RecordKeeper;
20class raw_ostream;
21} // namespace llvm
22
23using namespace llvm;
24
25namespace {
26
27// Any helper data structures can be defined here. Some backends use
28// structs to collect information from the records.
29
30class SkeletonEmitter {
31private:
32 RecordKeeper &Records;
33
34public:
35 SkeletonEmitter(RecordKeeper &RK) : Records(RK) {}
36
37 void run(raw_ostream &OS);
38}; // emitter class
39
40} // anonymous namespace
41
42void SkeletonEmitter::run(raw_ostream &OS) {
43 emitSourceFileHeader(Desc: "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>
52static 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.
58static void EmitSkeleton(RecordKeeper &RK, raw_ostream &OS) {
59 // Instantiate the emitter class and invoke run().
60 SkeletonEmitter(RK).run(OS);
61}
62
63static TableGen::Emitter::Opt Y("gen-skeleton-entry", EmitSkeleton,
64 "Generate example skeleton entry");
65