[LLD][gold] Add -plugin-opt=no-new-pass-manager

-DENABLE_EXPERIMENTAL_NEW_PASS_MANAGER=on configured LLD and LLVMgold.so
will use the new pass manager by default. Add an option to
use the legacy pass manager. This will also be used by the Clang driver
when -fno-new-pass-manager (D92915) / -fno-experimental-new-pass-manager is set.

Reviewed By: aeubanks, tejohnson

Differential Revision: https://reviews.llvm.org/D92916
This commit is contained in:
Fangrui Song 2020-12-09 13:31:03 -08:00
parent a5c89bb021
commit 68ff3b3376
4 changed files with 11 additions and 0 deletions

View File

@ -598,6 +598,8 @@ 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<lto_new_pass_manager>, HelpText<"Alias for --lto-new-pass-manager">;
def: F<"plugin-opt=no-new-pass-manager">,
Alias<no_lto_new_pass_manager>, HelpText<"Alias for --no-lto-new-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=">,

View File

@ -7,6 +7,7 @@
; RUN: ld.lld --lto-new-pass-manager --plugin-opt=debug-pass-manager -o /dev/null %t.o 2>&1 | FileCheck %s
; RUN: ld.lld --lto-new-pass-manager --lto-debug-pass-manager -o /dev/null %t.o 2>&1 | FileCheck %s
; RUN: ld.lld --lto-new-pass-manager --no-lto-new-pass-manager --lto-debug-pass-manager -o /dev/null %t.o 2>&1 | FileCheck %s --check-prefix=LEGACY
; RUN: ld.lld --plugin-opt=no-new-pass-manager --plugin-opt=debug-pass-manager -o /dev/null %t.o 2>&1 | FileCheck %s --check-prefix=LEGACY
; CHECK: Starting llvm::Module pass manager run
; CHECK: Finished llvm::Module pass manager run

View File

@ -10,6 +10,12 @@
; CHECK: Starting llvm::Module pass manager run
;; --plugin-opt=debug-pass-manager is a no-op for the legacy pass manager.
; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold%shlibext \
; RUN: --plugin-opt=thinlto \
; RUN: --plugin-opt=no-new-pass-manager --plugin-opt=debug-pass-manager \
; RUN: -o /dev/null %t.o 2>&1 | count 0
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

View File

@ -288,6 +288,8 @@ namespace options {
cs_profile_path = std::string(opt);
} else if (opt == "new-pass-manager") {
new_pass_manager = true;
} else if (opt == "no-new-pass-manager") {
new_pass_manager = false;
} else if (opt == "debug-pass-manager") {
debug_pass_manager = true;
} else if (opt == "whole-program-visibility") {