[clang] [clang][bytecode] Optimize `PtrView::isOnePastEnd()` (PR #218375)
Timm Baeder via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 24 06:02:53 PDT 2026
https://github.com/tbaederr updated https://github.com/llvm/llvm-project/pull/218375
>From 71371357b34cba0d66637a85cb0d1add8b2197bb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbaeder at redhat.com>
Date: Sun, 23 Aug 2026 07:15:27 +0200
Subject: [PATCH] isonepastend
---
clang/lib/AST/ByteCode/Pointer.h | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/clang/lib/AST/ByteCode/Pointer.h b/clang/lib/AST/ByteCode/Pointer.h
index 78768929f3487..1e6ee372276bf 100644
--- a/clang/lib/AST/ByteCode/Pointer.h
+++ b/clang/lib/AST/ByteCode/Pointer.h
@@ -189,9 +189,21 @@ struct PtrView {
if (!Pointee)
return false;
- if (isUnknownSizeArray())
+ const Descriptor *Desc = getFieldDesc();
+ if (Desc->isUnknownSizeArray())
return false;
- return isPastEnd() || (getSize() == getOffset());
+
+ if (isPastEnd())
+ return true;
+
+ if (Offset != Base) {
+ unsigned Adjust =
+ Desc->ElemDesc ? sizeof(InlineDescriptor) : sizeof(InitMapPtr);
+ unsigned Off = Offset - Base - Adjust;
+ return Desc->getSize() == Off;
+ }
+
+ return Desc->getSize() == 0;
}
PtrView atIndex(unsigned Idx) const {
@@ -834,10 +846,7 @@ class Pointer {
if (!BS.Pointee)
return false;
- if (isUnknownSizeArray())
- return false;
-
- return isPastEnd() || (getSize() == getOffset());
+ return view().isOnePastEnd();
}
/// Checks if the pointer points past the end of the object.
More information about the cfe-commits
mailing list