aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2006-09-21 17:22:55 +0000
committerDevang Patel <dpatel@apple.com>2006-09-21 17:22:55 +0000
commitc7cfbc58ad88f127df6949791401969a09da560f (patch)
tree9a1016510809da6d2551d7c9536f03a414a48c99
parentd1aed7aaf7047873b8878502859905159eaf5362 (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.h22
-rw-r--r--tools/lto/lto.cpp10
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)
{