Skip to content

Commit

Permalink
[PM][InstCombine] fixing omission of AliasAnalysis in new-pass-manage…
Browse files Browse the repository at this point in the history
…r'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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320687 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
Fedor Sergeev committed Dec 14, 2017
1 parent 45b92d7 commit bfac46c
Showing 4 changed files with 28 additions and 4 deletions.
5 changes: 3 additions & 2 deletions lib/Transforms/InstCombine/InstructionCombining.cpp
Original file line number Diff line number Diff line change
@@ -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;
}
2 changes: 1 addition & 1 deletion test/Other/new-pm-defaults.ll
Original file line number Diff line number Diff line change
@@ -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.
2 changes: 1 addition & 1 deletion test/Other/new-pm-thinlto-defaults.ll
Original file line number Diff line number Diff line change
@@ -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 changes: 23 additions & 0 deletions test/Transforms/InstCombine/store-load-unaliased-gep.ll
Original file line number Diff line number Diff line change
@@ -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
}

0 comments on commit bfac46c

Please sign in to comment.