summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-03-15 01:55:21 +0000
committerChris Lattner <sabre@nondot.org>2006-03-15 01:55:21 +0000
commitfda6affb95e9f68278cb5cf75dc3fd3406978255 (patch)
tree2cb59bd1e1dc8a96572a2a8316ac5ec787b54ba6 /utils
parent3f8b8913bc9cb232871445eefa8654caf7f9986f (diff)
downloadllvm-fda6affb95e9f68278cb5cf75dc3fd3406978255.tar.gz
llvm-fda6affb95e9f68278cb5cf75dc3fd3406978255.tar.bz2
llvm-fda6affb95e9f68278cb5cf75dc3fd3406978255.tar.xz
Autogenerate a table of intrinsic names, so we can map from intrinsic ID to
LLVM intrinsic function name. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26771 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils')
-rw-r--r--utils/TableGen/IntrinsicEmitter.cpp24
-rw-r--r--utils/TableGen/IntrinsicEmitter.h2
2 files changed, 22 insertions, 4 deletions
diff --git a/utils/TableGen/IntrinsicEmitter.cpp b/utils/TableGen/IntrinsicEmitter.cpp
index 278a1eefb8..0ef93123ed 100644
--- a/utils/TableGen/IntrinsicEmitter.cpp
+++ b/utils/TableGen/IntrinsicEmitter.cpp
@@ -109,10 +109,13 @@ void IntrinsicEmitter::run(std::ostream &OS) {
// Emit the enum information.
EmitEnumInfo(Ints, OS);
+
+ // Emit the intrinsic ID -> name table.
+ EmitIntrinsicToNameTable(Ints, OS);
// Emit the function name recognizer.
EmitFnNameRecognizer(Ints, OS);
-
+
// Emit the intrinsic verifier.
EmitVerifier(Ints, OS);
@@ -158,9 +161,6 @@ EmitFnNameRecognizer(const std::vector<CodeGenIntrinsic> &Ints,
char LastChar = 0;
for (std::map<std::string, std::string>::iterator I = IntMapping.begin(),
E = IntMapping.end(); I != E; ++I) {
- assert(I->first.size() > 5 && std::string(I->first.begin(),
- I->first.begin()+5) == "llvm." &&
- "Invalid intrinsic name!");
if (I->first[5] != LastChar) {
LastChar = I->first[5];
OS << " case '" << LastChar << "':\n";
@@ -175,6 +175,22 @@ EmitFnNameRecognizer(const std::vector<CodeGenIntrinsic> &Ints,
OS << "#endif\n\n";
}
+void IntrinsicEmitter::
+EmitIntrinsicToNameTable(const std::vector<CodeGenIntrinsic> &Ints,
+ std::ostream &OS) {
+ std::vector<std::string> Names;
+ for (unsigned i = 0, e = Ints.size(); i != e; ++i)
+ Names.push_back(Ints[i].Name);
+ std::sort(Names.begin(), Names.end());
+
+ OS << "// Intrinsic ID to name table\n";
+ OS << "#ifdef GET_INTRINSIC_NAME_TABLE\n";
+ OS << " // Note that entry #0 is the invalid intrinsic!\n";
+ for (unsigned i = 0, e = Names.size(); i != e; ++i)
+ OS << " \"" << Names[i] << "\",\n";
+ OS << "#endif\n\n";
+}
+
static void EmitTypeVerify(std::ostream &OS, const std::string &Val,
Record *ArgType) {
OS << " Assert1(" << Val << "->getTypeID() == "
diff --git a/utils/TableGen/IntrinsicEmitter.h b/utils/TableGen/IntrinsicEmitter.h
index 7ab1ddfec7..fa7cf7ca0f 100644
--- a/utils/TableGen/IntrinsicEmitter.h
+++ b/utils/TableGen/IntrinsicEmitter.h
@@ -31,6 +31,8 @@ namespace llvm {
void EmitFnNameRecognizer(const std::vector<CodeGenIntrinsic> &Ints,
std::ostream &OS);
+ void EmitIntrinsicToNameTable(const std::vector<CodeGenIntrinsic> &Ints,
+ std::ostream &OS);
void EmitVerifier(const std::vector<CodeGenIntrinsic> &Ints,
std::ostream &OS);
void EmitModRefInfo(const std::vector<CodeGenIntrinsic> &Ints,