mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
0b5a016873
TimePassesHandler object (implementation of time-passes for new pass manager) gains ability to report into a stream customizable per-instance (per pipeline). Intended use is to specify separate time-passes output stream per each compilation, setting up TimePasses member of StandardInstrumentation during PassBuilder setup. That allows to get independent non-overlapping pass-times reports for parallel independent compilations (in JIT-like setups). By default it still puts timing reports into the info-output-file stream (created by CreateInfoOutputFile every time report is requested). Unit-test added for non-default case, and it also allowed to discover that print() does not work as declared - it did not reset the timers, leading to yet another report being printed into the default stream. Fixed print() to actually reset timers according to what was declared in print's comments before. Reviewed By: philip.pfaffe Differential Revision: https://reviews.llvm.org/D59366 llvm-svn: 356305
70 lines
3.0 KiB
LLVM
70 lines
3.0 KiB
LLVM
; RUN: opt < %s -disable-output -instcombine -instcombine -licm -time-passes 2>&1 | FileCheck %s --check-prefix=TIME --check-prefix=TIME-LEGACY
|
|
; RUN: opt < %s -disable-output -instcombine -instcombine -licm -licm -time-passes 2>&1 | FileCheck %s --check-prefix=TIME --check-prefix=TIME-LEGACY --check-prefix=TIME-DOUBLE-LICM-LEGACY
|
|
; RUN: opt < %s -disable-output -passes='instcombine,instcombine,loop(licm)' -time-passes 2>&1 | FileCheck %s --check-prefix=TIME --check-prefix=TIME-NEW
|
|
; RUN: opt < %s -disable-output -passes='instcombine,loop(licm),instcombine,loop(licm)' -time-passes 2>&1 | FileCheck %s --check-prefix=TIME --check-prefix=TIME-NEW -check-prefix=TIME-DOUBLE-LICM-NEW
|
|
; RUN: opt < %s -disable-output -passes='default<O2>' -time-passes 2>&1 | FileCheck %s --check-prefix=TIME
|
|
;
|
|
; The following 4 test runs verify -info-output-file interaction (default goes to stderr, '-' goes to stdout).
|
|
; RUN: opt < %s -disable-output -O2 -time-passes -info-output-file='-' 2>/dev/null | FileCheck %s --check-prefix=TIME
|
|
; RUN: opt < %s -disable-output -passes='default<O2>' -time-passes -info-output-file='-' 2>/dev/null | FileCheck %s --check-prefix=TIME
|
|
;
|
|
; RUN: rm -f %t; opt < %s -disable-output -O2 -time-passes -info-output-file=%t
|
|
; RUN: cat %t | FileCheck %s --check-prefix=TIME
|
|
;
|
|
; RUN: rm -f %t; opt < %s -disable-output -passes='default<O2>' -time-passes -info-output-file=%t
|
|
; RUN: cat %t | FileCheck %s --check-prefix=TIME
|
|
;
|
|
; TIME: Pass execution timing report
|
|
; TIME: Total Execution Time:
|
|
; TIME: Name
|
|
; TIME-LEGACY-DAG: Combine redundant instructions{{$}}
|
|
; TIME-LEGACY-DAG: Combine redundant instructions #2
|
|
; TIME-LEGACY-DAG: Loop Invariant Code Motion{{$}}
|
|
; TIME-DOUBLE-LICM-LEGACY-DAG: Loop Invariant Code Motion #2
|
|
; TIME-LEGACY-DAG: Scalar Evolution Analysis
|
|
; TIME-LEGACY-DAG: Loop-Closed SSA Form Pass
|
|
; TIME-LEGACY-DAG: LCSSA Verifier
|
|
; TIME-LEGACY-DAG: Canonicalize natural loops
|
|
; TIME-LEGACY-DAG: Natural Loop Information
|
|
; TIME-LEGACY-DAG: Dominator Tree Construction
|
|
; TIME-LEGACY-DAG: Module Verifier
|
|
; TIME-LEGACY-DAG: Target Library Information
|
|
; TIME-NEW-DAG: InstCombinePass #1
|
|
; TIME-NEW-DAG: InstCombinePass #2
|
|
; TIME-NEW-DAG: InstCombinePass #3
|
|
; TIME-NEW-DAG: InstCombinePass #4
|
|
; TIME-NEW-DAG: LICMPass #1
|
|
; TIME-NEW-DAG: LICMPass #2
|
|
; TIME-NEW-DAG: LICMPass #3
|
|
; TIME-DOUBLE-LICM-NEW-DAG: LICMPass #4
|
|
; TIME-DOUBLE-LICM-NEW-DAG: LICMPass #5
|
|
; TIME-DOUBLE-LICM-NEW-DAG: LICMPass #6
|
|
; TIME-NEW-DAG: LCSSAPass
|
|
; TIME-NEW-DAG: LoopSimplifyPass
|
|
; TIME-NEW-DAG: ScalarEvolutionAnalysis
|
|
; TIME-NEW-DAG: LoopAnalysis
|
|
; TIME-NEW-DAG: VerifierPass
|
|
; TIME-NEW-DAG: DominatorTreeAnalysis
|
|
; TIME-NEW-DAG: TargetLibraryAnalysis
|
|
; TIME: Total{{$}}
|
|
|
|
define i32 @foo() {
|
|
%res = add i32 5, 4
|
|
br label %loop1
|
|
loop1:
|
|
br i1 false, label %loop1, label %end
|
|
end:
|
|
ret i32 %res
|
|
}
|
|
|
|
define void @bar_with_loops() {
|
|
br label %loop1
|
|
loop1:
|
|
br i1 false, label %loop1, label %loop2
|
|
loop2:
|
|
br i1 true, label %loop2, label %end
|
|
end:
|
|
ret void
|
|
|
|
}
|