[PATCH] D58827: [Sema][NFCI] Don't heap-allocate the various CorrectionCandidateCallback unless we are going to do some typo correction
Bruno Ricci via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Mar 1 06:33:34 PST 2019
riccibruno created this revision.
riccibruno added reviewers: aaron.ballman, rnk, erik.pilkington.
riccibruno added a project: clang.
Herald added a subscriber: cfe-commits.
The various `CorrectionCandidateCallback`s are currently heap-allocated unconditionally. This was needed because of delayed typo correction. However these allocations represent currently 15.4% of all allocations (number of allocations) when parsing all of Boost (!), mostly because of `ParseCastExpression`, `ParseStatementOrDeclarationAfterAttrtibutes` and `isCXXDeclarationSpecifier`. Note that all of these callback objects are small. Let's not do this.
Instead initially allocate the callback on the stack, and only do a heap allocation if we are going to do some typo correction. Do this by:
1. Adding a `clone` function to each callback, which will do a polymorphic clone of the callback. This clone function is required to be implemented by every callback (of which there is a fair amount). Make sure this is the case by making it pure virtual.
2. Use this `clone` function when we are going to try to correct a typo.
This additionally cut the time of `-fsyntax-only` on all of Boost by 0.5% (not that much, but still something). No functional changes intended.
Repository:
rC Clang
https://reviews.llvm.org/D58827
Files:
include/clang/Parse/Parser.h
include/clang/Sema/Sema.h
include/clang/Sema/TypoCorrection.h
lib/Parse/ParseDecl.cpp
lib/Parse/ParseExpr.cpp
lib/Parse/ParseExprCXX.cpp
lib/Parse/ParseStmt.cpp
lib/Parse/ParseTentative.cpp
lib/Parse/Parser.cpp
lib/Sema/SemaCXXScopeSpec.cpp
lib/Sema/SemaCodeComplete.cpp
lib/Sema/SemaDecl.cpp
lib/Sema/SemaDeclCXX.cpp
lib/Sema/SemaDeclObjC.cpp
lib/Sema/SemaExpr.cpp
lib/Sema/SemaExprMember.cpp
lib/Sema/SemaExprObjC.cpp
lib/Sema/SemaInit.cpp
lib/Sema/SemaLambda.cpp
lib/Sema/SemaLookup.cpp
lib/Sema/SemaOpenMP.cpp
lib/Sema/SemaOverload.cpp
lib/Sema/SemaTemplate.cpp
lib/Sema/SemaTemplateVariadic.cpp
lib/Sema/SemaType.cpp
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D58827.188889.patch
Type: text/x-patch
Size: 59707 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190301/ff2e7d2f/attachment-0001.bin>
More information about the cfe-commits
mailing list