summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PIC16/PIC16AsmPrinter.cpp
diff options
context:
space:
mode:
authorSanjiv Gupta <sanjiv.gupta@microchip.com>2009-07-27 18:04:34 +0000
committerSanjiv Gupta <sanjiv.gupta@microchip.com>2009-07-27 18:04:34 +0000
commit96b3d4a2f93fdbcabca2cfd55bddf510cf93c4fb (patch)
tree39ae7b838305c3815f1453327101da728d30b769 /llvm/lib/Target/PIC16/PIC16AsmPrinter.cpp
parentc0137150eee0ca8207b1fd3b4725884241033e29 (diff)
downloadbcm5719-llvm-96b3d4a2f93fdbcabca2cfd55bddf510cf93c4fb.tar.gz
bcm5719-llvm-96b3d4a2f93fdbcabca2cfd55bddf510cf93c4fb.zip
Remove duplicate entries while printing decls for external symbols.
Some libcall names are same, so they were getting printed twice. llvm-svn: 77215
Diffstat (limited to 'llvm/lib/Target/PIC16/PIC16AsmPrinter.cpp')
-rw-r--r--llvm/lib/Target/PIC16/PIC16AsmPrinter.cpp25
1 files changed, 23 insertions, 2 deletions
diff --git a/llvm/lib/Target/PIC16/PIC16AsmPrinter.cpp b/llvm/lib/Target/PIC16/PIC16AsmPrinter.cpp
index 443ced0c184..ec86585c1db 100644
--- a/llvm/lib/Target/PIC16/PIC16AsmPrinter.cpp
+++ b/llvm/lib/Target/PIC16/PIC16AsmPrinter.cpp
@@ -156,6 +156,26 @@ void PIC16AsmPrinter::printCCOperand(const MachineInstr *MI, int opNum) {
O << PIC16CondCodeToString((PIC16CC::CondCodes)CC);
}
+// This function is used to sort the decls list.
+// should return true if s1 should come before s2.
+static bool is_before(const char *s1, const char *s2) {
+ std::string str1 = s1;
+ std::string str2 = s2;
+ int i = str1.compare(str2);
+ // Return true if s1 is smaller or equal.
+ if (i <= 0) return true;
+ // false if s1 should come after s2.
+ return false;
+}
+
+// This is used by list::unique below.
+// unique will filter out duplicates if it knows them.
+static bool is_duplicate(const char *s1, const char *s2) {
+ std::string str1 = s1;
+ std::string str2 = s2;
+ return str1 == str2;
+}
+
/// printLibcallDecls - print the extern declarations for compiler
/// intrinsics.
///
@@ -165,8 +185,9 @@ void PIC16AsmPrinter::printLibcallDecls(void) {
O << TAI->getCommentString() << "External decls for libcalls - BEGIN." <<"\n";
// Remove duplicate entries.
- LibcallDecls.sort();
- LibcallDecls.unique();
+ LibcallDecls.sort(is_before);
+ LibcallDecls.unique(is_duplicate);
+
for (std::list<const char*>::const_iterator I = LibcallDecls.begin();
I != LibcallDecls.end(); I++) {
O << TAI->getExternDirective() << *I << "\n";
OpenPOWER on IntegriCloud