This revision was automatically updated to reflect the committed changes. Closed by commit rGbae33a7c5a1f: IR printing for single function with the new pass manager. (authored by hoyFB, committed by wenlei).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D74814/new/ https://reviews.llvm.org/D74814 Files: llvm/lib/Passes/StandardInstrumentations.cpp llvm/test/Other/module-pass-printer.ll Index: llvm/test/Other/module-pass-printer.ll =================================================================== --- llvm/test/Other/module-pass-printer.ll +++ llvm/test/Other/module-pass-printer.ll @@ -1,13 +1,43 @@ ; Check pass name is only printed once. -; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all | FileCheck %s -; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all -filter-print-funcs=foo,bar | FileCheck %s +; Check only one function is printed +; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all -filter-print-funcs=foo | FileCheck %s -check-prefix=FOO +; RUN: opt < %s 2>&1 -passes=forceattrs -disable-output -print-after-all -filter-print-funcs=foo | FileCheck %s -check-prefix=FOO + +; Check pass name is only printed once. +; Check both functions are printed +; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all -filter-print-funcs=foo,bar | FileCheck %s -check-prefix=BOTH +; RUN: opt < %s 2>&1 -passes=forceattrs -disable-output -print-after-all -filter-print-funcs=foo,bar | FileCheck %s -check-prefix=BOTH ; Check pass name is not printed if a module doesn't include any function specified in -filter-print-funcs. ; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all -filter-print-funcs=baz | FileCheck %s -allow-empty -check-prefix=EMPTY +; RUN: opt < %s 2>&1 -passes=forceattrs -disable-output -print-after-all -filter-print-funcs=baz | FileCheck %s -allow-empty -check-prefix=EMPTY + +; Check whole module is printed with user-specified wildcast switch -filter-print-funcs=* or -print-module-scope +; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all | FileCheck %s -check-prefix=ALL +; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all -filter-print-funcs=* | FileCheck %s -check-prefix=ALL +; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all -filter-print-funcs=foo -print-module-scope | FileCheck %s -check-prefix=ALL +; RUN: opt < %s 2>&1 -passes=forceattrs -disable-output -print-after-all | FileCheck %s -check-prefix=ALL +; RUN: opt < %s 2>&1 -passes=forceattrs -disable-output -print-after-all -filter-print-funcs=* | FileCheck %s -check-prefix=ALL +; RUN: opt < %s 2>&1 -passes=forceattrs -disable-output -print-after-all -filter-print-funcs=foo -print-module-scope | FileCheck %s -check-prefix=ALL + +; FOO: IR Dump After {{Force set function attributes|ForceFunctionAttrsPass}} +; FOO: define void @foo +; FOO-NOT: define void @bar +; FOO-NOT: IR Dump After {{Force set function attributes|ForceFunctionAttrsPass}} + +; BOTH: IR Dump After {{Force set function attributes|ForceFunctionAttrsPass}} +; BOTH: define void @foo +; BOTH: define void @bar +; BOTH-NOT: IR Dump After {{Force set function attributes|ForceFunctionAttrsPass}} +; BOTH-NOT: ModuleID = + +; EMPTY-NOT: IR Dump After {{Force set function attributes|ForceFunctionAttrsPass}} -; CHECK: *** IR Dump After Force set function attributes *** -; CHECK-NOT: *** IR Dump After Force set function attributes *** -; EMPTY-NOT: *** IR Dump After Force set function attributes *** +; ALL: IR Dump After {{Force set function attributes|ForceFunctionAttrsPass}} +; ALL: ModuleID = +; ALL: define void @foo +; ALL: define void @bar +; ALL-NOT: IR Dump After {{Force set function attributes|ForceFunctionAttrsPass}} define void @foo() { ret void Index: llvm/lib/Passes/StandardInstrumentations.cpp =================================================================== --- llvm/lib/Passes/StandardInstrumentations.cpp +++ llvm/lib/Passes/StandardInstrumentations.cpp @@ -70,16 +70,24 @@ llvm_unreachable("Unknown IR unit"); } -void printIR(const Module *M, StringRef Banner, StringRef Extra = StringRef()) { - dbgs() << Banner << Extra << "\n"; - M->print(dbgs(), nullptr, false); -} void printIR(const Function *F, StringRef Banner, StringRef Extra = StringRef()) { if (!llvm::isFunctionInPrintList(F->getName())) return; dbgs() << Banner << Extra << "\n" << static_cast<const Value &>(*F); } + +void printIR(const Module *M, StringRef Banner, StringRef Extra = StringRef()) { + if (llvm::isFunctionInPrintList("*") || llvm::forcePrintModuleIR()) { + dbgs() << Banner << Extra << "\n"; + M->print(dbgs(), nullptr, false); + } else { + for (const auto &F : M->functions()) { + printIR(&F, Banner, Extra); + } + } +} + void printIR(const LazyCallGraph::SCC *C, StringRef Banner, StringRef Extra = StringRef()) { bool BannerPrinted = false;
Index: llvm/test/Other/module-pass-printer.ll =================================================================== --- llvm/test/Other/module-pass-printer.ll +++ llvm/test/Other/module-pass-printer.ll @@ -1,13 +1,43 @@ ; Check pass name is only printed once. -; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all | FileCheck %s -; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all -filter-print-funcs=foo,bar | FileCheck %s +; Check only one function is printed +; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all -filter-print-funcs=foo | FileCheck %s -check-prefix=FOO +; RUN: opt < %s 2>&1 -passes=forceattrs -disable-output -print-after-all -filter-print-funcs=foo | FileCheck %s -check-prefix=FOO + +; Check pass name is only printed once. +; Check both functions are printed +; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all -filter-print-funcs=foo,bar | FileCheck %s -check-prefix=BOTH +; RUN: opt < %s 2>&1 -passes=forceattrs -disable-output -print-after-all -filter-print-funcs=foo,bar | FileCheck %s -check-prefix=BOTH ; Check pass name is not printed if a module doesn't include any function specified in -filter-print-funcs. ; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all -filter-print-funcs=baz | FileCheck %s -allow-empty -check-prefix=EMPTY +; RUN: opt < %s 2>&1 -passes=forceattrs -disable-output -print-after-all -filter-print-funcs=baz | FileCheck %s -allow-empty -check-prefix=EMPTY + +; Check whole module is printed with user-specified wildcast switch -filter-print-funcs=* or -print-module-scope +; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all | FileCheck %s -check-prefix=ALL +; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all -filter-print-funcs=* | FileCheck %s -check-prefix=ALL +; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all -filter-print-funcs=foo -print-module-scope | FileCheck %s -check-prefix=ALL +; RUN: opt < %s 2>&1 -passes=forceattrs -disable-output -print-after-all | FileCheck %s -check-prefix=ALL +; RUN: opt < %s 2>&1 -passes=forceattrs -disable-output -print-after-all -filter-print-funcs=* | FileCheck %s -check-prefix=ALL +; RUN: opt < %s 2>&1 -passes=forceattrs -disable-output -print-after-all -filter-print-funcs=foo -print-module-scope | FileCheck %s -check-prefix=ALL + +; FOO: IR Dump After {{Force set function attributes|ForceFunctionAttrsPass}} +; FOO: define void @foo +; FOO-NOT: define void @bar +; FOO-NOT: IR Dump After {{Force set function attributes|ForceFunctionAttrsPass}} + +; BOTH: IR Dump After {{Force set function attributes|ForceFunctionAttrsPass}} +; BOTH: define void @foo +; BOTH: define void @bar +; BOTH-NOT: IR Dump After {{Force set function attributes|ForceFunctionAttrsPass}} +; BOTH-NOT: ModuleID = + +; EMPTY-NOT: IR Dump After {{Force set function attributes|ForceFunctionAttrsPass}} -; CHECK: *** IR Dump After Force set function attributes *** -; CHECK-NOT: *** IR Dump After Force set function attributes *** -; EMPTY-NOT: *** IR Dump After Force set function attributes *** +; ALL: IR Dump After {{Force set function attributes|ForceFunctionAttrsPass}} +; ALL: ModuleID = +; ALL: define void @foo +; ALL: define void @bar +; ALL-NOT: IR Dump After {{Force set function attributes|ForceFunctionAttrsPass}} define void @foo() { ret void Index: llvm/lib/Passes/StandardInstrumentations.cpp =================================================================== --- llvm/lib/Passes/StandardInstrumentations.cpp +++ llvm/lib/Passes/StandardInstrumentations.cpp @@ -70,16 +70,24 @@ llvm_unreachable("Unknown IR unit"); } -void printIR(const Module *M, StringRef Banner, StringRef Extra = StringRef()) { - dbgs() << Banner << Extra << "\n"; - M->print(dbgs(), nullptr, false); -} void printIR(const Function *F, StringRef Banner, StringRef Extra = StringRef()) { if (!llvm::isFunctionInPrintList(F->getName())) return; dbgs() << Banner << Extra << "\n" << static_cast<const Value &>(*F); } + +void printIR(const Module *M, StringRef Banner, StringRef Extra = StringRef()) { + if (llvm::isFunctionInPrintList("*") || llvm::forcePrintModuleIR()) { + dbgs() << Banner << Extra << "\n"; + M->print(dbgs(), nullptr, false); + } else { + for (const auto &F : M->functions()) { + printIR(&F, Banner, Extra); + } + } +} + void printIR(const LazyCallGraph::SCC *C, StringRef Banner, StringRef Extra = StringRef()) { bool BannerPrinted = false;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits