[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