diff options
| author | Sanjiv Gupta <sanjiv.gupta@microchip.com> | 2009-07-27 18:04:34 +0000 |
|---|---|---|
| committer | Sanjiv Gupta <sanjiv.gupta@microchip.com> | 2009-07-27 18:04:34 +0000 |
| commit | 96b3d4a2f93fdbcabca2cfd55bddf510cf93c4fb (patch) | |
| tree | 39ae7b838305c3815f1453327101da728d30b769 /llvm/lib/Target/PIC16/PIC16AsmPrinter.cpp | |
| parent | c0137150eee0ca8207b1fd3b4725884241033e29 (diff) | |
| download | bcm5719-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.cpp | 25 |
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"; |

