[PATCH] D114171: [SLP]Improve reductions analysis and emission, part 1.
Alexander Kornienko via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu May 19 20:13:44 PDT 2022
alexfh added a comment.
I've noticed that this patch (7ea03f0b4e4ec5d91d48ba2976f5adc299089ffd <https://reviews.llvm.org/rG7ea03f0b4e4ec5d91d48ba2976f5adc299089ffd>) significantly increases compile time for a certain type of code (functions with a large number of branches on top level). In extreme cases (generated code with really large functions) this leads to tens of minutes of time spent in SLP vectorizer:
===-------------------------------------------------------------------------===
... Pass execution timing report ...
===-------------------------------------------------------------------------===
Total Execution Time: 1895.1082 seconds (1895.2216 wall clock)
---User Time--- --System Time-- --User+System-- ---Wall Time--- --- Name ---
1752.0457 ( 93.4%) 0.2965 ( 1.5%) 1752.3421 ( 92.5%) 1752.4505 ( 92.5%) SLPVectorizerPass
37.7381 ( 2.0%) 5.4889 ( 28.6%) 43.2270 ( 2.3%) 43.2324 ( 2.3%) ModuleInlinerWrapperPass
37.0725 ( 2.0%) 5.2396 ( 27.3%) 42.3121 ( 2.2%) 42.3175 ( 2.2%) DevirtSCCRepeatedPass
16.8654 ( 0.9%) 0.2731 ( 1.4%) 17.1384 ( 0.9%) 17.1387 ( 0.9%) GVNPass
Analyzing data from `perf record -g`, I can also see related code, specifically `llvm::slpvectorizer::BoUpSLP::buildTree_rec`:
- 99.23% 0.00% clang clang [.] main ▒
- main ▒
- 99.23% ExecuteCC1Tool ▒
- 99.23% cc1_main ◆
- 99.23% clang::ExecuteCompilerInvocation ▒
- 99.23% clang::CompilerInstance::ExecuteAction ▒
- 99.21% clang::FrontendAction::Execute ▒
- 99.21% clang::ParseAST ▒
- 98.53% clang::BackendConsumer::HandleTranslationUnit ▒
- 98.48% clang::EmitBackendOutput ▒
- 96.34% (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline ▒
- 96.34% llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run ▒
- 94.47% llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run ▒
- 94.47% llvm::ModuleToFunctionPassAdaptor::run ▒
- 94.45% llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run ▒
- 94.45% llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run ▒
- 94.21% llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run ▒
- llvm::SLPVectorizerPass::run ▒
- 94.20% llvm::SLPVectorizerPass::runImpl ▒
- 93.68% llvm::SLPVectorizerPass::vectorizeSimpleInstructions ▒
- 92.96% llvm::SLPVectorizerPass::vectorizeRootInstruction ▒
- 88.63% llvm::slpvectorizer::BoUpSLP::buildTree ▒
87.88% llvm::slpvectorizer::BoUpSLP::buildTree_rec ▒
0.73% llvm::slpvectorizer::BoUpSLP::buildTree_rec ▒
3.30% llvm::hashing::detail::hash_state::mix ▒
0.61% llvm::SmallPtrSetImplBase::find_imp ▒
+ 1.76% llvm::detail::PassModel<llvm::Module, llvm::ModuleInlinerWrapperPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run ▒
+ 2.14% llvm::legacy::PassManagerImpl::run ▒
+ 0.65% clang::Parser::ParseTopLevelDecl
I'm trying to come up with an isolated test case now.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D114171/new/
https://reviews.llvm.org/D114171
More information about the llvm-commits
mailing list