[llvm-commits] CVS: llvm/utils/TableGen/SubtargetEmitter.cpp SubtargetEmitter.h
Jim Laskey
jlaskey at apple.com
Fri Oct 21 12:00:15 PDT 2005
Changes in directory llvm/utils/TableGen:
SubtargetEmitter.cpp added (r1.1)
SubtargetEmitter.h added (r1.1)
---
Log message:
New TableGen backends for subtarget information. Only command line stuff
active now. Scheduling itinerary next.
---
Diffs of the changes: (+148 -0)
SubtargetEmitter.cpp | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++
SubtargetEmitter.h | 37 +++++++++++++++++
2 files changed, 148 insertions(+)
Index: llvm/utils/TableGen/SubtargetEmitter.cpp
diff -c /dev/null llvm/utils/TableGen/SubtargetEmitter.cpp:1.1
*** /dev/null Fri Oct 21 14:00:14 2005
--- llvm/utils/TableGen/SubtargetEmitter.cpp Fri Oct 21 14:00:04 2005
***************
*** 0 ****
--- 1,111 ----
+ //===- SubtargetEmitter.cpp - Generate subtarget enumerations -------------===//
+ //
+ // The LLVM Compiler Infrastructure
+ //
+ // This file was developed by James M. Laskey and is distributed under
+ // the University of Illinois Open Source License. See LICENSE.TXT for details.
+ //
+ //===----------------------------------------------------------------------===//
+ //
+ // This tablegen backend emits subtarget enumerations.
+ //
+ //===----------------------------------------------------------------------===//
+
+ #include "SubtargetEmitter.h"
+ #include "CodeGenTarget.h"
+ #include "Record.h"
+ #include "llvm/ADT/StringExtras.h"
+ #include "llvm/Support/Debug.h"
+ #include <algorithm>
+ #include <set>
+ using namespace llvm;
+
+ // Convenience types
+ typedef std::vector<Record*> RecordList;
+ typedef std::vector<Record*>::iterator RecordListIter;
+
+
+ // SubtargetEmitter::run - Main subtarget enumeration emitter.
+ //
+ void SubtargetEmitter::run(std::ostream &OS) {
+ EmitSourceFileHeader("Subtarget Enumeration Source Fragment", OS);
+ RecordList Features = Records.getAllDerivedDefinitions("SubtargetFeature");
+ RecordList Processors = Records.getAllDerivedDefinitions("Processor");
+
+ OS << "namespace llvm {\n\n";
+
+ { // Feature enumeration
+ int i = 0;
+
+ OS << "enum {\n";
+
+ for (RecordListIter RI = Features.begin(), E = Features.end(); RI != E;){
+ Record *R = *RI++;
+ std::string Instance = R->getName();
+ OS << " "
+ << Instance
+ << " = "
+ << " 1 << " << i++
+ << ((RI != E) ? ",\n" : "\n");
+ }
+
+ OS << "};\n";
+ }
+
+ { // Feature key values
+ OS << "\n\n"
+ << "/// Sorted (by key) array of values for CPU features.\n"
+ << "static SubtargetFeatureKV FeatureKV[] = {\n";
+ for (RecordListIter RI = Features.begin(), E = Features.end(); RI != E;) {
+ Record *R = *RI++;
+ std::string Instance = R->getName();
+ std::string Name = R->getValueAsString("Name");
+ std::string Desc = R->getValueAsString("Desc");
+ OS << " { "
+ << "\"" << Name << "\", "
+ << "\"" << Desc << "\", "
+ << Instance
+ << ((RI != E) ? " },\n" : " }\n");
+ }
+ OS << "};\n";
+ }
+
+ { // Feature key values
+ OS << "\n\n"
+ << "/// Sorted (by key) array of values for CPU subtype.\n"
+ << "static const SubtargetFeatureKV SubTypeKV[] = {\n";
+ for (RecordListIter RI = Processors.begin(), E = Processors.end();
+ RI != E;) {
+ Record *R = *RI++;
+ std::string Name = R->getValueAsString("Name");
+ Record *ProcItin = R->getValueAsDef("ProcItin");
+ ListInit *Features = R->getValueAsListInit("Features");
+ unsigned N = Features->getSize();
+ OS << " { "
+ << "\"" << Name << "\", "
+ << "\"Select the " << Name << " processor\", ";
+
+
+ if (N == 0) {
+ OS << "0";
+ } else {
+ for (unsigned i = 0; i < N; ) {
+ if (DefInit *DI = dynamic_cast<DefInit*>(Features->getElement(i++))) {
+ Record *Feature = DI->getDef();
+ std::string Name = Feature->getName();
+ OS << Name;
+ if (i != N) OS << " | ";
+ } else {
+ throw "Feature: " + Name +
+ " expected feature in processor feature list!";
+ }
+ }
+ }
+
+ OS << ((RI != E) ? " },\n" : " }\n");
+ }
+ OS << "};\n";
+ }
+
+ OS << "\n} // End llvm namespace \n";
+ }
Index: llvm/utils/TableGen/SubtargetEmitter.h
diff -c /dev/null llvm/utils/TableGen/SubtargetEmitter.h:1.1
*** /dev/null Fri Oct 21 14:00:15 2005
--- llvm/utils/TableGen/SubtargetEmitter.h Fri Oct 21 14:00:04 2005
***************
*** 0 ****
--- 1,37 ----
+ //===- SubtargetEmitter.h - Generate subtarget enumerations -----*- C++ -*-===//
+ //
+ // The LLVM Compiler Infrastructure
+ //
+ // This file was developed by James M. Laskey and is distributed under
+ // the University of Illinois Open Source License. See LICENSE.TXT for details.
+ //
+ //===----------------------------------------------------------------------===//
+ //
+ // This tablegen backend emits subtarget enumerations.
+ //
+ //===----------------------------------------------------------------------===//
+
+ #ifndef SUBTARGET_EMITTER_H
+ #define SUBTARGET_EMITTER_H
+
+ #include "TableGenBackend.h"
+
+ namespace llvm {
+
+ class SubtargetEmitter : public TableGenBackend {
+ RecordKeeper &Records;
+ public:
+ SubtargetEmitter(RecordKeeper &R) : Records(R) {}
+
+ // run - Output the subtarget enumerations, returning true on failure.
+ void run(std::ostream &o);
+
+ };
+
+
+ } // End llvm namespace
+
+ #endif
+
+
+
More information about the llvm-commits
mailing list