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