mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
f36d8dfcf7
By using PhiValuesAnalysis we can get all the values reachable from a phi, so we can be more precise instead of giving up when a phi has phi operands. We can't make BaseicAA directly use PhiValuesAnalysis though, as the user of BasicAA may modify the function in ways that PhiValuesAnalysis can't cope with. For this optional usage to work correctly BasicAAWrapperPass now needs to be not marked as CFG-only (i.e. it is now invalidated even when CFG is preserved) due to how the legacy pass manager handles dependent passes being invalidated, namely the depending pass still has a pointer to the now-dead dependent pass. Differential Revision: https://reviews.llvm.org/D44564 llvm-svn: 338242
60 lines
2.6 KiB
LLVM
60 lines
2.6 KiB
LLVM
; Test that the BasicAA analysis gets invalidated when its dependencies go
|
|
; away.
|
|
;
|
|
; Check DomTree specifically.
|
|
; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
|
|
; RUN: -passes='require<aa>,invalidate<domtree>,aa-eval' -aa-pipeline='basic-aa' \
|
|
; RUN: | FileCheck %s --check-prefix=CHECK-DT-INVALIDATE
|
|
; CHECK-DT-INVALIDATE: Running pass: RequireAnalysisPass
|
|
; CHECK-DT-INVALIDATE: Running analysis: BasicAA
|
|
; CHECK-DT-INVALIDATE: Running pass: InvalidateAnalysisPass
|
|
; CHECK-DT-INVALIDATE: Invalidating analysis: DominatorTreeAnalysis
|
|
; CHECK-DT-INVALIDATE: Invalidating analysis: BasicAA
|
|
; CHECK-DT-INVALIDATE: Running pass: AAEvaluator
|
|
; CHECK-DT-INVALIDATE: Running analysis: BasicAA
|
|
;
|
|
; Check LoopInfo specifically.
|
|
; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
|
|
; RUN: -passes='require<loops>,require<aa>,invalidate<loops>,aa-eval' -aa-pipeline='basic-aa' \
|
|
; RUN: | FileCheck %s --check-prefix=CHECK-LI-INVALIDATE
|
|
; CHECK-LI-INVALIDATE: Running pass: RequireAnalysisPass
|
|
; CHECK-LI-INVALIDATE: Running analysis: BasicAA
|
|
; CHECK-LI-INVALIDATE: Running pass: InvalidateAnalysisPass
|
|
; CHECK-LI-INVALIDATE: Invalidating analysis: LoopAnalysis
|
|
; CHECK-LI-INVALIDATE: Invalidating analysis: BasicAA
|
|
; CHECK-LI-INVALIDATE: Running pass: AAEvaluator
|
|
; CHECK-LI-INVALIDATE: Running analysis: BasicAA
|
|
;
|
|
; Check PhiValues specifically.
|
|
; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
|
|
; RUN: -passes='require<phi-values>,require<aa>,invalidate<phi-values>,aa-eval' -aa-pipeline='basic-aa' \
|
|
; RUN: | FileCheck %s --check-prefix=CHECK-PV-INVALIDATE
|
|
; CHECK-PV-INVALIDATE: Running pass: RequireAnalysisPass
|
|
; CHECK-PV-INVALIDATE: Running analysis: BasicAA
|
|
; CHECK-PV-INVALIDATE: Running pass: InvalidateAnalysisPass
|
|
; CHECK-PV-INVALIDATE: Invalidating analysis: PhiValuesAnalysis
|
|
; CHECK-PV-INVALIDATE: Invalidating analysis: BasicAA
|
|
; CHECK-PV-INVALIDATE: Running pass: AAEvaluator
|
|
; CHECK-PV-INVALIDATE: Running analysis: BasicAA
|
|
|
|
; Some code that will result in actual AA queries, including inside of a loop.
|
|
; FIXME: Sadly, none of these queries managed to use either the domtree or
|
|
; loopinfo that basic-aa cache. But nor does any other test in LLVM. It would
|
|
; be good to enhance this to actually use these other analyses to make this
|
|
; a more thorough test.
|
|
define void @foo(i1 %x, i8* %p1, i8* %p2) {
|
|
entry:
|
|
%p3 = alloca i8
|
|
store i8 42, i8* %p1
|
|
%gep2 = getelementptr i8, i8* %p2, i32 0
|
|
br i1 %x, label %loop, label %exit
|
|
|
|
loop:
|
|
store i8 13, i8* %p3
|
|
%tmp1 = load i8, i8* %gep2
|
|
br label %loop
|
|
|
|
exit:
|
|
ret void
|
|
}
|