mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
37e405d0af
A new hidden option -print-changed is added along with code to support printing the IR as it passes through the opt pipeline in the new pass manager. Only those passes that change the IR are reported, with others only having the banner reported, indicating that they did not change the IR, were filtered out or ignored. Filtering of output via the -filter-print-funcs is supported and a new supporting hidden option -filter-passes is added. The latter takes a comma separated list of pass names and filters the output to only show those passes in the list that change the IR. The output can also be modified via the -print-module-scope function. The code introduces an abstract template base class that generalizes the comparison of IRs that takes an IR representation as template parameter. Derived classes provide overrides that provide an event based API for generalized reporting of IRs as they are changed in the opt pipeline through the new pass manager. The first of several instantiations is provided that prints the IR in a form similar to that produced by -print-after-all with the above mentioned filtering capabilities. This version, and the others to follow will be introduced at the upcoming developer's conference. Reviewed By: aeubanks (Arthur Eubanks), yrouban (Yevgeny Rouban), ychen (Yuanfang Chen), MaskRay (Fangrui Song) Differential Revision: https://reviews.llvm.org/D86360
129 lines
7.6 KiB
LLVM
129 lines
7.6 KiB
LLVM
; Simple checks of -print-changed functionality
|
|
;
|
|
; Note that (mostly) only the banners are checked.
|
|
;
|
|
; Simple functionality check.
|
|
; RUN: opt -S -print-changed -passes=instsimplify 2>&1 -o /dev/null < %s | FileCheck %s --check-prefix=CHECK-SIMPLE
|
|
;
|
|
; Check that only the passes that change the IR are printed and that the
|
|
; others (including g) are filtered out.
|
|
; RUN: opt -S -print-changed -passes=instsimplify -filter-print-funcs=f 2>&1 -o /dev/null < %s | FileCheck %s --check-prefix=CHECK-FUNC-FILTER
|
|
;
|
|
; Check that the reporting of IRs respects -print-module-scope
|
|
; RUN: opt -S -print-changed -passes=instsimplify -print-module-scope 2>&1 -o /dev/null < %s | FileCheck %s --check-prefix=CHECK-PRINT-MOD-SCOPE
|
|
;
|
|
; Check that the reporting of IRs respects -print-module-scope
|
|
; RUN: opt -S -print-changed -passes=instsimplify -filter-print-funcs=f -print-module-scope 2>&1 -o /dev/null < %s | FileCheck %s --check-prefix=CHECK-FUNC-FILTER-MOD-SCOPE
|
|
;
|
|
; Check that reporting of multiple functions happens
|
|
; RUN: opt -S -print-changed -passes=instsimplify -filter-print-funcs="f,g" 2>&1 -o /dev/null < %s | FileCheck %s --check-prefix=CHECK-FILTER-MULT-FUNC
|
|
;
|
|
; Check that the reporting of IRs respects -filter-passes
|
|
; RUN: opt -S -print-changed -passes="instsimplify,no-op-function" -filter-passes="NoOpFunctionPass" 2>&1 -o /dev/null < %s | FileCheck %s --check-prefix=CHECK-FILTER-PASSES
|
|
;
|
|
; Check that the reporting of IRs respects -filter-passes with multiple passes
|
|
; RUN: opt -S -print-changed -passes="instsimplify,no-op-function" -filter-passes="NoOpFunctionPass,InstSimplifyPass" 2>&1 -o /dev/null < %s | FileCheck %s --check-prefix=CHECK-FILTER-MULT-PASSES
|
|
;
|
|
; Check that the reporting of IRs respects both -filter-passes and -filter-print-funcs
|
|
; RUN: opt -S -print-changed -passes="instsimplify,no-op-function" -filter-passes="NoOpFunctionPass,InstSimplifyPass" -filter-print-funcs=f 2>&1 -o /dev/null < %s | FileCheck %s --check-prefix=CHECK-FILTER-FUNC-PASSES
|
|
;
|
|
; Check that the reporting of IRs respects -filter-passes, -filter-print-funcs and -print-module-scope
|
|
; RUN: opt -S -print-changed -passes="instsimplify,no-op-function" -filter-passes="NoOpFunctionPass,InstSimplifyPass" -filter-print-funcs=f -print-module-scope 2>&1 -o /dev/null < %s | FileCheck %s --check-prefix=CHECK-FILTER-FUNC-PASSES-MOD-SCOPE
|
|
;
|
|
; Check that repeated passes that change the IR are printed and that the
|
|
; others (including g) are filtered out. Note that the second time
|
|
; instsimplify is run on f, it does not change the IR
|
|
; RUN: opt -S -print-changed -passes="instsimplify,instsimplify" -filter-print-funcs=f 2>&1 -o /dev/null < %s | FileCheck %s --check-prefix=CHECK-MULT-PASSES-FILTER-FUNC
|
|
|
|
define i32 @g() {
|
|
entry:
|
|
%a = add i32 2, 3
|
|
ret i32 %a
|
|
}
|
|
|
|
define i32 @f() {
|
|
entry:
|
|
%a = add i32 2, 3
|
|
ret i32 %a
|
|
}
|
|
|
|
; CHECK-SIMPLE: *** IR Dump At Start: ***
|
|
; CHECK-SIMPLE-NEXT: ; ModuleID = {{.+}}
|
|
; CHECK-SIMPLE: *** IR Dump After VerifierPass (module) omitted because no change ***
|
|
; CHECK-SIMPLE: *** IR Dump After InstSimplifyPass *** (function: g)
|
|
; CHECK-SIMPLE-NEXT: define i32 @g()
|
|
; CHECK-SIMPLE: *** IR Pass PassManager{{.*}} (function: g) ignored ***
|
|
; CHECK-SIMPLE: *** IR Dump After InstSimplifyPass *** (function: f)
|
|
; CHECK-SIMPLE-NEXT: define i32 @f()
|
|
; CHECK-SIMPLE: *** IR Pass PassManager{{.*}} (function: f) ignored ***
|
|
; CHECK-SIMPLE: *** IR Pass ModuleToFunctionPassAdaptor<{{.*}}PassManager{{.*}}> (module) ignored ***
|
|
; CHECK-SIMPLE: *** IR Dump After VerifierPass (module) omitted because no change ***
|
|
; CHECK-SIMPLE: *** IR Dump After PrintModulePass (module) omitted because no change ***
|
|
; CHECK-SIMPLE-NOT: *** IR
|
|
|
|
; CHECK-FUNC-FILTER: *** IR Dump At Start: ***
|
|
; CHECK-FUNC-FILTER-NEXT: ; ModuleID = {{.+}}
|
|
; CHECK-FUNC-FILTER: *** IR Dump After InstSimplifyPass (function: g) filtered out ***
|
|
; CHECK-FUNC-FILTER: *** IR Dump After InstSimplifyPass *** (function: f)
|
|
; CHECK-FUNC-FILTER-NEXT: define i32 @f()
|
|
|
|
; CHECK-PRINT-MOD-SCOPE: *** IR Dump At Start: ***
|
|
; CHECK-PRINT-MOD-SCOPE-NEXT: ModuleID = {{.+}}
|
|
; CHECK-PRINT-MOD-SCOPE: *** IR Dump After InstSimplifyPass *** (function: g)
|
|
; CHECK-PRINT-MOD-SCOPE-NEXT: ModuleID = {{.+}}
|
|
; CHECK-PRINT-MOD-SCOPE: *** IR Dump After InstSimplifyPass *** (function: f)
|
|
; CHECK-PRINT-MOD-SCOPE-NEXT: ModuleID = {{.+}}
|
|
|
|
; CHECK-FUNC-FILTER-MOD-SCOPE: *** IR Dump At Start: ***
|
|
; CHECK-FUNC-FILTER-MOD-SCOPE-NEXT: ; ModuleID = {{.+}}
|
|
; CHECK-FUNC-FILTER-MOD-SCOPE: *** IR Dump After InstSimplifyPass (function: g) filtered out ***
|
|
; CHECK-FUNC-FILTER-MOD-SCOPE: *** IR Dump After InstSimplifyPass *** (function: f)
|
|
; CHECK-FUNC-FILTER-MOD-SCOPE-NEXT: ModuleID = {{.+}}
|
|
|
|
; CHECK-FILTER-MULT-FUNC: *** IR Dump At Start: ***
|
|
; CHECK-FILTER-MULT-FUNC-NEXT: ; ModuleID = {{.+}}
|
|
; CHECK-FILTER-MULT-FUNC: *** IR Dump After InstSimplifyPass *** (function: g)
|
|
; CHECK-FILTER-MULT-FUNC-NEXT: define i32 @g()
|
|
; CHECK-FILTER-MULT-FUNC: *** IR Dump After InstSimplifyPass *** (function: f)
|
|
; CHECK-FILTER-MULT-FUNC-NEXT: define i32 @f()
|
|
|
|
; CHECK-FILTER-PASSES: *** IR Dump After InstSimplifyPass (function: g) filtered out ***
|
|
; CHECK-FILTER-PASSES: *** IR Dump At Start: *** (function: g)
|
|
; CHECK-FILTER-PASSES-NEXT: ; ModuleID = {{.+}}
|
|
; CHECK-FILTER-PASSES: *** IR Dump After NoOpFunctionPass (function: g) omitted because no change ***
|
|
; CHECK-FILTER-PASSES: *** IR Dump After InstSimplifyPass (function: f) filtered out ***
|
|
; CHECK-FILTER-PASSES: *** IR Dump After NoOpFunctionPass (function: f) omitted because no change ***
|
|
|
|
; CHECK-FILTER-MULT-PASSES: *** IR Dump At Start: *** (function: g)
|
|
; CHECK-FILTER-MULT-PASSES-NEXT: ; ModuleID = {{.+}}
|
|
; CHECK-FILTER-MULT-PASSES: *** IR Dump After InstSimplifyPass *** (function: g)
|
|
; CHECK-FILTER-MULT-PASSES-NEXT: define i32 @g()
|
|
; CHECK-FILTER-MULT-PASSES: *** IR Dump After NoOpFunctionPass (function: g) omitted because no change ***
|
|
; CHECK-FILTER-MULT-PASSES: *** IR Dump After InstSimplifyPass *** (function: f)
|
|
; CHECK-FILTER-MULT-PASSES-NEXT: define i32 @f()
|
|
; CHECK-FILTER-MULT-PASSES: *** IR Dump After NoOpFunctionPass (function: f) omitted because no change ***
|
|
|
|
; CHECK-FILTER-FUNC-PASSES: *** IR Dump After InstSimplifyPass (function: g) filtered out ***
|
|
; CHECK-FILTER-FUNC-PASSES: *** IR Dump After NoOpFunctionPass (function: g) filtered out ***
|
|
; CHECK-FILTER-FUNC-PASSES: *** IR Dump At Start: *** (function: f)
|
|
; CHECK-FILTER-FUNC-PASSES-NEXT: ; ModuleID = {{.+}}
|
|
; CHECK-FILTER-FUNC-PASSES: *** IR Dump After InstSimplifyPass *** (function: f)
|
|
; CHECK-FILTER-FUNC-PASSES-NEXT: define i32 @f()
|
|
; CHECK-FILTER-FUNC-PASSES: *** IR Dump After NoOpFunctionPass (function: f) omitted because no change ***
|
|
|
|
; CHECK-FILTER-FUNC-PASSES-MOD-SCOPE: *** IR Dump After InstSimplifyPass (function: g) filtered out ***
|
|
; CHECK-FILTER-FUNC-PASSES-MOD-SCOPE: *** IR Dump After NoOpFunctionPass (function: g) filtered out ***
|
|
; CHECK-FILTER-FUNC-PASSES-MOD-SCOPE: *** IR Dump At Start: *** (function: f)
|
|
; CHECK-FILTER-FUNC-PASSES-MOD-SCOPE-NEXT: ; ModuleID = {{.+}}
|
|
; CHECK-FILTER-FUNC-PASSES-MOD-SCOPE: *** IR Dump After InstSimplifyPass *** (function: f)
|
|
; CHECK-FILTER-FUNC-PASSES-MOD-SCOPE-NEXT: ModuleID = {{.+}}
|
|
; CHECK-FILTER-FUNC-PASSES-MOD-SCOPE: *** IR Dump After NoOpFunctionPass (function: f) omitted because no change ***
|
|
|
|
; CHECK-MULT-PASSES-FILTER-FUNC: *** IR Dump At Start: ***
|
|
; CHECK-MULT-PASSES-FILTER-FUNC-NEXT: ; ModuleID = {{.+}}
|
|
; CHECK-MULT-PASSES-FILTER-FUNC: *** IR Dump After InstSimplifyPass (function: g) filtered out ***
|
|
; CHECK-MULT-PASSES-FILTER-FUNC: *** IR Dump After InstSimplifyPass (function: g) filtered out ***
|
|
; CHECK-MULT-PASSES-FILTER-FUNC: *** IR Dump After InstSimplifyPass *** (function: f)
|
|
; CHECK-MULT-PASSES-FILTER-FUNC-NEXT: define i32 @f()
|
|
; CHECK-MULT-PASSES-FILTER-FUNC: *** IR Dump After InstSimplifyPass (function: f) omitted because no change ***
|