[clang] [clang][bytecode] Avoid copying function call arguments (PR #218399)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 24 06:00:18 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Timm Baeder (tbaederr)
<details>
<summary>Changes</summary>
In most cases, we dony' need the SmallVector (we only use it to reverse the arguments in the assignment operator case).
---
Full diff: https://github.com/llvm/llvm-project/pull/218399.diff
1 Files Affected:
- (modified) clang/lib/AST/ByteCode/Compiler.cpp (+6-3)
``````````diff
diff --git a/clang/lib/AST/ByteCode/Compiler.cpp b/clang/lib/AST/ByteCode/Compiler.cpp
index 87d23bf5df0c8..8e139997c2ed1 100644
--- a/clang/lib/AST/ByteCode/Compiler.cpp
+++ b/clang/lib/AST/ByteCode/Compiler.cpp
@@ -6207,7 +6207,8 @@ bool Compiler<Emitter>::VisitCallExpr(const CallExpr *E) {
}
}
- SmallVector<const Expr *, 8> Args(ArrayRef(E->getArgs(), E->getNumArgs()));
+ ArrayRef<const Expr *> Args(E->getArgs(), E->getNumArgs());
+ const Expr *ReversedArgs[2];
bool IsAssignmentOperatorCall = false;
bool ActivateLHS = false;
@@ -6220,7 +6221,9 @@ bool Compiler<Emitter>::VisitCallExpr(const CallExpr *E) {
const CXXRecordDecl *LHSRecord = Args[0]->getType()->getAsCXXRecordDecl();
ActivateLHS = LHSRecord && LHSRecord->hasTrivialDefaultConstructor();
IsAssignmentOperatorCall = true;
- std::reverse(Args.begin(), Args.end());
+ ReversedArgs[0] = Args[1];
+ ReversedArgs[1] = Args[0];
+ Args = ReversedArgs;
}
// Calling a static operator will still
// pass the instance, but we don't need it.
@@ -6231,7 +6234,7 @@ bool Compiler<Emitter>::VisitCallExpr(const CallExpr *E) {
if (!this->discard(E->getArg(0)))
return false;
// Drop first arg.
- Args.erase(Args.begin());
+ Args = Args.drop_front();
}
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/218399
More information about the cfe-commits
mailing list