diff options
-rw-r--r-- | llvm/lib/Transforms/Scalar/SCCP.cpp | 2 | ||||
-rw-r--r-- | llvm/test/Other/opt-O2-pipeline.ll | 2 | ||||
-rw-r--r-- | llvm/test/Other/opt-O3-pipeline.ll | 2 | ||||
-rw-r--r-- | llvm/test/Other/opt-Os-pipeline.ll | 2 | ||||
-rw-r--r-- | llvm/test/Transforms/SCCP/preserve-analysis.ll | 36 |
5 files changed, 38 insertions, 6 deletions
diff --git a/llvm/lib/Transforms/Scalar/SCCP.cpp b/llvm/lib/Transforms/Scalar/SCCP.cpp index 33eb80734d1..af201257135 100644 --- a/llvm/lib/Transforms/Scalar/SCCP.cpp +++ b/llvm/lib/Transforms/Scalar/SCCP.cpp @@ -1777,6 +1777,7 @@ PreservedAnalyses SCCPPass::run(Function &F, FunctionAnalysisManager &AM) { auto PA = PreservedAnalyses(); PA.preserve<GlobalsAA>(); + PA.preserveSet<CFGAnalyses>(); return PA; } @@ -1799,6 +1800,7 @@ public: void getAnalysisUsage(AnalysisUsage &AU) const override { AU.addRequired<TargetLibraryInfoWrapperPass>(); AU.addPreserved<GlobalsAAWrapperPass>(); + AU.setPreservesCFG(); } // runOnFunction - Run the Sparse Conditional Constant Propagation diff --git a/llvm/test/Other/opt-O2-pipeline.ll b/llvm/test/Other/opt-O2-pipeline.ll index 96d9f22cc01..0aba51e0c66 100644 --- a/llvm/test/Other/opt-O2-pipeline.ll +++ b/llvm/test/Other/opt-O2-pipeline.ll @@ -132,10 +132,8 @@ ; CHECK-NEXT: Memory Dependence Analysis ; CHECK-NEXT: MemCpy Optimization ; CHECK-NEXT: Sparse Conditional Constant Propagation -; CHECK-NEXT: Dominator Tree Construction ; CHECK-NEXT: Demanded bits analysis ; CHECK-NEXT: Bit-Tracking Dead Code Elimination -; CHECK-NEXT: Basic Alias Analysis (stateless AA impl) ; CHECK-NEXT: Function Alias Analysis Results ; CHECK-NEXT: Natural Loop Information ; CHECK-NEXT: Lazy Branch Probability Analysis diff --git a/llvm/test/Other/opt-O3-pipeline.ll b/llvm/test/Other/opt-O3-pipeline.ll index fc9f4fd6b31..442de37baef 100644 --- a/llvm/test/Other/opt-O3-pipeline.ll +++ b/llvm/test/Other/opt-O3-pipeline.ll @@ -136,10 +136,8 @@ ; CHECK-NEXT: Memory Dependence Analysis ; CHECK-NEXT: MemCpy Optimization ; CHECK-NEXT: Sparse Conditional Constant Propagation -; CHECK-NEXT: Dominator Tree Construction ; CHECK-NEXT: Demanded bits analysis ; CHECK-NEXT: Bit-Tracking Dead Code Elimination -; CHECK-NEXT: Basic Alias Analysis (stateless AA impl) ; CHECK-NEXT: Function Alias Analysis Results ; CHECK-NEXT: Natural Loop Information ; CHECK-NEXT: Lazy Branch Probability Analysis diff --git a/llvm/test/Other/opt-Os-pipeline.ll b/llvm/test/Other/opt-Os-pipeline.ll index 206a20a598e..58bf62ffc9c 100644 --- a/llvm/test/Other/opt-Os-pipeline.ll +++ b/llvm/test/Other/opt-Os-pipeline.ll @@ -118,10 +118,8 @@ ; CHECK-NEXT: Memory Dependence Analysis ; CHECK-NEXT: MemCpy Optimization ; CHECK-NEXT: Sparse Conditional Constant Propagation -; CHECK-NEXT: Dominator Tree Construction ; CHECK-NEXT: Demanded bits analysis ; CHECK-NEXT: Bit-Tracking Dead Code Elimination -; CHECK-NEXT: Basic Alias Analysis (stateless AA impl) ; CHECK-NEXT: Function Alias Analysis Results ; CHECK-NEXT: Natural Loop Information ; CHECK-NEXT: Lazy Branch Probability Analysis diff --git a/llvm/test/Transforms/SCCP/preserve-analysis.ll b/llvm/test/Transforms/SCCP/preserve-analysis.ll new file mode 100644 index 00000000000..52d2941d81b --- /dev/null +++ b/llvm/test/Transforms/SCCP/preserve-analysis.ll @@ -0,0 +1,36 @@ +; RUN: opt < %s -debug-pass=Structure -globals-aa -loop-vectorize -sccp -loop-vectorize -globals-aa 2>&1 -S | FileCheck %s +; RUN: opt < %s -debug-pass-manager -passes='loop-vectorize,sccp,loop-vectorize' 2>&1 -S | FileCheck --check-prefix=NEW-PM %s + +; Check CFG-only analysis are preserved by SCCP by running it between 2 +; loop-vectorize runs. + +; CHECK: Globals Alias Analysis +; CHECK: Dominator Tree Construction +; CHECK: Natural Loop Information +; CHECK: Basic Alias Analysis (stateless AA impl) +; CHECK: Sparse Conditional Constant Propagation +; CHECK-NOT: Dominator Tree Construction +; CHECK-NOT: Natural Loop Information +; CHECK-NOT: Basic Alias Analysis (stateless AA impl) +; CHECK-NOT: Globals Alias Analysis +; CHECK: Loop Vectorization + +; NEW-PM-DAG: Running analysis: LoopAnalysis on test +; NEW-PM-DAG: Running analysis: DominatorTreeAnalysis on test +; NEW-PM-DAG: Running analysis: AssumptionAnalysis on test +; NEW-PM-DAG: Running analysis: TargetLibraryAnalysis on test +; NEW-PM-DAG: Running analysis: TargetIRAnalysis on test +; NEW-PM: Running pass: SCCPPass on test +; NEW-PM-NOT: Running analysis: LoopAnalysis on test +; NEW-PM-NOT: Running analysis: DominatorTreeAnalysis on test +; NEW-PM-NOT: Running analysis: AssumptionAnalysis on test +; NEW-PM-NOT: Running analysis: TargetLibraryAnalysis on test +; NEW-PM-NOT: Running analysis: TargetIRAnalysis on test +; NEW-PM: Finished llvm::Function pass manager run. + + +define i32 @test() { +entry: + %res = add i32 1, 10 + ret i32 %res +} |