mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
a72c950838
Summary: New pass manager driver passes DebugPM (-debug-pass-manager) flag into individual PassManager constructors in order to enable debug logging. FunctionToLoopPassAdaptor has its own internal LoopCanonicalizationPM which never gets its debug logging enabled and that means canonicalization passes like LoopSimplify are never present in -debug-pass-manager output. Extending FunctionToLoopPassAdaptor's constructor and createFunctionToLoopPassAdaptor wrapper with an optional boolean DebugLogging argument. Passing debug-logging flags there as appropriate. Reviewers: chandlerc, davide Reviewed By: davide Subscribers: mehdi_amini, eraman, llvm-commits, JDevlieghere Differential Revision: https://reviews.llvm.org/D41586 llvm-svn: 321548
350 lines
19 KiB
LLVM
350 lines
19 KiB
LLVM
; Test that the loop PM infrastructure is invalidated appropriately.
|
|
;
|
|
; Check that we always nuke the LPM stuff when the loops themselves are
|
|
; invalidated.
|
|
; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
|
|
; RUN: -passes='loop(no-op-loop),invalidate<loops>,loop(no-op-loop)' \
|
|
; RUN: | FileCheck %s --check-prefix=CHECK-LOOP-INV
|
|
;
|
|
; If we ended up building the standard analyses, their invalidation should nuke
|
|
; stuff as well.
|
|
; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
|
|
; RUN: -passes='loop(no-op-loop),invalidate<scalar-evolution>,loop(no-op-loop)' \
|
|
; RUN: | FileCheck %s --check-prefix=CHECK-SCEV-INV
|
|
;
|
|
; Also provide a test that can delete loops after populating analyses for them.
|
|
; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
|
|
; RUN: -passes='loop(no-op-loop,loop-deletion),invalidate<scalar-evolution>,loop(no-op-loop)' \
|
|
; RUN: | FileCheck %s --check-prefix=CHECK-SCEV-INV-AFTER-DELETE
|
|
|
|
define void @no_loops() {
|
|
; CHECK-LOOP-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on no_loops
|
|
; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
|
|
; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: DominatorTreeAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: AssumptionAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
|
|
; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
|
|
; CHECK-LOOP-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}LoopAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Invalidating all non-preserved analyses
|
|
; CHECK-LOOP-INV-NEXT: Invalidating analysis: LoopAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on no_loops
|
|
; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
|
|
; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
|
|
; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
|
|
; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run.
|
|
;
|
|
; CHECK-SCEV-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on no_loops
|
|
; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: LoopAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: DominatorTreeAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: AssumptionAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
|
|
; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Invalidating all non-preserved analyses
|
|
; CHECK-SCEV-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on no_loops
|
|
; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
|
|
; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
|
|
; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run.
|
|
|
|
entry:
|
|
ret void
|
|
}
|
|
|
|
define void @one_loop(i1* %ptr) {
|
|
; CHECK-LOOP-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on one_loop
|
|
; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
|
|
; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: DominatorTreeAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: AssumptionAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
|
|
; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: AAManager
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: TargetLibraryAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: TargetIRAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
|
|
; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
|
|
; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run.
|
|
; CHECK-LOOP-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}LoopAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Invalidating all non-preserved analyses
|
|
; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
|
|
; CHECK-LOOP-INV-NEXT: Invalidating analysis: LoopAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-LOOP-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on one_loop
|
|
; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
|
|
; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
|
|
; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
|
|
; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
|
|
; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run.
|
|
; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run.
|
|
;
|
|
; CHECK-SCEV-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on one_loop
|
|
; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: LoopAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: DominatorTreeAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: AssumptionAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
|
|
; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: AAManager
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: TargetLibraryAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: TargetIRAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
|
|
; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
|
|
; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run.
|
|
; CHECK-SCEV-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Invalidating all non-preserved analyses
|
|
; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
|
|
; CHECK-SCEV-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-SCEV-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on one_loop
|
|
; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
|
|
; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
|
|
; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
|
|
; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
|
|
; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run.
|
|
; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run.
|
|
|
|
entry:
|
|
br label %l0.header
|
|
|
|
l0.header:
|
|
%flag0 = load volatile i1, i1* %ptr
|
|
br i1 %flag0, label %l0.header, label %exit
|
|
|
|
exit:
|
|
ret void
|
|
}
|
|
|
|
define void @nested_loops(i1* %ptr) {
|
|
; CHECK-LOOP-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on nested_loops
|
|
; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
|
|
; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: DominatorTreeAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: AssumptionAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
|
|
; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: AAManager
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: TargetLibraryAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: TargetIRAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
|
|
; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
|
|
; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run.
|
|
; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
|
|
; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
|
|
; CHECK-LOOP-INV: Finished {{.*}}Loop pass manager run.
|
|
; CHECK-LOOP-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}LoopAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Invalidating all non-preserved analyses
|
|
; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
|
|
; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
|
|
; CHECK-LOOP-INV-NEXT: Invalidating analysis: LoopAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-LOOP-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on nested_loops
|
|
; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
|
|
; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
|
|
; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
|
|
; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
|
|
; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run.
|
|
; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
|
|
; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
|
|
; CHECK-LOOP-INV: Finished {{.*}}Loop pass manager run.
|
|
; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run.
|
|
;
|
|
; CHECK-SCEV-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on nested_loops
|
|
; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: LoopAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: DominatorTreeAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: AssumptionAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
|
|
; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: AAManager
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: TargetLibraryAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: TargetIRAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
|
|
; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
|
|
; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run.
|
|
; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
|
|
; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
|
|
; CHECK-SCEV-INV: Finished {{.*}}Loop pass manager run.
|
|
; CHECK-SCEV-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Invalidating all non-preserved analyses
|
|
; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
|
|
; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
|
|
; CHECK-SCEV-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-SCEV-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on nested_loops
|
|
; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
|
|
; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
|
|
; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
|
|
; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
|
|
; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run.
|
|
; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
|
|
; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
|
|
; CHECK-SCEV-INV: Finished {{.*}}Loop pass manager run.
|
|
; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run.
|
|
|
|
entry:
|
|
br label %l.0.header
|
|
|
|
l.0.header:
|
|
br label %l.0.0.header
|
|
|
|
l.0.0.header:
|
|
%flag.0.0 = load volatile i1, i1* %ptr
|
|
br i1 %flag.0.0, label %l.0.0.header, label %l.0.latch
|
|
|
|
l.0.latch:
|
|
%flag.0 = load volatile i1, i1* %ptr
|
|
br i1 %flag.0, label %l.0.header, label %exit
|
|
|
|
exit:
|
|
ret void
|
|
}
|
|
|
|
define void @dead_loop() {
|
|
; CHECK-LOOP-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop
|
|
; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
|
|
; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: DominatorTreeAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: AssumptionAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
|
|
; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: AAManager
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: TargetLibraryAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: TargetIRAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
|
|
; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
|
|
; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run.
|
|
; CHECK-LOOP-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}LoopAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Invalidating all non-preserved analyses
|
|
; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
|
|
; CHECK-LOOP-INV-NEXT: Invalidating analysis: LoopAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-LOOP-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop
|
|
; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
|
|
; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
|
|
; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
|
|
; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
|
|
; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
|
|
; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run.
|
|
; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run.
|
|
;
|
|
; CHECK-SCEV-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop
|
|
; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: LoopAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: DominatorTreeAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: AssumptionAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
|
|
; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: AAManager
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: TargetLibraryAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: TargetIRAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
|
|
; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
|
|
; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run.
|
|
; CHECK-SCEV-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Invalidating all non-preserved analyses
|
|
; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
|
|
; CHECK-SCEV-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-SCEV-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop
|
|
; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
|
|
; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
|
|
; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
|
|
; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
|
|
; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
|
|
; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run.
|
|
; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run.
|
|
;
|
|
; CHECK-SCEV-INV-AFTER-DELETE-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Starting {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LoopSimplifyPass
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: LoopAnalysis
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: DominatorTreeAnalysis
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: AssumptionAnalysis
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LCSSAPass
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Finished {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: AAManager
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: TargetLibraryAnalysis
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: ScalarEvolutionAnalysis
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: TargetIRAnalysis
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Starting {{.*}}Loop pass manager run.
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: NoOpLoopPass
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LoopDeletionPass
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Clearing all analysis results for:
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Finished {{.*}}Loop pass manager run.
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Invalidating all non-preserved analyses
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Invalidating all non-preserved analyses
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Starting {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LoopSimplifyPass
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LCSSAPass
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Finished {{.*}}Function pass manager run
|
|
; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Finished {{.*}}Function pass manager run.
|
|
|
|
entry:
|
|
br label %l0.header
|
|
|
|
l0.header:
|
|
br i1 false, label %l0.header, label %exit
|
|
|
|
exit:
|
|
ret void
|
|
}
|