mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 04:30:12 +00:00
8945f753ed
There already have two "dead" functions, initialize{IPO|IPA}, defined for similar purpose. I decide not to call these two functions for two reasons: o. they don't cover all LTO passes (which will soon be separated into IPO and post-IPO passes) o. We have not yet figured out the right passes and the ordering for IPO and post-IPO stages, meaning this change is only for the time being. Since LTO passes are registered, we are now able to print IR before and after particular point. For OSX users: -------------- "...-Wl,-mllvm -Wl,-print-after=<pass-name>" will print IR after the specified pass. For Other UNIX with GNU gold linker: ------------------------------------ "-Wl,-plugin-opt=-print-after=<pass-name>" should work. (NOTE: no need for "-Wl,-mllvm") Strip "-Wl," if flags are fed directly to linker instead of clang/clang++. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186853 91177308-0d34-0410-b5e6-96231b3b80d8
86 lines
2.7 KiB
C++
86 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-c/lto.h"
|
|
#include "llvm/ADT/SmallPtrSet.h"
|
|
#include "llvm/ADT/StringMap.h"
|
|
#include "llvm/Linker.h"
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
namespace llvm {
|
|
class LLVMContext;
|
|
class GlobalValue;
|
|
class Mangler;
|
|
class MemoryBuffer;
|
|
class TargetMachine;
|
|
class raw_ostream;
|
|
}
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
/// LTOCodeGenerator - C++ class which implements the opaque lto_code_gen_t
|
|
/// type.
|
|
///
|
|
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* mCpu) { _mCpu = mCpu; }
|
|
|
|
void addMustPreserveSymbol(const char* sym) {
|
|
_mustPreserveSymbols[sym] = 1;
|
|
}
|
|
|
|
bool writeMergedModules(const char *path, std::string &errMsg);
|
|
bool compile_to_file(const char **name, std::string &errMsg);
|
|
const void *compile(size_t *length, std::string &errMsg);
|
|
void setCodeGenDebugOptions(const char *opts);
|
|
|
|
private:
|
|
void initializeLTOPasses();
|
|
|
|
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<char*> _codegenOptions;
|
|
std::string _mCpu;
|
|
std::string _nativeObjectPath;
|
|
};
|
|
|
|
#endif // LTO_CODE_GENERATOR_H
|