[clang] 450ef6d - [clang][bytecode] Shrink `InterpFrame` size a bit (#219765)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Aug 30 00:14:59 PDT 2026
Author: Timm Baeder
Date: 2026-08-30T09:14:54+02:00
New Revision: 450ef6da8290db16322dcd75dbaf76634b52d5f2
URL: https://github.com/llvm/llvm-project/commit/450ef6da8290db16322dcd75dbaf76634b52d5f2
DIFF: https://github.com/llvm/llvm-project/commit/450ef6da8290db16322dcd75dbaf76634b52d5f2.diff
LOG: [clang][bytecode] Shrink `InterpFrame` size a bit (#219765)
Reorder members to reduce the size from 80 to 72 bytes (debug builds on
64bit systems).
Added:
Modified:
clang/lib/AST/ByteCode/InterpFrame.cpp
clang/lib/AST/ByteCode/InterpFrame.h
Removed:
################################################################################
diff --git a/clang/lib/AST/ByteCode/InterpFrame.cpp b/clang/lib/AST/ByteCode/InterpFrame.cpp
index 8111cba9e319c..c41190dd26b2d 100644
--- a/clang/lib/AST/ByteCode/InterpFrame.cpp
+++ b/clang/lib/AST/ByteCode/InterpFrame.cpp
@@ -24,13 +24,14 @@ using namespace clang;
using namespace clang::interp;
InterpFrame::InterpFrame(InterpState &S)
- : Caller(nullptr), S(S), Depth(0), Func(nullptr), RetPC(CodePtr()),
- ArgSize(0), Args(nullptr) {}
+ : Caller(nullptr), S(S), Func(nullptr), RetPC(CodePtr()), Args(nullptr),
+ ArgSize(0), Depth(0) {}
InterpFrame::InterpFrame(InterpState &S, const Function *Func,
InterpFrame *Caller, CodePtr RetPC, unsigned ArgSize)
- : Caller(Caller), S(S), Depth(Caller ? Caller->Depth + 1 : 0), Func(Func),
- RetPC(RetPC), ArgSize(ArgSize), Args(static_cast<char *>(S.Stk.top())) {
+ : Caller(Caller), S(S), Func(Func), RetPC(RetPC),
+ Args(static_cast<char *>(S.Stk.top())), ArgSize(ArgSize),
+ Depth(Caller ? Caller->Depth + 1 : 0) {
#ifndef NDEBUG
FrameOffset = S.Stk.size();
#endif
diff --git a/clang/lib/AST/ByteCode/InterpFrame.h b/clang/lib/AST/ByteCode/InterpFrame.h
index 3322136372846..c195165e6219f 100644
--- a/clang/lib/AST/ByteCode/InterpFrame.h
+++ b/clang/lib/AST/ByteCode/InterpFrame.h
@@ -26,9 +26,6 @@ class Pointer;
/// Frame storing local variables.
class InterpFrame final : public Frame {
public:
- /// The frame of the previous function.
- InterpFrame *Caller;
-
/// Bottom Frame.
InterpFrame(InterpState &S);
@@ -220,23 +217,27 @@ class InterpFrame final : public Frame {
return reinterpret_cast<InlineDescriptor *>(locals() + Offset);
}
+public:
+ /// The frame of the previous function.
+ InterpFrame *Caller;
+
private:
/// Reference to the interpreter state.
InterpState &S;
- /// Depth of this frame.
- unsigned Depth;
/// Reference to the function being executed.
const Function *Func;
/// Return address.
CodePtr RetPC;
- /// The size of all the arguments.
- const unsigned ArgSize;
/// Pointer to the arguments in the callee's frame.
char *Args = nullptr;
#ifndef NDEBUG
/// Offset on the stack at entry.
size_t FrameOffset = 0;
#endif
+ /// The size of all the arguments.
+ const unsigned ArgSize;
+ /// Depth of this frame.
+ unsigned Depth;
public:
unsigned MSVCConstexprAllowed = 0;
More information about the cfe-commits
mailing list