wingo pushed a commit to branch wip-whippet
in repository guile.

commit 6aa6f3a25722c2ec8ebaf6305dc53e68c0f9a971
Author: Andy Wingo <wi...@igalia.com>
AuthorDate: Wed Jul 2 11:38:30 2025 +0200

    Nofl space doesn't track ephemerons
    
    Instead, we rely on ephemerons being traced precisely, and thus having a
    tag word.
---
 src/gc-trace.h   |  3 +--
 src/mmc.c        | 10 +---------
 src/nofl-space.h | 15 +--------------
 3 files changed, 3 insertions(+), 25 deletions(-)

diff --git a/src/gc-trace.h b/src/gc-trace.h
index cc1dd2808..2906d94c7 100644
--- a/src/gc-trace.h
+++ b/src/gc-trace.h
@@ -31,8 +31,7 @@ static inline int gc_has_conservative_roots(void) {
 enum gc_trace_kind {
   GC_TRACE_PRECISELY,
   GC_TRACE_NONE,
-  GC_TRACE_CONSERVATIVELY,
-  GC_TRACE_EPHEMERON,
+  GC_TRACE_CONSERVATIVELY
 };
 
 struct gc_trace_plan {
diff --git a/src/mmc.c b/src/mmc.c
index 0dce510b3..d81a400a4 100644
--- a/src/mmc.c
+++ b/src/mmc.c
@@ -435,10 +435,6 @@ trace_one(struct gc_ref ref, struct gc_heap *heap,
                                heap, worker);
       break;
     }
-    case GC_TRACE_EPHEMERON:
-      gc_trace_ephemeron(gc_ref_heap_object(ref), tracer_visit, heap,
-                         worker);
-      break;
     default:
       GC_CRASH();
   }
@@ -1154,11 +1150,7 @@ gc_write_barrier_slow(struct gc_mutator *mut, struct 
gc_ref obj,
   
 struct gc_ephemeron*
 gc_allocate_ephemeron(struct gc_mutator *mut) {
-  struct gc_ref ret =
-    gc_ref_from_heap_object(gc_allocate(mut, gc_ephemeron_size(),
-                                        GC_ALLOCATION_TAGGED));
-  nofl_space_set_ephemeron_flag(ret);
-  return gc_ref_heap_object(ret);
+  return gc_allocate (mut, gc_ephemeron_size(), GC_ALLOCATION_TAGGED);
 }
 
 void
diff --git a/src/nofl-space.h b/src/nofl-space.h
index 699c69c2d..b9a9b6b25 100644
--- a/src/nofl-space.h
+++ b/src/nofl-space.h
@@ -250,7 +250,7 @@ enum nofl_metadata_byte {
   NOFL_METADATA_BYTE_TRACE_PRECISELY = 0,
   NOFL_METADATA_BYTE_TRACE_NONE = 8,
   NOFL_METADATA_BYTE_TRACE_CONSERVATIVELY = 16,
-  NOFL_METADATA_BYTE_TRACE_EPHEMERON = 24,
+  NOFL_METADATA_BYTE_TRACE_UNUSED = 24,
   NOFL_METADATA_BYTE_TRACE_KIND_MASK = 0|8|16|24,
   NOFL_METADATA_BYTE_PINNED = 16,
   NOFL_METADATA_BYTE_END = 32,
@@ -971,15 +971,6 @@ nofl_finish_sweeping(struct nofl_allocator *alloc,
   while (nofl_allocator_next_hole(alloc, space, 0)) {}
 }
 
-static void
-nofl_space_set_ephemeron_flag(struct gc_ref ref) {
-  if (gc_has_conservative_intraheap_edges()) {
-    uint8_t *metadata = nofl_metadata_byte_for_object(ref);
-    uint8_t byte = *metadata & ~NOFL_METADATA_BYTE_TRACE_KIND_MASK;
-    *metadata = byte | NOFL_METADATA_BYTE_TRACE_EPHEMERON;
-  }
-}
-
 struct gc_trace_worker;
 
 static inline int
@@ -1821,8 +1812,6 @@ nofl_metadata_byte_trace_kind(uint8_t byte)
 #if GC_CONSERVATIVE_TRACE
   case NOFL_METADATA_BYTE_TRACE_CONSERVATIVELY:
     return GC_TRACE_CONSERVATIVELY;
-  case NOFL_METADATA_BYTE_TRACE_EPHEMERON:
-    return GC_TRACE_EPHEMERON;
 #endif
     default:
       GC_CRASH();
@@ -1842,8 +1831,6 @@ nofl_space_object_trace_plan(struct nofl_space *space, 
struct gc_ref ref) {
       size_t granules = nofl_space_live_object_granules(loc);
       return (struct gc_trace_plan){ kind, granules * NOFL_GRANULE_SIZE };
     }
-    case GC_TRACE_EPHEMERON:
-      return (struct gc_trace_plan){ kind, };
 #endif
     default:
       GC_CRASH();

Reply via email to