Summary:
When debugging function passes it happens to be rather useful to dump
the whole module before the transformation and then use this dump
to analyze this single transformation by running it separately
on that particular module state.
Introducing
-print-module-scope
debugging option that forces all the function-level IR dumps
to become whole-module dumps.
This option builds on top of normal dumping controls like
-print-before/after
-filter-print-funcs
The plan is to eventually extend this option to cover other local passes
(at least loop passes) but that should go as a separate change.
Reviewers: sanjoy, weimingz, silvas, fedor.sergeev
Reviewed By: weimingz
Subscribers: apilipenko, skatkov, llvm-commits, mehdi_amini
Differential Revision: https://reviews.llvm.org/D40245
llvm-svn: 319561
56 lines
1.6 KiB
LLVM
56 lines
1.6 KiB
LLVM
; This test is checking basic properties of -print-module-scope options:
|
|
; - dumps all the module IR at once
|
|
; - all the function attributes are shown, including those of declarations
|
|
; - works on top of -print-after and -filter-print-funcs
|
|
;
|
|
; RUN: opt < %s 2>&1 -disable-output \
|
|
; RUN: -simplifycfg -print-after=simplifycfg -print-module-scope \
|
|
; RUN: | FileCheck %s -check-prefix=CFG
|
|
; RUN: opt < %s 2>&1 -disable-output \
|
|
; RUN: -simplifycfg -print-after=simplifycfg -filter-print-funcs=foo -print-module-scope \
|
|
; RUN: | FileCheck %s -check-prefix=FOO
|
|
|
|
; CFG: IR Dump After
|
|
; CFG-SAME: function: foo
|
|
; CFG-NEXT: ModuleID =
|
|
; CFG: define void @foo
|
|
; CFG: define void @bar
|
|
; CFG: declare void @baz
|
|
; CFG: IR Dump After
|
|
; CFG-SAME: function: bar
|
|
; CFG-NEXT: ModuleID =
|
|
; CFG: define void @foo
|
|
; CFG: define void @bar
|
|
; CFG: declare void @baz
|
|
|
|
; FOO: IR Dump After
|
|
; FOO-NOT: function: bar
|
|
; FOO-SAME: function: foo
|
|
; FOO-NEXT: ModuleID =
|
|
; FOO: Function Attrs: nounwind ssp
|
|
; FOO: define void @foo
|
|
; FOO: Function Attrs: nounwind
|
|
; FOO: define void @bar
|
|
; FOO: Function Attrs: nounwind readnone ssp
|
|
; FOO: declare void @baz
|
|
|
|
define void @foo() nounwind ssp {
|
|
call void @baz()
|
|
ret void
|
|
}
|
|
|
|
define void @bar() #0 {
|
|
ret void
|
|
}
|
|
|
|
declare void @baz() #1
|
|
|
|
attributes #0 = { nounwind "no-frame-pointer-elim"="true" }
|
|
|
|
attributes #1 = { nounwind readnone ssp "use-soft-float"="false" }
|
|
; FOO: attributes #{{[0-9]}} = { nounwind "no-frame-pointer-elim"="true" }
|
|
|
|
; FOO: attributes #{{[0-9]}} = { nounwind readnone ssp "use-soft-float"="false" }
|
|
|
|
; FOO-NOT: IR Dump
|