diff options
author | Chris Lattner <sabre@nondot.org> | 2003-08-01 04:38:38 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-08-01 04:38:38 +0000 |
commit | 3112326c88b7090f770c4ff8a1546ef84fd2e8bb (patch) | |
tree | f2b32816530ec80997dda6d2d3be93437e302d3f /support | |
parent | 048c00db1cd05bbbd616e0eff71756eebd45f6b4 (diff) | |
download | llvm-3112326c88b7090f770c4ff8a1546ef84fd2e8bb.tar.gz llvm-3112326c88b7090f770c4ff8a1546ef84fd2e8bb.tar.bz2 llvm-3112326c88b7090f770c4ff8a1546ef84fd2e8bb.tar.xz |
Initial checkin of register info emitter
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7465 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'support')
-rw-r--r-- | support/tools/TableGen/RegisterInfoEmitter.cpp | 40 | ||||
-rw-r--r-- | support/tools/TableGen/RegisterInfoEmitter.h | 28 |
2 files changed, 68 insertions, 0 deletions
diff --git a/support/tools/TableGen/RegisterInfoEmitter.cpp b/support/tools/TableGen/RegisterInfoEmitter.cpp new file mode 100644 index 0000000000..200800fae6 --- /dev/null +++ b/support/tools/TableGen/RegisterInfoEmitter.cpp @@ -0,0 +1,40 @@ +//===- RegisterInfoEmitter.cpp - Generate a Register File Desc. -*- C++ -*-===// +// +// This tablegen backend is responsible for emitting a description of a target +// register file for a code generator. It uses instances of the Register, +// RegisterAliases, and RegisterClass classes to gather this information. +// +//===----------------------------------------------------------------------===// + +#include "RegisterInfoEmitter.h" +#include "Record.h" + +static void EmitSourceHeader(const std::string &Desc, std::ostream &o) { + o << "//===- TableGen'erated file -------------------------------------*-" + " C++ -*-===//\n//\n// " << Desc << "\n//\n// Automatically generate" + "d file, do not edit!\n//\n//===------------------------------------" + "----------------------------------===//\n\n"; +} + +void RegisterInfoEmitter::runHeader(std::ostream &OS) { + std::vector<Record*> RegisterInfos = + Records.getAllDerivedDefinitions("RegisterInfo"); + + if (RegisterInfos.size() != 1) + throw std::string("ERROR: Multiple subclasses of RegisterInfo defined!"); + + EmitSourceHeader("Register Information Header Fragment", OS); + + std::string ClassName = RegisterInfos[0]->getValueAsString("ClassName"); + + OS << "#include \"llvm/CodeGen/MRegisterInfo.h\"\n\n"; + + OS << "struct " << ClassName << ": public MRegisterInfo {\n" + << " " << ClassName << "();\n" + << " const unsigned* getCalleeSaveRegs() const;\n" + << "};\n\n"; +} + +void RegisterInfoEmitter::run(std::ostream &o) { + +} diff --git a/support/tools/TableGen/RegisterInfoEmitter.h b/support/tools/TableGen/RegisterInfoEmitter.h new file mode 100644 index 0000000000..2a5d70a0fd --- /dev/null +++ b/support/tools/TableGen/RegisterInfoEmitter.h @@ -0,0 +1,28 @@ +//===- RegisterInfoEmitter.h - Generate a Register File Desc. ---*- C++ -*-===// +// +// This tablegen backend is responsible for emitting a description of a target +// register file for a code generator. It uses instances of the Register, +// RegisterAliases, and RegisterClass classes to gather this information. +// +//===----------------------------------------------------------------------===// + +#ifndef REGISTER_INFO_EMITTER_H +#define REGISTER_INFO_EMITTER_H + +#include <iosfwd> +class RecordKeeper; + +class RegisterInfoEmitter { + RecordKeeper &Records; +public: + RegisterInfoEmitter(RecordKeeper &R) : Records(R) {} + + // run - Output the register file description, returning true on failure. + void run(std::ostream &o); + + // runHeader - Emit a header fragment for the register info emitter. + void runHeader(std::ostream &o); +private: +}; + +#endif |