OSDN Git Service

Autogenerate a table of intrinsic names, so we can map from intrinsic ID to
authorChris Lattner <sabre@nondot.org>
Wed, 15 Mar 2006 01:55:21 +0000 (01:55 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 15 Mar 2006 01:55:21 +0000 (01:55 +0000)
LLVM intrinsic function name.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26771 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/IntrinsicEmitter.cpp
utils/TableGen/IntrinsicEmitter.h

index 278a1ee..0ef9312 100644 (file)
@@ -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() == "
index 7ab1ddf..fa7cf7c 100644 (file)
@@ -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,