Keep track of all modules crated using a name to module map.

Add private member function getMoudle().


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30130 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Devang Patel 2006-09-06 18:50:26 +00:00
parent 3fc488d0ce
commit 0701a2f70d
2 changed files with 24 additions and 1 deletions

View File

@ -83,6 +83,8 @@ namespace llvm {
public: public:
typedef hash_map<const char*, LLVMSymbol*, hash<const char*>, typedef hash_map<const char*, LLVMSymbol*, hash<const char*>,
string_compare> NameToSymbolMap; string_compare> NameToSymbolMap;
typedef hash_map<const char*, Module*, hash<const char*>,
string_compare> NameToModuleMap;
enum LTOStatus readLLVMObjectFile(const std::string &InputFilename, enum LTOStatus readLLVMObjectFile(const std::string &InputFilename,
NameToSymbolMap &symbols, NameToSymbolMap &symbols,
@ -91,9 +93,13 @@ namespace llvm {
std::vector<const char*> &exportList, std::vector<const char*> &exportList,
std::string &targetTriple); std::string &targetTriple);
private:
Module *getModule (const std::string &InputFilename);
private: private:
std::vector<Module *> modules; std::vector<Module *> modules;
NameToSymbolMap allSymbols; NameToSymbolMap allSymbols;
NameToModuleMap allModules;
}; };
} // End llvm namespace } // End llvm namespace

View File

@ -99,6 +99,23 @@ findExternalRefs(Value *value, std::set<std::string> &references,
findExternalRefs(c->getOperand(i), references, mangler); findExternalRefs(c->getOperand(i), references, mangler);
} }
/// InputFilename is a LLVM bytecode file. If Module with InputFilename is
/// available then return it. Otherwise parseInputFilename.
Module *
LinkTimeOptimizer::getModule(const std::string &InputFilename)
{
Module *m = NULL;
NameToModuleMap::iterator pos = allModules.find(InputFilename.c_str());
if (pos != allModules.end())
m = allModules[InputFilename.c_str()];
else {
m = ParseBytecodeFile(InputFilename);
allModules[InputFilename.c_str()] = m;
}
return m;
}
/// InputFilename is a LLVM bytecode file. Read it using bytecode reader. /// InputFilename is a LLVM bytecode file. Read it using bytecode reader.
/// Collect global functions and symbol names in symbols vector. /// Collect global functions and symbol names in symbols vector.
/// Collect external references in references vector. /// Collect external references in references vector.
@ -108,7 +125,7 @@ LinkTimeOptimizer::readLLVMObjectFile(const std::string &InputFilename,
NameToSymbolMap &symbols, NameToSymbolMap &symbols,
std::set<std::string> &references) std::set<std::string> &references)
{ {
Module *m = ParseBytecodeFile(InputFilename); Module *m = getModule(InputFilename);
if (!m) if (!m)
return LTO_READ_FAILURE; return LTO_READ_FAILURE;