[lld] b8f50ab - [lld] Remove support for legacy pass manager

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 7 01:18:13 PDT 2022


Author: Nikita Popov
Date: 2022-04-07T10:17:31+02:00
New Revision: b8f50abd04b4dde670a19fecc35445ecf6bf92b7

URL: https://github.com/llvm/llvm-project/commit/b8f50abd04b4dde670a19fecc35445ecf6bf92b7
DIFF: https://github.com/llvm/llvm-project/commit/b8f50abd04b4dde670a19fecc35445ecf6bf92b7.diff

LOG: [lld] Remove support for legacy pass manager

This removes options for performing LTO with the legacy pass
manager in LLD. Options that explicitly enable the new pass manager
are retained as no-ops.

Differential Revision: https://reviews.llvm.org/D123219

Added: 
    

Modified: 
    lld/COFF/Config.h
    lld/COFF/Driver.cpp
    lld/COFF/LTO.cpp
    lld/ELF/Config.h
    lld/ELF/Driver.cpp
    lld/ELF/LTO.cpp
    lld/ELF/Options.td
    lld/MachO/Config.h
    lld/MachO/Driver.cpp
    lld/MachO/LTO.cpp
    lld/MachO/Options.td
    lld/test/COFF/lto-new-pass-manager.ll
    lld/test/ELF/lto/new-pass-manager.ll
    lld/test/ELF/lto/verify-invalid.ll
    lld/test/MachO/lto-objc-arc-contract.ll
    lld/test/wasm/lto/new-pass-manager.ll
    lld/test/wasm/lto/verify-invalid.ll
    lld/wasm/Config.h
    lld/wasm/Driver.cpp
    lld/wasm/LTO.cpp
    lld/wasm/Options.td

Removed: 
    


################################################################################
diff  --git a/lld/COFF/Config.h b/lld/COFF/Config.h
index 4bb42c88aa936..21b1b5a1db5b1 100644
--- a/lld/COFF/Config.h
+++ b/lld/COFF/Config.h
@@ -170,8 +170,6 @@ struct Configuration {
   // Used for /opt:lldltocachepolicy=policy
   llvm::CachePruningPolicy ltoCachePolicy;
 
-  // Used for /opt:[no]ltonewpassmanager
-  bool ltoNewPassManager = false;
   // Used for /opt:[no]ltodebugpassmanager
   bool ltoDebugPassManager = false;
 

diff  --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index d4448e8fcee15..95ab92462a979 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -1679,7 +1679,6 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
   if (args.hasArg(OPT_profile))
     icfLevel = ICFLevel::None;
   unsigned tailMerge = 1;
-  bool ltoNewPM = true;
   bool ltoDebugPM = false;
   for (auto *arg : args.filtered(OPT_opt)) {
     std::string str = StringRef(arg->getValue()).lower();
@@ -1701,9 +1700,7 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
       } else if (s == "nolldtailmerge") {
         tailMerge = 0;
       } else if (s == "ltonewpassmanager") {
-        ltoNewPM = true;
-      } else if (s == "noltonewpassmanager") {
-        ltoNewPM = false;
+        /* We always use the new PM. */
       } else if (s == "ltodebugpassmanager") {
         ltoDebugPM = true;
       } else if (s == "noltodebugpassmanager") {
@@ -1733,7 +1730,6 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
   config->doICF = icfLevel.getValue();
   config->tailMerge =
       (tailMerge == 1 && config->doICF != ICFLevel::None) || tailMerge == 2;
-  config->ltoNewPassManager = ltoNewPM;
   config->ltoDebugPassManager = ltoDebugPM;
 
   // Handle /lldsavetemps

diff  --git a/lld/COFF/LTO.cpp b/lld/COFF/LTO.cpp
index 2dbe7b146402e..a66cbca6123f3 100644
--- a/lld/COFF/LTO.cpp
+++ b/lld/COFF/LTO.cpp
@@ -83,7 +83,6 @@ static lto::Config createConfig() {
   c.MAttrs = getMAttrs();
   c.CGOptLevel = args::getCGOptLevel(config->ltoo);
   c.AlwaysEmitRegularLTOObj = !config->ltoObjPath.empty();
-  c.UseNewPM = config->ltoNewPassManager;
   c.DebugPassManager = config->ltoDebugPassManager;
   c.CSIRProfile = std::string(config->ltoCSProfileFile);
   c.RunCSIRInstr = config->ltoCSProfileGenerate;

diff  --git a/lld/ELF/Config.h b/lld/ELF/Config.h
index 447d28d485311..32eb832776ff9 100644
--- a/lld/ELF/Config.h
+++ b/lld/ELF/Config.h
@@ -187,7 +187,6 @@ struct Configuration {
   bool ltoPGOWarnMismatch;
   bool ltoDebugPassManager;
   bool ltoEmitAsm;
-  bool ltoNewPassManager;
   bool ltoUniqueBasicBlockSectionNames;
   bool ltoWholeProgramVisibility;
   bool mergeArmExidx;

diff  --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index c28f8199ac8f8..3aa3c533b1fca 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -1102,8 +1102,6 @@ static void readConfigs(opt::InputArgList &args) {
                                             OPT_no_lto_pgo_warn_mismatch, true);
   config->ltoDebugPassManager = args.hasArg(OPT_lto_debug_pass_manager);
   config->ltoEmitAsm = args.hasArg(OPT_lto_emit_asm);
-  config->ltoNewPassManager = args.hasFlag(OPT_no_lto_legacy_pass_manager,
-                                           OPT_lto_legacy_pass_manager, true);
   config->ltoNewPmPasses = args.getLastArgValue(OPT_lto_newpm_passes);
   config->ltoWholeProgramVisibility =
       args.hasFlag(OPT_lto_whole_program_visibility,

diff  --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp
index f1a74cf70f6d4..113d6cdbd64c7 100644
--- a/lld/ELF/LTO.cpp
+++ b/lld/ELF/LTO.cpp
@@ -146,7 +146,6 @@ static lto::Config createConfig() {
   c.StatsFile = std::string(config->optStatsFilename);
 
   c.SampleProfile = std::string(config->ltoSampleProfile);
-  c.UseNewPM = config->ltoNewPassManager;
   for (StringRef pluginFn : config->passPlugins)
     c.PassPlugins.push_back(std::string(pluginFn));
   c.DebugPassManager = config->ltoDebugPassManager;

diff  --git a/lld/ELF/Options.td b/lld/ELF/Options.td
index 5ed59af4a4fa4..86bd93a6e878e 100644
--- a/lld/ELF/Options.td
+++ b/lld/ELF/Options.td
@@ -547,9 +547,8 @@ def lto_debug_pass_manager: FF<"lto-debug-pass-manager">,
   HelpText<"Debug new pass manager">;
 def lto_emit_asm: FF<"lto-emit-asm">,
   HelpText<"Emit assembly code">;
-defm lto_legacy_pass_manager: BB<"lto-legacy-pass-manager",
-  "Use the legacy pass manager in LLVM",
-  "Use the new pass manager in LLVM">;
+def no_lto_legacy_pass_manager: FF<"no-lto-legacy-pass-manager">,
+  HelpText<"Use the new pass manager in LLVM">;
 def lto_newpm_passes: JJ<"lto-newpm-passes=">,
   HelpText<"Passes to run during LTO">;
 def lto_O: JJ<"lto-O">, MetaVarName<"<opt-level>">,
@@ -622,8 +621,6 @@ def: J<"plugin-opt=lto-partitions=">, Alias<lto_partitions>, HelpText<"Alias for
 def plugin_opt_mcpu_eq: J<"plugin-opt=mcpu=">;
 def: F<"plugin-opt=new-pass-manager">,
   Alias<no_lto_legacy_pass_manager>, HelpText<"Alias for --no-lto-legacy-pass-manager">;
-def: F<"plugin-opt=legacy-pass-manager">,
-  Alias<lto_legacy_pass_manager>, HelpText<"Alias for --no-legacy-pass-manager">;
 def: F<"plugin-opt=cs-profile-generate">,
   Alias<lto_cs_profile_generate>, HelpText<"Alias for --lto-cs-profile-generate">;
 def: J<"plugin-opt=cs-profile-path=">,

diff  --git a/lld/MachO/Config.h b/lld/MachO/Config.h
index c6c6cfc3b5ca9..823b215a3b0eb 100644
--- a/lld/MachO/Config.h
+++ b/lld/MachO/Config.h
@@ -107,7 +107,6 @@ struct Configuration {
   bool implicitDylibs = false;
   bool isPic = false;
   bool headerPadMaxInstallNames = false;
-  bool ltoNewPassManager = true;
   bool markDeadStrippableDylib = false;
   bool printDylibSearch = false;
   bool printEachFile = false;

diff  --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp
index 8ab9793dce6fa..7d2a76ce9f4d3 100644
--- a/lld/MachO/Driver.cpp
+++ b/lld/MachO/Driver.cpp
@@ -1222,8 +1222,6 @@ bool macho::link(ArrayRef<const char *> argsArr, llvm::raw_ostream &stdoutOS,
     config->umbrella = arg->getValue();
   }
   config->ltoObjPath = args.getLastArgValue(OPT_object_path_lto);
-  config->ltoNewPassManager = args.hasFlag(OPT_no_lto_legacy_pass_manager,
-                                           OPT_lto_legacy_pass_manager, true);
   config->ltoo = args::getInteger(args, OPT_lto_O, 2);
   if (config->ltoo > 3)
     error("--lto-O: invalid optimization level: " + Twine(config->ltoo));

diff  --git a/lld/MachO/LTO.cpp b/lld/MachO/LTO.cpp
index 3962de8756428..b921704f26fca 100644
--- a/lld/MachO/LTO.cpp
+++ b/lld/MachO/LTO.cpp
@@ -38,7 +38,6 @@ static lto::Config createConfig() {
   c.CPU = getCPUStr();
   c.MAttrs = getMAttrs();
   c.DiagHandler = diagnosticHandler;
-  c.UseNewPM = config->ltoNewPassManager;
   c.PreCodeGenPassesHook = [](legacy::PassManager &pm) {
     pm.add(createObjCARCContractPass());
   };

diff  --git a/lld/MachO/Options.td b/lld/MachO/Options.td
index 0bc15b8457f11..5678ae567f935 100644
--- a/lld/MachO/Options.td
+++ b/lld/MachO/Options.td
@@ -40,9 +40,6 @@ def reproduce_eq: Joined<["--"], "reproduce=">,
 def version: Flag<["--"], "version">,
     HelpText<"Display the version number and exit">,
     Group<grp_lld>;
-def lto_legacy_pass_manager: Flag<["--"], "lto-legacy-pass-manager">,
-    HelpText<"Use the legacy pass manager in LLVM">,
-    Group<grp_lld>;
 def no_lto_legacy_pass_manager : Flag<["--"], "no-lto-legacy-pass-manager">,
     HelpText<"Use the new pass manager in LLVM">,
     Group<grp_lld>;

diff  --git a/lld/test/COFF/lto-new-pass-manager.ll b/lld/test/COFF/lto-new-pass-manager.ll
index cc831cd216e42..7095b6a851b61 100644
--- a/lld/test/COFF/lto-new-pass-manager.ll
+++ b/lld/test/COFF/lto-new-pass-manager.ll
@@ -4,11 +4,6 @@
 ; RUN: lld-link %t.obj -entry:main -opt:ltonewpassmanager -opt:ltodebugpassmanager 2>&1 | FileCheck %s --check-prefix=ENABLED
 ; ENABLED: Running pass: InstCombinePass
 
-; Passing -time just to avoid empty FileCheck input
-; RUN: lld-link %t.obj -entry:main -time -opt:ltonewpassmanager -opt:ltodebugpassmanager -opt:noltonewpassmanager 2>&1 | FileCheck %s --check-prefix=DISABLED
-; RUN: lld-link %t.obj -entry:main -time -opt:ltonewpassmanager -opt:ltodebugpassmanager -opt:noltodebugpassmanager 2>&1 | FileCheck %s --check-prefix=DISABLED
-; DISABLED-NOT: Running pass: InstCombinePass
-
 target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-pc-windows-msvc19.11.0"
 

diff  --git a/lld/test/ELF/lto/new-pass-manager.ll b/lld/test/ELF/lto/new-pass-manager.ll
index 1df292a4c7cbb..63ff4bef6821f 100644
--- a/lld/test/ELF/lto/new-pass-manager.ll
+++ b/lld/test/ELF/lto/new-pass-manager.ll
@@ -6,11 +6,8 @@
 ; RUN: ld.lld --plugin-opt=new-pass-manager --lto-debug-pass-manager -o /dev/null %t.o 2>&1 | FileCheck %s
 ; RUN: ld.lld --no-lto-legacy-pass-manager --plugin-opt=debug-pass-manager -o /dev/null %t.o 2>&1 | FileCheck %s
 ; RUN: ld.lld --no-lto-legacy-pass-manager --lto-debug-pass-manager -o /dev/null %t.o 2>&1 | FileCheck %s
-; RUN: ld.lld --no-lto-legacy-pass-manager --lto-legacy-pass-manager --lto-debug-pass-manager -o /dev/null %t.o 2>&1 | FileCheck %s --check-prefix=LEGACY
-; RUN: ld.lld --plugin-opt=legacy-pass-manager --plugin-opt=debug-pass-manager -o /dev/null %t.o 2>&1 | FileCheck %s --check-prefix=LEGACY
 
 ; CHECK: Running pass: GlobalOptPass
-; LEGACY-NOT: Running pass: GlobalOptPass
 
 target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"

diff  --git a/lld/test/ELF/lto/verify-invalid.ll b/lld/test/ELF/lto/verify-invalid.ll
index b91e552b8a150..a07048407bf83 100644
--- a/lld/test/ELF/lto/verify-invalid.ll
+++ b/lld/test/ELF/lto/verify-invalid.ll
@@ -1,11 +1,5 @@
 ; REQUIRES: x86
 ; RUN: llvm-as %s -o %t.o
-; RUN: ld.lld %t.o -o %t2 -mllvm -debug-pass=Arguments --lto-legacy-pass-manager \
-; RUN:   2>&1 | FileCheck -check-prefix=DEFAULT-LPM %s
-; RUN: ld.lld %t.o -o %t2 -mllvm -debug-pass=Arguments --lto-legacy-pass-manager \
-; RUN:   -disable-verify 2>&1 | FileCheck -check-prefix=DISABLE-LPM %s
-; RUN: ld.lld %t.o -o %t2 -mllvm -debug-pass=Arguments --lto-legacy-pass-manager \
-; RUN:   --plugin-opt=disable-verify 2>&1 | FileCheck -check-prefix=DISABLE-LPM %s
 ; RUN: ld.lld %t.o -o %t2 --no-lto-legacy-pass-manager --lto-debug-pass-manager \
 ; RUN:   2>&1 | FileCheck -check-prefix=DEFAULT-NPM %s
 ; RUN: ld.lld %t.o -o %t2 --no-lto-legacy-pass-manager --lto-debug-pass-manager \
@@ -21,8 +15,6 @@ define void @_start() {
 }
 
 ; -disable-verify should disable the verification of bitcode.
-; DEFAULT-LPM:     Pass Arguments: {{.*}} -verify {{.*}} -verify
-; DISABLE-LPM-NOT: Pass Arguments: {{.*}} -verify {{.*}} -verify
 ; DEFAULT-NPM: Running pass: VerifierPass
 ; DEFAULT-NPM: Running pass: VerifierPass
 ; DEFAULT-NPM-NOT: Running pass: VerifierPass

diff  --git a/lld/test/MachO/lto-objc-arc-contract.ll b/lld/test/MachO/lto-objc-arc-contract.ll
index 66f30dc60c49a..ffa1c00497bdd 100644
--- a/lld/test/MachO/lto-objc-arc-contract.ll
+++ b/lld/test/MachO/lto-objc-arc-contract.ll
@@ -5,14 +5,10 @@
 ;; which doesn't know how to handle it.
 
 ; RUN: llvm-as %s -o %t.o
-; RUN: %lld -dylib -lSystem %t.o -o %t --lto-legacy-pass-manager
-; RUN: llvm-objdump -d %t | FileCheck %s
 ; RUN: %lld -dylib -lSystem %t.o -o %t --no-lto-legacy-pass-manager
 ; RUN: llvm-objdump -d %t | FileCheck %s
 
 ; RUN: opt -module-summary %s -o %t.o
-; RUN: %lld -dylib -lSystem %t.o -o %t --lto-legacy-pass-manager
-; RUN: llvm-objdump -d %t | FileCheck %s
 ; RUN: %lld -dylib -lSystem %t.o -o %t --no-lto-legacy-pass-manager
 ; RUN: llvm-objdump -d %t | FileCheck %s
 

diff  --git a/lld/test/wasm/lto/new-pass-manager.ll b/lld/test/wasm/lto/new-pass-manager.ll
index 807c0aa34bead..2e8908226ee22 100644
--- a/lld/test/wasm/lto/new-pass-manager.ll
+++ b/lld/test/wasm/lto/new-pass-manager.ll
@@ -1,9 +1,7 @@
 ; RUN: llvm-as -o %t.bc %s
 ; RUN: wasm-ld --no-lto-legacy-pass-manager --lto-debug-pass-manager -o /dev/null %t.bc 2>&1 | FileCheck %s
-; RUN: wasm-ld --no-lto-legacy-pass-manager --lto-debug-pass-manager --lto-legacy-pass-manager -o /dev/null %t.bc 2>&1 | FileCheck %s --allow-empty --check-prefix=LPM
 
 ; CHECK: Running pass: GlobalOptPass
-; LPM-NOT: Running pass: GlobalOptPass
 
 target datalayout = "e-m:e-p:32:32-p10:8:8-p20:8:8-i64:64-n32:64-S128"
 target triple = "wasm32-unknown-unknown"

diff  --git a/lld/test/wasm/lto/verify-invalid.ll b/lld/test/wasm/lto/verify-invalid.ll
index fac3025998e43..9e9026b586ccf 100644
--- a/lld/test/wasm/lto/verify-invalid.ll
+++ b/lld/test/wasm/lto/verify-invalid.ll
@@ -1,8 +1,4 @@
 ; RUN: llvm-as %s -o %t.o
-; RUN: wasm-ld %t.o -o %t2 --lto-legacy-pass-manager -mllvm -debug-pass=Arguments \
-; RUN:   2>&1 | FileCheck -check-prefix=DEFAULT-LPM %s
-; RUN: wasm-ld %t.o -o %t2 --lto-legacy-pass-manager -mllvm -debug-pass=Arguments \
-; RUN:   -disable-verify 2>&1 | FileCheck -check-prefix=DISABLE-LPM %s
 ; RUN: wasm-ld %t.o -o %t2 --no-lto-legacy-pass-manager --lto-debug-pass-manager \
 ; RUN:   2>&1 | FileCheck -check-prefix=DEFAULT-NPM %s
 ; RUN: wasm-ld %t.o -o %t2 --no-lto-legacy-pass-manager --lto-debug-pass-manager \
@@ -16,8 +12,6 @@ define void @_start() {
 }
 
 ; -disable-verify should disable the verification of bitcode.
-; DEFAULT-LPM:     Pass Arguments: {{.*}} -verify {{.*}} -verify
-; DISABLE-LPM-NOT: Pass Arguments: {{.*}} -verify {{.*}} -verify
 ; DEFAULT-NPM: Running pass: VerifierPass
 ; DEFAULT-NPM: Running pass: VerifierPass
 ; DEFAULT-NPM-NOT: Running pass: VerifierPass

diff  --git a/lld/wasm/Config.h b/lld/wasm/Config.h
index 44e595cbbd62e..8eaa4acc6ab3d 100644
--- a/lld/wasm/Config.h
+++ b/lld/wasm/Config.h
@@ -61,7 +61,6 @@ struct Configuration {
   unsigned ltoo;
   unsigned optimize;
   llvm::StringRef thinLTOJobs;
-  bool ltoNewPassManager;
   bool ltoDebugPassManager;
   UnresolvedPolicy unresolvedSymbols;
 

diff  --git a/lld/wasm/Driver.cpp b/lld/wasm/Driver.cpp
index 187a2281b7ee4..1dc6b9dd67aca 100644
--- a/lld/wasm/Driver.cpp
+++ b/lld/wasm/Driver.cpp
@@ -365,8 +365,6 @@ static void readConfigs(opt::InputArgList &args) {
   config->importUndefined = args.hasArg(OPT_import_undefined);
   config->ltoo = args::getInteger(args, OPT_lto_O, 2);
   config->ltoPartitions = args::getInteger(args, OPT_lto_partitions, 1);
-  config->ltoNewPassManager = args.hasFlag(OPT_no_lto_legacy_pass_manager,
-                                           OPT_lto_legacy_pass_manager, true);
   config->ltoDebugPassManager = args.hasArg(OPT_lto_debug_pass_manager);
   config->mapFile = args.getLastArgValue(OPT_Map);
   config->optimize = args::getInteger(args, OPT_O, 1);

diff  --git a/lld/wasm/LTO.cpp b/lld/wasm/LTO.cpp
index 68d29eee6d5b3..85e5b0016594c 100644
--- a/lld/wasm/LTO.cpp
+++ b/lld/wasm/LTO.cpp
@@ -52,7 +52,6 @@ static std::unique_ptr<lto::LTO> createLTO() {
   c.OptLevel = config->ltoo;
   c.MAttrs = getMAttrs();
   c.CGOptLevel = args::getCGOptLevel(config->ltoo);
-  c.UseNewPM = config->ltoNewPassManager;
   c.DebugPassManager = config->ltoDebugPassManager;
 
   if (config->relocatable)

diff  --git a/lld/wasm/Options.td b/lld/wasm/Options.td
index 79d62b7c69fbd..a5395bbda1c7a 100644
--- a/lld/wasm/Options.td
+++ b/lld/wasm/Options.td
@@ -228,7 +228,8 @@ def thinlto_cache_dir: J<"thinlto-cache-dir=">,
 defm thinlto_cache_policy: Eq<"thinlto-cache-policy", "Pruning policy for the ThinLTO cache">;
 def thinlto_jobs: J<"thinlto-jobs=">,
   HelpText<"Number of ThinLTO jobs. Default to --threads=">;
-defm lto_legacy_pass_manager: BB<"lto-legacy-pass-manager", "Use legacy pass manager", "Use new pass manager">;
+def no_lto_legacy_pass_manager: F<"no-lto-legacy-pass-manager">,
+  HelpText<"Use new pass manager">;
 def lto_debug_pass_manager: F<"lto-debug-pass-manager">,
   HelpText<"Debug new pass manager">;
 


        


More information about the llvm-commits mailing list