mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-12 14:06:36 +00:00
7f301833ee
uses. The result produced by the streamer is used to give the linker more accurate information and to add to llvm.compiler.used. The second improvement removes the need for the user to add __attribute__((used)) to functions only used in inline asm. The first one lets us build firefox with LTO on Darwin :-) llvm-svn: 126830
73 lines
2.7 KiB
C++
73 lines
2.7 KiB
C++
//===-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.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
#ifndef LTO_CODE_GENERATOR_H
|
|
#define LTO_CODE_GENERATOR_H
|
|
|
|
#include "llvm/Linker.h"
|
|
#include "llvm/LLVMContext.h"
|
|
#include "llvm/ADT/StringMap.h"
|
|
#include "llvm/ADT/SmallVector.h"
|
|
#include "llvm/ADT/SmallPtrSet.h"
|
|
|
|
#include <string>
|
|
|
|
|
|
//
|
|
// C++ class which implements the opaque lto_code_gen_t
|
|
//
|
|
|
|
struct LTOCodeGenerator {
|
|
static const char* getVersionString();
|
|
|
|
LTOCodeGenerator();
|
|
~LTOCodeGenerator();
|
|
|
|
bool addModule(struct LTOModule*, std::string& errMsg);
|
|
bool setDebugInfo(lto_debug_model, std::string& errMsg);
|
|
bool setCodePICModel(lto_codegen_model, std::string& errMsg);
|
|
void setCpu(const char *cpu);
|
|
void addMustPreserveSymbol(const char* sym);
|
|
bool writeMergedModules(const char* path,
|
|
std::string& errMsg);
|
|
const void* compile(size_t* length, std::string& errMsg);
|
|
void setCodeGenDebugOptions(const char *opts);
|
|
private:
|
|
bool generateObjectFile(llvm::raw_ostream& out,
|
|
std::string& errMsg);
|
|
void applyScopeRestrictions();
|
|
void applyRestriction(llvm::GlobalValue &GV,
|
|
std::vector<const char*> &mustPreserveList,
|
|
llvm::SmallPtrSet<llvm::GlobalValue*, 8> &asmUsed,
|
|
llvm::Mangler &mangler);
|
|
bool determineTarget(std::string& errMsg);
|
|
|
|
typedef llvm::StringMap<uint8_t> StringSet;
|
|
|
|
llvm::LLVMContext& _context;
|
|
llvm::Linker _linker;
|
|
llvm::TargetMachine* _target;
|
|
bool _emitDwarfDebugInfo;
|
|
bool _scopeRestrictionsDone;
|
|
lto_codegen_model _codeModel;
|
|
StringSet _mustPreserveSymbols;
|
|
StringSet _asmUndefinedRefs;
|
|
llvm::MemoryBuffer* _nativeObjectFile;
|
|
std::vector<const char*> _codegenOptions;
|
|
std::string _mCpu;
|
|
};
|
|
|
|
#endif // LTO_CODE_GENERATOR_H
|
|
|