alexfh wrote: @usx95 may be able to help with the reproducer.
In the meantime, I'm trying to collect some information on the compile times. So far it looks like we have a ~10-15x compile time regression on some translation units. Without this patch `-ftime-report` shows: ``` ===-------------------------------------------------------------------------=== Clang front-end time report ===-------------------------------------------------------------------------=== Total Execution Time: 39.1940 seconds (39.7238 wall clock) ---User Time--- --System Time-- --User+System-- ---Wall Time--- --- Name --- 28.2611 ( 77.5%) 1.8439 ( 67.3%) 30.1050 ( 76.8%) 30.5230 ( 76.8%) Clang front-end timer 8.1911 ( 22.5%) 0.8980 ( 32.7%) 9.0891 ( 23.2%) 9.2009 ( 23.2%) Reading modules 36.4522 (100.0%) 2.7419 (100.0%) 39.1940 (100.0%) 39.7238 (100.0%) Total ``` With it: ``` ===-------------------------------------------------------------------------=== Clang front-end time report ===-------------------------------------------------------------------------=== Total Execution Time: 466.7373 seconds (1251.6300 wall clock) ---User Time--- --System Time-- --User+System-- ---Wall Time--- --- Name --- 404.7200 ( 96.1%) 40.6383 ( 88.8%) 445.3583 ( 95.4%) 471.9647 ( 37.7%) Clang front-end timer 15.2098 ( 3.6%) 3.3586 ( 7.3%) 18.5684 ( 4.0%) 398.1242 ( 31.8%) Reading modules 420.9899 (100.0%) 45.7474 (100.0%) 466.7373 (100.0%) 1251.6300 (100.0%) Total ``` `perf record -g` / `perf report` give the following picture: ``` Children Self Command Shared Object Symbol + 94.85% 0.00% clang clang [.] clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) [clone .__uniq.16014532493918845222783194145290083557] ◆ + 93.47% 0.00% clang clang [.] clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) ▒ + 93.37% 83.51% clang clang [.] clang::ASTReader::LoadExternalSpecializations(clang::Decl const*, bool) ▒ + 93.19% 0.00% clang clang [.] clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) [clone .__uniq.16014532493918845222783194▒ + 93.08% 0.00% clang clang [.] clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformUnresolvedLookupExpr(clang::UnresolvedLookupExpr*, bool) [clone .__uniq.1601453249▒ + 92.98% 0.00% clang clang [.] clang::Sema::BuildTemplateIdExpr(clang::CXXScopeSpec const&, clang::SourceLocation, clang::LookupResult&, bool, clang::TemplateArgumentListInfo const*) ▒ + 92.44% 0.00% clang clang [.] clang::Sema::CheckVarTemplateId(clang::VarTemplateDecl*, clang::SourceLocation, clang::SourceLocation, clang::TemplateArgumentListInfo const&) ▒ + 92.08% 0.00% clang clang [.] clang::Sema::InstantiateVariableInitializer(clang::VarDecl*, clang::VarDecl*, clang::MultiLevelTemplateArgumentList const&) ▒ + 91.87% 0.00% clang clang [.] clang::VarTemplateDecl::getPartialSpecializations(llvm::SmallVectorImpl<clang::VarTemplatePartialSpecializationDecl*>&) const ▒ + 91.18% 0.00% clang clang [.] clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformBinaryOperator(clang::BinaryOperator*) [clone .__uniq.1601453249391884522278319414▒ + 91.07% 0.00% clang clang [.] clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExprs(clang::Expr* const*, unsigned int, bool, llvm::SmallVectorImpl<clang::Expr*>▒ + 90.70% 0.01% clang clang [.] clang::Sema::InstantiateVariableDefinition(clang::SourceLocation, clang::VarDecl*, bool, bool, bool) ▒ + 90.41% 0.01% clang clang [.] clang::Sema::BuildDeclarationNameExpr(clang::CXXScopeSpec const&, clang::DeclarationNameInfo const&, clang::NamedDecl*, clang::NamedDecl*, clang::TemplateArgu▒ + 90.29% 0.00% clang clang [.] clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformInitListExpr(clang::InitListExpr*) [clone .__uniq.16014532493918845222783194145290▒ + 89.92% 0.00% clang clang [.] clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformParenExpr(clang::ParenExpr*) [clone .__uniq.16014532493918845222783194145290083557▒ + 89.23% 0.00% clang clang [.] clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformConditionalOperator(clang::ConditionalOperator*) [clone .__uniq.160145324939188452▒ + 84.49% 0.02% clang clang [.] clang::Sema::RequireCompleteTypeImpl(clang::SourceLocation, clang::QualType, clang::Sema::CompleteTypeKind, clang::Sema::TypeDiagnoser*) ▒ + 84.47% 0.00% clang clang [.] clang::Sema::InstantiateClassTemplateSpecialization(clang::SourceLocation, clang::ClassTemplateSpecializationDecl*, clang::TemplateSpecializationKind, bool) ▒ + 84.07% 0.01% clang clang [.] clang::Sema::InstantiateClass(clang::SourceLocation, clang::CXXRecordDecl*, clang::CXXRecordDecl*, clang::MultiLevelTemplateArgumentList const&, clang::Templa▒ + 82.84% 0.02% clang clang [.] clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) [clone .__uniq.1601453249391884522278▒ + 82.23% 0.02% clang clang [.] clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateSpecializationType(clang::TypeLocBuilder&, clang::TemplateSpecializationTy▒ + 81.99% 0.01% clang clang [.] (anonymous namespace)::TemplateInstantiator::TransformTemplateArgument(clang::TemplateArgumentLoc const&, clang::TemplateArgumentLoc&, bool) [clone .__uniq.16▒ + 81.54% 0.00% clang clang [.] clang::Sema::RequireCompleteDeclContext(clang::CXXScopeSpec&, clang::DeclContext*) ▒ + 80.18% 0.01% clang clang [.] clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeSourceInfo*) [clone .__uniq.16014532493918845222783194145290083557▒ + 79.88% 0.12% clang clang [.] clang::Sema::CheckTemplateIdType(clang::TemplateName, clang::SourceLocation, clang::TemplateArgumentListInfo&) ▒ ``` I can try to build clang with better debug information and get a higher fidelity profile, but hopefully this already shows the direction to look at. https://github.com/llvm/llvm-project/pull/83237 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits