[PATCH] [TableGen] Sort intrinsics in reverse order for intrinsic name matcher
Justin Holewinski
justin.holewinski at gmail.com
Mon Jul 22 10:27:34 PDT 2013
Updated based on Sean's comments
http://llvm-reviews.chandlerc.com/D1128
CHANGE SINCE LAST DIFF
http://llvm-reviews.chandlerc.com/D1128?vs=2772&id=2943#toc
Files:
utils/TableGen/IntrinsicEmitter.cpp
Index: utils/TableGen/IntrinsicEmitter.cpp
===================================================================
--- utils/TableGen/IntrinsicEmitter.cpp
+++ utils/TableGen/IntrinsicEmitter.cpp
@@ -131,6 +131,20 @@
OS << "#endif\n\n";
}
+struct IntrinsicNameSorter {
+ IntrinsicNameSorter(const std::vector<CodeGenIntrinsic> &I)
+ : Ints(I) {}
+
+ // Sort in reverse order of intrinsic name so "abc.def" appears after
+ // "abd.def.ghi" in the overridden name matcher
+ bool operator()(unsigned i, unsigned j) {
+ return Ints[i].Name.compare(Ints[j].Name) > 0;
+ }
+
+private:
+ const std::vector<CodeGenIntrinsic>& Ints;
+};
+
void IntrinsicEmitter::
EmitFnNameRecognizer(const std::vector<CodeGenIntrinsic> &Ints,
raw_ostream &OS) {
@@ -144,12 +158,16 @@
OS << " StringRef NameR(Name+6, Len-6); // Skip over 'llvm.'\n";
OS << " switch (Name[5]) { // Dispatch on first letter.\n";
OS << " default: break;\n";
+ IntrinsicNameSorter Sorter(Ints);
// Emit the intrinsic matching stuff by first letter.
for (std::map<char, std::vector<unsigned> >::iterator I = IntMapping.begin(),
E = IntMapping.end(); I != E; ++I) {
OS << " case '" << I->first << "':\n";
std::vector<unsigned> &IntList = I->second;
+ // Sort intrinsics in reverse order of their names
+ std::sort(IntList.begin(), IntList.end(), Sorter);
+
// Emit all the overloaded intrinsics first, build a table of the
// non-overloaded ones.
std::vector<StringMatcher::StringPair> MatchTable;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D1128.2.patch
Type: text/x-patch
Size: 1565 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130722/23764b24/attachment.bin>
More information about the llvm-commits
mailing list