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. Anagnostopoulosvoid 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. Anagnostopoulosvoid 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