From: Devang Patel Date: Thu, 21 Sep 2006 17:22:55 +0000 (+0000) Subject: Use abstract class to facilitate dlopen() interface. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c7cfbc58ad88f127df6949791401969a09da560f;p=oota-llvm.git Use abstract class to facilitate dlopen() interface. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30569 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/LinkTimeOptimizer.h b/include/llvm/LinkTimeOptimizer.h index 006f1171c80..654623adff8 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, + string_compare> NameToSymbolMap; + typedef hash_map, + string_compare> NameToModuleMap; + virtual enum LTOStatus readLLVMObjectFile(const std::string &, + NameToSymbolMap &, + std::set &) = 0; + virtual enum LTOStatus optimizeModules(const std::string &, + std::vector &, + 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, diff --git a/tools/lto/lto.cpp b/tools/lto/lto.cpp index 7f1ec1ac348..cd3cc341c0b 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 &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 &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 &exportList, std::string &targetTriple) {