diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -96,6 +96,7 @@ namespace llvm { extern cl::opt DebugInfoCorrelate; +extern cl::opt PrintPipelinePasses; } namespace { @@ -958,6 +959,17 @@ break; } + // Print a textual, '-passes=' compatible, representation of pipeline if + // requested. + if (PrintPipelinePasses) { + MPM.printPipeline(outs(), [&PIC](StringRef ClassName) { + auto PassName = PIC.getPassNameForClassName(ClassName); + return PassName.empty() ? ClassName : PassName; + }); + outs() << "\n"; + return; + } + // Now that we have all of the passes ready, run them. { PrettyStackTraceString CrashInfo("Optimizer"); diff --git a/clang/test/CodeGen/print-pipeline-passes.c b/clang/test/CodeGen/print-pipeline-passes.c new file mode 100644 --- /dev/null +++ b/clang/test/CodeGen/print-pipeline-passes.c @@ -0,0 +1,9 @@ +// Test that -print-pipeline-passes works in Clang + +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm-bc -o /dev/null -mllvm -print-pipeline-passes -O0 %s 2>&1 | FileCheck %s + +// Don't try to check all passes, just a fire to make sure that something is +// actually printed. +// CHECK: always-inline +// CHECK-SAME: BitcodeWriterPass +void Foo(void) {}