mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 02:33:06 +01:00
IR printing for single function with the new pass manager.
Summary: The IR printing always prints out all functions in a module with the new pass manager, even with -filter-print-funcs specified. This is being fixed in this change. However, there are two exceptions, i.e, with user-specified wildcast switch -filter-print-funcs=* or -print-module-scope, under which IR of all functions should be printed. Test Plan: make check-clang make check-llvm Reviewers: wenlei Reviewed By: wenlei Subscribers: wenlei, hiraditya, cfe-commits, llvm-commits Tags: #clang, #llvm Differential Revision: https://reviews.llvm.org/D74814
This commit is contained in:
parent
8e843e8cc6
commit
49f50c7626
@ -70,16 +70,24 @@ Optional<std::pair<const Module *, std::string>> unwrapModule(Any IR) {
|
||||
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;
|
||||
|
@ -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: *** 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 ***
|
||||
; 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}}
|
||||
|
||||
; 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
|
||||
|
Loading…
Reference in New Issue
Block a user