diff options
author | Xiang1 Zhang <xiang1.zhang@intel.com> | 2020-12-16 20:23:29 -0800 |
---|---|---|
committer | Xiang1 Zhang <xiang1.zhang@intel.com> | 2020-12-16 22:17:25 -0800 |
commit | 39584ae5b5cbc817d19499b003d4eaba259c31b5 (patch) | |
tree | c6331693224b4037f59db59a6b9cd2c4891e3321 /llvm/lib/CodeGen/TargetPassConfig.cpp | |
parent | 4ad5b634f6834331c526d0a06ade34aa35670d52 (diff) | |
download | llvm-39584ae5b5cbc817d19499b003d4eaba259c31b5.zip llvm-39584ae5b5cbc817d19499b003d4eaba259c31b5.tar.gz llvm-39584ae5b5cbc817d19499b003d4eaba259c31b5.tar.bz2 |
[Debugify] Support checking Machine IR debug info
Add mir-check-debug pass to check MIR-level debug info.
For IR-level, currently, LLVM have debugify + check-debugify to generate
and check debug IR. Much like the IR-level pass debugify, mir-debugify
inserts sequentially increasing line locations to each MachineInstr in a
Module, But there is no equivalent MIR-level check-debugify pass, So now
we support it at "mir-check-debug".
Reviewed By: djtodoro
Differential Revision: https://reviews.llvm.org/D91595
Diffstat (limited to 'llvm/lib/CodeGen/TargetPassConfig.cpp')
-rw-r--r-- | llvm/lib/CodeGen/TargetPassConfig.cpp | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/TargetPassConfig.cpp b/llvm/lib/CodeGen/TargetPassConfig.cpp index 48686b9..10c1ff9 100644 --- a/llvm/lib/CodeGen/TargetPassConfig.cpp +++ b/llvm/lib/CodeGen/TargetPassConfig.cpp @@ -120,6 +120,12 @@ static cl::opt<cl::boolOrDefault> DebugifyAndStripAll( "Debugify MIR before and Strip debug after " "each pass except those known to be unsafe when debug info is present"), cl::ZeroOrMore); +static cl::opt<cl::boolOrDefault> DebugifyCheckAndStripAll( + "debugify-check-and-strip-all-safe", cl::Hidden, + cl::desc( + "Debugify MIR before, by checking and stripping the debug info after, " + "each pass except those known to be unsafe when debug info is present"), + cl::ZeroOrMore); enum RunOutliner { AlwaysOutline, NeverOutline, TargetDefault }; // Enable or disable the MachineOutliner. static cl::opt<RunOutliner> EnableMachineOutliner( @@ -625,15 +631,26 @@ void TargetPassConfig::addStripDebugPass() { PM->add(createStripDebugMachineModulePass(/*OnlyDebugified=*/true)); } +void TargetPassConfig::addCheckDebugPass() { + PM->add(createCheckDebugMachineModulePass()); +} + void TargetPassConfig::addMachinePrePasses(bool AllowDebugify) { - if (AllowDebugify && DebugifyAndStripAll == cl::BOU_TRUE && DebugifyIsSafe) + if (AllowDebugify && DebugifyIsSafe && + (DebugifyAndStripAll == cl::BOU_TRUE || + DebugifyCheckAndStripAll == cl::BOU_TRUE)) addDebugifyPass(); } void TargetPassConfig::addMachinePostPasses(const std::string &Banner, bool AllowVerify, bool AllowStrip) { - if (DebugifyAndStripAll == cl::BOU_TRUE && DebugifyIsSafe) - addStripDebugPass(); + if (DebugifyIsSafe) { + if (DebugifyCheckAndStripAll == cl::BOU_TRUE) { + addCheckDebugPass(); + addStripDebugPass(); + } else if (DebugifyAndStripAll == cl::BOU_TRUE) + addStripDebugPass(); + } if (AllowVerify) addVerifyPass(Banner); } |