mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
LTO: Cleanup parameter names and header docs, NFC
Follow LLVM style for the parameter names (`CamelCase` not `camelCase`), and surface the header docs in doxygen. No functionality change intended. llvm-svn: 246509
This commit is contained in:
parent
2e700a48c1
commit
54c273cc35
@ -65,79 +65,81 @@ struct LTOCodeGenerator {
|
||||
LTOCodeGenerator(std::unique_ptr<LLVMContext> Context);
|
||||
~LTOCodeGenerator();
|
||||
|
||||
// Merge given module, return true on success.
|
||||
/// Merge given module. Return true on success.
|
||||
bool addModule(struct LTOModule *);
|
||||
|
||||
// Set the destination module.
|
||||
/// Set the destination module.
|
||||
void setModule(std::unique_ptr<LTOModule> M);
|
||||
|
||||
void setTargetOptions(TargetOptions options);
|
||||
void setTargetOptions(TargetOptions Options);
|
||||
void setDebugInfo(lto_debug_model);
|
||||
void setCodePICModel(Reloc::Model model) { RelocModel = model; }
|
||||
void setCodePICModel(Reloc::Model Model) { RelocModel = Model; }
|
||||
|
||||
void setCpu(const char *mCpu) { MCpu = mCpu; }
|
||||
void setAttr(const char *mAttr) { MAttr = mAttr; }
|
||||
void setOptLevel(unsigned optLevel);
|
||||
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; }
|
||||
|
||||
void addMustPreserveSymbol(StringRef sym) { MustPreserveSymbols[sym] = 1; }
|
||||
void addMustPreserveSymbol(StringRef Sym) { MustPreserveSymbols[Sym] = 1; }
|
||||
|
||||
// To 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);
|
||||
/// 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
|
||||
// setCodeGenDebugOptions, this must be called before
|
||||
// LTOCodeGenerator::compilexxx() and LTOCodeGenerator::writeMergedModules()
|
||||
/// 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.
|
||||
bool writeMergedModules(const char *path, std::string &errMsg);
|
||||
/// Write the merged module to the file specified by the given path. Return
|
||||
/// true on success.
|
||||
bool writeMergedModules(const char *Path, std::string &ErrMsg);
|
||||
|
||||
// Compile the merged module into a *single* object file; the path to object
|
||||
// file is returned to the caller via argument "name". Return true on
|
||||
// success.
|
||||
//
|
||||
// NOTE that it is up to the linker to remove the intermediate object file.
|
||||
// Do not try to remove the object file in LTOCodeGenerator's destructor
|
||||
// as we don't who (LTOCodeGenerator or the obj file) will last longer.
|
||||
bool compile_to_file(const char **name,
|
||||
bool disableInline,
|
||||
bool disableGVNLoadPRE,
|
||||
bool disableVectorization,
|
||||
std::string &errMsg);
|
||||
/// Compile the merged module into a *single* object file; the path to object
|
||||
/// file is returned to the caller via argument "name". Return true on
|
||||
/// success.
|
||||
///
|
||||
/// \note It is up to the linker to remove the intermediate object file. Do
|
||||
/// not try to remove the object file in LTOCodeGenerator's destructor as we
|
||||
/// don't who (LTOCodeGenerator or the obj file) will last longer.
|
||||
bool compile_to_file(const char **Name, bool DisableInline,
|
||||
bool DisableGVNLoadPRE, bool DisableVectorization,
|
||||
std::string &ErrMsg);
|
||||
|
||||
// As with compile_to_file(), this function compiles the merged module into
|
||||
// single object file. Instead of returning the object-file-path to the caller
|
||||
// (linker), it brings the object to a buffer, and return the buffer to the
|
||||
// caller. This function should delete intermediate object file once its content
|
||||
// is brought to memory. Return NULL if the compilation was not successful.
|
||||
std::unique_ptr<MemoryBuffer> compile(bool disableInline,
|
||||
bool disableGVNLoadPRE,
|
||||
bool disableVectorization,
|
||||
/// As with compile_to_file(), this function compiles the merged module into
|
||||
/// single object file. Instead of returning the object-file-path to the
|
||||
/// caller (linker), it brings the object to a buffer, and return the buffer
|
||||
/// to the caller. This function should delete intermediate object file once
|
||||
/// its content is brought to memory. Return NULL if the compilation was not
|
||||
/// successful.
|
||||
std::unique_ptr<MemoryBuffer> compile(bool DisableInline,
|
||||
bool DisableGVNLoadPRE,
|
||||
bool DisableVectorization,
|
||||
std::string &errMsg);
|
||||
|
||||
// Optimizes the merged module. Returns true on success.
|
||||
bool optimize(bool disableInline,
|
||||
bool disableGVNLoadPRE,
|
||||
bool disableVectorization,
|
||||
std::string &errMsg);
|
||||
/// Optimizes the merged module. Returns true on success.
|
||||
bool optimize(bool DisableInline, bool DisableGVNLoadPRE,
|
||||
bool DisableVectorization, std::string &ErrMsg);
|
||||
|
||||
// Compiles the merged optimized module into a single object file. It brings
|
||||
// the object to a buffer, and returns the buffer to the caller. Return NULL
|
||||
// if the compilation was not successful.
|
||||
std::unique_ptr<MemoryBuffer> compileOptimized(std::string &errMsg);
|
||||
/// Compiles the merged optimized module into a single object file. It brings
|
||||
/// the object to a buffer, and returns the buffer to the caller. Return NULL
|
||||
/// if the compilation was not successful.
|
||||
std::unique_ptr<MemoryBuffer> compileOptimized(std::string &ErrMsg);
|
||||
|
||||
// Compile the merged optimized module into out.size() object 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.
|
||||
// Object files will be written to members of out. Returns true on success.
|
||||
bool compileOptimized(ArrayRef<raw_pwrite_stream *> out, std::string &errMsg);
|
||||
/// Compile the merged optimized module into out.size() object 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. Object files will be written to members of out. Returns true on
|
||||
/// success.
|
||||
bool compileOptimized(ArrayRef<raw_pwrite_stream *> Out, std::string &ErrMsg);
|
||||
|
||||
void setDiagnosticHandler(lto_diagnostic_handler_t, void *);
|
||||
|
||||
@ -146,13 +148,13 @@ struct LTOCodeGenerator {
|
||||
private:
|
||||
void initializeLTOPasses();
|
||||
|
||||
bool compileOptimizedToFile(const char **name, std::string &errMsg);
|
||||
bool compileOptimizedToFile(const char **Name, std::string &ErrMsg);
|
||||
void applyScopeRestrictions();
|
||||
void applyRestriction(GlobalValue &GV, ArrayRef<StringRef> Libcalls,
|
||||
std::vector<const char *> &MustPreserveList,
|
||||
SmallPtrSetImpl<GlobalValue *> &AsmUsed,
|
||||
Mangler &Mangler);
|
||||
bool determineTarget(std::string &errMsg);
|
||||
bool determineTarget(std::string &ErrMsg);
|
||||
|
||||
static void DiagnosticHandler(const DiagnosticInfo &DI, void *Context);
|
||||
|
||||
|
@ -110,13 +110,13 @@ void LTOCodeGenerator::initializeLTOPasses() {
|
||||
initializeCFGSimplifyPassPass(R);
|
||||
}
|
||||
|
||||
bool LTOCodeGenerator::addModule(LTOModule *mod) {
|
||||
assert(&mod->getModule().getContext() == &Context &&
|
||||
bool LTOCodeGenerator::addModule(LTOModule *Mod) {
|
||||
assert(&Mod->getModule().getContext() == &Context &&
|
||||
"Expected module in same context");
|
||||
|
||||
bool ret = IRLinker.linkInModule(&mod->getModule());
|
||||
bool ret = IRLinker.linkInModule(&Mod->getModule());
|
||||
|
||||
const std::vector<const char*> &undefs = mod->getAsmUndefinedRefs();
|
||||
const std::vector<const char *> &undefs = Mod->getAsmUndefinedRefs();
|
||||
for (int i = 0, e = undefs.size(); i != e; ++i)
|
||||
AsmUndefinedRefs[undefs[i]] = 1;
|
||||
|
||||
@ -137,12 +137,12 @@ void LTOCodeGenerator::setModule(std::unique_ptr<LTOModule> Mod) {
|
||||
AsmUndefinedRefs[Undefs[I]] = 1;
|
||||
}
|
||||
|
||||
void LTOCodeGenerator::setTargetOptions(TargetOptions options) {
|
||||
Options = options;
|
||||
void LTOCodeGenerator::setTargetOptions(TargetOptions Options) {
|
||||
this->Options = Options;
|
||||
}
|
||||
|
||||
void LTOCodeGenerator::setDebugInfo(lto_debug_model debug) {
|
||||
switch (debug) {
|
||||
void LTOCodeGenerator::setDebugInfo(lto_debug_model Debug) {
|
||||
switch (Debug) {
|
||||
case LTO_DEBUG_MODEL_NONE:
|
||||
EmitDwarfDebugInfo = false;
|
||||
return;
|
||||
@ -154,8 +154,8 @@ void LTOCodeGenerator::setDebugInfo(lto_debug_model debug) {
|
||||
llvm_unreachable("Unknown debug format!");
|
||||
}
|
||||
|
||||
void LTOCodeGenerator::setOptLevel(unsigned level) {
|
||||
OptLevel = level;
|
||||
void LTOCodeGenerator::setOptLevel(unsigned Level) {
|
||||
OptLevel = Level;
|
||||
switch (OptLevel) {
|
||||
case 0:
|
||||
CGOptLevel = CodeGenOpt::None;
|
||||
@ -172,9 +172,9 @@ void LTOCodeGenerator::setOptLevel(unsigned level) {
|
||||
}
|
||||
}
|
||||
|
||||
bool LTOCodeGenerator::writeMergedModules(const char *path,
|
||||
std::string &errMsg) {
|
||||
if (!determineTarget(errMsg))
|
||||
bool LTOCodeGenerator::writeMergedModules(const char *Path,
|
||||
std::string &ErrMsg) {
|
||||
if (!determineTarget(ErrMsg))
|
||||
return false;
|
||||
|
||||
// mark which symbols can not be internalized
|
||||
@ -182,10 +182,10 @@ bool LTOCodeGenerator::writeMergedModules(const char *path,
|
||||
|
||||
// create output file
|
||||
std::error_code EC;
|
||||
tool_output_file Out(path, EC, sys::fs::F_None);
|
||||
tool_output_file Out(Path, EC, sys::fs::F_None);
|
||||
if (EC) {
|
||||
errMsg = "could not open bitcode file for writing: ";
|
||||
errMsg += path;
|
||||
ErrMsg = "could not open bitcode file for writing: ";
|
||||
ErrMsg += Path;
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -194,8 +194,8 @@ bool LTOCodeGenerator::writeMergedModules(const char *path,
|
||||
Out.os().close();
|
||||
|
||||
if (Out.os().has_error()) {
|
||||
errMsg = "could not write bitcode file: ";
|
||||
errMsg += path;
|
||||
ErrMsg = "could not write bitcode file: ";
|
||||
ErrMsg += Path;
|
||||
Out.os().clear_error();
|
||||
return false;
|
||||
}
|
||||
@ -204,22 +204,22 @@ bool LTOCodeGenerator::writeMergedModules(const char *path,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool LTOCodeGenerator::compileOptimizedToFile(const char **name,
|
||||
std::string &errMsg) {
|
||||
bool LTOCodeGenerator::compileOptimizedToFile(const char **Name,
|
||||
std::string &ErrMsg) {
|
||||
// make unique temp .o file to put generated object file
|
||||
SmallString<128> Filename;
|
||||
int FD;
|
||||
std::error_code EC =
|
||||
sys::fs::createTemporaryFile("lto-llvm", "o", FD, Filename);
|
||||
if (EC) {
|
||||
errMsg = EC.message();
|
||||
ErrMsg = EC.message();
|
||||
return false;
|
||||
}
|
||||
|
||||
// generate object file
|
||||
tool_output_file objFile(Filename.c_str(), FD);
|
||||
|
||||
bool genResult = compileOptimized(&objFile.os(), errMsg);
|
||||
bool genResult = compileOptimized(&objFile.os(), ErrMsg);
|
||||
objFile.os().close();
|
||||
if (objFile.os().has_error()) {
|
||||
objFile.os().clear_error();
|
||||
@ -234,21 +234,21 @@ bool LTOCodeGenerator::compileOptimizedToFile(const char **name,
|
||||
}
|
||||
|
||||
NativeObjectPath = Filename.c_str();
|
||||
*name = NativeObjectPath.c_str();
|
||||
*Name = NativeObjectPath.c_str();
|
||||
return true;
|
||||
}
|
||||
|
||||
std::unique_ptr<MemoryBuffer>
|
||||
LTOCodeGenerator::compileOptimized(std::string &errMsg) {
|
||||
LTOCodeGenerator::compileOptimized(std::string &ErrMsg) {
|
||||
const char *name;
|
||||
if (!compileOptimizedToFile(&name, errMsg))
|
||||
if (!compileOptimizedToFile(&name, ErrMsg))
|
||||
return nullptr;
|
||||
|
||||
// read .o file into memory buffer
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>> BufferOrErr =
|
||||
MemoryBuffer::getFile(name, -1, false);
|
||||
if (std::error_code EC = BufferOrErr.getError()) {
|
||||
errMsg = EC.message();
|
||||
ErrMsg = EC.message();
|
||||
sys::fs::remove(NativeObjectPath);
|
||||
return nullptr;
|
||||
}
|
||||
@ -259,30 +259,26 @@ LTOCodeGenerator::compileOptimized(std::string &errMsg) {
|
||||
return std::move(*BufferOrErr);
|
||||
}
|
||||
|
||||
|
||||
bool LTOCodeGenerator::compile_to_file(const char **name,
|
||||
bool disableInline,
|
||||
bool disableGVNLoadPRE,
|
||||
bool disableVectorization,
|
||||
std::string &errMsg) {
|
||||
if (!optimize(disableInline, disableGVNLoadPRE,
|
||||
disableVectorization, errMsg))
|
||||
bool LTOCodeGenerator::compile_to_file(const char **Name, bool DisableInline,
|
||||
bool DisableGVNLoadPRE,
|
||||
bool DisableVectorization,
|
||||
std::string &ErrMsg) {
|
||||
if (!optimize(DisableInline, DisableGVNLoadPRE, DisableVectorization, ErrMsg))
|
||||
return false;
|
||||
|
||||
return compileOptimizedToFile(name, errMsg);
|
||||
return compileOptimizedToFile(Name, ErrMsg);
|
||||
}
|
||||
|
||||
std::unique_ptr<MemoryBuffer>
|
||||
LTOCodeGenerator::compile(bool disableInline, bool disableGVNLoadPRE,
|
||||
bool disableVectorization, std::string &errMsg) {
|
||||
if (!optimize(disableInline, disableGVNLoadPRE,
|
||||
disableVectorization, errMsg))
|
||||
LTOCodeGenerator::compile(bool DisableInline, bool DisableGVNLoadPRE,
|
||||
bool DisableVectorization, std::string &ErrMsg) {
|
||||
if (!optimize(DisableInline, DisableGVNLoadPRE, DisableVectorization, ErrMsg))
|
||||
return nullptr;
|
||||
|
||||
return compileOptimized(errMsg);
|
||||
return compileOptimized(ErrMsg);
|
||||
}
|
||||
|
||||
bool LTOCodeGenerator::determineTarget(std::string &errMsg) {
|
||||
bool LTOCodeGenerator::determineTarget(std::string &ErrMsg) {
|
||||
if (TargetMach)
|
||||
return true;
|
||||
|
||||
@ -294,7 +290,7 @@ bool LTOCodeGenerator::determineTarget(std::string &errMsg) {
|
||||
llvm::Triple Triple(TripleStr);
|
||||
|
||||
// create target machine from info for merged modules
|
||||
const Target *march = TargetRegistry::lookupTarget(TripleStr, errMsg);
|
||||
const Target *march = TargetRegistry::lookupTarget(TripleStr, ErrMsg);
|
||||
if (!march)
|
||||
return false;
|
||||
|
||||
@ -457,11 +453,10 @@ void LTOCodeGenerator::applyScopeRestrictions() {
|
||||
}
|
||||
|
||||
/// Optimize merged modules using various IPO passes
|
||||
bool LTOCodeGenerator::optimize(bool DisableInline,
|
||||
bool DisableGVNLoadPRE,
|
||||
bool LTOCodeGenerator::optimize(bool DisableInline, bool DisableGVNLoadPRE,
|
||||
bool DisableVectorization,
|
||||
std::string &errMsg) {
|
||||
if (!this->determineTarget(errMsg))
|
||||
std::string &ErrMsg) {
|
||||
if (!this->determineTarget(ErrMsg))
|
||||
return false;
|
||||
|
||||
// Mark which symbols can not be internalized
|
||||
@ -496,9 +491,9 @@ bool LTOCodeGenerator::optimize(bool DisableInline,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool LTOCodeGenerator::compileOptimized(ArrayRef<raw_pwrite_stream *> out,
|
||||
std::string &errMsg) {
|
||||
if (!this->determineTarget(errMsg))
|
||||
bool LTOCodeGenerator::compileOptimized(ArrayRef<raw_pwrite_stream *> Out,
|
||||
std::string &ErrMsg) {
|
||||
if (!this->determineTarget(ErrMsg))
|
||||
return false;
|
||||
|
||||
legacy::PassManager preCodeGenPasses;
|
||||
@ -514,7 +509,7 @@ bool LTOCodeGenerator::compileOptimized(ArrayRef<raw_pwrite_stream *> out,
|
||||
// original module at parallelism level 1 which we then assign back to
|
||||
// MergedModule.
|
||||
MergedModule =
|
||||
splitCodeGen(std::move(MergedModule), out, MCpu, FeatureStr, Options,
|
||||
splitCodeGen(std::move(MergedModule), Out, MCpu, FeatureStr, Options,
|
||||
RelocModel, CodeModel::Default, CGOptLevel);
|
||||
|
||||
return true;
|
||||
@ -522,9 +517,9 @@ bool LTOCodeGenerator::compileOptimized(ArrayRef<raw_pwrite_stream *> out,
|
||||
|
||||
/// setCodeGenDebugOptions - Set codegen debugging options to aid in debugging
|
||||
/// LTO problems.
|
||||
void LTOCodeGenerator::setCodeGenDebugOptions(const char *options) {
|
||||
for (std::pair<StringRef, StringRef> o = getToken(options);
|
||||
!o.first.empty(); o = getToken(o.second))
|
||||
void LTOCodeGenerator::setCodeGenDebugOptions(const char *Options) {
|
||||
for (std::pair<StringRef, StringRef> o = getToken(Options); !o.first.empty();
|
||||
o = getToken(o.second))
|
||||
CodegenOptions.push_back(o.first);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user