Index: llvm/lib/Passes/PassBuilder.cpp =================================================================== --- llvm/lib/Passes/PassBuilder.cpp +++ llvm/lib/Passes/PassBuilder.cpp @@ -778,6 +778,10 @@ MainCGPipeline.addPass(createCGSCCToFunctionPassAdaptor( buildFunctionSimplificationPipeline(Level, Phase, DebugLogging))); + // ScalarEvolutionAnalysis consumes a lot of memory. Free the analysis + // result for current SCC to reduce the peak memory usage. + MainCGPipeline.addPass(InvalidateAnalysisPass()); + for (auto &C : CGSCCOptimizerLateEPCallbacks) C(MainCGPipeline, Level); @@ -961,6 +965,10 @@ for (auto &C : OptimizerLastEPCallbacks) C(OptimizePM, Level); + // ScalarEvolutionAnalysis consumes a lot of memory. Free the analysis + // result for current function to reduce the peak memory usage. + OptimizePM.addPass(InvalidateAnalysisPass()); + // Add the core optimizing pipeline. MPM.addPass(createModuleToFunctionPassAdaptor(std::move(OptimizePM))); Index: llvm/test/Other/new-pm-defaults.ll =================================================================== --- llvm/test/Other/new-pm-defaults.ll +++ llvm/test/Other/new-pm-defaults.ll @@ -217,10 +217,11 @@ ; CHECK-O-NEXT: Running pass: InstCombinePass ; CHECK-EP-PEEPHOLE-NEXT: Running pass: NoOpFunctionPass ; CHECK-O-NEXT: Finished llvm::Function pass manager run. -; CHECK-EP-CGSCC-LATE-NEXT: Running pass: NoOpCGSCCPass -; CHECK-O-NEXT: Finished CGSCC pass manager run. -; CHECK-O-NEXT: Finished llvm::Module pass manager run. -; CHECK-O-NEXT: Running pass: PassManager<{{.*}}Module{{.*}}> +; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass +; CHECK-EP-CGSCC-LATE: Running pass: NoOpCGSCCPass +; CHECK-O: Finished CGSCC pass manager run. +; CHECK-O: Finished llvm::Module pass manager run. +; CHECK-O: Running pass: PassManager<{{.*}}Module{{.*}}> ; CHECK-O-NEXT: Starting llvm::Module pass manager run. ; CHECK-O-NEXT: Running pass: GlobalOptPass ; CHECK-O-NEXT: Running pass: GlobalDCEPass @@ -236,13 +237,13 @@ ; CHECK-O-NEXT: Running pass: LoopSimplifyPass ; CHECK-O-NEXT: Running pass: LCSSAPass ; CHECK-O-NEXT: Finished llvm::Function pass manager run. -; CHECK-O-NEXT: Running pass: LoopDistributePass +; CHECK-O: Running pass: LoopDistributePass ; CHECK-O-NEXT: Running pass: LoopVectorizePass ; CHECK-O-NEXT: Running analysis: BlockFrequencyAnalysis ; CHECK-O-NEXT: Running analysis: BranchProbabilityAnalysis ; CHECK-O-NEXT: Running pass: LoopLoadEliminationPass ; CHECK-O-NEXT: Running analysis: LoopAccessAnalysis -; CHECK-O-NEXT: Running pass: InstCombinePass +; CHECK-O: Running pass: InstCombinePass ; CHECK-O-NEXT: Running pass: SimplifyCFGPass ; CHECK-O-NEXT: Running pass: InstCombinePass ; CHECK-O-NEXT: Running pass: LoopUnrollPass @@ -254,20 +255,21 @@ ; CHECK-O-NEXT: Running pass: LoopSimplifyPass ; CHECK-O-NEXT: Running pass: LCSSAPass ; CHECK-O-NEXT: Finished llvm::Function pass manager run. -; CHECK-O-NEXT: Running pass: AlignmentFromAssumptionsPass +; CHECK-O: Running pass: AlignmentFromAssumptionsPass ; CHECK-O-NEXT: Running pass: LoopSinkPass ; CHECK-O-NEXT: Running pass: InstSimplifyPass ; CHECK-O-NEXT: Running pass: DivRemPairsPass ; CHECK-O-NEXT: Running pass: SimplifyCFGPass ; CHECK-O-NEXT: Running pass: SpeculateAroundPHIsPass ; CHECK-EP-OPTIMIZER-LAST: Running pass: NoOpFunctionPass -; CHECK-O-NEXT: Finished llvm::Function pass manager run. -; CHECK-O-NEXT: Running pass: CGProfilePass +; CHECK-O: Running pass: InvalidateAnalysisPass +; CHECK-O: Finished llvm::Function pass manager run. +; CHECK-O: Running pass: CGProfilePass ; CHECK-O-NEXT: Running pass: GlobalDCEPass ; CHECK-O-NEXT: Running pass: ConstantMergePass ; CHECK-O-NEXT: Finished llvm::Module pass manager run. -; CHECK-O-NEXT: Finished llvm::Module pass manager run. -; CHECK-O-NEXT: Running pass: PrintModulePass +; CHECK-O: Finished llvm::Module pass manager run. +; CHECK-O: Running pass: PrintModulePass ; ; Make sure we get the IR back out without changes when we print the module. ; CHECK-O-LABEL: define void @foo(i32 %n) local_unnamed_addr { Index: llvm/test/Other/new-pm-thinlto-defaults.ll =================================================================== --- llvm/test/Other/new-pm-thinlto-defaults.ll +++ llvm/test/Other/new-pm-thinlto-defaults.ll @@ -191,10 +191,11 @@ ; CHECK-O-NEXT: Running pass: SimplifyCFGPass ; CHECK-O-NEXT: Running pass: InstCombinePass ; CHECK-O-NEXT: Finished llvm::Function pass manager run. -; CHECK-O-NEXT: Finished CGSCC pass manager run. -; CHECK-O-NEXT: Finished llvm::Module pass manager run. -; CHECK-PRELINK-O-NEXT: Running pass: GlobalOptPass -; CHECK-POSTLINK-O-NEXT: Running pass: PassManager<{{.*}}Module{{.*}}> +; CHECK-O-NEXT: Running pass: InvalidateAnalysisPass +; CHECK-O: Finished CGSCC pass manager run. +; CHECK-O: Finished llvm::Module pass manager run. +; CHECK-PRELINK-O: Running pass: GlobalOptPass +; CHECK-POSTLINK-O: Running pass: PassManager<{{.*}}Module{{.*}}> ; CHECK-POSTLINK-O-NEXT: Starting llvm::Module pass manager run. ; CHECK-POSTLINK-O-NEXT: Running pass: GlobalOptPass ; CHECK-POSTLINK-O-NEXT: Running pass: GlobalDCEPass @@ -209,13 +210,13 @@ ; CHECK-POSTLINK-O-NEXT: Running pass: LoopSimplifyPass ; CHECK-POSTLINK-O-NEXT: Running pass: LCSSAPass ; CHECK-POSTLINK-O-NEXT: Finished llvm::Function pass manager run -; CHECK-POSTLINK-O-NEXT: Running pass: LoopDistributePass +; CHECK-POSTLINK-O: Running pass: LoopDistributePass ; CHECK-POSTLINK-O-NEXT: Running pass: LoopVectorizePass ; CHECK-POSTLINK-O-NEXT: Running analysis: BlockFrequencyAnalysis ; CHECK-POSTLINK-O-NEXT: Running analysis: BranchProbabilityAnalysis ; CHECK-POSTLINK-O-NEXT: Running pass: LoopLoadEliminationPass ; CHECK-POSTLINK-O-NEXT: Running analysis: LoopAccessAnalysis -; CHECK-POSTLINK-O-NEXT: Running pass: InstCombinePass +; CHECK-POSTLINK-O: Running pass: InstCombinePass ; CHECK-POSTLINK-O-NEXT: Running pass: SimplifyCFGPass ; CHECK-POSTLINK-O-NEXT: Running pass: InstCombinePass ; CHECK-POSTLINK-O-NEXT: Running pass: LoopUnrollPass @@ -227,20 +228,21 @@ ; CHECK-POSTLINK-O-NEXT: Running pass: LoopSimplifyPass ; CHECK-POSTLINK-O-NEXT: Running pass: LCSSAPass ; CHECK-POSTLINK-O-NEXT: Finished llvm::Function pass manager run -; CHECK-POSTLINK-O-NEXT: Running pass: AlignmentFromAssumptionsPass +; CHECK-POSTLINK-O: Running pass: AlignmentFromAssumptionsPass ; CHECK-POSTLINK-O-NEXT: Running pass: LoopSinkPass ; CHECK-POSTLINK-O-NEXT: Running pass: InstSimplifyPass ; CHECK-POSTLINK-O-NEXT: Running pass: DivRemPairsPass ; CHECK-POSTLINK-O-NEXT: Running pass: SimplifyCFGPass ; CHECK-POSTLINK-O-NEXT: Running pass: SpeculateAroundPHIsPass -; CHECK-POSTLINK-O-NEXT: Finished llvm::Function pass manager run. -; CHECK-POSTLINK-O-NEXT: Running pass: CGProfilePass +; CHECK-POSTLINK-O-NEXT: Running pass: InvalidateAnalysisPass +; CHECK-POSTLINK-O: Finished llvm::Function pass manager run. +; CHECK-POSTLINK-O: Running pass: CGProfilePass ; CHECK-POSTLINK-O-NEXT: Running pass: GlobalDCEPass ; CHECK-POSTLINK-O-NEXT: Running pass: ConstantMergePass ; CHECK-POSTLINK-O-NEXT: Finished llvm::Module pass manager run. -; CHECK-O-NEXT: Finished llvm::Module pass manager run. -; CHECK-PRELINK-O-NEXT: Running pass: NameAnonGlobalPass -; CHECK-O-NEXT: Running pass: PrintModulePass +; CHECK-O: Finished llvm::Module pass manager run. +; CHECK-PRELINK-O: Running pass: NameAnonGlobalPass +; CHECK-O: Running pass: PrintModulePass ; Make sure we get the IR back out without changes when we print the module. ; CHECK-O-LABEL: define void @foo(i32 %n) local_unnamed_addr {