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
This commit is contained in:
Chris Lattner 2006-03-15 01:55:21 +00:00
parent 3f8b8913bc
commit fda6affb95
2 changed files with 22 additions and 4 deletions

View File

@ -110,6 +110,9 @@ void IntrinsicEmitter::run(std::ostream &OS) {
// Emit the enum information. // Emit the enum information.
EmitEnumInfo(Ints, OS); EmitEnumInfo(Ints, OS);
// Emit the intrinsic ID -> name table.
EmitIntrinsicToNameTable(Ints, OS);
// Emit the function name recognizer. // Emit the function name recognizer.
EmitFnNameRecognizer(Ints, OS); EmitFnNameRecognizer(Ints, OS);
@ -158,9 +161,6 @@ EmitFnNameRecognizer(const std::vector<CodeGenIntrinsic> &Ints,
char LastChar = 0; char LastChar = 0;
for (std::map<std::string, std::string>::iterator I = IntMapping.begin(), for (std::map<std::string, std::string>::iterator I = IntMapping.begin(),
E = IntMapping.end(); I != E; ++I) { 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) { if (I->first[5] != LastChar) {
LastChar = I->first[5]; LastChar = I->first[5];
OS << " case '" << LastChar << "':\n"; OS << " case '" << LastChar << "':\n";
@ -175,6 +175,22 @@ EmitFnNameRecognizer(const std::vector<CodeGenIntrinsic> &Ints,
OS << "#endif\n\n"; 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, static void EmitTypeVerify(std::ostream &OS, const std::string &Val,
Record *ArgType) { Record *ArgType) {
OS << " Assert1(" << Val << "->getTypeID() == " OS << " Assert1(" << Val << "->getTypeID() == "

View File

@ -31,6 +31,8 @@ namespace llvm {
void EmitFnNameRecognizer(const std::vector<CodeGenIntrinsic> &Ints, void EmitFnNameRecognizer(const std::vector<CodeGenIntrinsic> &Ints,
std::ostream &OS); std::ostream &OS);
void EmitIntrinsicToNameTable(const std::vector<CodeGenIntrinsic> &Ints,
std::ostream &OS);
void EmitVerifier(const std::vector<CodeGenIntrinsic> &Ints, void EmitVerifier(const std::vector<CodeGenIntrinsic> &Ints,
std::ostream &OS); std::ostream &OS);
void EmitModRefInfo(const std::vector<CodeGenIntrinsic> &Ints, void EmitModRefInfo(const std::vector<CodeGenIntrinsic> &Ints,