forked from OSchip/llvm-project
PIC16: Simplify code by using a std::set<std::string> instead of a sorted & uniqued std::list of leaked char*.
llvm-svn: 99061
This commit is contained in:
parent
c719277435
commit
73fc06f60f
|
@ -184,7 +184,7 @@ void PIC16AsmPrinter::printOperand(const MachineInstr *MI, int opNum) {
|
|||
// by any chance, as we do not link in those as .bc lib. So these calls
|
||||
// are always external and it is safe to emit an extern.
|
||||
if (PAN::isMemIntrinsic(Sym->getName()))
|
||||
LibcallDecls.push_back(createESName(Sym->getName()));
|
||||
LibcallDecls.insert(Sym->getName());
|
||||
|
||||
O << *Sym;
|
||||
break;
|
||||
|
@ -199,7 +199,7 @@ void PIC16AsmPrinter::printOperand(const MachineInstr *MI, int opNum) {
|
|||
Printname = PAN::Rename(Sname);
|
||||
}
|
||||
// Record these decls, we need to print them in asm as extern.
|
||||
LibcallDecls.push_back(createESName(Printname));
|
||||
LibcallDecls.insert(Printname);
|
||||
}
|
||||
|
||||
O << Printname;
|
||||
|
@ -221,18 +221,6 @@ 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) {
|
||||
return strcmp(s1, s2) <= 0;
|
||||
}
|
||||
|
||||
// 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) {
|
||||
return !strcmp(s1, s2);
|
||||
}
|
||||
|
||||
/// printLibcallDecls - print the extern declarations for compiler
|
||||
/// intrinsics.
|
||||
///
|
||||
|
@ -241,12 +229,9 @@ void PIC16AsmPrinter::printLibcallDecls() {
|
|||
if (LibcallDecls.empty()) return;
|
||||
|
||||
O << MAI->getCommentString() << "External decls for libcalls - BEGIN." <<"\n";
|
||||
// Remove duplicate entries.
|
||||
LibcallDecls.sort(is_before);
|
||||
LibcallDecls.unique(is_duplicate);
|
||||
|
||||
for (std::list<const char*>::const_iterator I = LibcallDecls.begin();
|
||||
I != LibcallDecls.end(); I++) {
|
||||
for (std::set<std::string>::const_iterator I = LibcallDecls.begin(),
|
||||
E = LibcallDecls.end(); I != E; I++) {
|
||||
O << MAI->getExternDirective() << *I << "\n";
|
||||
}
|
||||
O << MAI->getCommentString() << "External decls for libcalls - END." <<"\n";
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include <list>
|
||||
#include <set>
|
||||
#include <string>
|
||||
|
||||
namespace llvm {
|
||||
|
@ -80,7 +81,7 @@ namespace llvm {
|
|||
PIC16TargetLowering *PTLI;
|
||||
PIC16DbgInfo DbgInfo;
|
||||
const PIC16MCAsmInfo *PMAI;
|
||||
std::list<const char *> LibcallDecls; // List of extern decls.
|
||||
std::set<std::string> LibcallDecls; // Sorted & uniqued set of extern decls.
|
||||
std::vector<const GlobalVariable *> ExternalVarDecls;
|
||||
std::vector<const GlobalVariable *> ExternalVarDefs;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue