Skip to content

Commit 146962d

Browse files
LeszekSwirskiV8 LUCI CQ
authored andcommitted
[heap] Store FreeSpace size in multiples of tagged words
Since FreeSpace has to be aligned to Tagged words, we can support larger free spaces by storing the size in words rather than bytes. Bug: 417413670 Change-Id: I19ef4921e00a5ec23d39ff4aa5b379b36fc86e0a Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/6596680 Commit-Queue: Leszek Swirski <[email protected]> Reviewed-by: Michael Lippautz <[email protected]> Auto-Submit: Leszek Swirski <[email protected]> Cr-Commit-Position: refs/heads/main@{#100590}
1 parent cb6d97d commit 146962d

File tree

5 files changed

+10
-19
lines changed

5 files changed

+10
-19
lines changed

src/compiler/access-builder.cc

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -896,15 +896,6 @@ FieldAccess AccessBuilder::ForNameRawHashField() {
896896
return access;
897897
}
898898

899-
// static
900-
FieldAccess AccessBuilder::ForFreeSpaceSize() {
901-
FieldAccess access = {kTaggedBase, offsetof(FreeSpace, size_),
902-
MaybeHandle<Name>(), OptionalMapRef(),
903-
Type::SignedSmall(), MachineType::TaggedSigned(),
904-
kNoWriteBarrier};
905-
return access;
906-
}
907-
908899
// static
909900
FieldAccess AccessBuilder::ForStringLength() {
910901
FieldAccess access = {kTaggedBase,

src/compiler/access-builder.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -267,9 +267,6 @@ class V8_EXPORT_PRIVATE AccessBuilder final
267267
// Provides access to Name::raw_hash_field() field.
268268
static FieldAccess ForNameRawHashField();
269269

270-
// Provides access to FreeSpace::size() field
271-
static FieldAccess ForFreeSpaceSize();
272-
273270
// Provides access to String::length() field.
274271
static FieldAccess ForStringLength();
275272

src/diagnostics/objects-debug.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -388,8 +388,8 @@ void HeapObject::VerifyCodePointer(Isolate* isolate, Tagged<Object> p) {
388388
void FreeSpace::FreeSpaceVerify(Isolate* isolate) {
389389
CHECK(IsFreeSpace(this));
390390
{
391-
Tagged<Object> size = size_.Relaxed_Load();
392-
CHECK(IsSmi(size));
391+
Tagged<Object> size_in_tagged = size_in_tagged_.Relaxed_Load();
392+
CHECK(IsSmi(size_in_tagged));
393393
}
394394
}
395395

src/objects/free-space-inl.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,18 @@ namespace v8 {
2020
namespace internal {
2121

2222
int FreeSpace::size(RelaxedLoadTag) const {
23-
return size_.Relaxed_Load().value();
23+
return size_in_tagged_.Relaxed_Load().value() * kTaggedSize;
2424
}
2525

2626
// static
2727
inline void FreeSpace::SetSize(const WritableFreeSpace& writable_free_space,
2828
int size, RelaxedStoreTag tag) {
29-
writable_free_space.WriteHeaderSlot<Smi, offsetof(FreeSpace, size_)>(
30-
Smi::FromInt(size), tag);
29+
// For size <= 2 * kTaggedSize, we expect to use one/two pointer filler maps.
30+
DCHECK_GT(size, 2 * kTaggedSize);
31+
DCHECK_EQ(size % kTaggedSize, 0);
32+
writable_free_space
33+
.WriteHeaderSlot<Smi, offsetof(FreeSpace, size_in_tagged_)>(
34+
Smi::FromInt(size / kTaggedSize), tag);
3135
}
3236

3337
int FreeSpace::Size() { return size(kRelaxedLoad); }

src/objects/free-space.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,10 @@ class FreeSpace : public HeapObjectLayout {
5151

5252
private:
5353
friend class Heap;
54-
friend class compiler::AccessBuilder;
5554

5655
inline bool IsValid() const;
5756

58-
TaggedMember<Smi> size_;
57+
TaggedMember<Smi> size_in_tagged_;
5958
#ifdef V8_EXTERNAL_CODE_SPACE
6059
TaggedMember<Smi> next_;
6160
#else

0 commit comments

Comments
 (0)