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 _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits