
BasicAA currently has an optional dependency on the PhiValues analysis. However, at least with our current pipeline setup, we never actually make use of it. It's possible that this used to work with the legacy pass manager, but I'm not sure of that either. Given that this analysis has not actually been in use for a long time, and nobody noticed or complained, I think we should drop support for it and focus on one code path. It is worth noting that analysis quality for the non-PhiValues case has significantly improved in the meantime. If we really wanted to make use of PhiValues, the right way would probably be to pass it in via AAQI in places we want to use it, rather than using an optional pass manager dependency (which are an unpredictable PITA and should really only ever be used for analyses that are only preserved and not used). Differential Revision: https://reviews.llvm.org/D139719
35 lines
1.2 KiB
LLVM
35 lines
1.2 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
|
|
;
|
|
; 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, ptr %p1, ptr %p2) {
|
|
entry:
|
|
%p3 = alloca i8
|
|
store i8 42, ptr %p1
|
|
br i1 %x, label %loop, label %exit
|
|
|
|
loop:
|
|
store i8 13, ptr %p3
|
|
%tmp1 = load i8, ptr %p2
|
|
br label %loop
|
|
|
|
exit:
|
|
ret void
|
|
}
|