forked from OSchip/llvm-project
[MemorySSA] Invalidate MemorySSA if AA or DT are invalidated.
Summary: MemorySSA keeps internal pointers of AA and DT. If these get invalidated, so should MemorySSA. Reviewers: george.burgess.iv, chandlerc Subscribers: jlebar, Prazek, llvm-commits Tags: LLVM Differential Revision: https://reviews.llvm.org/D61043 llvm-svn: 359627
This commit is contained in:
parent
4637e15844
commit
b468320313
|
@ -936,6 +936,9 @@ public:
|
|||
MemorySSA &getMSSA() { return *MSSA.get(); }
|
||||
|
||||
std::unique_ptr<MemorySSA> MSSA;
|
||||
|
||||
bool invalidate(Function &F, const PreservedAnalyses &PA,
|
||||
FunctionAnalysisManager::Invalidator &Inv);
|
||||
};
|
||||
|
||||
Result run(Function &F, FunctionAnalysisManager &AM);
|
||||
|
|
|
@ -2213,6 +2213,15 @@ MemorySSAAnalysis::Result MemorySSAAnalysis::run(Function &F,
|
|||
return MemorySSAAnalysis::Result(llvm::make_unique<MemorySSA>(F, &AA, &DT));
|
||||
}
|
||||
|
||||
bool MemorySSAAnalysis::Result::invalidate(
|
||||
Function &F, const PreservedAnalyses &PA,
|
||||
FunctionAnalysisManager::Invalidator &Inv) {
|
||||
auto PAC = PA.getChecker<MemorySSAAnalysis>();
|
||||
return !(PAC.preserved() || PAC.preservedSet<AllAnalysesOn<Function>>()) ||
|
||||
Inv.invalidate<AAManager>(F, PA) ||
|
||||
Inv.invalidate<DominatorTreeAnalysis>(F, PA);
|
||||
}
|
||||
|
||||
PreservedAnalyses MemorySSAPrinterPass::run(Function &F,
|
||||
FunctionAnalysisManager &AM) {
|
||||
OS << "MemorySSA for function: " << F.getName() << "\n";
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
; RUN: opt -aa-pipeline=basic-aa -passes='require<memoryssa>,invalidate<aa>,early-cse-memssa' \
|
||||
; RUN: -debug-pass-manager -disable-output %s 2>&1 \
|
||||
; RUN: | FileCheck %s --check-prefix=CHECK-AA-INVALIDATE
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes='require<memoryssa>,invalidate<domtree>,early-cse-memssa' \
|
||||
; RUN: -debug-pass-manager -disable-output %s 2>&1 \
|
||||
; RUN: | FileCheck %s --check-prefix=CHECK-DT-INVALIDATE
|
||||
|
||||
; CHECK-AA-INVALIDATE: Running analysis: MemorySSAAnalysis
|
||||
; CHECK-AA-INVALIDATE: Running analysis: DominatorTreeAnalysis
|
||||
; CHECK-AA-INVALIDATE: Running analysis: AAManager
|
||||
; CHECK-AA-INVALIDATE: Running analysis: BasicAA
|
||||
; CHECK-NOT-AA-INVALIDATE: Invalidating analysis: MemorySSAAnalysis
|
||||
; CHECK-AA-INVALIDATE: Running pass: EarlyCSEPass
|
||||
; CHECK-NOT-AA-INVALIDATE: Running analysis: MemorySSAAnalysis
|
||||
|
||||
; CHECK-DT-INVALIDATE: Running analysis: MemorySSAAnalysis
|
||||
; CHECK-DT-INVALIDATE: Running analysis: DominatorTreeAnalysis
|
||||
; CHECK-DT-INVALIDATE: Running analysis: AAManager
|
||||
; CHECK-DT-INVALIDATE: Running analysis: BasicAA
|
||||
; CHECK-DT-INVALIDATE: Running pass: InvalidateAnalysisPass<{{.*}}DominatorTreeAnalysis
|
||||
; CHECK-DT-INVALIDATE: Invalidating analysis: DominatorTreeAnalysis
|
||||
; CHECK-DT-INVALIDATE: Invalidating analysis: BasicAA
|
||||
; CHECK-DT-INVALIDATE: Invalidating analysis: AAManager
|
||||
; CHECK-DT-INVALIDATE: Invalidating analysis: MemorySSAAnalysis
|
||||
; CHECK-DT-INVALIDATE: Running pass: EarlyCSEPass
|
||||
; CHECK-DT-INVALIDATE: Running analysis: DominatorTreeAnalysis
|
||||
; CHECK-DT-INVALIDATE: Running analysis: MemorySSAAnalysis
|
||||
; CHECK-DT-INVALIDATE: Running analysis: AAManager
|
||||
; CHECK-DT-INVALIDATE: Running analysis: BasicAA
|
||||
|
||||
|
||||
; Function Attrs: ssp uwtable
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%call = call noalias i8* @_Znwm(i64 4)
|
||||
%0 = bitcast i8* %call to i32*
|
||||
%call1 = call noalias i8* @_Znwm(i64 4)
|
||||
%1 = bitcast i8* %call1 to i32*
|
||||
store i32 5, i32* %0, align 4
|
||||
store i32 7, i32* %1, align 4
|
||||
%2 = load i32, i32* %0, align 4
|
||||
%3 = load i32, i32* %1, align 4
|
||||
%4 = load i32, i32* %0, align 4
|
||||
%5 = load i32, i32* %1, align 4
|
||||
%add = add nsw i32 %3, %5
|
||||
ret i32 %add
|
||||
}
|
||||
|
||||
declare noalias i8* @_Znwm(i64)
|
||||
|
Loading…
Reference in New Issue