diff options
author | Devang Patel <dpatel@apple.com> | 2006-09-21 17:22:55 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2006-09-21 17:22:55 +0000 |
commit | c7cfbc58ad88f127df6949791401969a09da560f (patch) | |
tree | 9a1016510809da6d2551d7c9536f03a414a48c99 | |
parent | d1aed7aaf7047873b8878502859905159eaf5362 (diff) |
Use abstract class to facilitate dlopen() interface.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30569 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/LinkTimeOptimizer.h | 22 | ||||
-rw-r--r-- | tools/lto/lto.cpp | 10 |
2 files changed, 25 insertions, 7 deletions
diff --git a/include/llvm/LinkTimeOptimizer.h b/include/llvm/LinkTimeOptimizer.h index 006f1171c8..654623adff 100644 --- a/include/llvm/LinkTimeOptimizer.h +++ b/include/llvm/LinkTimeOptimizer.h @@ -75,10 +75,28 @@ namespace llvm { return (strcmp(left, right) == 0); } }; - + + /// This is abstract class to facilitate dlopen() interface. + /// See LTO below for more info. + class LinkTimeOptimizer { + public: + typedef hash_map<const char*, LLVMSymbol*, hash<const char*>, + string_compare> NameToSymbolMap; + typedef hash_map<const char*, Module*, hash<const char*>, + string_compare> NameToModuleMap; + virtual enum LTOStatus readLLVMObjectFile(const std::string &, + NameToSymbolMap &, + std::set<std::string> &) = 0; + virtual enum LTOStatus optimizeModules(const std::string &, + std::vector<const char*> &, + std::string &) = 0; + virtual void getTargetTriple(const std::string &, std::string &) = 0; + virtual ~LinkTimeOptimizer() = 0; + }; + /// This is the main link time optimization class. It exposes simple API /// to perform link time optimization using LLVM intermodular optimizer. - class LinkTimeOptimizer { + class LTO : public LinkTimeOptimizer { public: typedef hash_map<const char*, LLVMSymbol*, hash<const char*>, diff --git a/tools/lto/lto.cpp b/tools/lto/lto.cpp index 7f1ec1ac34..cd3cc341c0 100644 --- a/tools/lto/lto.cpp +++ b/tools/lto/lto.cpp @@ -44,7 +44,7 @@ using namespace llvm; extern "C" llvm::LinkTimeOptimizer *createLLVMOptimizer() { - llvm::LinkTimeOptimizer *l = new llvm::LinkTimeOptimizer(); + llvm::LTO *l = new llvm::LTO(); return l; } @@ -105,7 +105,7 @@ findExternalRefs(Value *value, std::set<std::string> &references, /// InputFilename is a LLVM bytecode file. If Module with InputFilename is /// available then return it. Otherwise parseInputFilename. Module * -LinkTimeOptimizer::getModule(const std::string &InputFilename) +LTO::getModule(const std::string &InputFilename) { Module *m = NULL; @@ -122,7 +122,7 @@ LinkTimeOptimizer::getModule(const std::string &InputFilename) /// InputFilename is a LLVM bytecode file. Reade this bytecode file and /// set corresponding target triplet string. void -LinkTimeOptimizer::getTargetTriple(const std::string &InputFilename, +LTO::getTargetTriple(const std::string &InputFilename, std::string &targetTriple) { Module *m = getModule(InputFilename); @@ -135,7 +135,7 @@ LinkTimeOptimizer::getTargetTriple(const std::string &InputFilename, /// Collect external references in references vector. /// Return LTO_READ_SUCCESS if there is no error. enum LTOStatus -LinkTimeOptimizer::readLLVMObjectFile(const std::string &InputFilename, +LTO::readLLVMObjectFile(const std::string &InputFilename, NameToSymbolMap &symbols, std::set<std::string> &references) { @@ -310,7 +310,7 @@ static enum LTOStatus lto_optimize(Module *M, std::ostream &Out, /// native object file using OutputFilename /// Return appropriate LTOStatus. enum LTOStatus -LinkTimeOptimizer::optimizeModules(const std::string &OutputFilename, +LTO::optimizeModules(const std::string &OutputFilename, std::vector<const char *> &exportList, std::string &targetTriple) { |