mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
[PM][InstCombine] fixing omission of AliasAnalysis in new-pass-manager's version of InstCombine
Summary: Passing AliasAnalysis results instead of nullptr appears to work just fine. A couple new-pass-manager tests updated to align with new order of analyses. Reviewers: chandlerc, spatel, craig.topper Reviewed By: chandlerc Subscribers: mehdi_amini, eraman, llvm-commits Differential Revision: https://reviews.llvm.org/D41203 llvm-svn: 320687
This commit is contained in:
parent
d4491490ad
commit
4e5e23e6c9
@ -3276,8 +3276,8 @@ PreservedAnalyses InstCombinePass::run(Function &F,
|
||||
|
||||
auto *LI = AM.getCachedResult<LoopAnalysis>(F);
|
||||
|
||||
// FIXME: The AliasAnalysis is not yet supported in the new pass manager
|
||||
if (!combineInstructionsOverFunction(F, Worklist, nullptr, AC, TLI, DT, ORE,
|
||||
auto *AA = &AM.getResult<AAManager>(F);
|
||||
if (!combineInstructionsOverFunction(F, Worklist, AA, AC, TLI, DT, ORE,
|
||||
ExpensiveCombines, LI))
|
||||
// No changes, all analyses are preserved.
|
||||
return PreservedAnalyses::all();
|
||||
@ -3286,6 +3286,7 @@ PreservedAnalyses InstCombinePass::run(Function &F,
|
||||
PreservedAnalyses PA;
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
PA.preserve<AAManager>();
|
||||
PA.preserve<BasicAA>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
}
|
||||
|
@ -87,6 +87,7 @@
|
||||
; CHECK-O-NEXT: Starting llvm::Function pass manager run.
|
||||
; CHECK-O-NEXT: Running pass: InstCombinePass
|
||||
; CHECK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
|
||||
; CHECK-O-NEXT: Running analysis: AAManager
|
||||
; CHECK-EP-PEEPHOLE-NEXT: Running pass: NoOpFunctionPass
|
||||
; CHECK-O-NEXT: Running pass: SimplifyCFGPass
|
||||
; CHECK-O-NEXT: Finished llvm::Function pass manager run.
|
||||
@ -103,7 +104,6 @@
|
||||
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy<{{.*}}LazyCallGraph{{.*}}>
|
||||
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
|
||||
; CHECK-O-NEXT: Running analysis: FunctionAnalysisManagerCGSCCProxy
|
||||
; CHECK-O-NEXT: Running analysis: AAManager
|
||||
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
|
||||
; CHECK-O-NEXT: Running pass: CGSCCToFunctionPassAdaptor<{{.*}}PassManager{{.*}}>
|
||||
; CHECK-O-NEXT: Starting llvm::Function pass manager run.
|
||||
|
@ -83,6 +83,7 @@
|
||||
; CHECK-O-NEXT: Starting llvm::Function pass manager run.
|
||||
; CHECK-O-NEXT: Running pass: InstCombinePass
|
||||
; CHECK-PRELINK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
|
||||
; CHECK-O-NEXT: Running analysis: AAManager
|
||||
; CHECK-O-NEXT: Running pass: SimplifyCFGPass
|
||||
; CHECK-O-NEXT: Finished llvm::Function pass manager run.
|
||||
; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA
|
||||
@ -98,7 +99,6 @@
|
||||
; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy<{{.*}}LazyCallGraph{{.*}}>
|
||||
; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
|
||||
; CHECK-O-NEXT: Running analysis: FunctionAnalysisManagerCGSCCProxy
|
||||
; CHECK-O-NEXT: Running analysis: AAManager
|
||||
; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
|
||||
; CHECK-O-NEXT: Running pass: CGSCCToFunctionPassAdaptor<{{.*}}PassManager{{.*}}>
|
||||
; CHECK-O-NEXT: Starting llvm::Function pass manager run.
|
||||
|
23
test/Transforms/InstCombine/store-load-unaliased-gep.ll
Normal file
23
test/Transforms/InstCombine/store-load-unaliased-gep.ll
Normal file
@ -0,0 +1,23 @@
|
||||
; RUN: opt -instcombine %s -S 2>&1 | FileCheck %s
|
||||
; RUN: opt -aa-pipeline=basic-aa -passes=instcombine %s -S 2>&1 | FileCheck %s
|
||||
|
||||
; Checking successful store-load optimization of array length.
|
||||
; Function below should deduce just to "return length".
|
||||
; Doable only if instcombine has access to alias-analysis.
|
||||
|
||||
define i32 @test1(i32 %length) {
|
||||
; CHECK-LABEL: entry:
|
||||
entry:
|
||||
%array = alloca i32, i32 2
|
||||
; CHECK-NOT: %array
|
||||
|
||||
%length_gep = getelementptr inbounds i32, i32 * %array, i32 0
|
||||
%value_gep = getelementptr inbounds i32, i32 * %array, i32 1
|
||||
store i32 %length, i32 * %length_gep
|
||||
store i32 0, i32 * %value_gep
|
||||
%loaded_length = load i32, i32 * %length_gep
|
||||
; CHECK-NOT: %loaded_length = load i32
|
||||
|
||||
ret i32 %loaded_length
|
||||
; CHECK: ret i32 %length
|
||||
}
|
Loading…
Reference in New Issue
Block a user