mirror of
https://github.com/intel/llvm.git
synced 2026-02-04 20:00:11 +08:00
[NewPM] Add Clang cc1 flag -fdebug-pass-manager for printing debug information.
Differential Revision: https://reviews.llvm.org/D34790 llvm-svn: 306757
This commit is contained in:
@@ -323,6 +323,10 @@ def flto_unit: Flag<["-"], "flto-unit">,
|
||||
def fno_lto_unit: Flag<["-"], "fno-lto-unit">;
|
||||
def fthin_link_bitcode_EQ : Joined<["-"], "fthin-link-bitcode=">,
|
||||
HelpText<"Write minimized bitcode to <file> for the ThinLTO thin link only">;
|
||||
def fdebug_pass_manager : Flag<["-"], "fdebug-pass-manager">,
|
||||
HelpText<"Prints debug information for the new pass manager">;
|
||||
def fno_debug_pass_manager : Flag<["-"], "fno-debug-pass-manager">,
|
||||
HelpText<"Disables debug printing for the new pass manager">;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Dependency Output Options
|
||||
|
||||
@@ -57,6 +57,8 @@ CODEGENOPT(DisableLifetimeMarkers, 1, 0) ///< Don't emit any lifetime markers
|
||||
CODEGENOPT(DisableO0ImplyOptNone , 1, 0) ///< Don't annonate function with optnone at O0
|
||||
CODEGENOPT(ExperimentalNewPassManager, 1, 0) ///< Enables the new, experimental
|
||||
///< pass manager.
|
||||
CODEGENOPT(DebugPassManager, 1, 0) ///< Prints debug information for the new
|
||||
///< pass manager.
|
||||
CODEGENOPT(DisableRedZone , 1, 0) ///< Set when -mno-red-zone is enabled.
|
||||
CODEGENOPT(DisableTailCalls , 1, 0) ///< Do not emit tail calls.
|
||||
CODEGENOPT(EmitDeclMetadata , 1, 0) ///< Emit special metadata indicating what
|
||||
|
||||
@@ -879,7 +879,7 @@ void EmitAssemblyHelper::EmitAssemblyWithNewPassManager(
|
||||
PB.registerLoopAnalyses(LAM);
|
||||
PB.crossRegisterProxies(LAM, FAM, CGAM, MAM);
|
||||
|
||||
ModulePassManager MPM;
|
||||
ModulePassManager MPM(CodeGenOpts.DebugPassManager);
|
||||
|
||||
if (!CodeGenOpts.DisableLLVMPasses) {
|
||||
bool IsThinLTO = CodeGenOpts.EmitSummaryIndex;
|
||||
@@ -897,12 +897,15 @@ void EmitAssemblyHelper::EmitAssemblyWithNewPassManager(
|
||||
PassBuilder::OptimizationLevel Level = mapToLevel(CodeGenOpts);
|
||||
|
||||
if (IsThinLTO) {
|
||||
MPM = PB.buildThinLTOPreLinkDefaultPipeline(Level);
|
||||
MPM = PB.buildThinLTOPreLinkDefaultPipeline(
|
||||
Level, CodeGenOpts.DebugPassManager);
|
||||
MPM.addPass(NameAnonGlobalPass());
|
||||
} else if (IsLTO) {
|
||||
MPM = PB.buildLTOPreLinkDefaultPipeline(Level);
|
||||
MPM = PB.buildLTOPreLinkDefaultPipeline(Level,
|
||||
CodeGenOpts.DebugPassManager);
|
||||
} else {
|
||||
MPM = PB.buildPerModuleDefaultPipeline(Level);
|
||||
MPM = PB.buildPerModuleDefaultPipeline(Level,
|
||||
CodeGenOpts.DebugPassManager);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -476,6 +476,10 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
|
||||
OPT_fexperimental_new_pass_manager, OPT_fno_experimental_new_pass_manager,
|
||||
/* Default */ false);
|
||||
|
||||
Opts.DebugPassManager =
|
||||
Args.hasFlag(OPT_fdebug_pass_manager, OPT_fno_debug_pass_manager,
|
||||
/* Default */ false);
|
||||
|
||||
if (Arg *A = Args.getLastArg(OPT_fveclib)) {
|
||||
StringRef Name = A->getValue();
|
||||
if (Name == "Accelerate")
|
||||
|
||||
53
clang/test/CodeGen/lto-newpm-pipeline.c
Normal file
53
clang/test/CodeGen/lto-newpm-pipeline.c
Normal file
@@ -0,0 +1,53 @@
|
||||
// REQUIRES: x86-registered-target
|
||||
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm-bc -o /dev/null -fexperimental-new-pass-manager -fdebug-pass-manager -flto=full -O0 %s 2>&1 | FileCheck %s \
|
||||
// RUN: -check-prefix=CHECK-FULL-O0
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm-bc -o /dev/null -fexperimental-new-pass-manager -fdebug-pass-manager -flto=thin -O0 %s 2>&1 | FileCheck %s \
|
||||
// RUN: -check-prefix=CHECK-THIN-O0
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm-bc -o /dev/null -fexperimental-new-pass-manager -fdebug-pass-manager -flto=full -O1 %s 2>&1 | FileCheck %s \
|
||||
// RUN: -check-prefix=CHECK-FULL-OPTIMIZED
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm-bc -o /dev/null -fexperimental-new-pass-manager -fdebug-pass-manager -flto=thin -O1 %s 2>&1 | FileCheck %s \
|
||||
// RUN: -check-prefix=CHECK-THIN-OPTIMIZED
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm-bc -o /dev/null -fexperimental-new-pass-manager -fdebug-pass-manager -flto=full -O2 %s 2>&1 | FileCheck %s \
|
||||
// RUN: -check-prefix=CHECK-FULL-OPTIMIZED
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm-bc -o /dev/null -fexperimental-new-pass-manager -fdebug-pass-manager -flto=thin -O2 %s 2>&1 | FileCheck %s \
|
||||
// RUN: -check-prefix=CHECK-THIN-OPTIMIZED
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm-bc -o /dev/null -fexperimental-new-pass-manager -fdebug-pass-manager -flto=full -O3 %s 2>&1 | FileCheck %s \
|
||||
// RUN: -check-prefix=CHECK-FULL-OPTIMIZED
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm-bc -o /dev/null -fexperimental-new-pass-manager -fdebug-pass-manager -flto=thin -O3 %s 2>&1 | FileCheck %s \
|
||||
// RUN: -check-prefix=CHECK-THIN-OPTIMIZED
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm-bc -o /dev/null -fexperimental-new-pass-manager -fdebug-pass-manager -flto=full -Os %s 2>&1 | FileCheck %s \
|
||||
// RUN: -check-prefix=CHECK-FULL-OPTIMIZED
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm-bc -o /dev/null -fexperimental-new-pass-manager -fdebug-pass-manager -flto=thin -Os %s 2>&1 | FileCheck %s \
|
||||
// RUN: -check-prefix=CHECK-THIN-OPTIMIZED
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm-bc -o /dev/null -fexperimental-new-pass-manager -fdebug-pass-manager -flto=full -Oz %s 2>&1 | FileCheck %s \
|
||||
// RUN: -check-prefix=CHECK-FULL-OPTIMIZED
|
||||
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm-bc -o /dev/null -fexperimental-new-pass-manager -fdebug-pass-manager -flto=thin -Oz %s 2>&1 | FileCheck %s \
|
||||
// RUN: -check-prefix=CHECK-THIN-OPTIMIZED
|
||||
|
||||
// CHECK-FULL-O0: Starting llvm::Module pass manager run.
|
||||
// CHECK-FULL-O0: Running pass: AlwaysInlinerPass
|
||||
// CHECK-FULL-O0-NEXT: Running pass: BitcodeWriterPass
|
||||
// CHECK-FULL-O0: Finished llvm::Module pass manager run.
|
||||
|
||||
// CHECK-THIN-O0: Starting llvm::Module pass manager run.
|
||||
// CHECK-THIN-O0: Running pass: AlwaysInlinerPass
|
||||
// CHECK-THIN-O0-NEXT: Running pass: NameAnonGlobalPass
|
||||
// CHECK-THIN-O0-NEXT: Running pass: ThinLTOBitcodeWriterPass
|
||||
// CHECK-THIN-O0: Finished llvm::Module pass manager run.
|
||||
|
||||
// TODO: The LTO pre-link pipeline currently invokes
|
||||
// buildPerModuleDefaultPipeline(), which contains LoopVectorizePass.
|
||||
// This may change as the pipeline gets implemented.
|
||||
// CHECK-FULL-OPTIMIZED: Starting llvm::Function pass manager run.
|
||||
// CHECK-FULL-OPTIMIZED: Running pass: LoopVectorizePass
|
||||
// CHECK-FULL-OPTIMIZED: Running pass: BitcodeWriterPass
|
||||
|
||||
// The ThinLTO pre-link pipeline shouldn't contain passes like
|
||||
// LoopVectorizePass.
|
||||
// CHECK-THIN-OPTIMIZED: Starting llvm::Function pass manager run.
|
||||
// CHECK-THIN-OPTIMIZED-NOT: Running pass: LoopVectorizePass
|
||||
// CHECK-THIN-OPTIMIZED: Running pass: NameAnonGlobalPass
|
||||
// CHECK-THIN-OPTIMIZED: Running pass: ThinLTOBitcodeWriterPass
|
||||
|
||||
void Foo() {}
|
||||
Reference in New Issue
Block a user