[llvm-commits] CVS: llvm/include/llvm/LinkTimeOptimizer.h
Devang Patel
dpatel at apple.com
Thu Aug 3 08:45:13 PDT 2006
Changes in directory llvm/include/llvm:
LinkTimeOptimizer.h added (r1.1)
---
Log message:
Add new tool, lto, to do link time optimization. This tool installs
dynamic library that linker can use to optimize llvm byte codes at
link time.
---
Diffs of the changes: (+99 -0)
LinkTimeOptimizer.h | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 99 insertions(+)
Index: llvm/include/llvm/LinkTimeOptimizer.h
diff -c /dev/null llvm/include/llvm/LinkTimeOptimizer.h:1.1
*** /dev/null Thu Aug 3 10:45:07 2006
--- llvm/include/llvm/LinkTimeOptimizer.h Thu Aug 3 10:44:57 2006
***************
*** 0 ****
--- 1,99 ----
+ //===-- llvm/LinkTimeOptimizer.h - Public Interface ------------*- C++ -*-===//
+ //
+ // The LLVM Compiler Infrastructure
+ //
+ // This file was developed by Devang Patel and is distributed under
+ // the University of Illinois Open Source License. See LICENSE.TXT for details.
+ //
+ //===----------------------------------------------------------------------===//
+ //
+ // This header provides public interface to use LLVM link time optimization
+ // library. This is intended to be used by linker to do link time optimization.
+ //
+ //===----------------------------------------------------------------------===//
+
+ #ifndef __LTO_H__
+ #define __LTO_H__
+
+ #include <string>
+ #include <vector>
+ #include <set>
+ #include <llvm/ADT/hash_map>
+
+ namespace llvm {
+
+ class Module;
+ class GlobalValue;
+
+ enum LTOStatus {
+ LTO_UNKNOWN,
+ LTO_OPT_SUCCESS,
+ LTO_READ_SUCCESS,
+ LTO_READ_FAILURE,
+ LTO_WRITE_FAILURE,
+ LTO_NO_TARGET,
+ LTO_NO_WORK,
+ LTO_MODULE_MERGE_FAILURE,
+ LTO_ASM_FAILURE
+ };
+
+ enum LTOLinkageTypes {
+ LTOExternalLinkage, // Externally visible function
+ LTOLinkOnceLinkage, // Keep one copy of named function when linking (inline)
+ LTOWeakLinkage, // Keep one copy of named function when linking (weak)
+ LTOInternalLinkage // Rename collisions when linking (static functions)
+ };
+
+ /// This class representes LLVM symbol information without exposing details
+ /// of LLVM global values. It encapsulates symbol linkage information. This
+ /// is typically used in hash_map where associated name identifies the
+ /// the symbol name.
+ class LLVMSymbol {
+
+ public:
+
+ LTOLinkageTypes getLinkage() const { return linkage; }
+ void mayBeNotUsed();
+
+ LLVMSymbol (enum LTOLinkageTypes lt, GlobalValue *g) : linkage(lt), gv(g) {}
+
+ private:
+ enum LTOLinkageTypes linkage;
+ GlobalValue *gv;
+ };
+
+ class string_compare {
+ public:
+ bool operator()(const char* left, const char* right) const {
+ return (strcmp(left, right) == 0);
+ }
+ };
+
+ /// This is the main link time optimization class. It exposes simple API
+ /// to perform link time optimization using LLVM intermodular optimizer.
+ class LinkTimeOptimizer {
+
+ public:
+ typedef hash_map<const char*, LLVMSymbol*, hash<const char*>,
+ string_compare> NameToSymbolMap;
+
+ enum LTOStatus readLLVMObjectFile(const std::string &InputFilename,
+ NameToSymbolMap &symbols,
+ std::set<const char*> &references);
+ enum LTOStatus optimizeModules(const std::string &OutputFilename,
+ std::vector<const char*> &exportList);
+
+ private:
+ std::vector<Module *> modules;
+ NameToSymbolMap allSymbols;
+ };
+
+ } // End llvm namespace
+
+ /// This provides C interface to initialize link time optimizer. This allows
+ /// linker to use dlopen() interface to dynamically load LinkTimeOptimizer.
+ /// extern "C" helps, because dlopen() interface uses name to find the symbol.
+ extern "C"
+ llvm::LinkTimeOptimizer *createLLVMOptimizer();
+
+ #endif
More information about the llvm-commits
mailing list