65 lines
1.9 KiB
C++
65 lines
1.9 KiB
C++
|
//===- SkeletonEmitter.cpp - Skeleton TableGen backend -*- C++ -*-===//
|
||
|
//
|
||
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||
|
// See https://llvm.org/LICENSE.txt for license information.
|
||
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||
|
//
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
//
|
||
|
// This Tablegen backend emits ...
|
||
|
//
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
|
||
|
#include "llvm/ADT/StringRef.h"
|
||
|
#include "llvm/TableGen/TableGenBackend.h"
|
||
|
|
||
|
#define DEBUG_TYPE "skeleton-emitter"
|
||
|
|
||
|
namespace llvm {
|
||
|
class RecordKeeper;
|
||
|
class raw_ostream;
|
||
|
} // namespace llvm
|
||
|
|
||
|
using namespace llvm;
|
||
|
|
||
|
namespace {
|
||
|
|
||
|
// Any helper data structures can be defined here. Some backends use
|
||
|
// structs to collect information from the records.
|
||
|
|
||
|
class SkeletonEmitter {
|
||
|
private:
|
||
|
RecordKeeper &Records;
|
||
|
|
||
|
public:
|
||
|
SkeletonEmitter(RecordKeeper &RK) : Records(RK) {}
|
||
|
|
||
|
void run(raw_ostream &OS);
|
||
|
}; // emitter class
|
||
|
|
||
|
} // anonymous namespace
|
||
|
|
||
|
void SkeletonEmitter::run(raw_ostream &OS) {
|
||
|
emitSourceFileHeader("Skeleton data structures", OS);
|
||
|
|
||
|
(void)Records; // To suppress unused variable warning; remove on use.
|
||
|
}
|
||
|
|
||
|
// Choose either option A or B.
|
||
|
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
// Option A: Register the backed as class <SkeletonEmitter>
|
||
|
static TableGen::Emitter::OptClass<SkeletonEmitter>
|
||
|
X("gen-skeleton-class", "Generate example skeleton class");
|
||
|
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
// Option B: Register "EmitSkeleton" directly
|
||
|
// The emitter entry may be private scope.
|
||
|
static void EmitSkeleton(RecordKeeper &RK, raw_ostream &OS) {
|
||
|
// Instantiate the emitter class and invoke run().
|
||
|
SkeletonEmitter(RK).run(OS);
|
||
|
}
|
||
|
|
||
|
static TableGen::Emitter::Opt Y("gen-skeleton-entry", EmitSkeleton,
|
||
|
"Generate example skeleton entry");
|