[llvm] r275476 - Move legacy LTO interface headers to legacy/ directory.
Peter Collingbourne via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 14 14:31:37 PDT 2016
I forgot to include the motivation in the commit message, which was:
This library will be the home of a new resolution-based LTO interface
(D20268),
which should not be confused with the existing legacy LTO interface in this
directory.
Peter
On Thu, Jul 14, 2016 at 2:21 PM, Peter Collingbourne via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: pcc
> Date: Thu Jul 14 16:21:16 2016
> New Revision: 275476
>
> URL: http://llvm.org/viewvc/llvm-project?rev=275476&view=rev
> Log:
> Move legacy LTO interface headers to legacy/ directory.
>
> Differential Revision: https://reviews.llvm.org/D22173
>
> Added:
> llvm/trunk/include/llvm/LTO/legacy/
> llvm/trunk/include/llvm/LTO/legacy/LTOCodeGenerator.h
> - copied, changed from r275474,
> llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h
> llvm/trunk/include/llvm/LTO/legacy/LTOModule.h
> - copied, changed from r275474,
> llvm/trunk/include/llvm/LTO/LTOModule.h
> llvm/trunk/include/llvm/LTO/legacy/ThinLTOCodeGenerator.h
> - copied, changed from r275474,
> llvm/trunk/include/llvm/LTO/ThinLTOCodeGenerator.h
> llvm/trunk/include/llvm/LTO/legacy/UpdateCompilerUsed.h
> - copied, changed from r275474,
> llvm/trunk/include/llvm/LTO/UpdateCompilerUsed.h
> Removed:
> llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h
> llvm/trunk/include/llvm/LTO/LTOModule.h
> llvm/trunk/include/llvm/LTO/ThinLTOCodeGenerator.h
> llvm/trunk/include/llvm/LTO/UpdateCompilerUsed.h
> Modified:
> llvm/trunk/lib/LTO/LTOCodeGenerator.cpp
> llvm/trunk/lib/LTO/LTOModule.cpp
> llvm/trunk/lib/LTO/ThinLTOCodeGenerator.cpp
> llvm/trunk/lib/LTO/UpdateCompilerUsed.cpp
> llvm/trunk/tools/llvm-lto/llvm-lto.cpp
> llvm/trunk/tools/lto/lto.cpp
>
> Removed: llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h?rev=275475&view=auto
>
> ==============================================================================
> --- llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h (original)
> +++ llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h (removed)
> @@ -1,236 +0,0 @@
> -//===-LTOCodeGenerator.h - LLVM Link Time Optimizer
> -----------------------===//
> -//
> -// The LLVM Compiler Infrastructure
> -//
> -// This file is distributed under the University of Illinois Open Source
> -// License. See LICENSE.TXT for details.
> -//
>
> -//===----------------------------------------------------------------------===//
> -//
> -// This file declares the LTOCodeGenerator class.
> -//
> -// LTO compilation consists of three phases: Pre-IPO, IPO and Post-IPO.
> -//
> -// The Pre-IPO phase compiles source code into bitcode file. The
> resulting
> -// bitcode files, along with object files and libraries, will be fed to
> the
> -// linker to through the IPO and Post-IPO phases. By using obj-file
> extension,
> -// the resulting bitcode file disguises itself as an object file, and
> therefore
> -// obviates the need of writing a special set of the make-rules only for
> LTO
> -// compilation.
> -//
> -// The IPO phase perform inter-procedural analyses and optimizations,
> and
> -// the Post-IPO consists two sub-phases: intra-procedural scalar
> optimizations
> -// (SOPT), and intra-procedural target-dependent code generator (CG).
> -//
> -// As of this writing, we don't separate IPO and the Post-IPO SOPT. They
> -// are intermingled together, and are driven by a single pass manager (see
> -// PassManagerBuilder::populateLTOPassManager()).
> -//
> -// The "LTOCodeGenerator" is the driver for the IPO and Post-IPO stages.
> -// The "CodeGenerator" here is bit confusing. Don't confuse the
> "CodeGenerator"
> -// with the machine specific code generator.
> -//
>
> -//===----------------------------------------------------------------------===//
> -
> -#ifndef LLVM_LTO_LTOCODEGENERATOR_H
> -#define LLVM_LTO_LTOCODEGENERATOR_H
> -
> -#include "llvm-c/lto.h"
> -#include "llvm/ADT/SmallPtrSet.h"
> -#include "llvm/ADT/StringMap.h"
> -#include "llvm/ADT/StringSet.h"
> -#include "llvm/IR/GlobalValue.h"
> -#include "llvm/IR/Module.h"
> -#include "llvm/Target/TargetMachine.h"
> -#include "llvm/Target/TargetOptions.h"
> -#include <string>
> -#include <vector>
> -
> -namespace llvm {
> -template <typename T> class ArrayRef;
> - class LLVMContext;
> - class DiagnosticInfo;
> - class Linker;
> - class Mangler;
> - class MemoryBuffer;
> - class TargetLibraryInfo;
> - class TargetMachine;
> - class raw_ostream;
> - class raw_pwrite_stream;
> -
>
> -//===----------------------------------------------------------------------===//
> -/// C++ class which implements the opaque lto_code_gen_t type.
> -///
> -struct LTOCodeGenerator {
> - static const char *getVersionString();
> -
> - LTOCodeGenerator(LLVMContext &Context);
> - ~LTOCodeGenerator();
> -
> - /// Merge given module. Return true on success.
> - ///
> - /// Resets \a HasVerifiedInput.
> - bool addModule(struct LTOModule *);
> -
> - /// Set the destination module.
> - ///
> - /// Resets \a HasVerifiedInput.
> - void setModule(std::unique_ptr<LTOModule> M);
> -
> - void setTargetOptions(const TargetOptions &Options);
> - void setDebugInfo(lto_debug_model);
> - void setCodePICModel(Optional<Reloc::Model> Model) { RelocModel =
> Model; }
> -
> - /// Set the file type to be emitted (assembly or object code).
> - /// The default is TargetMachine::CGFT_ObjectFile.
> - void setFileType(TargetMachine::CodeGenFileType FT) { FileType = FT; }
> -
> - void setCpu(const char *MCpu) { this->MCpu = MCpu; }
> - void setAttr(const char *MAttr) { this->MAttr = MAttr; }
> - void setOptLevel(unsigned OptLevel);
> -
> - void setShouldInternalize(bool Value) { ShouldInternalize = Value; }
> - void setShouldEmbedUselists(bool Value) { ShouldEmbedUselists = Value; }
> -
> - /// Restore linkage of globals
> - ///
> - /// When set, the linkage of globals will be restored prior to code
> - /// generation. That is, a global symbol that had external linkage
> prior to
> - /// LTO will be emitted with external linkage again; and a local will
> remain
> - /// local. Note that this option only affects the end result - globals
> may
> - /// still be internalized in the process of LTO and may be modified
> and/or
> - /// deleted where legal.
> - ///
> - /// The default behavior will internalize globals (unless on the
> preserve
> - /// list) and, if parallel code generation is enabled, will externalize
> - /// all locals.
> - void setShouldRestoreGlobalsLinkage(bool Value) {
> - ShouldRestoreGlobalsLinkage = Value;
> - }
> -
> - void addMustPreserveSymbol(StringRef Sym) { MustPreserveSymbols[Sym] =
> 1; }
> -
> - /// Pass options to the driver and optimization passes.
> - ///
> - /// These options are not necessarily for debugging purpose (the
> function
> - /// name is misleading). This function should be called before
> - /// LTOCodeGenerator::compilexxx(), and
> - /// LTOCodeGenerator::writeMergedModules().
> - void setCodeGenDebugOptions(const char *Opts);
> -
> - /// Parse the options set in setCodeGenDebugOptions.
> - ///
> - /// Like \a setCodeGenDebugOptions(), this must be called before
> - /// LTOCodeGenerator::compilexxx() and
> - /// LTOCodeGenerator::writeMergedModules().
> - void parseCodeGenDebugOptions();
> -
> - /// Write the merged module to the file specified by the given path.
> Return
> - /// true on success.
> - ///
> - /// Calls \a verifyMergedModuleOnce().
> - bool writeMergedModules(const char *Path);
> -
> - /// Compile the merged module into a *single* output file; the path to
> output
> - /// file is returned to the caller via argument "name". Return true on
> - /// success.
> - ///
> - /// \note It is up to the linker to remove the intermediate output
> file. Do
> - /// not try to remove the object file in LTOCodeGenerator's destructor
> as we
> - /// don't who (LTOCodeGenerator or the output file) will last longer.
> - bool compile_to_file(const char **Name, bool DisableVerify,
> - bool DisableInline, bool DisableGVNLoadPRE,
> - bool DisableVectorization);
> -
> - /// As with compile_to_file(), this function compiles the merged module
> into
> - /// single output file. Instead of returning the output file path to the
> - /// caller (linker), it brings the output to a buffer, and returns the
> buffer
> - /// to the caller. This function should delete the intermediate file
> once
> - /// its content is brought to memory. Return NULL if the compilation
> was not
> - /// successful.
> - std::unique_ptr<MemoryBuffer> compile(bool DisableVerify, bool
> DisableInline,
> - bool DisableGVNLoadPRE,
> - bool DisableVectorization);
> -
> - /// Optimizes the merged module. Returns true on success.
> - ///
> - /// Calls \a verifyMergedModuleOnce().
> - bool optimize(bool DisableVerify, bool DisableInline, bool
> DisableGVNLoadPRE,
> - bool DisableVectorization);
> -
> - /// Compiles the merged optimized module into a single output file. It
> brings
> - /// the output to a buffer, and returns the buffer to the caller.
> Return NULL
> - /// if the compilation was not successful.
> - std::unique_ptr<MemoryBuffer> compileOptimized();
> -
> - /// Compile the merged optimized module into out.size() output files
> each
> - /// representing a linkable partition of the module. If out contains
> more
> - /// than one element, code generation is done in parallel with
> out.size()
> - /// threads. Output files will be written to members of out. Returns
> true on
> - /// success.
> - ///
> - /// Calls \a verifyMergedModuleOnce().
> - bool compileOptimized(ArrayRef<raw_pwrite_stream *> Out);
> -
> - void setDiagnosticHandler(lto_diagnostic_handler_t, void *);
> -
> - LLVMContext &getContext() { return Context; }
> -
> - void resetMergedModule() { MergedModule.reset(); }
> -
> -private:
> - void initializeLTOPasses();
> -
> - /// Verify the merged module on first call.
> - ///
> - /// Sets \a HasVerifiedInput on first call and doesn't run again on the
> same
> - /// input.
> - void verifyMergedModuleOnce();
> -
> - bool compileOptimizedToFile(const char **Name);
> - void restoreLinkageForExternals();
> - void applyScopeRestrictions();
> - void preserveDiscardableGVs(
> - Module &TheModule,
> - llvm::function_ref<bool(const GlobalValue &)> mustPreserveGV);
> -
> - bool determineTarget();
> - std::unique_ptr<TargetMachine> createTargetMachine();
> -
> - static void DiagnosticHandler(const DiagnosticInfo &DI, void *Context);
> -
> - void DiagnosticHandler2(const DiagnosticInfo &DI);
> -
> - void emitError(const std::string &ErrMsg);
> - void emitWarning(const std::string &ErrMsg);
> -
> - LLVMContext &Context;
> - std::unique_ptr<Module> MergedModule;
> - std::unique_ptr<Linker> TheLinker;
> - std::unique_ptr<TargetMachine> TargetMach;
> - bool EmitDwarfDebugInfo = false;
> - bool ScopeRestrictionsDone = false;
> - bool HasVerifiedInput = false;
> - Optional<Reloc::Model> RelocModel;
> - StringSet<> MustPreserveSymbols;
> - StringSet<> AsmUndefinedRefs;
> - StringMap<GlobalValue::LinkageTypes> ExternalSymbols;
> - std::vector<std::string> CodegenOptions;
> - std::string FeatureStr;
> - std::string MCpu;
> - std::string MAttr;
> - std::string NativeObjectPath;
> - TargetOptions Options;
> - CodeGenOpt::Level CGOptLevel = CodeGenOpt::Default;
> - const Target *MArch = nullptr;
> - std::string TripleStr;
> - unsigned OptLevel = 2;
> - lto_diagnostic_handler_t DiagHandler = nullptr;
> - void *DiagContext = nullptr;
> - bool ShouldInternalize = true;
> - bool ShouldEmbedUselists = false;
> - bool ShouldRestoreGlobalsLinkage = false;
> - TargetMachine::CodeGenFileType FileType =
> TargetMachine::CGFT_ObjectFile;
> -};
> -}
> -#endif
>
> Removed: llvm/trunk/include/llvm/LTO/LTOModule.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LTO/LTOModule.h?rev=275475&view=auto
>
> ==============================================================================
> --- llvm/trunk/include/llvm/LTO/LTOModule.h (original)
> +++ llvm/trunk/include/llvm/LTO/LTOModule.h (removed)
> @@ -1,212 +0,0 @@
> -//===-LTOModule.h - LLVM Link Time Optimizer
> ------------------------------===//
> -//
> -// The LLVM Compiler Infrastructure
> -//
> -// This file is distributed under the University of Illinois Open Source
> -// License. See LICENSE.TXT for details.
> -//
>
> -//===----------------------------------------------------------------------===//
> -//
> -// This file declares the LTOModule class.
> -//
>
> -//===----------------------------------------------------------------------===//
> -
> -#ifndef LLVM_LTO_LTOMODULE_H
> -#define LLVM_LTO_LTOMODULE_H
> -
> -#include "llvm-c/lto.h"
> -#include "llvm/ADT/StringMap.h"
> -#include "llvm/ADT/StringSet.h"
> -#include "llvm/IR/Module.h"
> -#include "llvm/Object/IRObjectFile.h"
> -#include "llvm/Target/TargetMachine.h"
> -#include <string>
> -#include <vector>
> -
> -// Forward references to llvm classes.
> -namespace llvm {
> - class Function;
> - class GlobalValue;
> - class MemoryBuffer;
> - class TargetOptions;
> - class Value;
> -
>
> -//===----------------------------------------------------------------------===//
> -/// C++ class which implements the opaque lto_module_t type.
> -///
> -struct LTOModule {
> -private:
> - struct NameAndAttributes {
> - const char *name;
> - uint32_t attributes;
> - bool isFunction;
> - const GlobalValue *symbol;
> - };
> -
> - std::unique_ptr<LLVMContext> OwnedContext;
> -
> - std::string LinkerOpts;
> -
> - std::unique_ptr<object::IRObjectFile> IRFile;
> - std::unique_ptr<TargetMachine> _target;
> - std::vector<NameAndAttributes> _symbols;
> -
> - // _defines and _undefines only needed to disambiguate tentative
> definitions
> - StringSet<> _defines;
> - StringMap<NameAndAttributes> _undefines;
> - std::vector<const char*> _asm_undefines;
> -
> - LTOModule(std::unique_ptr<object::IRObjectFile> Obj, TargetMachine *TM);
> -
> -public:
> - ~LTOModule();
> -
> - /// Returns 'true' if the file or memory contents is LLVM bitcode.
> - static bool isBitcodeFile(const void *mem, size_t length);
> - static bool isBitcodeFile(const char *path);
> -
> - /// Returns 'true' if the Module is produced for ThinLTO.
> - bool isThinLTO();
> -
> - /// Returns 'true' if the memory buffer is LLVM bitcode for the
> specified
> - /// triple.
> - static bool isBitcodeForTarget(MemoryBuffer *memBuffer,
> - StringRef triplePrefix);
> -
> - /// Returns a string representing the producer identification stored in
> the
> - /// bitcode, or "" if the bitcode does not contains any.
> - ///
> - static std::string getProducerString(MemoryBuffer *Buffer);
> -
> - /// Create a MemoryBuffer from a memory range with an optional name.
> - static std::unique_ptr<MemoryBuffer>
> - makeBuffer(const void *mem, size_t length, StringRef name = "");
> -
> - /// Create an LTOModule. N.B. These methods take ownership of the
> buffer. The
> - /// caller must have initialized the Targets, the TargetMCs, the
> AsmPrinters,
> - /// and the AsmParsers by calling:
> - ///
> - /// InitializeAllTargets();
> - /// InitializeAllTargetMCs();
> - /// InitializeAllAsmPrinters();
> - /// InitializeAllAsmParsers();
> - static ErrorOr<std::unique_ptr<LTOModule>>
> - createFromFile(LLVMContext &Context, const char *path,
> - const TargetOptions &options);
> - static ErrorOr<std::unique_ptr<LTOModule>>
> - createFromOpenFile(LLVMContext &Context, int fd, const char *path,
> - size_t size, const TargetOptions &options);
> - static ErrorOr<std::unique_ptr<LTOModule>>
> - createFromOpenFileSlice(LLVMContext &Context, int fd, const char *path,
> - size_t map_size, off_t offset,
> - const TargetOptions &options);
> - static ErrorOr<std::unique_ptr<LTOModule>>
> - createFromBuffer(LLVMContext &Context, const void *mem, size_t length,
> - const TargetOptions &options, StringRef path = "");
> - static ErrorOr<std::unique_ptr<LTOModule>>
> - createInLocalContext(std::unique_ptr<LLVMContext> Context, const void
> *mem,
> - size_t length, const TargetOptions &options,
> - StringRef path);
> -
> - const Module &getModule() const {
> - return const_cast<LTOModule*>(this)->getModule();
> - }
> - Module &getModule() {
> - return IRFile->getModule();
> - }
> -
> - std::unique_ptr<Module> takeModule() { return IRFile->takeModule(); }
> -
> - /// Return the Module's target triple.
> - const std::string &getTargetTriple() {
> - return getModule().getTargetTriple();
> - }
> -
> - /// Set the Module's target triple.
> - void setTargetTriple(StringRef Triple) {
> - getModule().setTargetTriple(Triple);
> - }
> -
> - /// Get the number of symbols
> - uint32_t getSymbolCount() {
> - return _symbols.size();
> - }
> -
> - /// Get the attributes for a symbol at the specified index.
> - lto_symbol_attributes getSymbolAttributes(uint32_t index) {
> - if (index < _symbols.size())
> - return lto_symbol_attributes(_symbols[index].attributes);
> - return lto_symbol_attributes(0);
> - }
> -
> - /// Get the name of the symbol at the specified index.
> - const char *getSymbolName(uint32_t index) {
> - if (index < _symbols.size())
> - return _symbols[index].name;
> - return nullptr;
> - }
> -
> - const GlobalValue *getSymbolGV(uint32_t index) {
> - if (index < _symbols.size())
> - return _symbols[index].symbol;
> - return nullptr;
> - }
> -
> - const char *getLinkerOpts() {
> - return LinkerOpts.c_str();
> - }
> -
> - const std::vector<const char*> &getAsmUndefinedRefs() {
> - return _asm_undefines;
> - }
> -
> -private:
> - /// Parse metadata from the module
> - // FIXME: it only parses "Linker Options" metadata at the moment
> - void parseMetadata();
> -
> - /// Parse the symbols from the module and model-level ASM and add them
> to
> - /// either the defined or undefined lists.
> - void parseSymbols();
> -
> - /// Add a symbol which isn't defined just yet to a list to be resolved
> later.
> - void addPotentialUndefinedSymbol(const object::BasicSymbolRef &Sym,
> - bool isFunc);
> -
> - /// Add a defined symbol to the list.
> - void addDefinedSymbol(const char *Name, const GlobalValue *def,
> - bool isFunction);
> -
> - /// Add a data symbol as defined to the list.
> - void addDefinedDataSymbol(const object::BasicSymbolRef &Sym);
> - void addDefinedDataSymbol(const char*Name, const GlobalValue *v);
> -
> - /// Add a function symbol as defined to the list.
> - void addDefinedFunctionSymbol(const object::BasicSymbolRef &Sym);
> - void addDefinedFunctionSymbol(const char *Name, const Function *F);
> -
> - /// Add a global symbol from module-level ASM to the defined list.
> - void addAsmGlobalSymbol(const char *, lto_symbol_attributes scope);
> -
> - /// Add a global symbol from module-level ASM to the undefined list.
> - void addAsmGlobalSymbolUndef(const char *);
> -
> - /// Parse i386/ppc ObjC class data structure.
> - void addObjCClass(const GlobalVariable *clgv);
> -
> - /// Parse i386/ppc ObjC category data structure.
> - void addObjCCategory(const GlobalVariable *clgv);
> -
> - /// Parse i386/ppc ObjC class list data structure.
> - void addObjCClassRef(const GlobalVariable *clgv);
> -
> - /// Get string that the data pointer points to.
> - bool objcClassNameFromExpression(const Constant *c, std::string &name);
> -
> - /// Create an LTOModule (private version).
> - static ErrorOr<std::unique_ptr<LTOModule>>
> - makeLTOModule(MemoryBufferRef Buffer, const TargetOptions &options,
> - LLVMContext &Context, bool ShouldBeLazy);
> -};
> -}
> -#endif
>
> Removed: llvm/trunk/include/llvm/LTO/ThinLTOCodeGenerator.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LTO/ThinLTOCodeGenerator.h?rev=275475&view=auto
>
> ==============================================================================
> --- llvm/trunk/include/llvm/LTO/ThinLTOCodeGenerator.h (original)
> +++ llvm/trunk/include/llvm/LTO/ThinLTOCodeGenerator.h (removed)
> @@ -1,276 +0,0 @@
> -//===-ThinLTOCodeGenerator.h - LLVM Link Time Optimizer
> -------------------===//
> -//
> -// The LLVM Compiler Infrastructure
> -//
> -// This file is distributed under the University of Illinois Open Source
> -// License. See LICENSE.TXT for details.
> -//
>
> -//===----------------------------------------------------------------------===//
> -//
> -// This file declares the ThinLTOCodeGenerator class, similar to the
> -// LTOCodeGenerator but for the ThinLTO scheme. It provides an interface
> for
> -// linker plugin.
> -//
>
> -//===----------------------------------------------------------------------===//
> -
> -#ifndef LLVM_LTO_THINLTOCODEGENERATOR_H
> -#define LLVM_LTO_THINLTOCODEGENERATOR_H
> -
> -#include "llvm-c/lto.h"
> -#include "llvm/ADT/StringSet.h"
> -#include "llvm/ADT/Triple.h"
> -#include "llvm/IR/ModuleSummaryIndex.h"
> -#include "llvm/Support/CodeGen.h"
> -#include "llvm/Support/MemoryBuffer.h"
> -#include "llvm/Target/TargetOptions.h"
> -
> -#include <string>
> -
> -namespace llvm {
> -class StringRef;
> -class LLVMContext;
> -class TargetMachine;
> -
> -/// Helper to gather options relevant to the target machine creation
> -struct TargetMachineBuilder {
> - Triple TheTriple;
> - std::string MCpu;
> - std::string MAttr;
> - TargetOptions Options;
> - Optional<Reloc::Model> RelocModel;
> - CodeGenOpt::Level CGOptLevel = CodeGenOpt::Default;
> -
> - std::unique_ptr<TargetMachine> create() const;
> -};
> -
> -/// This class define an interface similar to the LTOCodeGenerator, but
> adapted
> -/// for ThinLTO processing.
> -/// The ThinLTOCodeGenerator is not intended to be reuse for multiple
> -/// compilation: the model is that the client adds modules to the
> generator and
> -/// ask to perform the ThinLTO optimizations / codegen, and finally
> destroys the
> -/// codegenerator.
> -class ThinLTOCodeGenerator {
> -public:
> - /// Add given module to the code generator.
> - void addModule(StringRef Identifier, StringRef Data);
> -
> - /**
> - * Adds to a list of all global symbols that must exist in the final
> generated
> - * code. If a symbol is not listed there, it will be optimized away if
> it is
> - * inlined into every usage.
> - */
> - void preserveSymbol(StringRef Name);
> -
> - /**
> - * Adds to a list of all global symbols that are cross-referenced
> between
> - * ThinLTO files. If the ThinLTO CodeGenerator can ensure that every
> - * references from a ThinLTO module to this symbol is optimized away,
> then
> - * the symbol can be discarded.
> - */
> - void crossReferenceSymbol(StringRef Name);
> -
> - /**
> - * Process all the modules that were added to the code generator in
> parallel.
> - *
> - * Client can access the resulting object files using
> getProducedBinaries()
> - */
> - void run();
> -
> - /**
> - * Return the "in memory" binaries produced by the code generator.
> - */
> - std::vector<std::unique_ptr<MemoryBuffer>> &getProducedBinaries() {
> - return ProducedBinaries;
> - }
> -
> - /**
> - * \defgroup Options setters
> - * @{
> - */
> -
> - /**
> - * \defgroup Cache controlling options
> - *
> - * These entry points control the ThinLTO cache. The cache is intended
> to
> - * support incremental build, and thus needs to be persistent accross
> build.
> - * The client enabled the cache by supplying a path to an existing
> directory.
> - * The code generator will use this to store objects files that may be
> reused
> - * during a subsequent build.
> - * To avoid filling the disk space, a few knobs are provided:
> - * - The pruning interval limit the frequency at which the garbage
> collector
> - * will try to scan the cache directory to prune it from expired
> entries.
> - * Setting to -1 disable the pruning (default).
> - * - The pruning expiration time indicates to the garbage collector
> how old
> - * an entry needs to be to be removed.
> - * - Finally, the garbage collector can be instructed to prune the
> cache till
> - * the occupied space goes below a threshold.
> - * @{
> - */
> -
> - struct CachingOptions {
> - std::string Path; // Path to the cache, empty to
> disable.
> - int PruningInterval = 1200; // seconds, -1 to disable
> pruning.
> - unsigned int Expiration = 7 * 24 * 3600; // seconds (1w default).
> - unsigned MaxPercentageOfAvailableSpace = 75; // percentage.
> - };
> -
> - /// Provide a path to a directory where to store the cached files for
> - /// incremental build.
> - void setCacheDir(std::string Path) { CacheOptions.Path =
> std::move(Path); }
> -
> - /// Cache policy: interval (seconds) between two prune of the cache.
> Set to a
> - /// negative value (default) to disable pruning. A value of 0 will be
> ignored.
> - void setCachePruningInterval(int Interval) {
> - if (Interval)
> - CacheOptions.PruningInterval = Interval;
> - }
> -
> - /// Cache policy: expiration (in seconds) for an entry.
> - /// A value of 0 will be ignored.
> - void setCacheEntryExpiration(unsigned Expiration) {
> - if (Expiration)
> - CacheOptions.Expiration = Expiration;
> - }
> -
> - /**
> - * Sets the maximum cache size that can be persistent across build, in
> terms
> - * of percentage of the available space on the the disk. Set to 100 to
> - * indicate no limit, 50 to indicate that the cache size will not be
> left over
> - * half the available space. A value over 100 will be reduced to 100,
> and a
> - * value of 0 will be ignored.
> - *
> - *
> - * The formula looks like:
> - * AvailableSpace = FreeSpace + ExistingCacheSize
> - * NewCacheSize = AvailableSpace * P/100
> - *
> - */
> - void setMaxCacheSizeRelativeToAvailableSpace(unsigned Percentage) {
> - if (Percentage)
> - CacheOptions.MaxPercentageOfAvailableSpace = Percentage;
> - }
> -
> - /**@}*/
> -
> - /// Set the path to a directory where to save temporaries at various
> stages of
> - /// the processing.
> - void setSaveTempsDir(std::string Path) { SaveTempsDir =
> std::move(Path); }
> -
> - /// CPU to use to initialize the TargetMachine
> - void setCpu(std::string Cpu) { TMBuilder.MCpu = std::move(Cpu); }
> -
> - /// Subtarget attributes
> - void setAttr(std::string MAttr) { TMBuilder.MAttr = std::move(MAttr); }
> -
> - /// TargetMachine options
> - void setTargetOptions(TargetOptions Options) {
> - TMBuilder.Options = std::move(Options);
> - }
> -
> - /// CodeModel
> - void setCodePICModel(Optional<Reloc::Model> Model) {
> - TMBuilder.RelocModel = Model;
> - }
> -
> - /// CodeGen optimization level
> - void setCodeGenOptLevel(CodeGenOpt::Level CGOptLevel) {
> - TMBuilder.CGOptLevel = CGOptLevel;
> - }
> -
> - /// Disable CodeGen, only run the stages till codegen and stop. The
> output
> - /// will be bitcode.
> - void disableCodeGen(bool Disable) { DisableCodeGen = Disable; }
> -
> - /// Perform CodeGen only: disable all other stages.
> - void setCodeGenOnly(bool CGOnly) { CodeGenOnly = CGOnly; }
> -
> - /**@}*/
> -
> - /**
> - * \defgroup Set of APIs to run individual stages in isolation.
> - * @{
> - */
> -
> - /**
> - * Produce the combined summary index from all the bitcode files:
> - * "thin-link".
> - */
> - std::unique_ptr<ModuleSummaryIndex> linkCombinedIndex();
> -
> - /**
> - * Perform promotion and renaming of exported internal functions,
> - * and additionally resolve weak and linkonce symbols.
> - * Index is updated to reflect linkage changes from weak resolution.
> - */
> - void promote(Module &Module, ModuleSummaryIndex &Index);
> -
> - /**
> - * Compute and emit the imported files for module at \p ModulePath.
> - */
> - static void emitImports(StringRef ModulePath, StringRef OutputName,
> - ModuleSummaryIndex &Index);
> -
> - /**
> - * Perform cross-module importing for the module identified by
> - * ModuleIdentifier.
> - */
> - void crossModuleImport(Module &Module, ModuleSummaryIndex &Index);
> -
> - /**
> - * Compute the list of summaries needed for importing into module.
> - */
> - static void gatherImportedSummariesForModule(
> - StringRef ModulePath, ModuleSummaryIndex &Index,
> - std::map<std::string, GVSummaryMapTy> &ModuleToSummariesForIndex);
> -
> - /**
> - * Perform internalization. Index is updated to reflect linkage changes.
> - */
> - void internalize(Module &Module, ModuleSummaryIndex &Index);
> -
> - /**
> - * Perform post-importing ThinLTO optimizations.
> - */
> - void optimize(Module &Module);
> -
> - /**
> - * Perform ThinLTO CodeGen.
> - */
> - std::unique_ptr<MemoryBuffer> codegen(Module &Module);
> -
> - /**@}*/
> -
> -private:
> - /// Helper factory to build a TargetMachine
> - TargetMachineBuilder TMBuilder;
> -
> - /// Vector holding the in-memory buffer containing the produced
> binaries.
> - std::vector<std::unique_ptr<MemoryBuffer>> ProducedBinaries;
> -
> - /// Vector holding the input buffers containing the bitcode modules to
> - /// process.
> - std::vector<MemoryBufferRef> Modules;
> -
> - /// Set of symbols that need to be preserved outside of the set of
> bitcode
> - /// files.
> - StringSet<> PreservedSymbols;
> -
> - /// Set of symbols that are cross-referenced between bitcode files.
> - StringSet<> CrossReferencedSymbols;
> -
> - /// Control the caching behavior.
> - CachingOptions CacheOptions;
> -
> - /// Path to a directory to save the temporary bitcode files.
> - std::string SaveTempsDir;
> -
> - /// Flag to enable/disable CodeGen. When set to true, the process stops
> after
> - /// optimizations and a bitcode is produced.
> - bool DisableCodeGen = false;
> -
> - /// Flag to indicate that only the CodeGen will be performed, no
> cross-module
> - /// importing or optimization.
> - bool CodeGenOnly = false;
> -};
> -}
> -#endif
>
> Removed: llvm/trunk/include/llvm/LTO/UpdateCompilerUsed.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LTO/UpdateCompilerUsed.h?rev=275475&view=auto
>
> ==============================================================================
> --- llvm/trunk/include/llvm/LTO/UpdateCompilerUsed.h (original)
> +++ llvm/trunk/include/llvm/LTO/UpdateCompilerUsed.h (removed)
> @@ -1,32 +0,0 @@
> -//==------ UpdateCompilerUsed.h - LLVM Link Time Optimizer Utility
> --------===//
> -//
> -// The LLVM Compiler Infrastructure
> -//
> -// This file is distributed under the University of Illinois Open Source
> -// License. See LICENSE.TXT for details.
> -//
>
> -//===----------------------------------------------------------------------===//
> -//
> -// This file declares a helper class to update llvm.compiler_used
> metadata.
> -//
>
> -//===----------------------------------------------------------------------===//
> -
> -#ifndef LLVM_LTO_UPDATE_COMPILER_USED_H
> -#define LLVM_LTO_UPDATE_COMPILER_USED_H
> -
> -#include "llvm/ADT/StringSet.h"
> -#include "llvm/IR/GlobalValue.h"
> -
> -namespace llvm {
> -class Module;
> -class TargetMachine;
> -
> -/// Find all globals in \p TheModule that are referenced in
> -/// \p AsmUndefinedRefs, as well as the user-supplied functions
> definitions that
> -/// are also libcalls, and create or update the magic "llvm.compiler_used"
> -/// global in \p TheModule.
> -void updateCompilerUsed(Module &TheModule, const TargetMachine &TM,
> - const StringSet<> &AsmUndefinedRefs);
> -}
> -
> -#endif // LLVM_LTO_UPDATE_COMPILER_USED_H
>
> Copied: llvm/trunk/include/llvm/LTO/legacy/LTOCodeGenerator.h (from
> r275474, llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h)
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LTO/legacy/LTOCodeGenerator.h?p2=llvm/trunk/include/llvm/LTO/legacy/LTOCodeGenerator.h&p1=llvm/trunk/include/llvm/LTO/LTOCodeGenerator.h&r1=275474&r2=275476&rev=275476&view=diff
>
> ==============================================================================
> (empty)
>
> Copied: llvm/trunk/include/llvm/LTO/legacy/LTOModule.h (from r275474,
> llvm/trunk/include/llvm/LTO/LTOModule.h)
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LTO/legacy/LTOModule.h?p2=llvm/trunk/include/llvm/LTO/legacy/LTOModule.h&p1=llvm/trunk/include/llvm/LTO/LTOModule.h&r1=275474&r2=275476&rev=275476&view=diff
>
> ==============================================================================
> (empty)
>
> Copied: llvm/trunk/include/llvm/LTO/legacy/ThinLTOCodeGenerator.h (from
> r275474, llvm/trunk/include/llvm/LTO/ThinLTOCodeGenerator.h)
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LTO/legacy/ThinLTOCodeGenerator.h?p2=llvm/trunk/include/llvm/LTO/legacy/ThinLTOCodeGenerator.h&p1=llvm/trunk/include/llvm/LTO/ThinLTOCodeGenerator.h&r1=275474&r2=275476&rev=275476&view=diff
>
> ==============================================================================
> (empty)
>
> Copied: llvm/trunk/include/llvm/LTO/legacy/UpdateCompilerUsed.h (from
> r275474, llvm/trunk/include/llvm/LTO/UpdateCompilerUsed.h)
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LTO/legacy/UpdateCompilerUsed.h?p2=llvm/trunk/include/llvm/LTO/legacy/UpdateCompilerUsed.h&p1=llvm/trunk/include/llvm/LTO/UpdateCompilerUsed.h&r1=275474&r2=275476&rev=275476&view=diff
>
> ==============================================================================
> (empty)
>
> Modified: llvm/trunk/lib/LTO/LTOCodeGenerator.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOCodeGenerator.cpp?rev=275476&r1=275475&r2=275476&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/LTO/LTOCodeGenerator.cpp (original)
> +++ llvm/trunk/lib/LTO/LTOCodeGenerator.cpp Thu Jul 14 16:21:16 2016
> @@ -12,8 +12,7 @@
> //
>
> //===----------------------------------------------------------------------===//
>
> -#include "llvm/LTO/LTOCodeGenerator.h"
> -#include "llvm/LTO/UpdateCompilerUsed.h"
> +#include "llvm/LTO/legacy/LTOCodeGenerator.h"
>
> #include "llvm/ADT/Statistic.h"
> #include "llvm/ADT/StringExtras.h"
> @@ -36,7 +35,8 @@
> #include "llvm/IR/Module.h"
> #include "llvm/IR/Verifier.h"
> #include "llvm/InitializePasses.h"
> -#include "llvm/LTO/LTOModule.h"
> +#include "llvm/LTO/legacy/LTOModule.h"
> +#include "llvm/LTO/legacy/UpdateCompilerUsed.h"
> #include "llvm/Linker/Linker.h"
> #include "llvm/MC/MCAsmInfo.h"
> #include "llvm/MC/MCContext.h"
>
> Modified: llvm/trunk/lib/LTO/LTOModule.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOModule.cpp?rev=275476&r1=275475&r2=275476&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/LTO/LTOModule.cpp (original)
> +++ llvm/trunk/lib/LTO/LTOModule.cpp Thu Jul 14 16:21:16 2016
> @@ -12,7 +12,7 @@
> //
>
> //===----------------------------------------------------------------------===//
>
> -#include "llvm/LTO/LTOModule.h"
> +#include "llvm/LTO/legacy/LTOModule.h"
> #include "llvm/ADT/Triple.h"
> #include "llvm/Bitcode/ReaderWriter.h"
> #include "llvm/CodeGen/Analysis.h"
>
> Modified: llvm/trunk/lib/LTO/ThinLTOCodeGenerator.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/ThinLTOCodeGenerator.cpp?rev=275476&r1=275475&r2=275476&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/LTO/ThinLTOCodeGenerator.cpp (original)
> +++ llvm/trunk/lib/LTO/ThinLTOCodeGenerator.cpp Thu Jul 14 16:21:16 2016
> @@ -12,7 +12,7 @@
> //
>
> //===----------------------------------------------------------------------===//
>
> -#include "llvm/LTO/ThinLTOCodeGenerator.h"
> +#include "llvm/LTO/legacy/ThinLTOCodeGenerator.h"
>
> #ifdef HAVE_LLVM_REVISION
> #include "LLVMLTORevision.h"
>
> Modified: llvm/trunk/lib/LTO/UpdateCompilerUsed.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/UpdateCompilerUsed.cpp?rev=275476&r1=275475&r2=275476&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/LTO/UpdateCompilerUsed.cpp (original)
> +++ llvm/trunk/lib/LTO/UpdateCompilerUsed.cpp Thu Jul 14 16:21:16 2016
> @@ -11,10 +11,10 @@
> //
>
> //===----------------------------------------------------------------------===//
>
> +#include "llvm/LTO/legacy/UpdateCompilerUsed.h"
> #include "llvm/Analysis/TargetLibraryInfo.h"
> #include "llvm/IR/LegacyPassManager.h"
> #include "llvm/IR/Mangler.h"
> -#include "llvm/LTO/UpdateCompilerUsed.h"
> #include "llvm/Target/TargetLowering.h"
> #include "llvm/Target/TargetSubtargetInfo.h"
> #include "llvm/Transforms/IPO/Internalize.h"
>
> Modified: llvm/trunk/tools/llvm-lto/llvm-lto.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-lto/llvm-lto.cpp?rev=275476&r1=275475&r2=275476&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-lto/llvm-lto.cpp (original)
> +++ llvm/trunk/tools/llvm-lto/llvm-lto.cpp Thu Jul 14 16:21:16 2016
> @@ -19,9 +19,9 @@
> #include "llvm/IR/LLVMContext.h"
> #include "llvm/IR/Verifier.h"
> #include "llvm/IRReader/IRReader.h"
> -#include "llvm/LTO/LTOCodeGenerator.h"
> -#include "llvm/LTO/LTOModule.h"
> -#include "llvm/LTO/ThinLTOCodeGenerator.h"
> +#include "llvm/LTO/legacy/LTOCodeGenerator.h"
> +#include "llvm/LTO/legacy/LTOModule.h"
> +#include "llvm/LTO/legacy/ThinLTOCodeGenerator.h"
> #include "llvm/Object/ModuleSummaryIndexObjectFile.h"
> #include "llvm/Support/CommandLine.h"
> #include "llvm/Support/FileSystem.h"
>
> Modified: llvm/trunk/tools/lto/lto.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/lto.cpp?rev=275476&r1=275475&r2=275476&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/lto/lto.cpp (original)
> +++ llvm/trunk/tools/lto/lto.cpp Thu Jul 14 16:21:16 2016
> @@ -19,9 +19,9 @@
> #include "llvm/IR/DiagnosticInfo.h"
> #include "llvm/IR/DiagnosticPrinter.h"
> #include "llvm/IR/LLVMContext.h"
> -#include "llvm/LTO/LTOCodeGenerator.h"
> -#include "llvm/LTO/LTOModule.h"
> -#include "llvm/LTO/ThinLTOCodeGenerator.h"
> +#include "llvm/LTO/legacy/LTOCodeGenerator.h"
> +#include "llvm/LTO/legacy/LTOModule.h"
> +#include "llvm/LTO/legacy/ThinLTOCodeGenerator.h"
> #include "llvm/Support/MemoryBuffer.h"
> #include "llvm/Support/Signals.h"
> #include "llvm/Support/TargetSelect.h"
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
--
--
Peter
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160714/e4aac0c2/attachment-0001.html>
More information about the llvm-commits
mailing list