1848d66faSPaul C. Anagnostopoulos //===- SkeletonEmitter.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 
13*bd059b3bSserge-sans-paille #include "llvm/ADT/DenseMapInfo.h"
1492f49b89Sserge-sans-paille #include "llvm/ADT/StringRef.h"
15848d66faSPaul C. Anagnostopoulos #include "llvm/TableGen/TableGenBackend.h"
16848d66faSPaul C. Anagnostopoulos 
17848d66faSPaul C. Anagnostopoulos #define DEBUG_TYPE "skeleton-emitter"
18848d66faSPaul C. Anagnostopoulos 
1992f49b89Sserge-sans-paille namespace llvm {
2092f49b89Sserge-sans-paille class RecordKeeper;
2192f49b89Sserge-sans-paille class raw_ostream;
2292f49b89Sserge-sans-paille } // namespace llvm
2392f49b89Sserge-sans-paille 
24848d66faSPaul C. Anagnostopoulos using namespace llvm;
25848d66faSPaul C. Anagnostopoulos 
26848d66faSPaul C. Anagnostopoulos namespace {
27848d66faSPaul C. Anagnostopoulos 
28848d66faSPaul C. Anagnostopoulos // Any helper data structures can be defined here. Some backends use
29848d66faSPaul C. Anagnostopoulos // structs to collect information from the records.
30848d66faSPaul C. Anagnostopoulos 
31848d66faSPaul C. Anagnostopoulos class SkeletonEmitter {
32848d66faSPaul C. Anagnostopoulos private:
33848d66faSPaul C. Anagnostopoulos   RecordKeeper &Records;
34848d66faSPaul C. Anagnostopoulos 
35848d66faSPaul C. Anagnostopoulos public:
SkeletonEmitter(RecordKeeper & RK)36848d66faSPaul C. Anagnostopoulos   SkeletonEmitter(RecordKeeper &RK) : Records(RK) {}
37848d66faSPaul C. Anagnostopoulos 
38848d66faSPaul C. Anagnostopoulos   void run(raw_ostream &OS);
390c1bb4f8SPaul C. Anagnostopoulos }; // emitter class
40848d66faSPaul C. Anagnostopoulos 
410c1bb4f8SPaul C. Anagnostopoulos } // anonymous namespace
42848d66faSPaul C. Anagnostopoulos 
run(raw_ostream & OS)43848d66faSPaul C. Anagnostopoulos void SkeletonEmitter::run(raw_ostream &OS) {
44848d66faSPaul C. Anagnostopoulos   emitSourceFileHeader("Skeleton data structures", OS);
4521f5f509SPaul C. Anagnostopoulos 
4621f5f509SPaul C. Anagnostopoulos   (void)Records; // To suppress unused variable warning; remove on use.
47848d66faSPaul C. Anagnostopoulos }
48848d66faSPaul C. Anagnostopoulos 
49848d66faSPaul C. Anagnostopoulos namespace llvm {
50848d66faSPaul C. Anagnostopoulos 
51848d66faSPaul C. Anagnostopoulos // The only thing that should be in the llvm namespace is the
52848d66faSPaul C. Anagnostopoulos // emitter entry point function.
53848d66faSPaul C. Anagnostopoulos 
EmitSkeleton(RecordKeeper & RK,raw_ostream & OS)54848d66faSPaul C. Anagnostopoulos void EmitSkeleton(RecordKeeper &RK, raw_ostream &OS) {
55848d66faSPaul C. Anagnostopoulos   // Instantiate the emitter class and invoke run().
56848d66faSPaul C. Anagnostopoulos   SkeletonEmitter(RK).run(OS);
57848d66faSPaul C. Anagnostopoulos }
58848d66faSPaul C. Anagnostopoulos 
590c1bb4f8SPaul C. Anagnostopoulos } // namespace llvm
60