mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
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:
parent
3fc488d0ce
commit
0701a2f70d
@ -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
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user