[clang] [Clang] Optimize some `getBeginLoc` implementations (PR #141058)
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Thu May 22 06:02:10 PDT 2025
================
@@ -1510,41 +1519,41 @@ CallExpr *CallExpr::Create(const ASTContext &Ctx, Expr *Fn,
unsigned NumArgs = std::max<unsigned>(Args.size(), MinNumArgs);
unsigned SizeOfTrailingObjects = CallExpr::sizeOfTrailingObjects(
/*NumPreArgs=*/0, NumArgs, FPFeatures.requiresTrailingStorage());
- void *Mem =
- Ctx.Allocate(sizeof(CallExpr) + SizeOfTrailingObjects, alignof(CallExpr));
- return new (Mem) CallExpr(CallExprClass, Fn, /*PreArgs=*/{}, Args, Ty, VK,
- RParenLoc, FPFeatures, MinNumArgs, UsesADL);
+ void *Mem = Ctx.Allocate(
+ sizeToAllocateForCallExprSubclass<CallExpr>(SizeOfTrailingObjects),
+ alignof(CallExpr));
+ CallExpr *E =
+ new (Mem) CallExpr(CallExprClass, Fn, /*PreArgs=*/{}, Args, Ty, VK,
+ RParenLoc, FPFeatures, MinNumArgs, UsesADL);
+ E->updateTrailingSourceLocs();
+ return E;
}
CallExpr *CallExpr::CreateEmpty(const ASTContext &Ctx, unsigned NumArgs,
bool HasFPFeatures, EmptyShell Empty) {
unsigned SizeOfTrailingObjects =
CallExpr::sizeOfTrailingObjects(/*NumPreArgs=*/0, NumArgs, HasFPFeatures);
- void *Mem =
- Ctx.Allocate(sizeof(CallExpr) + SizeOfTrailingObjects, alignof(CallExpr));
+ void *Mem = Ctx.Allocate(
+ sizeToAllocateForCallExprSubclass<CallExpr>(SizeOfTrailingObjects),
+ alignof(CallExpr));
return new (Mem)
CallExpr(CallExprClass, /*NumPreArgs=*/0, NumArgs, HasFPFeatures, Empty);
}
-unsigned CallExpr::offsetToTrailingObjects(StmtClass SC) {
- switch (SC) {
- case CallExprClass:
- return sizeof(CallExpr);
- case CXXOperatorCallExprClass:
- return sizeof(CXXOperatorCallExpr);
- case CXXMemberCallExprClass:
- return sizeof(CXXMemberCallExpr);
- case UserDefinedLiteralClass:
- return sizeof(UserDefinedLiteral);
- case CUDAKernelCallExprClass:
- return sizeof(CUDAKernelCallExpr);
- default:
- llvm_unreachable("unexpected class deriving from CallExpr!");
- }
-}
-
Decl *Expr::getReferencedDeclOfCallee() {
- Expr *CEE = IgnoreParenImpCasts();
+
+ // Optimize for the common case first
+ // (simple function or member function call)
+ // then try more exotic possibilities
----------------
AaronBallman wrote:
```suggestion
// then try more exotic possibilities.
```
https://github.com/llvm/llvm-project/pull/141058
More information about the cfe-commits
mailing list