diff options
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstructionCombining.cpp | 5 | ||||
| -rw-r--r-- | llvm/test/Other/new-pm-defaults.ll | 2 | ||||
| -rw-r--r-- | llvm/test/Other/new-pm-thinlto-defaults.ll | 2 | ||||
| -rw-r--r-- | llvm/test/Transforms/InstCombine/store-load-unaliased-gep.ll | 23 | 
4 files changed, 28 insertions, 4 deletions
| diff --git a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp index f272f8273d1..b332e75c7fe 100644 --- a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp +++ b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp @@ -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;  } diff --git a/llvm/test/Other/new-pm-defaults.ll b/llvm/test/Other/new-pm-defaults.ll index 20eeee08619..9212790ba89 100644 --- a/llvm/test/Other/new-pm-defaults.ll +++ b/llvm/test/Other/new-pm-defaults.ll @@ -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. diff --git a/llvm/test/Other/new-pm-thinlto-defaults.ll b/llvm/test/Other/new-pm-thinlto-defaults.ll index e4397205e97..9593b4e46fc 100644 --- a/llvm/test/Other/new-pm-thinlto-defaults.ll +++ b/llvm/test/Other/new-pm-thinlto-defaults.ll @@ -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. diff --git a/llvm/test/Transforms/InstCombine/store-load-unaliased-gep.ll b/llvm/test/Transforms/InstCombine/store-load-unaliased-gep.ll new file mode 100644 index 00000000000..cdeee317055 --- /dev/null +++ b/llvm/test/Transforms/InstCombine/store-load-unaliased-gep.ll @@ -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 +} | 

