[llvm] b0a8e41 - Revert "[LTOCodeGenerator] Use lto::Config for options (NFC)."
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 3 14:56:38 PST 2021
Author: Florian Hahn
Date: 2021-02-03T22:48:54Z
New Revision: b0a8e41cfff717ff067bf63412d6edb0280608cd
URL: https://github.com/llvm/llvm-project/commit/b0a8e41cfff717ff067bf63412d6edb0280608cd
DIFF: https://github.com/llvm/llvm-project/commit/b0a8e41cfff717ff067bf63412d6edb0280608cd.diff
LOG: Revert "[LTOCodeGenerator] Use lto::Config for options (NFC)."
This reverts commit 0d487cf87aa1b609b7db061def3e5ad068576ecf because
it is causing failures on green dragon.
Added:
Modified:
llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h
llvm/lib/LTO/LTOCodeGenerator.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h b/llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h
index bafce6c96491..8a7c49e7fd22 100644
--- a/llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h
+++ b/llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h
@@ -75,6 +75,10 @@ struct LTOCodeGenerator {
LTOCodeGenerator(LLVMContext &Context);
~LTOCodeGenerator();
+ /// Return a lto::Config object which contains the options set in
+ /// LTOCodeGenerator.
+ lto::Config toConfig() const;
+
/// Merge given module. Return true on success.
///
/// Resets \a HasVerifiedInput.
@@ -88,16 +92,14 @@ struct LTOCodeGenerator {
void setAsmUndefinedRefs(struct LTOModule *);
void setTargetOptions(const TargetOptions &Options);
void setDebugInfo(lto_debug_model);
- void setCodePICModel(Optional<Reloc::Model> Model) {
- Config.RelocModel = Model;
- }
+ void setCodePICModel(Optional<Reloc::Model> Model) { RelocModel = Model; }
/// Set the file type to be emitted (assembly or object code).
/// The default is CGFT_ObjectFile.
- void setFileType(CodeGenFileType FT) { Config.CGFileType = FT; }
+ void setFileType(CodeGenFileType FT) { FileType = FT; }
- void setCpu(StringRef MCpu) { Config.CPU = std::string(MCpu); }
- void setAttrs(std::vector<std::string> MAttrs) { Config.MAttrs = MAttrs; }
+ void setCpu(StringRef MCpu) { this->MCpu = std::string(MCpu); }
+ void setAttrs(std::vector<std::string> MAttrs) { this->MAttrs = MAttrs; }
void setOptLevel(unsigned OptLevel);
void setShouldInternalize(bool Value) { ShouldInternalize = Value; }
@@ -180,11 +182,11 @@ struct LTOCodeGenerator {
/// Enable the Freestanding mode: indicate that the optimizer should not
/// assume builtins are present on the target.
- void setFreestanding(bool Enabled) { Config.Freestanding = Enabled; }
+ void setFreestanding(bool Enabled) { Freestanding = Enabled; }
- void setDisableVerify(bool Value) { Config.DisableVerify = Value; }
+ void setDisableVerify(bool Value) { DisableVerify = Value; }
- void setUseNewPM(bool Value) { Config.UseNewPM = Value; }
+ void setUseNewPM(bool Value) { UseNewPM = Value; }
void setDiagnosticHandler(lto_diagnostic_handler_t, void *);
@@ -222,23 +224,31 @@ struct LTOCodeGenerator {
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::vector<std::string> MAttrs;
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 = EnableLTOInternalization;
bool ShouldEmbedUselists = false;
bool ShouldRestoreGlobalsLinkage = false;
+ CodeGenFileType FileType = CGFT_ObjectFile;
std::unique_ptr<ToolOutputFile> DiagnosticOutputFile;
+ bool Freestanding = false;
std::unique_ptr<ToolOutputFile> StatsFile = nullptr;
-
- lto::Config Config;
+ bool DisableVerify = false;
+ bool UseNewPM = LLVM_ENABLE_NEW_PASS_MANAGER;
};
}
#endif
diff --git a/llvm/lib/LTO/LTOCodeGenerator.cpp b/llvm/lib/LTO/LTOCodeGenerator.cpp
index 55f2bf39d957..86c0906caa36 100644
--- a/llvm/lib/LTO/LTOCodeGenerator.cpp
+++ b/llvm/lib/LTO/LTOCodeGenerator.cpp
@@ -124,15 +124,31 @@ LTOCodeGenerator::LTOCodeGenerator(LLVMContext &Context)
TheLinker(new Linker(*MergedModule)) {
Context.setDiscardValueNames(LTODiscardValueNames);
Context.enableDebugTypeODRUniquing();
+}
+
+LTOCodeGenerator::~LTOCodeGenerator() {}
- Config.CodeModel = None;
- Config.StatsFile = LTOStatsFile;
- Config.PreCodeGenPassesHook = [](legacy::PassManager &PM) {
+lto::Config LTOCodeGenerator::toConfig() const {
+ lto::Config Conf;
+ Conf.CGFileType = FileType;
+ Conf.CPU = MCpu;
+ Conf.MAttrs = MAttrs;
+ Conf.RelocModel = RelocModel;
+ Conf.Options = Options;
+ Conf.CodeModel = None;
+ Conf.StatsFile = LTOStatsFile;
+ Conf.OptLevel = OptLevel;
+ Conf.Freestanding = Freestanding;
+ Conf.PTO.LoopVectorization = OptLevel > 1;
+ Conf.PTO.SLPVectorization = OptLevel > 1;
+ Conf.DisableVerify = DisableVerify;
+ Conf.PreCodeGenPassesHook = [](legacy::PassManager &PM) {
PM.add(createObjCARCContractPass());
};
-}
+ Conf.UseNewPM = UseNewPM;
-LTOCodeGenerator::~LTOCodeGenerator() {}
+ return Conf;
+}
void LTOCodeGenerator::setAsmUndefinedRefs(LTOModule *Mod) {
const std::vector<StringRef> &undefs = Mod->getAsmUndefinedRefs();
@@ -168,7 +184,7 @@ void LTOCodeGenerator::setModule(std::unique_ptr<LTOModule> Mod) {
}
void LTOCodeGenerator::setTargetOptions(const TargetOptions &Options) {
- Config.Options = Options;
+ this->Options = Options;
}
void LTOCodeGenerator::setDebugInfo(lto_debug_model Debug) {
@@ -185,21 +201,19 @@ void LTOCodeGenerator::setDebugInfo(lto_debug_model Debug) {
}
void LTOCodeGenerator::setOptLevel(unsigned Level) {
- Config.OptLevel = Level;
- Config.PTO.LoopVectorization = Config.OptLevel > 1;
- Config.PTO.SLPVectorization = Config.OptLevel > 1;
- switch (Config.OptLevel) {
+ OptLevel = Level;
+ switch (OptLevel) {
case 0:
- Config.CGOptLevel = CodeGenOpt::None;
+ CGOptLevel = CodeGenOpt::None;
return;
case 1:
- Config.CGOptLevel = CodeGenOpt::Less;
+ CGOptLevel = CodeGenOpt::Less;
return;
case 2:
- Config.CGOptLevel = CodeGenOpt::Default;
+ CGOptLevel = CodeGenOpt::Default;
return;
case 3:
- Config.CGOptLevel = CodeGenOpt::Aggressive;
+ CGOptLevel = CodeGenOpt::Aggressive;
return;
}
llvm_unreachable("Unknown optimization level!");
@@ -247,7 +261,7 @@ bool LTOCodeGenerator::compileOptimizedToFile(const char **Name) {
auto AddStream =
[&](size_t Task) -> std::unique_ptr<lto::NativeObjectStream> {
- StringRef Extension(Config.CGFileType == CGFT_AssemblyFile ? "s" : "o");
+ StringRef Extension(FileType == CGFT_AssemblyFile ? "s" : "o");
int FD;
std::error_code EC =
@@ -334,20 +348,20 @@ bool LTOCodeGenerator::determineTarget() {
// Construct LTOModule, hand over ownership of module and target. Use MAttr as
// the default set of features.
- SubtargetFeatures Features(join(Config.MAttrs, ""));
+ SubtargetFeatures Features(join(MAttrs, ""));
Features.getDefaultSubtargetFeatures(Triple);
FeatureStr = Features.getString();
// Set a default CPU for Darwin triples.
- if (Config.CPU.empty() && Triple.isOSDarwin()) {
+ if (MCpu.empty() && Triple.isOSDarwin()) {
if (Triple.getArch() == llvm::Triple::x86_64)
- Config.CPU = "core2";
+ MCpu = "core2";
else if (Triple.getArch() == llvm::Triple::x86)
- Config.CPU = "yonah";
+ MCpu = "yonah";
else if (Triple.isArm64e())
- Config.CPU = "apple-a12";
+ MCpu = "apple-a12";
else if (Triple.getArch() == llvm::Triple::aarch64 ||
Triple.getArch() == llvm::Triple::aarch64_32)
- Config.CPU = "cyclone";
+ MCpu = "cyclone";
}
TargetMach = createTargetMachine();
@@ -359,8 +373,7 @@ bool LTOCodeGenerator::determineTarget() {
std::unique_ptr<TargetMachine> LTOCodeGenerator::createTargetMachine() {
assert(MArch && "MArch is not set!");
return std::unique_ptr<TargetMachine>(MArch->createTargetMachine(
- TripleStr, Config.CPU, FeatureStr, Config.Options, Config.RelocModel,
- None, Config.CGOptLevel));
+ TripleStr, MCpu, FeatureStr, Options, RelocModel, None, CGOptLevel));
}
// If a linkonce global is present in the MustPreserveSymbols, we need to make
@@ -545,10 +558,11 @@ bool LTOCodeGenerator::optimize() {
// Add an appropriate DataLayout instance for this module...
MergedModule->setDataLayout(TargetMach->createDataLayout());
+ lto::Config Conf = toConfig();
ModuleSummaryIndex CombinedIndex(false);
TargetMach = createTargetMachine();
- if (!opt(Config, TargetMach.get(), 0, *MergedModule, /*IsThinLTO=*/false,
+ if (!opt(Conf, TargetMach.get(), 0, *MergedModule, /*IsThinLTO=*/false,
/*ExportSummary=*/&CombinedIndex, /*ImportSummary=*/nullptr,
/*CmdArgs*/ std::vector<uint8_t>())) {
emitError("LTO middle-end optimizations failed");
@@ -571,10 +585,11 @@ bool LTOCodeGenerator::compileOptimized(lto::AddStreamFn AddStream,
// for splitting
restoreLinkageForExternals();
+ lto::Config Conf = toConfig();
ModuleSummaryIndex CombinedIndex(false);
- Error Err = backend(Config, AddStream, ParallelismLevel, *MergedModule,
- CombinedIndex);
+ Error Err =
+ backend(Conf, AddStream, ParallelismLevel, *MergedModule, CombinedIndex);
assert(!Err && "unexpected code-generation failure");
(void)Err;
More information about the llvm-commits
mailing list