diff --git a/test/DebugInfo/debugify.ll b/test/DebugInfo/debugify.ll index fce0664c0dc..87358cffccd 100644 --- a/test/DebugInfo/debugify.ll +++ b/test/DebugInfo/debugify.ll @@ -9,6 +9,9 @@ ; RUN: opt -debugify -strip -check-debugify -S -o - < %s | \ ; RUN: FileCheck %s -check-prefix=CHECK-FAIL +; RUN: opt -enable-debugify -strip -S -o - < %s | \ +; RUN: FileCheck %s -check-prefix=CHECK-FAIL + ; CHECK-LABEL: define void @foo define void @foo() { ; CHECK: ret void, !dbg ![[RET1:.*]] diff --git a/tools/opt/Debugify.cpp b/tools/opt/Debugify.cpp index 89e572474bd..ec546e56d44 100644 --- a/tools/opt/Debugify.cpp +++ b/tools/opt/Debugify.cpp @@ -204,6 +204,10 @@ struct CheckDebugifyPass : public ModulePass { } // end anonymous namespace +ModulePass *createDebugifyPass() { return new DebugifyPass(); } + +ModulePass *createCheckDebugifyPass() { return new CheckDebugifyPass(); } + char DebugifyPass::ID = 0; static RegisterPass X("debugify", "Attach debug info to everything"); diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp index c471e0f2e3e..c1c84844a4a 100644 --- a/tools/opt/opt.cpp +++ b/tools/opt/opt.cpp @@ -203,6 +203,11 @@ QuietA("quiet", cl::desc("Alias for -q"), cl::aliasopt(Quiet)); static cl::opt AnalyzeOnly("analyze", cl::desc("Only perform analysis, no optimization")); +static cl::opt EnableDebugify( + "enable-debugify", + cl::desc( + "Start the pipeline with debugify and end it with check-debugify")); + static cl::opt PrintBreakpoints("print-breakpoints-for-testing", cl::desc("Print select breakpoints location for testing")); @@ -252,6 +257,9 @@ static cl::opt cl::desc("YAML output filename for pass remarks"), cl::value_desc("filename")); +extern ModulePass *createDebugifyPass(); +extern ModulePass *createCheckDebugifyPass(); + static inline void addPass(legacy::PassManagerBase &PM, Pass *P) { // Add the pass to the pass manager... PM.add(P); @@ -570,6 +578,9 @@ int main(int argc, char **argv) { Passes.add(createTargetTransformInfoWrapperPass(TM ? TM->getTargetIRAnalysis() : TargetIRAnalysis())); + if (EnableDebugify) + Passes.add(createDebugifyPass()); + std::unique_ptr FPasses; if (OptLevelO0 || OptLevelO1 || OptLevelO2 || OptLevelOs || OptLevelOz || OptLevelO3) { @@ -715,6 +726,9 @@ int main(int argc, char **argv) { if (!NoVerify && !VerifyEach) Passes.add(createVerifierPass()); + if (EnableDebugify) + Passes.add(createCheckDebugifyPass()); + // In run twice mode, we want to make sure the output is bit-by-bit // equivalent if we run the pass manager again, so setup two buffers and // a stream to write to them. Note that llc does something similar and it