Author: Timm Baeder Date: 2026-08-09T17:49:07+02:00 New Revision: cd40fd754c7ad052ef5ffe133f548635881778e7
URL: https://github.com/llvm/llvm-project/commit/cd40fd754c7ad052ef5ffe133f548635881778e7 DIFF: https://github.com/llvm/llvm-project/commit/cd40fd754c7ad052ef5ffe133f548635881778e7.diff LOG: [clang][bytecode] Use PtrView in finishGlobalRecurse() (#215088) So we create fewer Pointer instances. Added: Modified: clang/lib/AST/ByteCode/Interp.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/ByteCode/Interp.cpp b/clang/lib/AST/ByteCode/Interp.cpp index f7e74811cc9f5..4bc02967939e3 100644 --- a/clang/lib/AST/ByteCode/Interp.cpp +++ b/clang/lib/AST/ByteCode/Interp.cpp @@ -2908,8 +2908,7 @@ bool arePotentiallyOverlappingStringLiterals(const Pointer &LHS, return Shorter == Longer.take_front(Shorter.size()); } -static void copyPrimitiveMemory(InterpState &S, const Pointer &Ptr, - PrimType T) { +static void copyPrimitiveMemory(InterpState &S, PtrView Ptr, PrimType T) { if (T == PT_IntAPS) { auto &Val = Ptr.deref<IntegralAP<true>>(); if (!Val.singleWord()) { @@ -2938,7 +2937,7 @@ static void copyPrimitiveMemory(InterpState &S, const Pointer &Ptr, } template <typename T> -static void copyPrimitiveMemory(InterpState &S, const Pointer &Ptr) { +static void copyPrimitiveMemory(InterpState &S, PtrView Ptr) { assert(needsAlloc<T>()); if constexpr (std::is_same_v<T, MemberPointer>) { auto &Val = Ptr.deref<MemberPointer>(); @@ -2955,7 +2954,7 @@ static void copyPrimitiveMemory(InterpState &S, const Pointer &Ptr) { } } -static void finishGlobalRecurse(InterpState &S, const Pointer &Ptr) { +static void finishGlobalRecurse(InterpState &S, PtrView Ptr) { if (const Record *R = Ptr.getRecord()) { for (const Record::Field &Fi : R->fields()) { if (Fi.Desc->isPrimitive()) { @@ -2979,7 +2978,7 @@ static void finishGlobalRecurse(InterpState &S, const Pointer &Ptr) { if (!needsAlloc(PT)) return; assert(NumElems >= 1); - const Pointer EP = Ptr.atIndex(0); + PtrView EP = Ptr.atIndex(0); bool AllSingleWord = true; TYPE_SWITCH_ALLOC(PT, { if (!EP.deref<T>().singleWord()) { @@ -2990,13 +2989,13 @@ static void finishGlobalRecurse(InterpState &S, const Pointer &Ptr) { if (AllSingleWord) return; for (unsigned I = 1; I != D->getNumElems(); ++I) { - const Pointer EP = Ptr.atIndex(I); + PtrView EP = Ptr.atIndex(I); copyPrimitiveMemory(S, EP, PT); } } else { assert(D->isCompositeArray()); for (unsigned I = 0; I != D->getNumElems(); ++I) { - const Pointer EP = Ptr.atIndex(I).narrow(); + PtrView EP = Ptr.atIndex(I).narrow(); finishGlobalRecurse(S, EP); } } @@ -3006,7 +3005,7 @@ static void finishGlobalRecurse(InterpState &S, const Pointer &Ptr) { bool FinishInitGlobal(InterpState &S) { const Pointer &Ptr = S.Stk.pop<Pointer>(); - finishGlobalRecurse(S, Ptr); + finishGlobalRecurse(S, Ptr.view()); if (Ptr.canBeInitialized()) { Ptr.initialize(); Ptr.activate(); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
