[Debugfiy] Print the pass name next to the result

CheckDebugify now prints the pass name right next to the result of the check.

Differential Revision: https://reviews.llvm.org/D46908

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@332416 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Anastasis Grammenos 2018-05-15 23:38:05 +00:00
parent b79d2cf940
commit d146023add
5 changed files with 38 additions and 27 deletions

View File

@ -11,14 +11,14 @@ define void @bar() {
; Verify that the module & function (check-)debugify passes run at least twice.
; CHECK-DAG: CheckModuleDebugify: PASS
; CHECK-DAG: CheckFunctionDebugify: PASS
; CHECK-DAG: CheckFunctionDebugify: PASS
; CHECK-DAG: CheckFunctionDebugify: PASS
; CHECK-DAG: CheckFunctionDebugify: PASS
; CHECK-DAG: CheckModuleDebugify [{{.*}}]: PASS
; CHECK-DAG: CheckFunctionDebugify [{{.*}}]: PASS
; CHECK-DAG: CheckFunctionDebugify [{{.*}}]: PASS
; CHECK-DAG: CheckFunctionDebugify [{{.*}}]: PASS
; CHECK-DAG: CheckFunctionDebugify [{{.*}}]: PASS
; CHECK-DAG: CheckModuleDebugify: PASS
; CHECK-DAG: CheckFunctionDebugify: PASS
; CHECK-DAG: CheckFunctionDebugify: PASS
; CHECK-DAG: CheckFunctionDebugify: PASS
; CHECK-DAG: CheckFunctionDebugify: PASS
; CHECK-DAG: CheckModuleDebugify [{{.*}}]: PASS
; CHECK-DAG: CheckFunctionDebugify [{{.*}}]: PASS
; CHECK-DAG: CheckFunctionDebugify [{{.*}}]: PASS
; CHECK-DAG: CheckFunctionDebugify [{{.*}}]: PASS
; CHECK-DAG: CheckFunctionDebugify [{{.*}}]: PASS

View File

@ -80,6 +80,6 @@ define weak_odr zeroext i1 @baz() {
; CHECK-FAIL: WARNING: Missing line 3
; CHECK-FAIL: WARNING: Missing line 4
; CHECK-FAIL: ERROR: Missing variable 1
; CHECK-FAIL: CheckModuleDebugify: FAIL
; CHECK-FAIL: CheckModuleDebugify [{{.*}}]: FAIL
; PASS: CheckModuleDebugify: PASS
; PASS: CheckModuleDebugify [{{.*}}]: PASS

View File

@ -126,6 +126,7 @@ bool applyDebugifyMetadata(Module &M,
bool checkDebugifyMetadata(Module &M,
iterator_range<Module::iterator> Functions,
StringRef NameOfWrappedPass,
StringRef Banner,
bool Strip) {
// Skip modules without debugify metadata.
@ -190,7 +191,8 @@ bool checkDebugifyMetadata(Module &M,
outs() << "ERROR: Missing variable " << Idx + 1 << "\n";
HasErrors |= MissingVars.count() > 0;
outs() << Banner << (HasErrors ? "FAIL" : "PASS") << '\n';
outs() << Banner << " [" << NameOfWrappedPass << "]: "
<< (HasErrors ? "FAIL" : "PASS") << '\n';
if (HasErrors) {
outs() << "Module IR Dump\n";
M.print(outs(), nullptr, false);
@ -245,16 +247,18 @@ struct DebugifyFunctionPass : public FunctionPass {
/// legacy module pass manager.
struct CheckDebugifyModulePass : public ModulePass {
bool runOnModule(Module &M) override {
return checkDebugifyMetadata(M, M.functions(), "CheckModuleDebugify: ",
Strip);
return checkDebugifyMetadata(M, M.functions(), NameOfWrappedPass,
"CheckModuleDebugify", Strip);
}
CheckDebugifyModulePass(bool Strip = false) : ModulePass(ID), Strip(Strip) {}
CheckDebugifyModulePass(bool Strip = false, StringRef NameOfWrappedPass = "")
: ModulePass(ID), Strip(Strip), NameOfWrappedPass(NameOfWrappedPass) {}
static char ID; // Pass identification.
private:
bool Strip;
StringRef NameOfWrappedPass;
};
/// FunctionPass for checking debug info inserted by -debugify-function, used
@ -264,10 +268,11 @@ struct CheckDebugifyFunctionPass : public FunctionPass {
Module &M = *F.getParent();
auto FuncIt = F.getIterator();
return checkDebugifyMetadata(M, make_range(FuncIt, std::next(FuncIt)),
"CheckFunctionDebugify: ", Strip);
NameOfWrappedPass, "CheckFunctionDebugify", Strip);
}
CheckDebugifyFunctionPass(bool Strip = false) : FunctionPass(ID), Strip(Strip) {}
CheckDebugifyFunctionPass(bool Strip = false, StringRef NameOfWrappedPass = "")
: FunctionPass(ID), Strip(Strip), NameOfWrappedPass(NameOfWrappedPass) {}
void getAnalysisUsage(AnalysisUsage &AU) const override {
AU.setPreservesAll();
@ -277,6 +282,7 @@ struct CheckDebugifyFunctionPass : public FunctionPass {
private:
bool Strip;
StringRef NameOfWrappedPass;
};
} // end anonymous namespace
@ -294,17 +300,17 @@ PreservedAnalyses NewPMDebugifyPass::run(Module &M, ModuleAnalysisManager &) {
return PreservedAnalyses::all();
}
ModulePass *createCheckDebugifyModulePass(bool Strip) {
return new CheckDebugifyModulePass(Strip);
ModulePass *createCheckDebugifyModulePass(bool Strip, StringRef NameOfWrappedPass) {
return new CheckDebugifyModulePass(Strip, NameOfWrappedPass);
}
FunctionPass *createCheckDebugifyFunctionPass(bool Strip) {
return new CheckDebugifyFunctionPass(Strip);
FunctionPass *createCheckDebugifyFunctionPass(bool Strip, StringRef NameOfWrappedPass) {
return new CheckDebugifyFunctionPass(Strip, NameOfWrappedPass);
}
PreservedAnalyses NewPMCheckDebugifyPass::run(Module &M,
ModuleAnalysisManager &) {
checkDebugifyMetadata(M, M.functions(), "CheckModuleDebugify: ", false);
checkDebugifyMetadata(M, M.functions(), "", "CheckModuleDebugify", false);
return PreservedAnalyses::all();
}

View File

@ -56,8 +56,13 @@ struct NewPMDebugifyPass : public llvm::PassInfoMixin<NewPMDebugifyPass> {
llvm::PreservedAnalyses run(llvm::Module &M, llvm::ModuleAnalysisManager &AM);
};
llvm::ModulePass *createCheckDebugifyModulePass(bool Strip = false);
llvm::FunctionPass *createCheckDebugifyFunctionPass(bool Strip = false);
llvm::ModulePass *
createCheckDebugifyModulePass(bool Strip = false,
llvm::StringRef NameOfWrappedPass = "");
llvm::FunctionPass *
createCheckDebugifyFunctionPass(bool Strip = false,
llvm::StringRef NameOfWrappedPass = "");
struct NewPMCheckDebugifyPass
: public llvm::PassInfoMixin<NewPMCheckDebugifyPass> {

View File

@ -278,12 +278,12 @@ public:
case PT_Function:
super::add(createDebugifyFunctionPass());
super::add(P);
super::add(createCheckDebugifyFunctionPass(true));
super::add(createCheckDebugifyFunctionPass(true, P->getPassName()));
break;
case PT_Module:
super::add(createDebugifyModulePass());
super::add(P);
super::add(createCheckDebugifyModulePass(true));
super::add(createCheckDebugifyModulePass(true, P->getPassName()));
break;
default:
super::add(P);