mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-19 03:24:09 +00:00
libLTO, llvm-lto, gold: Introduce flag for controlling optimization level.
This change also introduces a link-time optimization level of 1. This optimization level runs only the globaldce pass as well as cleanup passes for passes that run at -O0, specifically simplifycfg which cleans up lowerbitsets. http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20150316/266951.html git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@232769 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -71,7 +71,7 @@ LTOCodeGenerator::LTOCodeGenerator()
|
||||
|
||||
LTOCodeGenerator::LTOCodeGenerator(std::unique_ptr<LLVMContext> Context)
|
||||
: OwnedContext(std::move(Context)), Context(*OwnedContext),
|
||||
IRLinker(new Module("ld-temp.o", *OwnedContext)) {
|
||||
IRLinker(new Module("ld-temp.o", *OwnedContext)), OptLevel(2) {
|
||||
initialize();
|
||||
}
|
||||
|
||||
@ -291,12 +291,11 @@ const void *LTOCodeGenerator::compileOptimized(size_t *length,
|
||||
|
||||
|
||||
bool LTOCodeGenerator::compile_to_file(const char **name,
|
||||
bool disableOpt,
|
||||
bool disableInline,
|
||||
bool disableGVNLoadPRE,
|
||||
bool disableVectorization,
|
||||
std::string &errMsg) {
|
||||
if (!optimize(disableOpt, disableInline, disableGVNLoadPRE,
|
||||
if (!optimize(disableInline, disableGVNLoadPRE,
|
||||
disableVectorization, errMsg))
|
||||
return false;
|
||||
|
||||
@ -304,12 +303,11 @@ bool LTOCodeGenerator::compile_to_file(const char **name,
|
||||
}
|
||||
|
||||
const void* LTOCodeGenerator::compile(size_t *length,
|
||||
bool disableOpt,
|
||||
bool disableInline,
|
||||
bool disableGVNLoadPRE,
|
||||
bool disableVectorization,
|
||||
std::string &errMsg) {
|
||||
if (!optimize(disableOpt, disableInline, disableGVNLoadPRE,
|
||||
if (!optimize(disableInline, disableGVNLoadPRE,
|
||||
disableVectorization, errMsg))
|
||||
return nullptr;
|
||||
|
||||
@ -363,9 +361,25 @@ bool LTOCodeGenerator::determineTarget(std::string &errMsg) {
|
||||
MCpu = "cyclone";
|
||||
}
|
||||
|
||||
CodeGenOpt::Level CGOptLevel;
|
||||
switch (OptLevel) {
|
||||
case 0:
|
||||
CGOptLevel = CodeGenOpt::None;
|
||||
break;
|
||||
case 1:
|
||||
CGOptLevel = CodeGenOpt::Less;
|
||||
break;
|
||||
case 2:
|
||||
CGOptLevel = CodeGenOpt::Default;
|
||||
break;
|
||||
case 3:
|
||||
CGOptLevel = CodeGenOpt::Aggressive;
|
||||
break;
|
||||
}
|
||||
|
||||
TargetMach = march->createTargetMachine(TripleStr, MCpu, FeatureStr, Options,
|
||||
RelocModel, CodeModel::Default,
|
||||
CodeGenOpt::Aggressive);
|
||||
CGOptLevel);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -512,8 +526,7 @@ void LTOCodeGenerator::applyScopeRestrictions() {
|
||||
}
|
||||
|
||||
/// Optimize merged modules using various IPO passes
|
||||
bool LTOCodeGenerator::optimize(bool DisableOpt,
|
||||
bool DisableInline,
|
||||
bool LTOCodeGenerator::optimize(bool DisableInline,
|
||||
bool DisableGVNLoadPRE,
|
||||
bool DisableVectorization,
|
||||
std::string &errMsg) {
|
||||
@ -542,8 +555,7 @@ bool LTOCodeGenerator::optimize(bool DisableOpt,
|
||||
if (!DisableInline)
|
||||
PMB.Inliner = createFunctionInliningPass();
|
||||
PMB.LibraryInfo = new TargetLibraryInfoImpl(TargetTriple);
|
||||
if (DisableOpt)
|
||||
PMB.OptLevel = 0;
|
||||
PMB.OptLevel = OptLevel;
|
||||
PMB.VerifyInput = true;
|
||||
PMB.VerifyOutput = true;
|
||||
|
||||
|
Reference in New Issue
Block a user