diff --git a/benchmarks/runtime_handle_scopes/README.md b/benchmarks/runtime_handle_scopes/README.md new file mode 100644 index 0000000000..29e70d76c7 --- /dev/null +++ b/benchmarks/runtime_handle_scopes/README.md @@ -0,0 +1,127 @@ +# Runtime handle scopes — 2026-09-14 + +Baseline: `9fda98df68d9fac3c08b2385fae007aa9f5278df` (Perry 0.5.1563). +Linux host: perrymaster.skelpo.net, x86_64. The baseline was built from a clean +worktree; the promise profile was recorded before runtime edits began. + +## Instruction counts + +Whole-program user instructions, `perf stat -e instructions:u -r 3`: + +| workload | baseline | changed | reduction | +|---|---:|---:|---:| +| 100,000 promise/await iterations | 1,100,168,994 | 1,050,989,735 | 4.47% | +| 100,000 JSON round-trips | 3,190,619,152 | 3,132,631,719 | 1.82% | +| Original hoisted regex `test` probe | 13,773,038,016 | 13,003,278,589 | 5.59% | +| Original regex `exec1` probe | 31,188,918,430 | 29,854,497,805 | 4.28% | + +Every binary's stdout matched Node 26.5.1. These are complete workload counts, +including startup and input construction, without subtracting a loop control. +No wall-clock speedup is claimed on the shared host. The measured build uses +the repository's release profile with 16 codegen units, debug level 1, and no +symbol stripping; both sides use identical settings and package selections. + +`perf record -e instructions:u -c 1000003 --call-graph dwarf` produced the +folded stacks in `evidence/`. The pre-edit promise profile had 1,097 samples; +4.10% of leaves named runtime handles or operations on their slots. JSON had +3,189 samples and 3.98% such leaves. This classifier includes inlined primitive +slot loads/stores, not just function-call overhead. The corresponding changed +shares are 4.29% and 0.48%; residual handle work does not vanish in every probe. +Inclusive shares also contain callbacks invoked through handle helpers and +must not be interpreted as the cost of rooting itself. Instruction totals, +rather than these small sampled shares, are the performance verdict. + +## Reproduction + +Build each source tree independently with the same environment: + +```sh +export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=16 +export CARGO_PROFILE_RELEASE_DEBUG=1 +export CARGO_PROFILE_RELEASE_STRIP=none +export CARGO_INCREMENTAL=0 +cargo build --release -p perry -p perry-runtime-static -p perry-stdlib-static +PERRY_RUNTIME_DIR="$PWD/target/release" PERRY_NO_AUTO_OPTIMIZE=1 \ + python3 benchmarks/runtime_handle_scopes/measure.py \ + --perry "$PWD/target/release/perry" --output /tmp/handle-profile +``` + +For the recorded A/B, `PERRY_BUILD_COMMIT` was pinned to the baseline SHA for +both complete builds and their compiler invocations. This intentionally permits +relinking the changed runtime while keeping coherence stamps equal; it does not +replace rebuilding both static wrappers. Compiler/archive hashes are retained +in `evidence/` and under `/root/runtime-handle-evidence/` on the measurement host. +The later GC stress build also selects `perry-ext-net` and `perry-ext-http` +to unify their Tokio configuration with the stdlib. Its runtime archive hash +is unchanged; its compiler and stdlib hashes differ from the measured build. +Raw perf data +and validation logs are also retained locally in +`/tmp/perry-runtime-handle-evidence/`. + +## Contracts and tradeoffs + +The live prefix is still `[0, top)`. Handles remain indices so buffer growth +does not invalidate them, and the scope lifetime and bounds/kind checks remain. +Scopes and handles cache a reference to non-dropping, thread-local metadata; +their `Cell`-containing referent prevents sending them between threads. Rust +scopes and handles grow from one machine word to two, while each root slot +shrinks from 24 to 16 bytes by encoding the raw tag in the variant discriminant. +The first push allocates 64 slots (1 KiB), and later growth doubles capacity. + +The existing named hot-TLS pointer and its offsets stay in place. The fallback +metadata can be accessed without filling the hot cache, preserving #9183's +initialization contract. A separate TLS guard owns the buffer, unpublishes its +cache pointer on every target, and clears the live prefix before freeing it. +Late scope destructors see empty metadata; a push after buffer destruction +fails through the destroyed owner guard instead of resurrecting storage. + +Scanners visit local slot copies and commit relocations by index. This avoids +references into reallocated storage, including a reentrant legacy Copy visitor; +a non-rewriting callback cannot have its own update overwritten. Throw restore +and scope drop both retain `Vec::truncate`'s non-growing semantics. The root +write barrier tests the existing global idle flag before decoding slot kind; +an active cycle still uses the existing per-thread shading machinery. + +## Failure evidence + +`fault-results.json` records all four injected faults: + +| fault | observed failure | +|---|---| +| Scan `[0, top - 1)` | Moving-root test: final root 256 was not relocated. | +| Skip throw-savepoint truncation | Real caught-throw test: live depth does not return to its saved value. | +| Skip root shading during marking | Marking test: newly published handle target is still white. | +| Skip cache unpublication | Late TLS destructor asserts that the cache pointer is null; process aborts. | + +All mutations were removed. The restored full runtime suite passed 3,802 tests, +with four ignored and zero failures. Regex-off checking passed. Runtime clippy +diagnostics match the clean baseline exactly, including its 12 existing +`approx_constant` errors in tests. The root-holder custody and raw-handle debt +ratchets pass without modifying their inventories. + +The GC ratchet was measured with seven runs per probe on macOS arm64. Both +builds match Node on all 14 probes, and all 126 heap/cycle/copy/promotion/free +metric medians are identical. Both fail the same 30 cells against the older +pinned artifact; this is a reproduced baseline failure, not a green pinned +ratchet. The two compressed measurements, exact comparison, and shared list +of pinned failures are in `evidence/`. RSS and wall time are excluded from +this comparison, as required by the shared-host profile. + +GC instrument smoke passes, including all 14 real probes and the forced +verification/evacuation checks. The full GC matrix matches Node in 595/602 +cells (428 PASS, 167 UNVER); every required collection mode is live. The seven +failures are the HTTP/2 pending-event fixture in all arms: its server tries +port 443, already occupied on the host, and exits without callback output. +An independently rebuilt clean Linux baseline produces the identical empty +output and bind error; `http2-baseline-comparison.json` records both results. +In a private network namespace, both binaries time out after 20 seconds without +callbacks (`http2-netns-results.json`); this fixture remains unverified. +The matrix JSON is retained without suppressing those failures. + +The full lint replay executes 83 gates: 80 pass, three fail, and two additional +CI-only checks are skipped. All three failures reproduce on the clean baseline: +public benchmark freshness, two dead-code errors in unchanged WebAssembly +helpers under the workspace warning check, and missing generated `bun-pty` +API documentation. The clean baseline compiler generates byte-identical API +documents to the changed compiler. The generated drift is retained as evidence +and is not included as an unrelated source change. diff --git a/benchmarks/runtime_handle_scopes/evidence/api-docs-drift.patch.gz b/benchmarks/runtime_handle_scopes/evidence/api-docs-drift.patch.gz new file mode 100644 index 0000000000..2914094f81 Binary files /dev/null and b/benchmarks/runtime_handle_scopes/evidence/api-docs-drift.patch.gz differ diff --git a/benchmarks/runtime_handle_scopes/evidence/baseline-artifact-sha256.txt b/benchmarks/runtime_handle_scopes/evidence/baseline-artifact-sha256.txt new file mode 100644 index 0000000000..2a6ffc7e3a --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/baseline-artifact-sha256.txt @@ -0,0 +1,3 @@ +640ea229e6db05f6fd866ab51fd9e639d7de0d8abd3386bf413b2f3e55ea578b /root/runtime-handle-scopes-20260914/target/release/perry +6ac20705316e387871b5b7e4188adeb9d76e3dcb30fc265e081b235b4c5766fe /root/runtime-handle-scopes-20260914/target/release/libperry_runtime.a +697f36b9c7821649e089877a43561ba22ce147aef7020d4e870ee7a090d06bd9 /root/runtime-handle-scopes-20260914/target/release/libperry_stdlib.a diff --git a/benchmarks/runtime_handle_scopes/evidence/baseline-exec1.folded.gz b/benchmarks/runtime_handle_scopes/evidence/baseline-exec1.folded.gz new file mode 100644 index 0000000000..b1c5813133 Binary files /dev/null and b/benchmarks/runtime_handle_scopes/evidence/baseline-exec1.folded.gz differ diff --git a/benchmarks/runtime_handle_scopes/evidence/baseline-exec1.stat b/benchmarks/runtime_handle_scopes/evidence/baseline-exec1.stat new file mode 100644 index 0000000000..189dd6603c --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/baseline-exec1.stat @@ -0,0 +1,3 @@ +# started on Mon Sep 14 03:46:30 2026 + +31188918430;;instructions:u;0.00%;2404090881;100.00;; diff --git a/benchmarks/runtime_handle_scopes/evidence/baseline-gc-ratchet.json.gz b/benchmarks/runtime_handle_scopes/evidence/baseline-gc-ratchet.json.gz new file mode 100644 index 0000000000..0926319b88 Binary files /dev/null and b/benchmarks/runtime_handle_scopes/evidence/baseline-gc-ratchet.json.gz differ diff --git a/benchmarks/runtime_handle_scopes/evidence/baseline-hoist.folded.gz b/benchmarks/runtime_handle_scopes/evidence/baseline-hoist.folded.gz new file mode 100644 index 0000000000..e5bfffccb1 Binary files /dev/null and b/benchmarks/runtime_handle_scopes/evidence/baseline-hoist.folded.gz differ diff --git a/benchmarks/runtime_handle_scopes/evidence/baseline-hoist.stat b/benchmarks/runtime_handle_scopes/evidence/baseline-hoist.stat new file mode 100644 index 0000000000..f926925167 --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/baseline-hoist.stat @@ -0,0 +1,3 @@ +# started on Mon Sep 14 03:45:11 2026 + +13773038016;;instructions:u;0.00%;845736469;100.00;; diff --git a/benchmarks/runtime_handle_scopes/evidence/baseline-json.folded.gz b/benchmarks/runtime_handle_scopes/evidence/baseline-json.folded.gz new file mode 100644 index 0000000000..0aa2a75978 Binary files /dev/null and b/benchmarks/runtime_handle_scopes/evidence/baseline-json.folded.gz differ diff --git a/benchmarks/runtime_handle_scopes/evidence/baseline-json.stat b/benchmarks/runtime_handle_scopes/evidence/baseline-json.stat new file mode 100644 index 0000000000..0f0e259f1c --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/baseline-json.stat @@ -0,0 +1,3 @@ +# started on Mon Sep 14 03:44:03 2026 + +3190619152;;instructions:u;0.00%;182814018;100.00;; diff --git a/benchmarks/runtime_handle_scopes/evidence/baseline-promises.folded.gz b/benchmarks/runtime_handle_scopes/evidence/baseline-promises.folded.gz new file mode 100644 index 0000000000..9ea94c56a5 Binary files /dev/null and b/benchmarks/runtime_handle_scopes/evidence/baseline-promises.folded.gz differ diff --git a/benchmarks/runtime_handle_scopes/evidence/baseline-promises.stat b/benchmarks/runtime_handle_scopes/evidence/baseline-promises.stat new file mode 100644 index 0000000000..856901a822 --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/baseline-promises.stat @@ -0,0 +1,3 @@ +# started on Mon Sep 14 03:43:37 2026 + +1100168994;;instructions:u;0.00%;67322145;100.00;; diff --git a/benchmarks/runtime_handle_scopes/evidence/baseline-workspace-warnings.log b/benchmarks/runtime_handle_scopes/evidence/baseline-workspace-warnings.log new file mode 100644 index 0000000000..ec02b37022 --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/baseline-workspace-warnings.log @@ -0,0 +1,163 @@ + Compiling perry-runtime v0.5.1563 (/Users/amlug/projects/perry/wt-runtime-handle-baseline/crates/perry-runtime) + Compiling aws-lc-rs v1.17.0 + Checking aws-lc-sys v0.41.0 + Checking rand_xorshift v0.4.0 + Compiling phf_shared v0.13.1 + Compiling rustls v0.23.43 + Checking nom v8.0.0 + Checking unarray v0.1.4 + Compiling fastrand v2.4.1 + Compiling phf_generator v0.13.1 + Checking proptest v1.11.0 + Checking rustls-webpki v0.103.13 + Compiling ident_case v1.0.1 + Compiling strsim v0.11.1 + Checking crypto-bigint v0.7.5 + Checking pkcs8 v0.11.0 + Checking hashbrown v0.16.1 + Checking concurrent-queue v2.5.0 + Checking parking v2.2.1 + Checking unicode-bidi v0.3.18 + Checking unicode-properties v0.1.4 + Checking tokio-rustls v0.26.4 + Checking tungstenite v0.29.0 + Checking hyper-rustls v0.27.9 + Checking reqwest v0.12.28 + Checking tokio-tungstenite v0.29.0 + Checking stringprep v0.1.5 + Checking event-listener v5.4.1 + Compiling equator-macro v0.4.2 + Compiling crunchy v0.2.4 + Compiling tiny-keccak v2.0.2 + Checking equator v0.4.2 + Checking weezl v0.1.12 + Checking hashlink v0.11.1 + Checking aligned-vec v0.6.4 + Compiling phf_codegen v0.13.1 + Checking matchers v0.2.0 + Checking sharded-slab v0.1.7 + Checking console v0.15.11 + Checking tracing-log v0.2.0 + Checking thread_local v1.1.9 + Compiling glob v0.3.3 + Checking byteorder v1.5.0 + Checking nu-ansi-term v0.50.3 + Checking dialoguer v0.11.0 + Checking tracing-subscriber v0.3.23 + Compiling clang-sys v1.8.1 + Checking v_frame v0.3.9 + Checking crypto-primes v0.7.2 + Checking pkcs1 v0.8.0-rc.4 + Compiling getrandom v0.2.17 + Checking num-rational v0.4.2 + Checking as-slice v0.2.1 + Checking atty v0.2.14 + Checking which v8.0.6 + Compiling paste v1.0.15 + Compiling unicode-segmentation v1.13.3 + Compiling once_cell v1.21.4 + Compiling av-scenechange v0.14.1 + Checking base64 v0.23.1 + Compiling built v0.8.1 + Checking rsa v0.10.0-rc.18 + Compiling convert_case v0.10.0 + Compiling rav1e v0.8.1 + Compiling const-random-macro v0.1.16 + Checking aligned v0.4.3 + Compiling phf_macros v0.13.1 + Checking no_std_io2 v0.9.4 + Compiling profiling-procmacros v1.0.18 + Compiling num-derive v0.4.2 + Compiling arg_enum_proc_macro v0.3.4 + Compiling regex-syntax v0.8.11 + Checking quick-error v2.0.1 + Compiling pastey v0.1.1 + Checking imgref v1.12.3 + Checking crc-catalog v2.5.0 + Checking y4m v0.8.0 + Checking alloc-no-stdlib v2.0.4 + Compiling unicode-xid v0.2.6 + Compiling minimal-lexical v0.2.1 + Compiling derive_more-impl v2.1.1 + Compiling nom v7.1.3 + Checking alloc-stdlib v0.2.2 + Compiling regex-automata v0.4.18 + Checking crc v3.4.0 + Checking phf v0.13.1 + Checking profiling v1.0.18 + Checking bitstream-io v4.10.0 + Compiling const-random v0.1.18 + Checking perry-container-compose v0.5.1563 (/Users/amlug/projects/perry/wt-runtime-handle-baseline/crates/perry-container-compose) + Checking av1-grain v0.2.5 + Compiling string_cache_codegen v0.6.1 + Checking rgb v0.8.53 + Checking maybe-rayon v0.1.1 + Checking miniz_oxide v0.8.9 + Compiling libloading v0.8.9 + Checking futures-intrusive v0.5.0 + Checking tokio-stream v0.1.18 + Checking crossbeam-queue v0.3.12 + Checking itertools v0.14.0 + Checking half v2.7.1 + Compiling macro_magic_core_macros v0.5.1 + Compiling derive-syn-parse v0.2.0 + Compiling simd_helpers v0.1.0 + Compiling fnv v1.0.7 + Compiling either v1.16.0 + Compiling noop_proc_macro v0.3.0 + Checking zune-core v0.5.1 + Compiling bindgen v0.72.1 + Checking precomputed-hash v0.1.1 + Checking zune-jpeg v0.5.15 + Compiling itertools v0.12.1 + Compiling darling_core v0.20.11 + Compiling macro_magic_core v0.5.1 + Checking sqlx-core v0.9.0 + Compiling web_atoms v0.2.4 + Compiling regex v1.13.1 + Checking derive_more v2.1.1 + Compiling cexpr v0.6.0 + Checking brotli-decompressor v5.0.1 + Checking loop9 v0.1.5 + Compiling darling_core v0.23.0 + Checking zune-inflate v0.2.54 + Checking fdeflate v0.3.7 + Checking core-foundation v0.10.1 + Checking security-framework-sys v2.17.0 + Checking avif-serialize v0.8.9 + Compiling system-configuration-sys v0.6.0 + Checking lebe v0.5.3 + Compiling rustc-hash v2.1.2 + Checking fax v0.2.7 + Checking byteorder-lite v0.1.0 + Compiling shlex v1.3.0 + Checking color_quant v1.1.0 + Checking pxfm v0.1.29 + Compiling bitflags v2.12.1 + Checking bit_field v0.10.3 + Checking exr v1.74.0 + Compiling darling_macro v0.23.0 + Checking moxcms v0.8.1 + Checking gif v0.14.2 + Checking image-webp v0.2.4 + Checking tiff v0.11.3 +error: function `registered_extern_handle` is never used + --> crates/perry-runtime/src/object/global_this_webassembly.rs:201:15 + | +201 | pub(crate) fn registered_extern_handle(wrapper: usize, expected_kind: &[u8]) -> Option { + | ^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: `-D dead-code` implied by `-D warnings` + = help: to override `-D warnings` add `#[expect(dead_code)]` or `#[allow(dead_code)]` + +error: function `wasm_memory_descriptor_maximum` is never used + --> crates/perry-runtime/src/object/global_this_webassembly.rs:662:4 + | +662 | fn wasm_memory_descriptor_maximum(descriptor: f64) -> u32 { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + Checking ravif v0.13.0 + Checking security-framework v3.7.0 + Checking png v0.18.1 +error: could not compile `perry-runtime` (lib) due to 2 previous errors +warning: build failed, waiting for other jobs to finish... diff --git a/benchmarks/runtime_handle_scopes/evidence/fault-omit-last-root.txt b/benchmarks/runtime_handle_scopes/evidence/fault-omit-last-root.txt new file mode 100644 index 0000000000..18f4307517 --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/fault-omit-last-root.txt @@ -0,0 +1,7 @@ + +thread 'gc::tests::runtime_roots::handle_stack::handle_stack_growth_preserves_every_moving_root_including_last' (140172551) panicked at crates/perry-runtime/src/gc/tests/runtime_roots/handle_stack.rs:36:9: +assertion `left != right` failed: root 256 was not relocated + left: 5193047556104 + right: 5193047556104 +note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace +failures: diff --git a/benchmarks/runtime_handle_scopes/evidence/fault-skip-cache-unpublish-direct.txt b/benchmarks/runtime_handle_scopes/evidence/fault-skip-cache-unpublish-direct.txt new file mode 100644 index 0000000000..c52d35f341 --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/fault-skip-cache-unpublish-direct.txt @@ -0,0 +1,5 @@ +test gc::roots::runtime_handles::tests::handle_storage_teardown_clears_cache_before_late_scope_drop ... +thread '' (140212420) panicked at crates/perry-runtime/src/gc/roots/runtime_handles/tests.rs:69:13: +assertion failed: crate::tls_hot::hot().runtime_handle_stack.get().is_null() +note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace +fatal runtime error: thread local panicked on drop, aborting diff --git a/benchmarks/runtime_handle_scopes/evidence/fault-skip-marking-barrier.txt b/benchmarks/runtime_handle_scopes/evidence/fault-skip-marking-barrier.txt new file mode 100644 index 0000000000..db6628c14a --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/fault-skip-marking-barrier.txt @@ -0,0 +1,7 @@ + +thread 'gc::tests::runtime_roots::handle_stack::handle_stack_pushes_and_updates_shade_all_kinds_during_marking' (140202315) panicked at crates/perry-runtime/src/gc/tests/runtime_roots.rs:109:9: +assertion `left != right` failed: new handle during marking should be marked + left: 0 + right: 0 +note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace +failures: diff --git a/benchmarks/runtime_handle_scopes/evidence/fault-skip-throw-truncate.txt b/benchmarks/runtime_handle_scopes/evidence/fault-skip-throw-truncate.txt new file mode 100644 index 0000000000..c136279d53 --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/fault-skip-throw-truncate.txt @@ -0,0 +1,6 @@ + +thread 'gc::tests::runtime_roots::handle_stack::handle_stack_real_throw_restores_live_outer_scope_and_ffi_roots' (140196641) panicked at crates/perry-runtime/src/gc/tests/runtime_roots/handle_stack.rs:88:5: +assertion `left == right` failed + left: 259 + right: 1 +note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace diff --git a/benchmarks/runtime_handle_scopes/evidence/fix-artifact-sha256-after-ext.txt b/benchmarks/runtime_handle_scopes/evidence/fix-artifact-sha256-after-ext.txt new file mode 100644 index 0000000000..41088dee6d --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/fix-artifact-sha256-after-ext.txt @@ -0,0 +1,3 @@ +0fe4c749815c59704150d6d3cc27307e99c1cbf76b38d546ac7224dbc7b3d9ee target/release/perry +4c4ca74d1a1c2c44a4031484becbdaed81c9ad74f40714b0fb117ce90c3c894f target/release/libperry_runtime.a +59d55f6218322b4af78ac9fd91768990490c70c408cd7a63f80b1fae783c4317 target/release/libperry_stdlib.a diff --git a/benchmarks/runtime_handle_scopes/evidence/fix-artifact-sha256-before-ext.txt b/benchmarks/runtime_handle_scopes/evidence/fix-artifact-sha256-before-ext.txt new file mode 100644 index 0000000000..264cf6a1c0 --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/fix-artifact-sha256-before-ext.txt @@ -0,0 +1,3 @@ +0a51732419d93c3d0840a3b579029ea5f4757053ec43d234234cb00d00f6baaf target/release/perry +4c4ca74d1a1c2c44a4031484becbdaed81c9ad74f40714b0fb117ce90c3c894f target/release/libperry_runtime.a +1cd675153e968f039b680651813e5606f55bab986757e40c7a98ad288941da29 target/release/libperry_stdlib.a diff --git a/benchmarks/runtime_handle_scopes/evidence/fix-exec1.folded.gz b/benchmarks/runtime_handle_scopes/evidence/fix-exec1.folded.gz new file mode 100644 index 0000000000..783b24ce28 Binary files /dev/null and b/benchmarks/runtime_handle_scopes/evidence/fix-exec1.folded.gz differ diff --git a/benchmarks/runtime_handle_scopes/evidence/fix-exec1.stat b/benchmarks/runtime_handle_scopes/evidence/fix-exec1.stat new file mode 100644 index 0000000000..012a181ae1 --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/fix-exec1.stat @@ -0,0 +1,3 @@ +# started on Mon Sep 14 04:01:58 2026 + +29854497805;;instructions:u;0.00%;2506884207;100.00;; diff --git a/benchmarks/runtime_handle_scopes/evidence/fix-gc-instrument-smoke.log b/benchmarks/runtime_handle_scopes/evidence/fix-gc-instrument-smoke.log new file mode 100644 index 0000000000..9b8c6a2a5e --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/fix-gc-instrument-smoke.log @@ -0,0 +1,70 @@ +== compiling fixture with PERRY_GC_MOVING_LOOP_POLLS=1 (the schedule needs the polls) == +perry: in-process LLVM backend active (LLVM 22.1.8) +[perry] codegen: modules finished 1/1 (100%; 0.0 min elapsed; ETA ~0.0 min) +== arm 1: instruments OFF (baseline correctness) == + [off] correct output, exit 0, quarantine retirements=0 +== arm 2: PROTECT_FROMSPACE=1, no schedule (pressure-only) == + [protect] correct output, exit 0, quarantine retirements=0 +== arm 3: PROTECT_FROMSPACE=1 + SCHEDULE_RATE=1 (the investigation pairing) == + [protect+rate1] correct output, exit 0, quarantine retirements=1236 +== arm 4: PROTECT_FROMSPACE=1 + SCHEDULE_SEED (the tunable middle) == + [protect+schedule] correct output, exit 0, quarantine retirements=287 +== arm 5: the same seed again (the reproducer property) == + [protect+schedule-repeat] correct output, exit 0, quarantine retirements=287 +== arm 6: a different seed (the sweep must explore something) == + [protect+schedule-other] correct output, exit 0, quarantine retirements=302 + + [seeded schedule] pressure-only=0 < seeded(0.25)=287 < rate-1=1236 + [seeded schedule] same seed twice: 287 == 287 (reproducible) + +== arm 7: quarantine over the gc_ratchet probes (allocation-point route) == +perry: in-process LLVM backend active (LLVM 22.1.8) +[perry] codegen: modules finished 1/1 (100%; 0.0 min elapsed; ETA ~0.0 min) +perry: in-process LLVM backend active (LLVM 22.1.8) +[perry] codegen: modules finished 1/1 (100%; 0.0 min elapsed; ETA ~0.0 min) +perry: in-process LLVM backend active (LLVM 22.1.8) +[perry] codegen: modules finished 1/1 (100%; 0.0 min elapsed; ETA ~0.0 min) +perry: in-process LLVM backend active (LLVM 22.1.8) +[perry] codegen: modules finished 1/1 (100%; 0.0 min elapsed; ETA ~0.0 min) +perry: in-process LLVM backend active (LLVM 22.1.8) +[perry] codegen: modules finished 1/1 (100%; 0.0 min elapsed; ETA ~0.0 min) +perry: in-process LLVM backend active (LLVM 22.1.8) +[perry] codegen: modules finished 1/1 (100%; 0.0 min elapsed; ETA ~0.0 min) +perry: in-process LLVM backend active (LLVM 22.1.8) +[perry] codegen: modules finished 1/1 (100%; 0.0 min elapsed; ETA ~0.0 min) +perry: in-process LLVM backend active (LLVM 22.1.8) +[perry] codegen: modules finished 1/1 (100%; 0.0 min elapsed; ETA ~0.0 min) +perry: in-process LLVM backend active (LLVM 22.1.8) +[perry] codegen: modules finished 1/1 (100%; 0.0 min elapsed; ETA ~0.0 min) +perry: in-process LLVM backend active (LLVM 22.1.8) +[perry] codegen: modules finished 1/1 (100%; 0.0 min elapsed; ETA ~0.0 min) +perry: in-process LLVM backend active (LLVM 22.1.8) +[perry] codegen: modules finished 1/1 (100%; 0.0 min elapsed; ETA ~0.0 min) +perry: in-process LLVM backend active (LLVM 22.1.8) +[perry] codegen: modules finished 1/1 (100%; 0.0 min elapsed; ETA ~0.0 min) +perry: in-process LLVM backend active (LLVM 22.1.8) +[perry] codegen: modules finished 1/1 (100%; 0.0 min elapsed; ETA ~0.0 min) +perry: in-process LLVM backend active (LLVM 22.1.8) +[perry] codegen: modules finished 1/1 (100%; 0.0 min elapsed; ETA ~0.0 min) + 14/14 probes clean over from-space quarantine + +== arm 5: PERRY_GC_SCHEDULE_RATE=1 + PERRY_GC_VERIFY_EVACUATION (#7254's pairing) == +-- 5a: the pairing on known-good code must stay clean, and must be LIVE -- + correct output, exit 0, 3869 objects copied under the verifier (live, no false positive) +-- 5b: #7254's retained-growth workload must be correct under the pairing, and LIVE -- +[perry] codegen: modules finished 1/1 (100%; 0.0 min elapsed; ETA ~0.0 min) + correct output vs node, exit 0, 12532 objects copied under the verifier (live retained-growth coverage) + +== arm 6: the schedule terminates at the DEFAULT stride, on a realistic poll count == +perry: in-process LLVM backend active (LLVM 22.1.8) +[perry] codegen: modules finished 1/1 (100%; 0.0 min elapsed; ETA ~0.0 min) + correct output in 0s (budget 90s), [gc-schedule] forced_collections=2332 copying_minors=2332 moved_objects=149070 loop_polls=400065 + +PASS: instruments inert when off (0 retirements), live when on + (pressure-only=0, rate-1=1236 retirements), program correct in all arms. + Quarantine clean over 14 real probes (allocation-point route). + RATE=1+VERIFY_EVACUATION pairing live and correct on known-good code, + and validates #7254's retained-growth workload against Node with relocation live. + The schedule terminates at the shipped default on a realistic poll count + (0s of a 90s budget) while still forcing + 2332 collections that moved 149070 objects. diff --git a/benchmarks/runtime_handle_scopes/evidence/fix-gc-ratchet.json.gz b/benchmarks/runtime_handle_scopes/evidence/fix-gc-ratchet.json.gz new file mode 100644 index 0000000000..7f060eb3f4 Binary files /dev/null and b/benchmarks/runtime_handle_scopes/evidence/fix-gc-ratchet.json.gz differ diff --git a/benchmarks/runtime_handle_scopes/evidence/fix-gc-stress-coherent.json b/benchmarks/runtime_handle_scopes/evidence/fix-gc-stress-coherent.json new file mode 100644 index 0000000000..c69d90b9dc --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/fix-gc-stress-coherent.json @@ -0,0 +1 @@ +{"node":"26.5.1","pressure_mb":"8","complete":true,"shard":{"index":1,"count":1,"corpus_total":86,"corpus_selected":86},"arms":[{"id":"default","requires":"scavenge"},{"id":"safepoint_minor","requires":"scavenge"},{"id":"evac_minor","requires":"move"},{"id":"verify_evac","requires":"scavenge"},{"id":"force_verify","requires":"move"},{"id":"cons_scan_off","requires":"scavenge"},{"id":"shipped_default","requires":"none"}],"cells":[{"test":"test_gap_repsel_canonical_i32","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_canonical_i32","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_canonical_i32","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":86128,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=86128"},{"test":"test_gap_repsel_canonical_i32","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_canonical_i32","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6462,"reclaimed":215320,"evidence":"cycles=1 evacuated=0 scavenged=6462 reclaimed=215320"},{"test":"test_gap_repsel_canonical_i32","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_canonical_i32","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_int_valued_ta_locals","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_int_valued_ta_locals","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_int_valued_ta_locals","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":12,"reclaimed":12200,"evidence":"cycles=1 evacuated=0 scavenged=12 reclaimed=12200"},{"test":"test_gap_int_valued_ta_locals","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_int_valued_ta_locals","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":12,"reclaimed":12200,"evidence":"cycles=1 evacuated=0 scavenged=12 reclaimed=12200"},{"test":"test_gap_int_valued_ta_locals","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_int_valued_ta_locals","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_loop_bounded_i32","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_loop_bounded_i32","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_loop_bounded_i32","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":84176,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=84176"},{"test":"test_gap_repsel_loop_bounded_i32","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_loop_bounded_i32","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6442,"reclaimed":210440,"evidence":"cycles=1 evacuated=0 scavenged=6442 reclaimed=210440"},{"test":"test_gap_repsel_loop_bounded_i32","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_loop_bounded_i32","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_polymorphic_coexist","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_polymorphic_coexist","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_polymorphic_coexist","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":81504,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=81504"},{"test":"test_gap_specabi_polymorphic_coexist","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_polymorphic_coexist","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6463,"reclaimed":203760,"evidence":"cycles=1 evacuated=0 scavenged=6463 reclaimed=203760"},{"test":"test_gap_specabi_polymorphic_coexist","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_polymorphic_coexist","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_reassign","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_reassign","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_reassign","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":81072,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=81072"},{"test":"test_gap_specabi_reassign","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_reassign","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6468,"reclaimed":202680,"evidence":"cycles=1 evacuated=0 scavenged=6468 reclaimed=202680"},{"test":"test_gap_specabi_reassign","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_reassign","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_recursion_escape","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_recursion_escape","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_recursion_escape","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":4,"reclaimed":2880,"evidence":"cycles=1 evacuated=0 scavenged=4 reclaimed=2880"},{"test":"test_gap_specabi_recursion_escape","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_recursion_escape","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4,"reclaimed":2880,"evidence":"cycles=1 evacuated=0 scavenged=4 reclaimed=2880"},{"test":"test_gap_specabi_recursion_escape","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_recursion_escape","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_view_detach","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_view_detach","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_view_detach","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":6,"reclaimed":3760,"evidence":"cycles=1 evacuated=0 scavenged=6 reclaimed=3760"},{"test":"test_gap_specabi_view_detach","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_view_detach","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6,"reclaimed":3760,"evidence":"cycles=1 evacuated=0 scavenged=6 reclaimed=3760"},{"test":"test_gap_specabi_view_detach","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_view_detach","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_ordinary_param_guards","arm":"default","result":"PASS","cycles":19,"evacuated":0,"scavenged":297225,"reclaimed":1283776464,"evidence":"cycles=19 evacuated=0 scavenged=297225 reclaimed=1283776464"},{"test":"test_gap_specabi_ordinary_param_guards","arm":"safepoint_minor","result":"PASS","cycles":19,"evacuated":0,"scavenged":297225,"reclaimed":1283776464,"evidence":"cycles=19 evacuated=0 scavenged=297225 reclaimed=1283776464"},{"test":"test_gap_specabi_ordinary_param_guards","arm":"evac_minor","result":"PASS","cycles":19,"evacuated":0,"scavenged":297225,"reclaimed":1285371328,"evidence":"cycles=19 evacuated=0 scavenged=297225 reclaimed=1285371328"},{"test":"test_gap_specabi_ordinary_param_guards","arm":"verify_evac","result":"PASS","cycles":21,"evacuated":0,"scavenged":387309,"reclaimed":1323827528,"evidence":"cycles=21 evacuated=0 scavenged=387309 reclaimed=1323827528"},{"test":"test_gap_specabi_ordinary_param_guards","arm":"force_verify","result":"PASS","cycles":21,"evacuated":0,"scavenged":387309,"reclaimed":1324653696,"evidence":"cycles=21 evacuated=0 scavenged=387309 reclaimed=1324653696"},{"test":"test_gap_specabi_ordinary_param_guards","arm":"cons_scan_off","result":"PASS","cycles":19,"evacuated":0,"scavenged":297225,"reclaimed":1285371328,"evidence":"cycles=19 evacuated=0 scavenged=297225 reclaimed=1285371328"},{"test":"test_gap_specabi_ordinary_param_guards","arm":"shipped_default","result":"PASS","cycles":14,"evacuated":0,"scavenged":311091,"reclaimed":1217255040,"evidence":"cycles=14 evacuated=0 scavenged=311091 reclaimed=1217255040"},{"test":"test_gap_ta_param_numeric_read","arm":"default","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":98240,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=98240"},{"test":"test_gap_ta_param_numeric_read","arm":"safepoint_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":98240,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=98240"},{"test":"test_gap_ta_param_numeric_read","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":98240,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=98240"},{"test":"test_gap_ta_param_numeric_read","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":6487,"reclaimed":245600,"evidence":"cycles=1 evacuated=0 scavenged=6487 reclaimed=245600"},{"test":"test_gap_ta_param_numeric_read","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6487,"reclaimed":245600,"evidence":"cycles=1 evacuated=0 scavenged=6487 reclaimed=245600"},{"test":"test_gap_ta_param_numeric_read","arm":"cons_scan_off","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":98240,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=98240"},{"test":"test_gap_ta_param_numeric_read","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_typedarray_param_read","arm":"default","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":94272,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=94272"},{"test":"test_gap_typedarray_param_read","arm":"safepoint_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":94272,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=94272"},{"test":"test_gap_typedarray_param_read","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":94272,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=94272"},{"test":"test_gap_typedarray_param_read","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":6494,"reclaimed":235680,"evidence":"cycles=1 evacuated=0 scavenged=6494 reclaimed=235680"},{"test":"test_gap_typedarray_param_read","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6494,"reclaimed":235680,"evidence":"cycles=1 evacuated=0 scavenged=6494 reclaimed=235680"},{"test":"test_gap_typedarray_param_read","arm":"cons_scan_off","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":94272,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=94272"},{"test":"test_gap_typedarray_param_read","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_canonical_str_locals","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_canonical_str_locals","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_canonical_str_locals","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":71,"reclaimed":29280,"evidence":"cycles=1 evacuated=0 scavenged=71 reclaimed=29280"},{"test":"test_gap_repsel_canonical_str_locals","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_canonical_str_locals","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":71,"reclaimed":29280,"evidence":"cycles=1 evacuated=0 scavenged=71 reclaimed=29280"},{"test":"test_gap_repsel_canonical_str_locals","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_canonical_str_locals","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_locals","arm":"default","result":"PASS","cycles":1,"evacuated":0,"scavenged":6499,"reclaimed":2971760,"evidence":"cycles=1 evacuated=0 scavenged=6499 reclaimed=2971760"},{"test":"test_gap_repsel_ptr_shape_locals","arm":"safepoint_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":6499,"reclaimed":2971760,"evidence":"cycles=1 evacuated=0 scavenged=6499 reclaimed=2971760"},{"test":"test_gap_repsel_ptr_shape_locals","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":6499,"reclaimed":2971760,"evidence":"cycles=1 evacuated=0 scavenged=6499 reclaimed=2971760"},{"test":"test_gap_repsel_ptr_shape_locals","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":6499,"reclaimed":2971760,"evidence":"cycles=1 evacuated=0 scavenged=6499 reclaimed=2971760"},{"test":"test_gap_repsel_ptr_shape_locals","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6499,"reclaimed":2971760,"evidence":"cycles=1 evacuated=0 scavenged=6499 reclaimed=2971760"},{"test":"test_gap_repsel_ptr_shape_locals","arm":"cons_scan_off","result":"PASS","cycles":1,"evacuated":0,"scavenged":6499,"reclaimed":2971760,"evidence":"cycles=1 evacuated=0 scavenged=6499 reclaimed=2971760"},{"test":"test_gap_repsel_ptr_shape_locals","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_barriers","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_barriers","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_barriers","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":80880,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=80880"},{"test":"test_gap_repsel_ptr_shape_barriers","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_barriers","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6448,"reclaimed":202200,"evidence":"cycles=1 evacuated=0 scavenged=6448 reclaimed=202200"},{"test":"test_gap_repsel_ptr_shape_barriers","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_barriers","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_return_shape","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":104906,"reclaimed":83126464,"evidence":"cycles=4 evacuated=0 scavenged=104906 reclaimed=83126464"},{"test":"test_gap_repsel_return_shape","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":104906,"reclaimed":83126464,"evidence":"cycles=4 evacuated=0 scavenged=104906 reclaimed=83126464"},{"test":"test_gap_repsel_return_shape","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":104906,"reclaimed":83126464,"evidence":"cycles=4 evacuated=0 scavenged=104906 reclaimed=83126464"},{"test":"test_gap_repsel_return_shape","arm":"verify_evac","result":"PASS","cycles":6,"evacuated":0,"scavenged":114327,"reclaimed":83811552,"evidence":"cycles=6 evacuated=0 scavenged=114327 reclaimed=83811552"},{"test":"test_gap_repsel_return_shape","arm":"force_verify","result":"PASS","cycles":6,"evacuated":0,"scavenged":114327,"reclaimed":85580320,"evidence":"cycles=6 evacuated=0 scavenged=114327 reclaimed=85580320"},{"test":"test_gap_repsel_return_shape","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":104906,"reclaimed":83126464,"evidence":"cycles=4 evacuated=0 scavenged=104906 reclaimed=83126464"},{"test":"test_gap_repsel_return_shape","arm":"shipped_default","result":"PASS","cycles":2,"evacuated":0,"scavenged":124204,"reclaimed":94536760,"evidence":"cycles=2 evacuated=0 scavenged=124204 reclaimed=94536760"},{"test":"test_gap_repsel_cjs_iife_return_shape","arm":"default","result":"PASS","cycles":3,"evacuated":0,"scavenged":61992,"reclaimed":45602912,"evidence":"cycles=3 evacuated=0 scavenged=61992 reclaimed=45602912"},{"test":"test_gap_repsel_cjs_iife_return_shape","arm":"safepoint_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":61992,"reclaimed":45602912,"evidence":"cycles=3 evacuated=0 scavenged=61992 reclaimed=45602912"},{"test":"test_gap_repsel_cjs_iife_return_shape","arm":"evac_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":61992,"reclaimed":45602912,"evidence":"cycles=3 evacuated=0 scavenged=61992 reclaimed=45602912"},{"test":"test_gap_repsel_cjs_iife_return_shape","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":74301,"reclaimed":42792600,"evidence":"cycles=4 evacuated=0 scavenged=74301 reclaimed=42792600"},{"test":"test_gap_repsel_cjs_iife_return_shape","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":74301,"reclaimed":42792600,"evidence":"cycles=4 evacuated=0 scavenged=74301 reclaimed=42792600"},{"test":"test_gap_repsel_cjs_iife_return_shape","arm":"cons_scan_off","result":"PASS","cycles":3,"evacuated":0,"scavenged":61992,"reclaimed":45602912,"evidence":"cycles=3 evacuated=0 scavenged=61992 reclaimed=45602912"},{"test":"test_gap_repsel_cjs_iife_return_shape","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":49811,"reclaimed":56836520,"evidence":"cycles=1 evacuated=0 scavenged=49811 reclaimed=56836520"},{"test":"test_gap_repsel_ptr_shape_elements","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_elements","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_elements","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":6466,"reclaimed":4998880,"evidence":"cycles=1 evacuated=0 scavenged=6466 reclaimed=4998880"},{"test":"test_gap_repsel_ptr_shape_elements","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_elements","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6466,"reclaimed":4998880,"evidence":"cycles=1 evacuated=0 scavenged=6466 reclaimed=4998880"},{"test":"test_gap_repsel_ptr_shape_elements","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_elements","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_holes_axis","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_holes_axis","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_holes_axis","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":89488,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=89488"},{"test":"test_gap_repsel_p4a_holes_axis","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_holes_axis","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6422,"reclaimed":223720,"evidence":"cycles=1 evacuated=0 scavenged=6422 reclaimed=223720"},{"test":"test_gap_repsel_p4a_holes_axis","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_holes_axis","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_inline_tiers","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_inline_tiers","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_inline_tiers","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":162688,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=162688"},{"test":"test_gap_repsel_p4a_inline_tiers","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_inline_tiers","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6423,"reclaimed":406720,"evidence":"cycles=1 evacuated=0 scavenged=6423 reclaimed=406720"},{"test":"test_gap_repsel_p4a_inline_tiers","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_inline_tiers","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_logical_numeric","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_logical_numeric","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_logical_numeric","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":129104,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=129104"},{"test":"test_gap_repsel_p4a_logical_numeric","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_logical_numeric","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6427,"reclaimed":322760,"evidence":"cycles=1 evacuated=0 scavenged=6427 reclaimed=322760"},{"test":"test_gap_repsel_p4a_logical_numeric","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_logical_numeric","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_numarray_barriers","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_numarray_barriers","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_numarray_barriers","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":146176,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=146176"},{"test":"test_gap_repsel_p4a3_numarray_barriers","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_numarray_barriers","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6429,"reclaimed":365440,"evidence":"cycles=1 evacuated=0 scavenged=6429 reclaimed=365440"},{"test":"test_gap_repsel_p4a3_numarray_barriers","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_numarray_barriers","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_numarray_growth","arm":"default","result":"PASS","cycles":2,"evacuated":0,"scavenged":5271,"reclaimed":10124560,"evidence":"cycles=2 evacuated=0 scavenged=5271 reclaimed=10124560"},{"test":"test_gap_repsel_p4a3_numarray_growth","arm":"safepoint_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":5271,"reclaimed":10124560,"evidence":"cycles=2 evacuated=0 scavenged=5271 reclaimed=10124560"},{"test":"test_gap_repsel_p4a3_numarray_growth","arm":"evac_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":15606,"reclaimed":21324160,"evidence":"cycles=3 evacuated=0 scavenged=15606 reclaimed=21324160"},{"test":"test_gap_repsel_p4a3_numarray_growth","arm":"verify_evac","result":"PASS","cycles":2,"evacuated":0,"scavenged":5271,"reclaimed":10124560,"evidence":"cycles=2 evacuated=0 scavenged=5271 reclaimed=10124560"},{"test":"test_gap_repsel_p4a3_numarray_growth","arm":"force_verify","result":"PASS","cycles":3,"evacuated":0,"scavenged":15606,"reclaimed":21324160,"evidence":"cycles=3 evacuated=0 scavenged=15606 reclaimed=21324160"},{"test":"test_gap_repsel_p4a3_numarray_growth","arm":"cons_scan_off","result":"PASS","cycles":2,"evacuated":0,"scavenged":5271,"reclaimed":10124560,"evidence":"cycles=2 evacuated=0 scavenged=5271 reclaimed=10124560"},{"test":"test_gap_repsel_p4a3_numarray_growth","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_ptr_numarray","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_ptr_numarray","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_ptr_numarray","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":396736,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=396736"},{"test":"test_gap_repsel_p4a3_ptr_numarray","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_ptr_numarray","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6427,"reclaimed":991840,"evidence":"cycles=1 evacuated=0 scavenged=6427 reclaimed=991840"},{"test":"test_gap_repsel_p4a3_ptr_numarray","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_ptr_numarray","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4b_field_store_elision","arm":"default","result":"PASS","cycles":1,"evacuated":0,"scavenged":6470,"reclaimed":2978240,"evidence":"cycles=1 evacuated=0 scavenged=6470 reclaimed=2978240"},{"test":"test_gap_repsel_p4b_field_store_elision","arm":"safepoint_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":6470,"reclaimed":2978240,"evidence":"cycles=1 evacuated=0 scavenged=6470 reclaimed=2978240"},{"test":"test_gap_repsel_p4b_field_store_elision","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":6470,"reclaimed":2978240,"evidence":"cycles=1 evacuated=0 scavenged=6470 reclaimed=2978240"},{"test":"test_gap_repsel_p4b_field_store_elision","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":6470,"reclaimed":2978240,"evidence":"cycles=1 evacuated=0 scavenged=6470 reclaimed=2978240"},{"test":"test_gap_repsel_p4b_field_store_elision","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6470,"reclaimed":2978240,"evidence":"cycles=1 evacuated=0 scavenged=6470 reclaimed=2978240"},{"test":"test_gap_repsel_p4b_field_store_elision","arm":"cons_scan_off","result":"PASS","cycles":1,"evacuated":0,"scavenged":6470,"reclaimed":2978240,"evidence":"cycles=1 evacuated=0 scavenged=6470 reclaimed=2978240"},{"test":"test_gap_repsel_p4b_field_store_elision","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_proven_this_frozen","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_proven_this_frozen","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_proven_this_frozen","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":87040,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=87040"},{"test":"test_gap_repsel_proven_this_frozen","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_proven_this_frozen","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6456,"reclaimed":217600,"evidence":"cycles=1 evacuated=0 scavenged=6456 reclaimed=217600"},{"test":"test_gap_repsel_proven_this_frozen","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_proven_this_frozen","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_pshape_tower_delete","arm":"default","result":"PASS","cycles":6,"evacuated":0,"scavenged":78643,"reclaimed":4463496,"evidence":"cycles=6 evacuated=0 scavenged=78643 reclaimed=4463496"},{"test":"test_gap_repsel_pshape_tower_delete","arm":"safepoint_minor","result":"PASS","cycles":6,"evacuated":0,"scavenged":78643,"reclaimed":4463496,"evidence":"cycles=6 evacuated=0 scavenged=78643 reclaimed=4463496"},{"test":"test_gap_repsel_pshape_tower_delete","arm":"evac_minor","result":"PASS","cycles":6,"evacuated":0,"scavenged":78643,"reclaimed":4463496,"evidence":"cycles=6 evacuated=0 scavenged=78643 reclaimed=4463496"},{"test":"test_gap_repsel_pshape_tower_delete","arm":"verify_evac","result":"PASS","cycles":5,"evacuated":0,"scavenged":81383,"reclaimed":1180688,"evidence":"cycles=5 evacuated=0 scavenged=81383 reclaimed=1180688"},{"test":"test_gap_repsel_pshape_tower_delete","arm":"force_verify","result":"PASS","cycles":7,"evacuated":0,"scavenged":410820,"reclaimed":1577720,"evidence":"cycles=7 evacuated=0 scavenged=410820 reclaimed=1577720"},{"test":"test_gap_repsel_pshape_tower_delete","arm":"cons_scan_off","result":"PASS","cycles":6,"evacuated":0,"scavenged":78643,"reclaimed":4463496,"evidence":"cycles=6 evacuated=0 scavenged=78643 reclaimed=4463496"},{"test":"test_gap_repsel_pshape_tower_delete","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":603888,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=603888"},{"test":"test_gap_repsel_pshape_tombstone_oldgen_delete","arm":"default","result":"PASS","cycles":6,"evacuated":0,"scavenged":78643,"reclaimed":4063696,"evidence":"cycles=6 evacuated=0 scavenged=78643 reclaimed=4063696"},{"test":"test_gap_repsel_pshape_tombstone_oldgen_delete","arm":"safepoint_minor","result":"PASS","cycles":6,"evacuated":0,"scavenged":78643,"reclaimed":4063696,"evidence":"cycles=6 evacuated=0 scavenged=78643 reclaimed=4063696"},{"test":"test_gap_repsel_pshape_tombstone_oldgen_delete","arm":"evac_minor","result":"PASS","cycles":6,"evacuated":0,"scavenged":78643,"reclaimed":4063696,"evidence":"cycles=6 evacuated=0 scavenged=78643 reclaimed=4063696"},{"test":"test_gap_repsel_pshape_tombstone_oldgen_delete","arm":"verify_evac","result":"PASS","cycles":5,"evacuated":0,"scavenged":68851,"reclaimed":993664,"evidence":"cycles=5 evacuated=0 scavenged=68851 reclaimed=993664"},{"test":"test_gap_repsel_pshape_tombstone_oldgen_delete","arm":"force_verify","result":"PASS","cycles":7,"evacuated":0,"scavenged":400539,"reclaimed":1500880,"evidence":"cycles=7 evacuated=0 scavenged=400539 reclaimed=1500880"},{"test":"test_gap_repsel_pshape_tombstone_oldgen_delete","arm":"cons_scan_off","result":"PASS","cycles":6,"evacuated":0,"scavenged":78643,"reclaimed":4063696,"evidence":"cycles=6 evacuated=0 scavenged=78643 reclaimed=4063696"},{"test":"test_gap_repsel_pshape_tombstone_oldgen_delete","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":600640,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=600640"},{"test":"test_gap_gc_ta_ctor_source_rooting","arm":"default","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":99504,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=99504"},{"test":"test_gap_gc_ta_ctor_source_rooting","arm":"safepoint_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":99504,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=99504"},{"test":"test_gap_gc_ta_ctor_source_rooting","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":99504,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=99504"},{"test":"test_gap_gc_ta_ctor_source_rooting","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":6488,"reclaimed":248760,"evidence":"cycles=1 evacuated=0 scavenged=6488 reclaimed=248760"},{"test":"test_gap_gc_ta_ctor_source_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6488,"reclaimed":248760,"evidence":"cycles=1 evacuated=0 scavenged=6488 reclaimed=248760"},{"test":"test_gap_gc_ta_ctor_source_rooting","arm":"cons_scan_off","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":99504,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=99504"},{"test":"test_gap_gc_ta_ctor_source_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_literal_operand_rooting","arm":"default","result":"PASS","cycles":11,"evacuated":0,"scavenged":347174,"reclaimed":212394664,"evidence":"cycles=11 evacuated=0 scavenged=347174 reclaimed=212394664"},{"test":"test_gap_gc_string_literal_operand_rooting","arm":"safepoint_minor","result":"PASS","cycles":11,"evacuated":0,"scavenged":347174,"reclaimed":212394664,"evidence":"cycles=11 evacuated=0 scavenged=347174 reclaimed=212394664"},{"test":"test_gap_gc_string_literal_operand_rooting","arm":"evac_minor","result":"PASS","cycles":10,"evacuated":0,"scavenged":253745,"reclaimed":235898832,"evidence":"cycles=10 evacuated=0 scavenged=253745 reclaimed=235898832"},{"test":"test_gap_gc_string_literal_operand_rooting","arm":"verify_evac","result":"PASS","cycles":13,"evacuated":0,"scavenged":425171,"reclaimed":230498992,"evidence":"cycles=13 evacuated=0 scavenged=425171 reclaimed=230498992"},{"test":"test_gap_gc_string_literal_operand_rooting","arm":"force_verify","result":"PASS","cycles":10,"evacuated":0,"scavenged":248097,"reclaimed":246885488,"evidence":"cycles=10 evacuated=0 scavenged=248097 reclaimed=246885488"},{"test":"test_gap_gc_string_literal_operand_rooting","arm":"cons_scan_off","result":"PASS","cycles":10,"evacuated":0,"scavenged":253745,"reclaimed":235898832,"evidence":"cycles=10 evacuated=0 scavenged=253745 reclaimed=235898832"},{"test":"test_gap_gc_string_literal_operand_rooting","arm":"shipped_default","result":"PASS","cycles":3,"evacuated":0,"scavenged":590263,"reclaimed":34243632,"evidence":"cycles=3 evacuated=0 scavenged=590263 reclaimed=34243632"},{"test":"test_gap_repsel_scalar_replaced_locals","arm":"default","result":"PASS","cycles":21,"evacuated":0,"scavenged":472898,"reclaimed":1684288912,"evidence":"cycles=21 evacuated=0 scavenged=472898 reclaimed=1684288912"},{"test":"test_gap_repsel_scalar_replaced_locals","arm":"safepoint_minor","result":"PASS","cycles":21,"evacuated":0,"scavenged":472898,"reclaimed":1684288912,"evidence":"cycles=21 evacuated=0 scavenged=472898 reclaimed=1684288912"},{"test":"test_gap_repsel_scalar_replaced_locals","arm":"evac_minor","result":"PASS","cycles":21,"evacuated":0,"scavenged":391460,"reclaimed":1700696248,"evidence":"cycles=21 evacuated=0 scavenged=391460 reclaimed=1700696248"},{"test":"test_gap_repsel_scalar_replaced_locals","arm":"verify_evac","result":"PASS","cycles":21,"evacuated":0,"scavenged":483784,"reclaimed":1592515720,"evidence":"cycles=21 evacuated=0 scavenged=483784 reclaimed=1592515720"},{"test":"test_gap_repsel_scalar_replaced_locals","arm":"force_verify","result":"PASS","cycles":21,"evacuated":0,"scavenged":391460,"reclaimed":1700696248,"evidence":"cycles=21 evacuated=0 scavenged=391460 reclaimed=1700696248"},{"test":"test_gap_repsel_scalar_replaced_locals","arm":"cons_scan_off","result":"PASS","cycles":21,"evacuated":0,"scavenged":391460,"reclaimed":1700696248,"evidence":"cycles=21 evacuated=0 scavenged=391460 reclaimed=1700696248"},{"test":"test_gap_repsel_scalar_replaced_locals","arm":"shipped_default","result":"PASS","cycles":12,"evacuated":0,"scavenged":439041,"reclaimed":1638097360,"evidence":"cycles=12 evacuated=0 scavenged=439041 reclaimed=1638097360"},{"test":"test_gap_repsel_module_init_canonical","arm":"default","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":84896,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=84896"},{"test":"test_gap_repsel_module_init_canonical","arm":"safepoint_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":84896,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=84896"},{"test":"test_gap_repsel_module_init_canonical","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":84896,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=84896"},{"test":"test_gap_repsel_module_init_canonical","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":6452,"reclaimed":212240,"evidence":"cycles=1 evacuated=0 scavenged=6452 reclaimed=212240"},{"test":"test_gap_repsel_module_init_canonical","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6452,"reclaimed":212240,"evidence":"cycles=1 evacuated=0 scavenged=6452 reclaimed=212240"},{"test":"test_gap_repsel_module_init_canonical","arm":"cons_scan_off","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":84896,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=84896"},{"test":"test_gap_repsel_module_init_canonical","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_pointer_publish","arm":"default","result":"PASS","cycles":5,"evacuated":0,"scavenged":8752,"reclaimed":127090784,"evidence":"cycles=5 evacuated=0 scavenged=8752 reclaimed=127090784"},{"test":"test_gap_gc_pointer_publish","arm":"safepoint_minor","result":"PASS","cycles":5,"evacuated":0,"scavenged":8752,"reclaimed":127090784,"evidence":"cycles=5 evacuated=0 scavenged=8752 reclaimed=127090784"},{"test":"test_gap_gc_pointer_publish","arm":"evac_minor","result":"PASS","cycles":5,"evacuated":0,"scavenged":8752,"reclaimed":127090784,"evidence":"cycles=5 evacuated=0 scavenged=8752 reclaimed=127090784"},{"test":"test_gap_gc_pointer_publish","arm":"verify_evac","result":"PASS","cycles":5,"evacuated":0,"scavenged":23500,"reclaimed":128311480,"evidence":"cycles=5 evacuated=0 scavenged=23500 reclaimed=128311480"},{"test":"test_gap_gc_pointer_publish","arm":"force_verify","result":"PASS","cycles":5,"evacuated":0,"scavenged":23500,"reclaimed":128311480,"evidence":"cycles=5 evacuated=0 scavenged=23500 reclaimed=128311480"},{"test":"test_gap_gc_pointer_publish","arm":"cons_scan_off","result":"PASS","cycles":5,"evacuated":0,"scavenged":8752,"reclaimed":127090784,"evidence":"cycles=5 evacuated=0 scavenged=8752 reclaimed=127090784"},{"test":"test_gap_gc_pointer_publish","arm":"shipped_default","result":"PASS","cycles":2,"evacuated":0,"scavenged":17033,"reclaimed":117892200,"evidence":"cycles=2 evacuated=0 scavenged=17033 reclaimed=117892200"},{"test":"test_gap_repsel_gc_stress","arm":"default","result":"PASS","cycles":12,"evacuated":0,"scavenged":557915,"reclaimed":815686688,"evidence":"cycles=12 evacuated=0 scavenged=557915 reclaimed=815686688"},{"test":"test_gap_repsel_gc_stress","arm":"safepoint_minor","result":"PASS","cycles":12,"evacuated":0,"scavenged":557915,"reclaimed":815686688,"evidence":"cycles=12 evacuated=0 scavenged=557915 reclaimed=815686688"},{"test":"test_gap_repsel_gc_stress","arm":"evac_minor","result":"PASS","cycles":15,"evacuated":0,"scavenged":553338,"reclaimed":800286664,"evidence":"cycles=15 evacuated=0 scavenged=553338 reclaimed=800286664"},{"test":"test_gap_repsel_gc_stress","arm":"verify_evac","result":"PASS","cycles":16,"evacuated":0,"scavenged":574419,"reclaimed":843516696,"evidence":"cycles=16 evacuated=0 scavenged=574419 reclaimed=843516696"},{"test":"test_gap_repsel_gc_stress","arm":"force_verify","result":"PASS","cycles":16,"evacuated":0,"scavenged":618428,"reclaimed":742384688,"evidence":"cycles=16 evacuated=0 scavenged=618428 reclaimed=742384688"},{"test":"test_gap_repsel_gc_stress","arm":"cons_scan_off","result":"PASS","cycles":15,"evacuated":0,"scavenged":553338,"reclaimed":800286664,"evidence":"cycles=15 evacuated=0 scavenged=553338 reclaimed=800286664"},{"test":"test_gap_repsel_gc_stress","arm":"shipped_default","result":"PASS","cycles":7,"evacuated":0,"scavenged":480130,"reclaimed":772947600,"evidence":"cycles=7 evacuated=0 scavenged=480130 reclaimed=772947600"},{"test":"test_gap_gc_spread_accessor_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":15686,"reclaimed":49705120,"evidence":"cycles=4 evacuated=0 scavenged=15686 reclaimed=49705120"},{"test":"test_gap_gc_spread_accessor_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":15686,"reclaimed":49705120,"evidence":"cycles=4 evacuated=0 scavenged=15686 reclaimed=49705120"},{"test":"test_gap_gc_spread_accessor_rooting","arm":"evac_minor","result":"PASS","cycles":5,"evacuated":0,"scavenged":19364,"reclaimed":80653960,"evidence":"cycles=5 evacuated=0 scavenged=19364 reclaimed=80653960"},{"test":"test_gap_gc_spread_accessor_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":15685,"reclaimed":49705840,"evidence":"cycles=4 evacuated=0 scavenged=15685 reclaimed=49705840"},{"test":"test_gap_gc_spread_accessor_rooting","arm":"force_verify","result":"PASS","cycles":5,"evacuated":0,"scavenged":19363,"reclaimed":80654680,"evidence":"cycles=5 evacuated=0 scavenged=19363 reclaimed=80654680"},{"test":"test_gap_gc_spread_accessor_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":15686,"reclaimed":49705120,"evidence":"cycles=4 evacuated=0 scavenged=15686 reclaimed=49705120"},{"test":"test_gap_gc_spread_accessor_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":9530,"reclaimed":75770240,"evidence":"cycles=1 evacuated=0 scavenged=9530 reclaimed=75770240"},{"test":"test_gap_gc_static_block_this_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":19446,"reclaimed":64759600,"evidence":"cycles=4 evacuated=0 scavenged=19446 reclaimed=64759600"},{"test":"test_gap_gc_static_block_this_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":19446,"reclaimed":64759600,"evidence":"cycles=4 evacuated=0 scavenged=19446 reclaimed=64759600"},{"test":"test_gap_gc_static_block_this_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":19446,"reclaimed":64759600,"evidence":"cycles=4 evacuated=0 scavenged=19446 reclaimed=64759600"},{"test":"test_gap_gc_static_block_this_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":19446,"reclaimed":64759600,"evidence":"cycles=4 evacuated=0 scavenged=19446 reclaimed=64759600"},{"test":"test_gap_gc_static_block_this_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":19446,"reclaimed":64759600,"evidence":"cycles=4 evacuated=0 scavenged=19446 reclaimed=64759600"},{"test":"test_gap_gc_static_block_this_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":19446,"reclaimed":64759600,"evidence":"cycles=4 evacuated=0 scavenged=19446 reclaimed=64759600"},{"test":"test_gap_gc_static_block_this_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":9870,"reclaimed":75674000,"evidence":"cycles=1 evacuated=0 scavenged=9870 reclaimed=75674000"},{"test":"test_gap_gc_inline_ctor_this_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":10087,"reclaimed":66886080,"evidence":"cycles=4 evacuated=0 scavenged=10087 reclaimed=66886080"},{"test":"test_gap_gc_inline_ctor_this_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":10087,"reclaimed":66886080,"evidence":"cycles=4 evacuated=0 scavenged=10087 reclaimed=66886080"},{"test":"test_gap_gc_inline_ctor_this_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":10087,"reclaimed":66886080,"evidence":"cycles=4 evacuated=0 scavenged=10087 reclaimed=66886080"},{"test":"test_gap_gc_inline_ctor_this_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":10087,"reclaimed":66886080,"evidence":"cycles=4 evacuated=0 scavenged=10087 reclaimed=66886080"},{"test":"test_gap_gc_inline_ctor_this_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":10087,"reclaimed":66886080,"evidence":"cycles=4 evacuated=0 scavenged=10087 reclaimed=66886080"},{"test":"test_gap_gc_inline_ctor_this_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":10087,"reclaimed":66886080,"evidence":"cycles=4 evacuated=0 scavenged=10087 reclaimed=66886080"},{"test":"test_gap_gc_inline_ctor_this_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":7887,"reclaimed":77064400,"evidence":"cycles=1 evacuated=0 scavenged=7887 reclaimed=77064400"},{"test":"test_gap_gc_catch_param_rooting","arm":"default","result":"PASS","cycles":3,"evacuated":0,"scavenged":14915,"reclaimed":44700480,"evidence":"cycles=3 evacuated=0 scavenged=14915 reclaimed=44700480"},{"test":"test_gap_gc_catch_param_rooting","arm":"safepoint_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":14915,"reclaimed":44700480,"evidence":"cycles=3 evacuated=0 scavenged=14915 reclaimed=44700480"},{"test":"test_gap_gc_catch_param_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":18006,"reclaimed":80739040,"evidence":"cycles=4 evacuated=0 scavenged=18006 reclaimed=80739040"},{"test":"test_gap_gc_catch_param_rooting","arm":"verify_evac","result":"PASS","cycles":3,"evacuated":0,"scavenged":14915,"reclaimed":44700480,"evidence":"cycles=3 evacuated=0 scavenged=14915 reclaimed=44700480"},{"test":"test_gap_gc_catch_param_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":18006,"reclaimed":80739040,"evidence":"cycles=4 evacuated=0 scavenged=18006 reclaimed=80739040"},{"test":"test_gap_gc_catch_param_rooting","arm":"cons_scan_off","result":"PASS","cycles":3,"evacuated":0,"scavenged":14915,"reclaimed":44700480,"evidence":"cycles=3 evacuated=0 scavenged=14915 reclaimed=44700480"},{"test":"test_gap_gc_catch_param_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":10475,"reclaimed":75572880,"evidence":"cycles=1 evacuated=0 scavenged=10475 reclaimed=75572880"},{"test":"test_gap_gc_closure_this_capture_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":5368,"reclaimed":51868400,"evidence":"cycles=4 evacuated=0 scavenged=5368 reclaimed=51868400"},{"test":"test_gap_gc_closure_this_capture_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":5368,"reclaimed":51868400,"evidence":"cycles=4 evacuated=0 scavenged=5368 reclaimed=51868400"},{"test":"test_gap_gc_closure_this_capture_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":5368,"reclaimed":51868400,"evidence":"cycles=4 evacuated=0 scavenged=5368 reclaimed=51868400"},{"test":"test_gap_gc_closure_this_capture_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":5368,"reclaimed":51868400,"evidence":"cycles=4 evacuated=0 scavenged=5368 reclaimed=51868400"},{"test":"test_gap_gc_closure_this_capture_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":5368,"reclaimed":51868400,"evidence":"cycles=4 evacuated=0 scavenged=5368 reclaimed=51868400"},{"test":"test_gap_gc_closure_this_capture_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":5368,"reclaimed":51868400,"evidence":"cycles=4 evacuated=0 scavenged=5368 reclaimed=51868400"},{"test":"test_gap_gc_closure_this_capture_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":3346,"reclaimed":77972800,"evidence":"cycles=1 evacuated=0 scavenged=3346 reclaimed=77972800"},{"test":"test_gap_gc_method_receiver_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":8330,"reclaimed":67200080,"evidence":"cycles=4 evacuated=0 scavenged=8330 reclaimed=67200080"},{"test":"test_gap_gc_method_receiver_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":8330,"reclaimed":67200080,"evidence":"cycles=4 evacuated=0 scavenged=8330 reclaimed=67200080"},{"test":"test_gap_gc_method_receiver_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":8330,"reclaimed":67200080,"evidence":"cycles=4 evacuated=0 scavenged=8330 reclaimed=67200080"},{"test":"test_gap_gc_method_receiver_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":8330,"reclaimed":67200080,"evidence":"cycles=4 evacuated=0 scavenged=8330 reclaimed=67200080"},{"test":"test_gap_gc_method_receiver_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":8330,"reclaimed":67200080,"evidence":"cycles=4 evacuated=0 scavenged=8330 reclaimed=67200080"},{"test":"test_gap_gc_method_receiver_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":8330,"reclaimed":67200080,"evidence":"cycles=4 evacuated=0 scavenged=8330 reclaimed=67200080"},{"test":"test_gap_gc_method_receiver_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":3903,"reclaimed":77840640,"evidence":"cycles=1 evacuated=0 scavenged=3903 reclaimed=77840640"},{"test":"test_gap_gc_index_get_receiver_rooting","arm":"default","result":"PASS","cycles":10,"evacuated":0,"scavenged":173994,"reclaimed":348143640,"evidence":"cycles=10 evacuated=0 scavenged=173994 reclaimed=348143640"},{"test":"test_gap_gc_index_get_receiver_rooting","arm":"safepoint_minor","result":"PASS","cycles":10,"evacuated":0,"scavenged":173994,"reclaimed":348143640,"evidence":"cycles=10 evacuated=0 scavenged=173994 reclaimed=348143640"},{"test":"test_gap_gc_index_get_receiver_rooting","arm":"evac_minor","result":"PASS","cycles":10,"evacuated":0,"scavenged":173994,"reclaimed":348143640,"evidence":"cycles=10 evacuated=0 scavenged=173994 reclaimed=348143640"},{"test":"test_gap_gc_index_get_receiver_rooting","arm":"verify_evac","result":"PASS","cycles":10,"evacuated":0,"scavenged":173994,"reclaimed":348143640,"evidence":"cycles=10 evacuated=0 scavenged=173994 reclaimed=348143640"},{"test":"test_gap_gc_index_get_receiver_rooting","arm":"force_verify","result":"PASS","cycles":10,"evacuated":0,"scavenged":173994,"reclaimed":348143640,"evidence":"cycles=10 evacuated=0 scavenged=173994 reclaimed=348143640"},{"test":"test_gap_gc_index_get_receiver_rooting","arm":"cons_scan_off","result":"PASS","cycles":10,"evacuated":0,"scavenged":173994,"reclaimed":348143640,"evidence":"cycles=10 evacuated=0 scavenged=173994 reclaimed=348143640"},{"test":"test_gap_gc_index_get_receiver_rooting","arm":"shipped_default","result":"PASS","cycles":4,"evacuated":0,"scavenged":79719,"reclaimed":311807560,"evidence":"cycles=4 evacuated=0 scavenged=79719 reclaimed=311807560"},{"test":"test_gap_gc_closure_call_callee_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":4562,"reclaimed":51875840,"evidence":"cycles=4 evacuated=0 scavenged=4562 reclaimed=51875840"},{"test":"test_gap_gc_closure_call_callee_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":4562,"reclaimed":51875840,"evidence":"cycles=4 evacuated=0 scavenged=4562 reclaimed=51875840"},{"test":"test_gap_gc_closure_call_callee_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":4562,"reclaimed":51875840,"evidence":"cycles=4 evacuated=0 scavenged=4562 reclaimed=51875840"},{"test":"test_gap_gc_closure_call_callee_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":4562,"reclaimed":51875840,"evidence":"cycles=4 evacuated=0 scavenged=4562 reclaimed=51875840"},{"test":"test_gap_gc_closure_call_callee_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":4562,"reclaimed":51875840,"evidence":"cycles=4 evacuated=0 scavenged=4562 reclaimed=51875840"},{"test":"test_gap_gc_closure_call_callee_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":4562,"reclaimed":51875840,"evidence":"cycles=4 evacuated=0 scavenged=4562 reclaimed=51875840"},{"test":"test_gap_gc_closure_call_callee_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":3407,"reclaimed":77974960,"evidence":"cycles=1 evacuated=0 scavenged=3407 reclaimed=77974960"},{"test":"test_gap_gc_closure_call_this_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":5372,"reclaimed":51868400,"evidence":"cycles=4 evacuated=0 scavenged=5372 reclaimed=51868400"},{"test":"test_gap_gc_closure_call_this_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":5372,"reclaimed":51868400,"evidence":"cycles=4 evacuated=0 scavenged=5372 reclaimed=51868400"},{"test":"test_gap_gc_closure_call_this_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":5372,"reclaimed":51868400,"evidence":"cycles=4 evacuated=0 scavenged=5372 reclaimed=51868400"},{"test":"test_gap_gc_closure_call_this_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":5372,"reclaimed":51868400,"evidence":"cycles=4 evacuated=0 scavenged=5372 reclaimed=51868400"},{"test":"test_gap_gc_closure_call_this_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":5372,"reclaimed":51868400,"evidence":"cycles=4 evacuated=0 scavenged=5372 reclaimed=51868400"},{"test":"test_gap_gc_closure_call_this_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":5372,"reclaimed":51868400,"evidence":"cycles=4 evacuated=0 scavenged=5372 reclaimed=51868400"},{"test":"test_gap_gc_closure_call_this_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":3346,"reclaimed":77972800,"evidence":"cycles=1 evacuated=0 scavenged=3346 reclaimed=77972800"},{"test":"test_gap_gc_closure_call_argument_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":5373,"reclaimed":51868400,"evidence":"cycles=4 evacuated=0 scavenged=5373 reclaimed=51868400"},{"test":"test_gap_gc_closure_call_argument_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":5373,"reclaimed":51868400,"evidence":"cycles=4 evacuated=0 scavenged=5373 reclaimed=51868400"},{"test":"test_gap_gc_closure_call_argument_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":5373,"reclaimed":51868400,"evidence":"cycles=4 evacuated=0 scavenged=5373 reclaimed=51868400"},{"test":"test_gap_gc_closure_call_argument_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":5373,"reclaimed":51868400,"evidence":"cycles=4 evacuated=0 scavenged=5373 reclaimed=51868400"},{"test":"test_gap_gc_closure_call_argument_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":5373,"reclaimed":51868400,"evidence":"cycles=4 evacuated=0 scavenged=5373 reclaimed=51868400"},{"test":"test_gap_gc_closure_call_argument_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":5373,"reclaimed":51868400,"evidence":"cycles=4 evacuated=0 scavenged=5373 reclaimed=51868400"},{"test":"test_gap_gc_closure_call_argument_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":3346,"reclaimed":77972800,"evidence":"cycles=1 evacuated=0 scavenged=3346 reclaimed=77972800"},{"test":"test_gap_gc_call_argument_rooting","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_call_argument_rooting","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_call_argument_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":16,"reclaimed":5223320,"evidence":"cycles=1 evacuated=0 scavenged=16 reclaimed=5223320"},{"test":"test_gap_gc_call_argument_rooting","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_call_argument_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":16,"reclaimed":5223320,"evidence":"cycles=1 evacuated=0 scavenged=16 reclaimed=5223320"},{"test":"test_gap_gc_call_argument_rooting","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_call_argument_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_next_request_import","arm":"default","result":"PASS","cycles":2,"evacuated":0,"scavenged":6777,"reclaimed":3480440,"evidence":"cycles=2 evacuated=0 scavenged=6777 reclaimed=3480440"},{"test":"test_gap_gc_next_request_import","arm":"safepoint_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":6777,"reclaimed":3480440,"evidence":"cycles=2 evacuated=0 scavenged=6777 reclaimed=3480440"},{"test":"test_gap_gc_next_request_import","arm":"evac_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":6777,"reclaimed":3480440,"evidence":"cycles=2 evacuated=0 scavenged=6777 reclaimed=3480440"},{"test":"test_gap_gc_next_request_import","arm":"verify_evac","result":"PASS","cycles":2,"evacuated":0,"scavenged":6777,"reclaimed":3480440,"evidence":"cycles=2 evacuated=0 scavenged=6777 reclaimed=3480440"},{"test":"test_gap_gc_next_request_import","arm":"force_verify","result":"PASS","cycles":3,"evacuated":0,"scavenged":13206,"reclaimed":6547520,"evidence":"cycles=3 evacuated=0 scavenged=13206 reclaimed=6547520"},{"test":"test_gap_gc_next_request_import","arm":"cons_scan_off","result":"PASS","cycles":2,"evacuated":0,"scavenged":6777,"reclaimed":3480440,"evidence":"cycles=2 evacuated=0 scavenged=6777 reclaimed=3480440"},{"test":"test_gap_gc_next_request_import","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":629440,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=629440"},{"test":"test_gap_gc_rest_argument_rooting","arm":"default","result":"PASS","cycles":1,"evacuated":0,"scavenged":406,"reclaimed":5142040,"evidence":"cycles=1 evacuated=0 scavenged=406 reclaimed=5142040"},{"test":"test_gap_gc_rest_argument_rooting","arm":"safepoint_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":406,"reclaimed":5142040,"evidence":"cycles=1 evacuated=0 scavenged=406 reclaimed=5142040"},{"test":"test_gap_gc_rest_argument_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":406,"reclaimed":5142040,"evidence":"cycles=1 evacuated=0 scavenged=406 reclaimed=5142040"},{"test":"test_gap_gc_rest_argument_rooting","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":406,"reclaimed":5142040,"evidence":"cycles=1 evacuated=0 scavenged=406 reclaimed=5142040"},{"test":"test_gap_gc_rest_argument_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":406,"reclaimed":5142040,"evidence":"cycles=1 evacuated=0 scavenged=406 reclaimed=5142040"},{"test":"test_gap_gc_rest_argument_rooting","arm":"cons_scan_off","result":"PASS","cycles":1,"evacuated":0,"scavenged":406,"reclaimed":5142040,"evidence":"cycles=1 evacuated=0 scavenged=406 reclaimed=5142040"},{"test":"test_gap_gc_rest_argument_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_same_module_call_argument_rooting","arm":"default","result":"PASS","cycles":1,"evacuated":0,"scavenged":70,"reclaimed":5225680,"evidence":"cycles=1 evacuated=0 scavenged=70 reclaimed=5225680"},{"test":"test_gap_gc_same_module_call_argument_rooting","arm":"safepoint_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":70,"reclaimed":5225680,"evidence":"cycles=1 evacuated=0 scavenged=70 reclaimed=5225680"},{"test":"test_gap_gc_same_module_call_argument_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":70,"reclaimed":5225680,"evidence":"cycles=1 evacuated=0 scavenged=70 reclaimed=5225680"},{"test":"test_gap_gc_same_module_call_argument_rooting","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":70,"reclaimed":5225680,"evidence":"cycles=1 evacuated=0 scavenged=70 reclaimed=5225680"},{"test":"test_gap_gc_same_module_call_argument_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":70,"reclaimed":5225680,"evidence":"cycles=1 evacuated=0 scavenged=70 reclaimed=5225680"},{"test":"test_gap_gc_same_module_call_argument_rooting","arm":"cons_scan_off","result":"PASS","cycles":1,"evacuated":0,"scavenged":70,"reclaimed":5225680,"evidence":"cycles=1 evacuated=0 scavenged=70 reclaimed=5225680"},{"test":"test_gap_gc_same_module_call_argument_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_new_instance_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":6101,"reclaimed":51720240,"evidence":"cycles=4 evacuated=0 scavenged=6101 reclaimed=51720240"},{"test":"test_gap_gc_new_instance_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":6101,"reclaimed":51720240,"evidence":"cycles=4 evacuated=0 scavenged=6101 reclaimed=51720240"},{"test":"test_gap_gc_new_instance_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":6101,"reclaimed":51720240,"evidence":"cycles=4 evacuated=0 scavenged=6101 reclaimed=51720240"},{"test":"test_gap_gc_new_instance_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":6101,"reclaimed":51720240,"evidence":"cycles=4 evacuated=0 scavenged=6101 reclaimed=51720240"},{"test":"test_gap_gc_new_instance_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":6101,"reclaimed":51720240,"evidence":"cycles=4 evacuated=0 scavenged=6101 reclaimed=51720240"},{"test":"test_gap_gc_new_instance_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":6101,"reclaimed":51720240,"evidence":"cycles=4 evacuated=0 scavenged=6101 reclaimed=51720240"},{"test":"test_gap_gc_new_instance_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":3960,"reclaimed":77829840,"evidence":"cycles=1 evacuated=0 scavenged=3960 reclaimed=77829840"},{"test":"test_gap_gc_assign_string_source_rooting","arm":"default","result":"PASS","cycles":2,"evacuated":0,"scavenged":5880,"reclaimed":16530696,"evidence":"cycles=2 evacuated=0 scavenged=5880 reclaimed=16530696"},{"test":"test_gap_gc_assign_string_source_rooting","arm":"safepoint_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":5880,"reclaimed":16530696,"evidence":"cycles=2 evacuated=0 scavenged=5880 reclaimed=16530696"},{"test":"test_gap_gc_assign_string_source_rooting","arm":"evac_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":5880,"reclaimed":16530696,"evidence":"cycles=2 evacuated=0 scavenged=5880 reclaimed=16530696"},{"test":"test_gap_gc_assign_string_source_rooting","arm":"verify_evac","result":"PASS","cycles":3,"evacuated":0,"scavenged":25699,"reclaimed":26594160,"evidence":"cycles=3 evacuated=0 scavenged=25699 reclaimed=26594160"},{"test":"test_gap_gc_assign_string_source_rooting","arm":"force_verify","result":"PASS","cycles":3,"evacuated":0,"scavenged":25699,"reclaimed":26594160,"evidence":"cycles=3 evacuated=0 scavenged=25699 reclaimed=26594160"},{"test":"test_gap_gc_assign_string_source_rooting","arm":"cons_scan_off","result":"PASS","cycles":2,"evacuated":0,"scavenged":5880,"reclaimed":16530696,"evidence":"cycles=2 evacuated=0 scavenged=5880 reclaimed=16530696"},{"test":"test_gap_gc_assign_string_source_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_typeof_string_cache_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":703,"reclaimed":65359480,"evidence":"cycles=4 evacuated=0 scavenged=703 reclaimed=65359480"},{"test":"test_gap_gc_typeof_string_cache_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":703,"reclaimed":65359480,"evidence":"cycles=4 evacuated=0 scavenged=703 reclaimed=65359480"},{"test":"test_gap_gc_typeof_string_cache_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":703,"reclaimed":70585696,"evidence":"cycles=4 evacuated=0 scavenged=703 reclaimed=70585696"},{"test":"test_gap_gc_typeof_string_cache_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":703,"reclaimed":65359480,"evidence":"cycles=4 evacuated=0 scavenged=703 reclaimed=65359480"},{"test":"test_gap_gc_typeof_string_cache_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":3051,"reclaimed":59982440,"evidence":"cycles=4 evacuated=0 scavenged=3051 reclaimed=59982440"},{"test":"test_gap_gc_typeof_string_cache_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":703,"reclaimed":70585696,"evidence":"cycles=4 evacuated=0 scavenged=703 reclaimed=70585696"},{"test":"test_gap_gc_typeof_string_cache_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_closure_call_prev_this_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":5681,"reclaimed":51829280,"evidence":"cycles=4 evacuated=0 scavenged=5681 reclaimed=51829280"},{"test":"test_gap_gc_closure_call_prev_this_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":5681,"reclaimed":51829280,"evidence":"cycles=4 evacuated=0 scavenged=5681 reclaimed=51829280"},{"test":"test_gap_gc_closure_call_prev_this_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":5681,"reclaimed":51829280,"evidence":"cycles=4 evacuated=0 scavenged=5681 reclaimed=51829280"},{"test":"test_gap_gc_closure_call_prev_this_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":5681,"reclaimed":51829280,"evidence":"cycles=4 evacuated=0 scavenged=5681 reclaimed=51829280"},{"test":"test_gap_gc_closure_call_prev_this_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":5681,"reclaimed":51829280,"evidence":"cycles=4 evacuated=0 scavenged=5681 reclaimed=51829280"},{"test":"test_gap_gc_closure_call_prev_this_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":5681,"reclaimed":51829280,"evidence":"cycles=4 evacuated=0 scavenged=5681 reclaimed=51829280"},{"test":"test_gap_gc_closure_call_prev_this_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":2740,"reclaimed":78094480,"evidence":"cycles=1 evacuated=0 scavenged=2740 reclaimed=78094480"},{"test":"test_gap_gc_regexp_receiver_rooting","arm":"default","result":"UNVER","cycles":2,"evacuated":0,"scavenged":0,"reclaimed":2235136,"evidence":"cycles=2 evacuated=0 scavenged=0 reclaimed=2235136"},{"test":"test_gap_gc_regexp_receiver_rooting","arm":"safepoint_minor","result":"UNVER","cycles":2,"evacuated":0,"scavenged":0,"reclaimed":2235136,"evidence":"cycles=2 evacuated=0 scavenged=0 reclaimed=2235136"},{"test":"test_gap_gc_regexp_receiver_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":6559,"reclaimed":2950080,"evidence":"cycles=1 evacuated=0 scavenged=6559 reclaimed=2950080"},{"test":"test_gap_gc_regexp_receiver_rooting","arm":"verify_evac","result":"UNVER","cycles":2,"evacuated":0,"scavenged":0,"reclaimed":2235136,"evidence":"cycles=2 evacuated=0 scavenged=0 reclaimed=2235136"},{"test":"test_gap_gc_regexp_receiver_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6559,"reclaimed":2950080,"evidence":"cycles=1 evacuated=0 scavenged=6559 reclaimed=2950080"},{"test":"test_gap_gc_regexp_receiver_rooting","arm":"cons_scan_off","result":"UNVER","cycles":2,"evacuated":0,"scavenged":0,"reclaimed":2235136,"evidence":"cycles=2 evacuated=0 scavenged=0 reclaimed=2235136"},{"test":"test_gap_gc_regexp_receiver_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_staging_args_rooting","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_staging_args_rooting","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_staging_args_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":27,"reclaimed":84120,"evidence":"cycles=1 evacuated=0 scavenged=27 reclaimed=84120"},{"test":"test_gap_gc_staging_args_rooting","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":16824,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=16824"},{"test":"test_gap_gc_staging_args_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":27,"reclaimed":84120,"evidence":"cycles=1 evacuated=0 scavenged=27 reclaimed=84120"},{"test":"test_gap_gc_staging_args_rooting","arm":"cons_scan_off","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":67296,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=67296"},{"test":"test_gap_gc_staging_args_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_interval_args_rooting","arm":"default","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":96160,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=96160"},{"test":"test_gap_gc_interval_args_rooting","arm":"safepoint_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":64160,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=64160"},{"test":"test_gap_gc_interval_args_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":12,"reclaimed":80200,"evidence":"cycles=1 evacuated=0 scavenged=12 reclaimed=80200"},{"test":"test_gap_gc_interval_args_rooting","arm":"verify_evac","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":64160,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=64160"},{"test":"test_gap_gc_interval_args_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":12,"reclaimed":80200,"evidence":"cycles=1 evacuated=0 scavenged=12 reclaimed=80200"},{"test":"test_gap_gc_interval_args_rooting","arm":"cons_scan_off","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":64160,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=64160"},{"test":"test_gap_gc_interval_args_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_process_env_cache_rooting","arm":"default","result":"PASS","cycles":3,"evacuated":0,"scavenged":13664,"reclaimed":34362560,"evidence":"cycles=3 evacuated=0 scavenged=13664 reclaimed=34362560"},{"test":"test_gap_gc_process_env_cache_rooting","arm":"safepoint_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":15145,"reclaimed":34059040,"evidence":"cycles=3 evacuated=0 scavenged=15145 reclaimed=34059040"},{"test":"test_gap_gc_process_env_cache_rooting","arm":"evac_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":15018,"reclaimed":34174560,"evidence":"cycles=3 evacuated=0 scavenged=15018 reclaimed=34174560"},{"test":"test_gap_gc_process_env_cache_rooting","arm":"verify_evac","result":"PASS","cycles":3,"evacuated":0,"scavenged":15145,"reclaimed":34059040,"evidence":"cycles=3 evacuated=0 scavenged=15145 reclaimed=34059040"},{"test":"test_gap_gc_process_env_cache_rooting","arm":"force_verify","result":"PASS","cycles":3,"evacuated":0,"scavenged":14909,"reclaimed":34188720,"evidence":"cycles=3 evacuated=0 scavenged=14909 reclaimed=34188720"},{"test":"test_gap_gc_process_env_cache_rooting","arm":"cons_scan_off","result":"PASS","cycles":3,"evacuated":0,"scavenged":15145,"reclaimed":34059040,"evidence":"cycles=3 evacuated=0 scavenged=15145 reclaimed=34059040"},{"test":"test_gap_gc_process_env_cache_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_symbol_local_rooting","arm":"default","result":"PASS","cycles":86,"evacuated":0,"scavenged":5,"reclaimed":127779008,"evidence":"cycles=86 evacuated=0 scavenged=5 reclaimed=127779008"},{"test":"test_gap_gc_symbol_local_rooting","arm":"safepoint_minor","result":"PASS","cycles":86,"evacuated":0,"scavenged":5,"reclaimed":127779008,"evidence":"cycles=86 evacuated=0 scavenged=5 reclaimed=127779008"},{"test":"test_gap_gc_symbol_local_rooting","arm":"evac_minor","result":"PASS","cycles":86,"evacuated":0,"scavenged":5,"reclaimed":127779008,"evidence":"cycles=86 evacuated=0 scavenged=5 reclaimed=127779008"},{"test":"test_gap_gc_symbol_local_rooting","arm":"verify_evac","result":"PASS","cycles":86,"evacuated":0,"scavenged":5,"reclaimed":127779008,"evidence":"cycles=86 evacuated=0 scavenged=5 reclaimed=127779008"},{"test":"test_gap_gc_symbol_local_rooting","arm":"force_verify","result":"PASS","cycles":86,"evacuated":0,"scavenged":12524,"reclaimed":127858512,"evidence":"cycles=86 evacuated=0 scavenged=12524 reclaimed=127858512"},{"test":"test_gap_gc_symbol_local_rooting","arm":"cons_scan_off","result":"PASS","cycles":86,"evacuated":0,"scavenged":5,"reclaimed":127779008,"evidence":"cycles=86 evacuated=0 scavenged=5 reclaimed=127779008"},{"test":"test_gap_gc_symbol_local_rooting","arm":"shipped_default","result":"PASS","cycles":85,"evacuated":0,"scavenged":12524,"reclaimed":127858160,"evidence":"cycles=85 evacuated=0 scavenged=12524 reclaimed=127858160"},{"test":"test_gap_gc_dynamic_construct_receiver_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":14546,"reclaimed":49906560,"evidence":"cycles=4 evacuated=0 scavenged=14546 reclaimed=49906560"},{"test":"test_gap_gc_dynamic_construct_receiver_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":14546,"reclaimed":49906560,"evidence":"cycles=4 evacuated=0 scavenged=14546 reclaimed=49906560"},{"test":"test_gap_gc_dynamic_construct_receiver_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":14546,"reclaimed":49906560,"evidence":"cycles=4 evacuated=0 scavenged=14546 reclaimed=49906560"},{"test":"test_gap_gc_dynamic_construct_receiver_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":14546,"reclaimed":49906560,"evidence":"cycles=4 evacuated=0 scavenged=14546 reclaimed=49906560"},{"test":"test_gap_gc_dynamic_construct_receiver_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":14546,"reclaimed":49906560,"evidence":"cycles=4 evacuated=0 scavenged=14546 reclaimed=49906560"},{"test":"test_gap_gc_dynamic_construct_receiver_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":14546,"reclaimed":49906560,"evidence":"cycles=4 evacuated=0 scavenged=14546 reclaimed=49906560"},{"test":"test_gap_gc_dynamic_construct_receiver_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":9109,"reclaimed":75689560,"evidence":"cycles=1 evacuated=0 scavenged=9109 reclaimed=75689560"},{"test":"test_gap_gc_inlined_ctor_body_locals_rooting","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_inlined_ctor_body_locals_rooting","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_inlined_ctor_body_locals_rooting","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":248176,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=248176"},{"test":"test_gap_gc_inlined_ctor_body_locals_rooting","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_inlined_ctor_body_locals_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6491,"reclaimed":620440,"evidence":"cycles=1 evacuated=0 scavenged=6491 reclaimed=620440"},{"test":"test_gap_gc_inlined_ctor_body_locals_rooting","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_inlined_ctor_body_locals_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_optional_param_receiver_rooting","arm":"default","result":"PASS","cycles":2,"evacuated":0,"scavenged":12948,"reclaimed":18724160,"evidence":"cycles=2 evacuated=0 scavenged=12948 reclaimed=18724160"},{"test":"test_gap_gc_optional_param_receiver_rooting","arm":"safepoint_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":12948,"reclaimed":18724160,"evidence":"cycles=2 evacuated=0 scavenged=12948 reclaimed=18724160"},{"test":"test_gap_gc_optional_param_receiver_rooting","arm":"evac_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":12948,"reclaimed":18724160,"evidence":"cycles=2 evacuated=0 scavenged=12948 reclaimed=18724160"},{"test":"test_gap_gc_optional_param_receiver_rooting","arm":"verify_evac","result":"PASS","cycles":2,"evacuated":0,"scavenged":12948,"reclaimed":18724160,"evidence":"cycles=2 evacuated=0 scavenged=12948 reclaimed=18724160"},{"test":"test_gap_gc_optional_param_receiver_rooting","arm":"force_verify","result":"PASS","cycles":2,"evacuated":0,"scavenged":12948,"reclaimed":18724160,"evidence":"cycles=2 evacuated=0 scavenged=12948 reclaimed=18724160"},{"test":"test_gap_gc_optional_param_receiver_rooting","arm":"cons_scan_off","result":"PASS","cycles":2,"evacuated":0,"scavenged":12948,"reclaimed":18724160,"evidence":"cycles=2 evacuated=0 scavenged=12948 reclaimed=18724160"},{"test":"test_gap_gc_optional_param_receiver_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_iterator_drain_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":60,"reclaimed":83884800,"evidence":"cycles=4 evacuated=0 scavenged=60 reclaimed=83884800"},{"test":"test_gap_gc_iterator_drain_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":60,"reclaimed":83884800,"evidence":"cycles=4 evacuated=0 scavenged=60 reclaimed=83884800"},{"test":"test_gap_gc_iterator_drain_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":60,"reclaimed":83884800,"evidence":"cycles=4 evacuated=0 scavenged=60 reclaimed=83884800"},{"test":"test_gap_gc_iterator_drain_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":60,"reclaimed":83884800,"evidence":"cycles=4 evacuated=0 scavenged=60 reclaimed=83884800"},{"test":"test_gap_gc_iterator_drain_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":60,"reclaimed":83884800,"evidence":"cycles=4 evacuated=0 scavenged=60 reclaimed=83884800"},{"test":"test_gap_gc_iterator_drain_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":60,"reclaimed":83884800,"evidence":"cycles=4 evacuated=0 scavenged=60 reclaimed=83884800"},{"test":"test_gap_gc_iterator_drain_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":30,"reclaimed":83880000,"evidence":"cycles=1 evacuated=0 scavenged=30 reclaimed=83880000"},{"test":"test_gap_gc_global_builtin_lookup_rooting","arm":"default","result":"PASS","cycles":2,"evacuated":0,"scavenged":44661,"reclaimed":209584,"evidence":"cycles=2 evacuated=0 scavenged=44661 reclaimed=209584"},{"test":"test_gap_gc_global_builtin_lookup_rooting","arm":"safepoint_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":44661,"reclaimed":209584,"evidence":"cycles=2 evacuated=0 scavenged=44661 reclaimed=209584"},{"test":"test_gap_gc_global_builtin_lookup_rooting","arm":"evac_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":44661,"reclaimed":209584,"evidence":"cycles=2 evacuated=0 scavenged=44661 reclaimed=209584"},{"test":"test_gap_gc_global_builtin_lookup_rooting","arm":"verify_evac","result":"PASS","cycles":3,"evacuated":0,"scavenged":36333,"reclaimed":914896,"evidence":"cycles=3 evacuated=0 scavenged=36333 reclaimed=914896"},{"test":"test_gap_gc_global_builtin_lookup_rooting","arm":"force_verify","result":"PASS","cycles":3,"evacuated":0,"scavenged":80994,"reclaimed":916480,"evidence":"cycles=3 evacuated=0 scavenged=80994 reclaimed=916480"},{"test":"test_gap_gc_global_builtin_lookup_rooting","arm":"cons_scan_off","result":"PASS","cycles":2,"evacuated":0,"scavenged":44661,"reclaimed":209584,"evidence":"cycles=2 evacuated=0 scavenged=44661 reclaimed=209584"},{"test":"test_gap_gc_global_builtin_lookup_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_spread_symbol_iterator_rooting","arm":"default","result":"PASS","cycles":3,"evacuated":0,"scavenged":26,"reclaimed":41940960,"evidence":"cycles=3 evacuated=0 scavenged=26 reclaimed=41940960"},{"test":"test_gap_gc_spread_symbol_iterator_rooting","arm":"safepoint_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":26,"reclaimed":41940960,"evidence":"cycles=3 evacuated=0 scavenged=26 reclaimed=41940960"},{"test":"test_gap_gc_spread_symbol_iterator_rooting","arm":"evac_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":26,"reclaimed":41940960,"evidence":"cycles=3 evacuated=0 scavenged=26 reclaimed=41940960"},{"test":"test_gap_gc_spread_symbol_iterator_rooting","arm":"verify_evac","result":"PASS","cycles":3,"evacuated":0,"scavenged":26,"reclaimed":41940960,"evidence":"cycles=3 evacuated=0 scavenged=26 reclaimed=41940960"},{"test":"test_gap_gc_spread_symbol_iterator_rooting","arm":"force_verify","result":"PASS","cycles":3,"evacuated":0,"scavenged":26,"reclaimed":41940960,"evidence":"cycles=3 evacuated=0 scavenged=26 reclaimed=41940960"},{"test":"test_gap_gc_spread_symbol_iterator_rooting","arm":"cons_scan_off","result":"PASS","cycles":3,"evacuated":0,"scavenged":26,"reclaimed":41940960,"evidence":"cycles=3 evacuated=0 scavenged=26 reclaimed=41940960"},{"test":"test_gap_gc_spread_symbol_iterator_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_loop_clone","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_loop_clone","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_loop_clone","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":165072,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=165072"},{"test":"test_gap_repsel_element_shape_loop_clone","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_loop_clone","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6576,"reclaimed":412680,"evidence":"cycles=1 evacuated=0 scavenged=6576 reclaimed=412680"},{"test":"test_gap_repsel_element_shape_loop_clone","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_loop_clone","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_alloc_point_no_move","arm":"default","result":"PASS","cycles":43,"evacuated":0,"scavenged":15928,"reclaimed":1995287720,"evidence":"cycles=43 evacuated=0 scavenged=15928 reclaimed=1995287720"},{"test":"test_gap_gc_alloc_point_no_move","arm":"safepoint_minor","result":"PASS","cycles":43,"evacuated":0,"scavenged":15928,"reclaimed":1995287720,"evidence":"cycles=43 evacuated=0 scavenged=15928 reclaimed=1995287720"},{"test":"test_gap_gc_alloc_point_no_move","arm":"evac_minor","result":"PASS","cycles":43,"evacuated":0,"scavenged":15928,"reclaimed":1995287720,"evidence":"cycles=43 evacuated=0 scavenged=15928 reclaimed=1995287720"},{"test":"test_gap_gc_alloc_point_no_move","arm":"verify_evac","result":"PASS","cycles":43,"evacuated":0,"scavenged":15928,"reclaimed":1995287720,"evidence":"cycles=43 evacuated=0 scavenged=15928 reclaimed=1995287720"},{"test":"test_gap_gc_alloc_point_no_move","arm":"force_verify","result":"PASS","cycles":43,"evacuated":0,"scavenged":15928,"reclaimed":1995287720,"evidence":"cycles=43 evacuated=0 scavenged=15928 reclaimed=1995287720"},{"test":"test_gap_gc_alloc_point_no_move","arm":"cons_scan_off","result":"PASS","cycles":43,"evacuated":0,"scavenged":15928,"reclaimed":1995287720,"evidence":"cycles=43 evacuated=0 scavenged=15928 reclaimed=1995287720"},{"test":"test_gap_gc_alloc_point_no_move","arm":"shipped_default","result":"PASS","cycles":39,"evacuated":0,"scavenged":15668,"reclaimed":1974307040,"evidence":"cycles=39 evacuated=0 scavenged=15668 reclaimed=1974307040"},{"test":"test_gap_gc_class_field_receiver_rooting","arm":"default","result":"PASS","cycles":9,"evacuated":0,"scavenged":40278,"reclaimed":293835560,"evidence":"cycles=9 evacuated=0 scavenged=40278 reclaimed=293835560"},{"test":"test_gap_gc_class_field_receiver_rooting","arm":"safepoint_minor","result":"PASS","cycles":9,"evacuated":0,"scavenged":40278,"reclaimed":293835560,"evidence":"cycles=9 evacuated=0 scavenged=40278 reclaimed=293835560"},{"test":"test_gap_gc_class_field_receiver_rooting","arm":"evac_minor","result":"PASS","cycles":9,"evacuated":0,"scavenged":40278,"reclaimed":293835560,"evidence":"cycles=9 evacuated=0 scavenged=40278 reclaimed=293835560"},{"test":"test_gap_gc_class_field_receiver_rooting","arm":"verify_evac","result":"PASS","cycles":9,"evacuated":0,"scavenged":40278,"reclaimed":293835560,"evidence":"cycles=9 evacuated=0 scavenged=40278 reclaimed=293835560"},{"test":"test_gap_gc_class_field_receiver_rooting","arm":"force_verify","result":"PASS","cycles":9,"evacuated":0,"scavenged":40278,"reclaimed":293835560,"evidence":"cycles=9 evacuated=0 scavenged=40278 reclaimed=293835560"},{"test":"test_gap_gc_class_field_receiver_rooting","arm":"cons_scan_off","result":"PASS","cycles":9,"evacuated":0,"scavenged":40278,"reclaimed":293835560,"evidence":"cycles=9 evacuated=0 scavenged=40278 reclaimed=293835560"},{"test":"test_gap_gc_class_field_receiver_rooting","arm":"shipped_default","result":"PASS","cycles":4,"evacuated":0,"scavenged":26445,"reclaimed":263385240,"evidence":"cycles=4 evacuated=0 scavenged=26445 reclaimed=263385240"},{"test":"test_gap_gc_index_set_bounded_globalthis_ta_rooting","arm":"default","result":"PASS","cycles":42,"evacuated":0,"scavenged":167083,"reclaimed":1845634120,"evidence":"cycles=42 evacuated=0 scavenged=167083 reclaimed=1845634120"},{"test":"test_gap_gc_index_set_bounded_globalthis_ta_rooting","arm":"safepoint_minor","result":"PASS","cycles":42,"evacuated":0,"scavenged":167083,"reclaimed":1845634120,"evidence":"cycles=42 evacuated=0 scavenged=167083 reclaimed=1845634120"},{"test":"test_gap_gc_index_set_bounded_globalthis_ta_rooting","arm":"evac_minor","result":"PASS","cycles":42,"evacuated":0,"scavenged":167083,"reclaimed":1845634120,"evidence":"cycles=42 evacuated=0 scavenged=167083 reclaimed=1845634120"},{"test":"test_gap_gc_index_set_bounded_globalthis_ta_rooting","arm":"verify_evac","result":"PASS","cycles":42,"evacuated":0,"scavenged":167083,"reclaimed":1845634120,"evidence":"cycles=42 evacuated=0 scavenged=167083 reclaimed=1845634120"},{"test":"test_gap_gc_index_set_bounded_globalthis_ta_rooting","arm":"force_verify","result":"PASS","cycles":42,"evacuated":0,"scavenged":167083,"reclaimed":1845634120,"evidence":"cycles=42 evacuated=0 scavenged=167083 reclaimed=1845634120"},{"test":"test_gap_gc_index_set_bounded_globalthis_ta_rooting","arm":"cons_scan_off","result":"PASS","cycles":42,"evacuated":0,"scavenged":167083,"reclaimed":1845634120,"evidence":"cycles=42 evacuated=0 scavenged=167083 reclaimed=1845634120"},{"test":"test_gap_gc_index_set_bounded_globalthis_ta_rooting","arm":"shipped_default","result":"PASS","cycles":37,"evacuated":0,"scavenged":144604,"reclaimed":1819892320,"evidence":"cycles=37 evacuated=0 scavenged=144604 reclaimed=1819892320"},{"test":"test_gap_gc_namespace_and_computed_dispatch_rooting","arm":"default","result":"PASS","cycles":2,"evacuated":0,"scavenged":12976,"reclaimed":18760040,"evidence":"cycles=2 evacuated=0 scavenged=12976 reclaimed=18760040"},{"test":"test_gap_gc_namespace_and_computed_dispatch_rooting","arm":"safepoint_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":12976,"reclaimed":18760040,"evidence":"cycles=2 evacuated=0 scavenged=12976 reclaimed=18760040"},{"test":"test_gap_gc_namespace_and_computed_dispatch_rooting","arm":"evac_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":13476,"reclaimed":42629320,"evidence":"cycles=3 evacuated=0 scavenged=13476 reclaimed=42629320"},{"test":"test_gap_gc_namespace_and_computed_dispatch_rooting","arm":"verify_evac","result":"PASS","cycles":2,"evacuated":0,"scavenged":12976,"reclaimed":18760040,"evidence":"cycles=2 evacuated=0 scavenged=12976 reclaimed=18760040"},{"test":"test_gap_gc_namespace_and_computed_dispatch_rooting","arm":"force_verify","result":"PASS","cycles":3,"evacuated":0,"scavenged":13476,"reclaimed":42629320,"evidence":"cycles=3 evacuated=0 scavenged=13476 reclaimed=42629320"},{"test":"test_gap_gc_namespace_and_computed_dispatch_rooting","arm":"cons_scan_off","result":"PASS","cycles":2,"evacuated":0,"scavenged":12976,"reclaimed":18760040,"evidence":"cycles=2 evacuated=0 scavenged=12976 reclaimed=18760040"},{"test":"test_gap_gc_namespace_and_computed_dispatch_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":6512,"reclaimed":2491320,"evidence":"cycles=1 evacuated=0 scavenged=6512 reclaimed=2491320"},{"test":"test_gap_gc_container_value_rooting","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6512,"reclaimed":2491320,"evidence":"cycles=1 evacuated=0 scavenged=6512 reclaimed=2491320"},{"test":"test_gap_gc_container_value_rooting","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":390368,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=390368"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6500,"reclaimed":975920,"evidence":"cycles=1 evacuated=0 scavenged=6500 reclaimed=975920"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"default","result":"PASS","cycles":1,"evacuated":0,"scavenged":6759,"reclaimed":2903840,"evidence":"cycles=1 evacuated=0 scavenged=6759 reclaimed=2903840"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"safepoint_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":6759,"reclaimed":2903840,"evidence":"cycles=1 evacuated=0 scavenged=6759 reclaimed=2903840"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":6759,"reclaimed":2903840,"evidence":"cycles=1 evacuated=0 scavenged=6759 reclaimed=2903840"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":6759,"reclaimed":2903840,"evidence":"cycles=1 evacuated=0 scavenged=6759 reclaimed=2903840"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6759,"reclaimed":2903840,"evidence":"cycles=1 evacuated=0 scavenged=6759 reclaimed=2903840"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"cons_scan_off","result":"PASS","cycles":1,"evacuated":0,"scavenged":6759,"reclaimed":2903840,"evidence":"cycles=1 evacuated=0 scavenged=6759 reclaimed=2903840"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_param_binding","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_param_binding","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_param_binding","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":31,"reclaimed":60160,"evidence":"cycles=1 evacuated=0 scavenged=31 reclaimed=60160"},{"test":"test_gap_repsel_element_shape_param_binding","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_param_binding","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":31,"reclaimed":60160,"evidence":"cycles=1 evacuated=0 scavenged=31 reclaimed=60160"},{"test":"test_gap_repsel_element_shape_param_binding","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_param_binding","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_group_numeric","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_group_numeric","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_group_numeric","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":215616,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=215616"},{"test":"test_gap_repsel_element_group_numeric","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_group_numeric","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6455,"reclaimed":539040,"evidence":"cycles=1 evacuated=0 scavenged=6455 reclaimed=539040"},{"test":"test_gap_repsel_element_group_numeric","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_group_numeric","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":6512,"reclaimed":2491320,"evidence":"cycles=1 evacuated=0 scavenged=6512 reclaimed=2491320"},{"test":"test_gap_gc_container_value_rooting","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6512,"reclaimed":2491320,"evidence":"cycles=1 evacuated=0 scavenged=6512 reclaimed=2491320"},{"test":"test_gap_gc_container_value_rooting","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":390368,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=390368"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6500,"reclaimed":975920,"evidence":"cycles=1 evacuated=0 scavenged=6500 reclaimed=975920"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"default","result":"PASS","cycles":1,"evacuated":0,"scavenged":6759,"reclaimed":2903840,"evidence":"cycles=1 evacuated=0 scavenged=6759 reclaimed=2903840"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"safepoint_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":6759,"reclaimed":2903840,"evidence":"cycles=1 evacuated=0 scavenged=6759 reclaimed=2903840"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":6759,"reclaimed":2903840,"evidence":"cycles=1 evacuated=0 scavenged=6759 reclaimed=2903840"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":6759,"reclaimed":2903840,"evidence":"cycles=1 evacuated=0 scavenged=6759 reclaimed=2903840"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6759,"reclaimed":2903840,"evidence":"cycles=1 evacuated=0 scavenged=6759 reclaimed=2903840"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"cons_scan_off","result":"PASS","cycles":1,"evacuated":0,"scavenged":6759,"reclaimed":2903840,"evidence":"cycles=1 evacuated=0 scavenged=6759 reclaimed=2903840"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_uint8_buffer_callback_rooting","arm":"default","result":"PASS","cycles":3,"evacuated":0,"scavenged":12836,"reclaimed":29260120,"evidence":"cycles=3 evacuated=0 scavenged=12836 reclaimed=29260120"},{"test":"test_gap_gc_uint8_buffer_callback_rooting","arm":"safepoint_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":12836,"reclaimed":29260120,"evidence":"cycles=3 evacuated=0 scavenged=12836 reclaimed=29260120"},{"test":"test_gap_gc_uint8_buffer_callback_rooting","arm":"evac_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":12836,"reclaimed":29260120,"evidence":"cycles=3 evacuated=0 scavenged=12836 reclaimed=29260120"},{"test":"test_gap_gc_uint8_buffer_callback_rooting","arm":"verify_evac","result":"PASS","cycles":3,"evacuated":0,"scavenged":12836,"reclaimed":29260120,"evidence":"cycles=3 evacuated=0 scavenged=12836 reclaimed=29260120"},{"test":"test_gap_gc_uint8_buffer_callback_rooting","arm":"force_verify","result":"PASS","cycles":3,"evacuated":0,"scavenged":12836,"reclaimed":29260120,"evidence":"cycles=3 evacuated=0 scavenged=12836 reclaimed=29260120"},{"test":"test_gap_gc_uint8_buffer_callback_rooting","arm":"cons_scan_off","result":"PASS","cycles":3,"evacuated":0,"scavenged":12836,"reclaimed":29260120,"evidence":"cycles=3 evacuated=0 scavenged=12836 reclaimed=29260120"},{"test":"test_gap_gc_uint8_buffer_callback_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":6727,"reclaimed":44836520,"evidence":"cycles=1 evacuated=0 scavenged=6727 reclaimed=44836520"},{"test":"test_gap_gc_fetch_method_value_cache_rooting","arm":"default","result":"PASS","cycles":2,"evacuated":0,"scavenged":12810,"reclaimed":18741800,"evidence":"cycles=2 evacuated=0 scavenged=12810 reclaimed=18741800"},{"test":"test_gap_gc_fetch_method_value_cache_rooting","arm":"safepoint_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":12810,"reclaimed":18741800,"evidence":"cycles=2 evacuated=0 scavenged=12810 reclaimed=18741800"},{"test":"test_gap_gc_fetch_method_value_cache_rooting","arm":"evac_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":12810,"reclaimed":18741800,"evidence":"cycles=2 evacuated=0 scavenged=12810 reclaimed=18741800"},{"test":"test_gap_gc_fetch_method_value_cache_rooting","arm":"verify_evac","result":"PASS","cycles":2,"evacuated":0,"scavenged":12810,"reclaimed":18741800,"evidence":"cycles=2 evacuated=0 scavenged=12810 reclaimed=18741800"},{"test":"test_gap_gc_fetch_method_value_cache_rooting","arm":"force_verify","result":"PASS","cycles":2,"evacuated":0,"scavenged":12810,"reclaimed":18741800,"evidence":"cycles=2 evacuated=0 scavenged=12810 reclaimed=18741800"},{"test":"test_gap_gc_fetch_method_value_cache_rooting","arm":"cons_scan_off","result":"PASS","cycles":2,"evacuated":0,"scavenged":12810,"reclaimed":18741800,"evidence":"cycles=2 evacuated=0 scavenged=12810 reclaimed=18741800"},{"test":"test_gap_gc_fetch_method_value_cache_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_request_signal_rooting","arm":"default","result":"PASS","cycles":3,"evacuated":0,"scavenged":13036,"reclaimed":44929600,"evidence":"cycles=3 evacuated=0 scavenged=13036 reclaimed=44929600"},{"test":"test_gap_gc_request_signal_rooting","arm":"safepoint_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":13036,"reclaimed":44929600,"evidence":"cycles=3 evacuated=0 scavenged=13036 reclaimed=44929600"},{"test":"test_gap_gc_request_signal_rooting","arm":"evac_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":13036,"reclaimed":44929600,"evidence":"cycles=3 evacuated=0 scavenged=13036 reclaimed=44929600"},{"test":"test_gap_gc_request_signal_rooting","arm":"verify_evac","result":"PASS","cycles":3,"evacuated":0,"scavenged":13036,"reclaimed":44929600,"evidence":"cycles=3 evacuated=0 scavenged=13036 reclaimed=44929600"},{"test":"test_gap_gc_request_signal_rooting","arm":"force_verify","result":"PASS","cycles":3,"evacuated":0,"scavenged":13036,"reclaimed":44929600,"evidence":"cycles=3 evacuated=0 scavenged=13036 reclaimed=44929600"},{"test":"test_gap_gc_request_signal_rooting","arm":"cons_scan_off","result":"PASS","cycles":3,"evacuated":0,"scavenged":13036,"reclaimed":44929600,"evidence":"cycles=3 evacuated=0 scavenged=13036 reclaimed=44929600"},{"test":"test_gap_gc_request_signal_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_net_once_flags_rekey","arm":"default","result":"PASS","cycles":3,"evacuated":0,"scavenged":12512,"reclaimed":18887544,"evidence":"cycles=3 evacuated=0 scavenged=12512 reclaimed=18887544"},{"test":"test_gap_gc_net_once_flags_rekey","arm":"safepoint_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":12512,"reclaimed":18887544,"evidence":"cycles=3 evacuated=0 scavenged=12512 reclaimed=18887544"},{"test":"test_gap_gc_net_once_flags_rekey","arm":"evac_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":343,"reclaimed":15739080,"evidence":"cycles=2 evacuated=0 scavenged=343 reclaimed=15739080"},{"test":"test_gap_gc_net_once_flags_rekey","arm":"verify_evac","result":"PASS","cycles":3,"evacuated":0,"scavenged":12512,"reclaimed":18887544,"evidence":"cycles=3 evacuated=0 scavenged=12512 reclaimed=18887544"},{"test":"test_gap_gc_net_once_flags_rekey","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":13159,"reclaimed":33340480,"evidence":"cycles=4 evacuated=0 scavenged=13159 reclaimed=33340480"},{"test":"test_gap_gc_net_once_flags_rekey","arm":"cons_scan_off","result":"PASS","cycles":3,"evacuated":0,"scavenged":12512,"reclaimed":18887544,"evidence":"cycles=3 evacuated=0 scavenged=12512 reclaimed=18887544"},{"test":"test_gap_gc_net_once_flags_rekey","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"default","result":"FAIL","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"output-mismatch cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"safepoint_minor","result":"FAIL","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"output-mismatch cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"evac_minor","result":"FAIL","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":78688,"evidence":"output-mismatch cycles=1 evacuated=0 scavenged=0 reclaimed=78688"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"verify_evac","result":"FAIL","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"output-mismatch cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"force_verify","result":"FAIL","cycles":1,"evacuated":0,"scavenged":6481,"reclaimed":196720,"evidence":"output-mismatch cycles=1 evacuated=0 scavenged=6481 reclaimed=196720"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"cons_scan_off","result":"FAIL","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"output-mismatch cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"shipped_default","result":"FAIL","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"output-mismatch cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_interp_global_this_rooting","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_interp_global_this_rooting","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_interp_global_this_rooting","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":76208,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=76208"},{"test":"test_gap_gc_interp_global_this_rooting","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_interp_global_this_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6421,"reclaimed":190520,"evidence":"cycles=1 evacuated=0 scavenged=6421 reclaimed=190520"},{"test":"test_gap_gc_interp_global_this_rooting","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_interp_global_this_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_copy_source_rooting","arm":"default","result":"PASS","cycles":1,"evacuated":0,"scavenged":7,"reclaimed":5247240,"evidence":"cycles=1 evacuated=0 scavenged=7 reclaimed=5247240"},{"test":"test_gap_gc_string_copy_source_rooting","arm":"safepoint_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":7,"reclaimed":5247240,"evidence":"cycles=1 evacuated=0 scavenged=7 reclaimed=5247240"},{"test":"test_gap_gc_string_copy_source_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":7,"reclaimed":5247240,"evidence":"cycles=1 evacuated=0 scavenged=7 reclaimed=5247240"},{"test":"test_gap_gc_string_copy_source_rooting","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":7,"reclaimed":5247240,"evidence":"cycles=1 evacuated=0 scavenged=7 reclaimed=5247240"},{"test":"test_gap_gc_string_copy_source_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":7,"reclaimed":5247240,"evidence":"cycles=1 evacuated=0 scavenged=7 reclaimed=5247240"},{"test":"test_gap_gc_string_copy_source_rooting","arm":"cons_scan_off","result":"PASS","cycles":1,"evacuated":0,"scavenged":7,"reclaimed":5247240,"evidence":"cycles=1 evacuated=0 scavenged=7 reclaimed=5247240"},{"test":"test_gap_gc_string_copy_source_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_repeat_reentrant_count","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_repeat_reentrant_count","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_repeat_reentrant_count","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":91056,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=91056"},{"test":"test_gap_gc_string_repeat_reentrant_count","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_repeat_reentrant_count","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6460,"reclaimed":227640,"evidence":"cycles=1 evacuated=0 scavenged=6460 reclaimed=227640"},{"test":"test_gap_gc_string_repeat_reentrant_count","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_repeat_reentrant_count","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_coalesce_local_root","arm":"default","result":"PASS","cycles":12,"evacuated":0,"scavenged":7317,"reclaimed":143808576,"evidence":"cycles=12 evacuated=0 scavenged=7317 reclaimed=143808576"},{"test":"test_gap_gc_coalesce_local_root","arm":"safepoint_minor","result":"PASS","cycles":12,"evacuated":0,"scavenged":7317,"reclaimed":143808576,"evidence":"cycles=12 evacuated=0 scavenged=7317 reclaimed=143808576"},{"test":"test_gap_gc_coalesce_local_root","arm":"evac_minor","result":"PASS","cycles":14,"evacuated":0,"scavenged":12223,"reclaimed":190579576,"evidence":"cycles=14 evacuated=0 scavenged=12223 reclaimed=190579576"},{"test":"test_gap_gc_coalesce_local_root","arm":"verify_evac","result":"PASS","cycles":12,"evacuated":0,"scavenged":40915,"reclaimed":139223776,"evidence":"cycles=12 evacuated=0 scavenged=40915 reclaimed=139223776"},{"test":"test_gap_gc_coalesce_local_root","arm":"force_verify","result":"PASS","cycles":14,"evacuated":0,"scavenged":30779,"reclaimed":194101648,"evidence":"cycles=14 evacuated=0 scavenged=30779 reclaimed=194101648"},{"test":"test_gap_gc_coalesce_local_root","arm":"cons_scan_off","result":"PASS","cycles":14,"evacuated":0,"scavenged":12223,"reclaimed":190579576,"evidence":"cycles=14 evacuated=0 scavenged=12223 reclaimed=190579576"},{"test":"test_gap_gc_coalesce_local_root","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":7072,"reclaimed":60506600,"evidence":"cycles=1 evacuated=0 scavenged=7072 reclaimed=60506600"},{"test":"test_gap_gc_for_in_proxy_callback_roots","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_for_in_proxy_callback_roots","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_for_in_proxy_callback_roots","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":201968,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=201968"},{"test":"test_gap_gc_for_in_proxy_callback_roots","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_for_in_proxy_callback_roots","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6526,"reclaimed":504920,"evidence":"cycles=1 evacuated=0 scavenged=6526 reclaimed=504920"},{"test":"test_gap_gc_for_in_proxy_callback_roots","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_for_in_proxy_callback_roots","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_suffix_cursor","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_suffix_cursor","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_suffix_cursor","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":41,"reclaimed":194880,"evidence":"cycles=1 evacuated=0 scavenged=41 reclaimed=194880"},{"test":"test_gap_gc_string_suffix_cursor","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_suffix_cursor","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":41,"reclaimed":194880,"evidence":"cycles=1 evacuated=0 scavenged=41 reclaimed=194880"},{"test":"test_gap_gc_string_suffix_cursor","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_suffix_cursor","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_array_shift_queue","arm":"default","result":"UNVER","cycles":13,"evacuated":0,"scavenged":0,"reclaimed":16346424,"evidence":"cycles=13 evacuated=0 scavenged=0 reclaimed=16346424"},{"test":"test_gap_gc_array_shift_queue","arm":"safepoint_minor","result":"UNVER","cycles":13,"evacuated":0,"scavenged":0,"reclaimed":16346424,"evidence":"cycles=13 evacuated=0 scavenged=0 reclaimed=16346424"},{"test":"test_gap_gc_array_shift_queue","arm":"evac_minor","result":"UNVER","cycles":13,"evacuated":0,"scavenged":0,"reclaimed":16346424,"evidence":"cycles=13 evacuated=0 scavenged=0 reclaimed=16346424"},{"test":"test_gap_gc_array_shift_queue","arm":"verify_evac","result":"PASS","cycles":13,"evacuated":0,"scavenged":12498,"reclaimed":18709392,"evidence":"cycles=13 evacuated=0 scavenged=12498 reclaimed=18709392"},{"test":"test_gap_gc_array_shift_queue","arm":"force_verify","result":"PASS","cycles":25,"evacuated":0,"scavenged":48861,"reclaimed":6047056,"evidence":"cycles=25 evacuated=0 scavenged=48861 reclaimed=6047056"},{"test":"test_gap_gc_array_shift_queue","arm":"cons_scan_off","result":"UNVER","cycles":13,"evacuated":0,"scavenged":0,"reclaimed":16346424,"evidence":"cycles=13 evacuated=0 scavenged=0 reclaimed=16346424"},{"test":"test_gap_gc_array_shift_queue","arm":"shipped_default","result":"PASS","cycles":12,"evacuated":0,"scavenged":0,"reclaimed":30117376,"evidence":"cycles=12 evacuated=0 scavenged=0 reclaimed=30117376"}],"summary":{"pass":428,"unverified":167,"xfail":0,"fail":7}} diff --git a/benchmarks/runtime_handle_scopes/evidence/fix-hoist.folded.gz b/benchmarks/runtime_handle_scopes/evidence/fix-hoist.folded.gz new file mode 100644 index 0000000000..b22815de60 Binary files /dev/null and b/benchmarks/runtime_handle_scopes/evidence/fix-hoist.folded.gz differ diff --git a/benchmarks/runtime_handle_scopes/evidence/fix-hoist.stat b/benchmarks/runtime_handle_scopes/evidence/fix-hoist.stat new file mode 100644 index 0000000000..669cc270fe --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/fix-hoist.stat @@ -0,0 +1,3 @@ +# started on Mon Sep 14 04:00:54 2026 + +13003278589;;instructions:u;0.00%;812668797;100.00;; diff --git a/benchmarks/runtime_handle_scopes/evidence/fix-json.folded.gz b/benchmarks/runtime_handle_scopes/evidence/fix-json.folded.gz new file mode 100644 index 0000000000..7354d82137 Binary files /dev/null and b/benchmarks/runtime_handle_scopes/evidence/fix-json.folded.gz differ diff --git a/benchmarks/runtime_handle_scopes/evidence/fix-json.stat b/benchmarks/runtime_handle_scopes/evidence/fix-json.stat new file mode 100644 index 0000000000..bc417da622 --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/fix-json.stat @@ -0,0 +1,3 @@ +# started on Mon Sep 14 04:00:03 2026 + +3132631719;;instructions:u;0.00%;187775736;100.00;; diff --git a/benchmarks/runtime_handle_scopes/evidence/fix-lint-full.log b/benchmarks/runtime_handle_scopes/evidence/fix-lint-full.log new file mode 100644 index 0000000000..ea53e935a3 --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/fix-lint-full.log @@ -0,0 +1,104 @@ +run_lint_gates: 79 gate commands derived from 45 lint run steps + + ok [Changeset gate self-test] ./scripts/check_changeset_fragment.sh --self-test + skip [Require a changelog.d/ fragment for crates/ changes] ./scripts/check_changeset_fragment.sh "${{ github.repository }}" "${{ github.event.pull_request.number }}" + (needs GitHub API repository/PR context) + ok [Validate benchmark artifact and fallback gates] python3 -m unittest discover -s tests -p 'test_benchmark_*.py' -v + ok [Validate benchmark artifact and fallback gates] ./tests/test_benchmark_peer_fallback.sh + ok [Validate benchmark artifact and fallback gates] ./tests/test_benchmark_output_verifier.sh + ok [Validate benchmark artifact and fallback gates] bash -n benchmarks/compare.sh benchmarks/quick.sh benchmarks/suite/run_benchmarks.sh benchmarks/honest_bench/run.sh benchmarks/honest_bench/harness/run_http_bench.sh tests/test_benchmark_peer_fallback.sh + ok [Validate Windows LLVM runtime npm staging] ./tests/test_stage_npm_windows_llvm.sh + ok [Release pipeline failure-path regressions] python3 tests/test_release_pipeline.py + ok [Release pipeline failure-path regressions] node --test scripts/publish/platform-visibility.test.mjs + ok [Install Rust toolchain] rustup toolchain install nightly-2026-08-20 --profile minimal --component rustfmt --component clippy + ok [Check formatting] cargo fmt --all -- --check + ok [CI plan policy self-test + docs table freshness] python3 scripts/ci_plan.py --self-test + ok [CI plan policy self-test + docs table freshness] python3 scripts/ci_pr_files.py --self-test + ok [CI plan policy self-test + docs table freshness] python3 scripts/ci_cargo_test_shard.py --self-test + skip [CI plan policy self-test + docs table freshness] python3 scripts/ci_cargo_test_shard.py --package perry --total-shards "${{ fromJSON(needs.plan.outputs.plan).cargo_test_perry.total }}" --validate + (needs the CI plan's shard count) + ok [Compiler-output gate liveness] python3 scripts/compiler_output_step_liveness.py --self-test + ok [Compiler-output gate liveness] python3 scripts/compiler_output_step_liveness.py + ok [Audit workspace architecture] python3 scripts/workspace_architecture.py --self-test + ok [Audit workspace architecture] python3 scripts/workspace_architecture.py --check --print-summary + ok [Linux incident collector fixtures] python3 scripts/test_capture_linux_incident.py + ok [Public benchmark evidence freshness] PYTHONPATH=. python3 tests/test_public_baseline.py + FAIL [Public benchmark evidence freshness] python3 benchmarks/ci_public_baseline_check.py + public baseline error: public artifact benchmark inputs changed; regenerate it with ./benchmarks/run_public_baseline.sh + ok [File size limit] ./scripts/check_file_size.sh + ok [Local binding type-proof audit] python3 scripts/local_binding_type_audit.py --self-test + ok [Local binding type-proof audit] python3 scripts/local_binding_type_audit.py + ok [Binding upstream pins (lock-step)] node scripts/binding_pins.mjs --check + ok [Bundled binding governance] python3 scripts/binding_governance.py --check + ok [GC store-site inventory] python3 scripts/gc_store_site_inventory.py --self-test + ok [GC store-site inventory] python3 scripts/gc_store_site_inventory.py + ok [Address-classification audit] python3 scripts/addr_class_inventory.py --self-test + ok [Address-classification audit] python3 scripts/addr_class_inventory.py + ok [String payload-access inventory] python3 scripts/string_payload_access_inventory.py --self-test + ok [String payload-access inventory] python3 scripts/string_payload_access_inventory.py + ok [Class-id collision audit] python3 scripts/class_id_collisions.py + ok [Object-header shape-descriptor census] python3 scripts/shape_descriptor_census.py + ok [GC pin-site custody audit] python3 scripts/gc_pin_sites.py --self-test + ok [GC pin-site custody audit] python3 scripts/gc_pin_sites.py + ok [Cross-thread promise provenance (#9552)] python3 scripts/check_cross_thread_promise_provenance.py --self-test + ok [Cross-thread promise provenance (#9552)] python3 scripts/check_cross_thread_promise_provenance.py + ok [Runtime GC-pointer holder custody audit] python3 scripts/gc_runtime_root_holders.py --self-test + ok [Runtime GC-pointer holder custody audit] python3 scripts/gc_runtime_root_holders.py + ok [Poll-capable reach audit (GC root dominance)] python3 scripts/gc_root_dominance_check.py --self-test + ok [Poll-capable reach audit (GC root dominance)] python3 scripts/gc_root_dominance_check.py --audit-poll-reach + ok [Thread-local GC scanner registration audit] python3 scripts/check_gc_scanner_latches.py --self-test + ok [Thread-local GC scanner registration audit] python3 scripts/check_gc_scanner_latches.py + ok [Rekeyed side-table custody audit] python3 scripts/gc_rekeyed_key_tables.py --self-test + ok [Rekeyed side-table custody audit] python3 scripts/gc_rekeyed_key_tables.py + ok [GC environment-knob drift audit] python3 scripts/check_gc_env_knobs.py --self-test + ok [GC environment-knob drift audit] python3 scripts/check_gc_env_knobs.py + ok [llvm-inprocess corpus currency] python3 scripts/check_llvm_corpus_currency.py --self-test + ok [llvm-inprocess corpus currency] python3 scripts/check_llvm_corpus_currency.py + ok [Statepoint pass source reader] python3 scripts/read_statepoint_rewrite_passes.py --self-test + ok [Statepoint pass source reader] python3 scripts/read_statepoint_rewrite_passes.py --check + ok [GC documentation claim audit] python3 scripts/check_gc_doc_claims.py --self-test + ok [GC documentation claim audit] python3 scripts/check_gc_doc_claims.py + ok [Windows-portable text I/O in the Windows-CI audits] python3 scripts/check_locale_independent_io.py --self-test + ok [Windows-portable text I/O in the Windows-CI audits] python3 scripts/check_locale_independent_io.py + ok [GC evacuation-liveness assert can say no] python3 scripts/gc_evacuation_liveness_assert.py --self-test + ok [Node version consistency] python3 scripts/check_node_version_consistency.py --self-test + ok [Node version consistency] python3 scripts/check_node_version_consistency.py + ok [Raw-handle debt ratchet] python3 scripts/raw_handle_debt.py --self-test + ok [Raw-handle debt ratchet] python3 scripts/raw_handle_debt.py + ok [Unrooted-local shape ratchet] python3 scripts/unrooted_local_shape.py --self-test + ok [Unrooted-local shape ratchet] python3 scripts/unrooted_local_shape.py --check + ok [Unrooted-local shape ratchet vs. merge base] python3 scripts/unrooted_local_shape.py --no-raise-vs "$BASE_SHA" + ok [Raw-handle debt ratchet vs. merge base] python3 scripts/raw_handle_debt.py --no-raise-vs "$BASE_SHA" + ok [Gap snapshot checker self-test] python3 scripts/gap_snapshot.py --self-test + ok [Platform-aware parity allowlist self-test] python3 scripts/parity_known_failures.py --self-test + ok [Parity allowlist ratchet (provenance + stale entries)] python3 scripts/parity_known_failures.py --audit + ok [Moving-GC gate wiring] python3 scripts/gc_gate_wiring_check.py --self-test + ok [Moving-GC gate wiring] python3 scripts/gc_gate_wiring_check.py + ok [GC matrix liveness gate] ./scripts/gc_repsel_matrix.sh --self-test-liveness-parser + ok [GC matrix liveness gate] python3 scripts/gc_repsel_matrix_merge.py --self-test + ok [GC matrix liveness gate] python3 scripts/gc_matrix_liveness_check.py --self-test + ok [GC matrix liveness gate] python3 scripts/gc_matrix_liveness_check.py --check-registry + ok [Test registration (dark tests)] python3 scripts/check_test_registration.py --self-test + ok [Test registration (dark tests)] python3 scripts/check_test_registration.py + ok [Per-test global sinks] python3 scripts/global_sink_isolation.py --self-test + ok [Per-test global sinks] python3 scripts/global_sink_isolation.py + +run_lint_gates: 6 compile commands derived from warnings + check (18 exclude args) + ok [warnings: rustc warnings (product)] RUSTFLAGS="-D warnings" cargo check -p perry --bins + FAIL [warnings: rustc warnings (host-compatible, all targets)] RUSTFLAGS="-D warnings" cargo check --workspace --all-targets --exclude perry-ui-android --exclude perry-ui-gtk4 --exclude perry-ui-ios --exclude perry-ui-macos --exclude perry-ui-tvos --exclude perry-ui-visionos --exclude perry-ui-watchos --exclude perry-ui-windows --exclude perry-ui-windows-winui + Checking bit-vec v0.8.0 + Checking quick-error v1.2.3 + Checking rusty-fork v0.3.1 + Checking bit-set v0.8.0 + error: could not compile `perry-runtime` (lib) due to 2 previous errors + warning: build failed, waiting for other jobs to finish... + ok [check: Clippy (product)] cargo clippy -p perry --bins + ok [check: Clippy (host-compatible)] cargo clippy --workspace --exclude perry-ui-android --exclude perry-ui-gtk4 --exclude perry-ui-ios --exclude perry-ui-macos --exclude perry-ui-tvos --exclude perry-ui-visionos --exclude perry-ui-watchos --exclude perry-ui-windows --exclude perry-ui-windows-winui + ok [check: Regenerate API docs] ./scripts/regen_api_docs.sh + FAIL [check: Check for API docs drift] git diff --quiet -- docs/src/api/reference.md docs/api/perry.d.ts + + +run_lint_gates: 3 of 83 FAILED; 2 CI-only skipped + [Public benchmark evidence freshness] python3 benchmarks/ci_public_baseline_check.py + [warnings: rustc warnings (host-compatible, all targets)] RUSTFLAGS="-D warnings" cargo check --workspace --all-targets --exclude perry-ui-android --exclude perry-ui-gtk4 --exclude perry-ui-ios --exclude perry-ui-macos --exclude perry-ui-tvos --exclude perry-ui-visionos --exclude perry-ui-watchos --exclude perry-ui-windows --exclude perry-ui-windows-winui + [check: Check for API docs drift] git diff --quiet -- docs/src/api/reference.md docs/api/perry.d.ts diff --git a/benchmarks/runtime_handle_scopes/evidence/fix-promises.folded.gz b/benchmarks/runtime_handle_scopes/evidence/fix-promises.folded.gz new file mode 100644 index 0000000000..f44daf93e5 Binary files /dev/null and b/benchmarks/runtime_handle_scopes/evidence/fix-promises.folded.gz differ diff --git a/benchmarks/runtime_handle_scopes/evidence/fix-promises.stat b/benchmarks/runtime_handle_scopes/evidence/fix-promises.stat new file mode 100644 index 0000000000..b7689f9cff --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/fix-promises.stat @@ -0,0 +1,3 @@ +# started on Mon Sep 14 03:59:08 2026 + +1050989735;;instructions:u;0.00%;103935311;100.00;; diff --git a/benchmarks/runtime_handle_scopes/evidence/gc-ratchet-comparison.json b/benchmarks/runtime_handle_scopes/evidence/gc-ratchet-comparison.json new file mode 100644 index 0000000000..1db55ef750 --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/gc-ratchet-comparison.json @@ -0,0 +1,12 @@ +{ + "baseline_sha": "9fda98df68d9fac3c08b2385fae007aa9f5278df", + "platform": "darwin-arm64", + "all_stdout_match_node": true, + "identical_cells": 126, + "excluded_metrics": [ + "peak_rss_bytes", + "rss_bytes", + "wall_ms" + ], + "differing_cells": [] +} diff --git a/benchmarks/runtime_handle_scopes/evidence/gc-ratchet-pinned-failures.txt b/benchmarks/runtime_handle_scopes/evidence/gc-ratchet-pinned-failures.txt new file mode 100644 index 0000000000..3ddb72bceb --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/gc-ratchet-pinned-failures.txt @@ -0,0 +1,31 @@ +Identical failures on clean baseline and changed runtime: + - 01_nursery_churn: heap_used_bytes 212,168 -> 438,744 (+106.79%), allowance 65,536 [increase] + - 01_nursery_churn: copied_objects 4,977 -> 6,690 (+34.42%), allowance 249 [either] + - 01_nursery_churn: copied_bytes 234,536 -> 466,392 (+98.86%), allowance 65,536 [either] + - 02_survivor_promotion: copied_objects 34,550 -> 37,366 (+8.15%), allowance 1,728 [either] + - 02_survivor_promotion: copied_bytes 1,450,992 -> 1,690,264 (+16.49%), allowance 72,550 [either] + - 04_dead_after_deep_stack: copied_objects 3,622 -> 2,666 (-26.39%), allowance 181 [either] + - 05_closure_capture: copied_objects 20,079 -> 14,285 (-28.86%), allowance 1,004 [either] + - 05_closure_capture: copied_bytes 743,384 -> 534,720 (-28.07%), allowance 65,536 [either] + - 05_closure_capture: promoted_objects 3,390 -> 6,154 (+81.53%), allowance 170 [either] + - 05_closure_capture: promoted_bytes 122,120 -> 221,624 (+81.48%), allowance 65,536 [either] + - 06_string_retention: copied_objects 298 -> 270 (-9.40%), allowance 16 [either] + - 07_array_grow_evacuate: heap_used_bytes 1,072,456 -> 1,211,232 (+12.94%), allowance 65,536 [increase] + - 07_array_grow_evacuate: copied_objects 4,991 -> 6,702 (+34.28%), allowance 250 [either] + - 07_array_grow_evacuate: promoted_objects 4,879 -> 6,154 (+26.13%), allowance 244 [either] + - 07_array_grow_evacuate: promoted_bytes 615,696 -> 841,048 (+36.60%), allowance 65,536 [either] + - 09_try_catch_roots: heap_used_bytes 212,168 -> 443,520 (+109.04%), allowance 65,536 [increase] + - 09_try_catch_roots: copied_objects 4,962 -> 6,673 (+34.48%), allowance 248 [either] + - 09_try_catch_roots: copied_bytes 230,352 -> 462,024 (+100.57%), allowance 65,536 [either] + - 09_try_catch_roots: freed_bytes 11,112,472 -> 10,023,568 (-9.80%), allowance 1,048,576 [either] + - 10_store_receiver_across_alloc: heap_used_bytes 220,384 -> 446,776 (+102.73%), allowance 65,536 [increase] + - 10_store_receiver_across_alloc: heap_total_bytes 16,777,216 -> 22,020,096 (+31.25%), allowance 1,048,576 [increase] + - 10_store_receiver_across_alloc: copied_objects 18,660 -> 14,625 (-21.62%), allowance 933 [either] + - 10_store_receiver_across_alloc: promoted_objects 4,722 -> 6,107 (+29.33%), allowance 236 [either] + - 10_store_receiver_across_alloc: promoted_bytes 228,440 -> 446,368 (+95.40%), allowance 65,536 [either] + - 11_collect_at_depth: heap_used_bytes 212,168 -> 444,720 (+109.61%), allowance 65,536 [increase] + - 11_collect_at_depth: copied_objects 4,975 -> 6,686 (+34.39%), allowance 249 [either] + - 11_collect_at_depth: copied_bytes 230,872 -> 462,544 (+100.35%), allowance 65,536 [either] + - 11_collect_at_depth: freed_bytes 10,062,936 -> 8,974,576 (-10.82%), allowance 1,048,576 [either] + - 12_large_live_set: copied_objects 59,405 -> 104,050 (+75.15%), allowance 2,970 [either] + - 12_large_live_set: copied_bytes 2,327,008 -> 4,162,008 (+78.86%), allowance 116,350 [either] diff --git a/benchmarks/runtime_handle_scopes/evidence/http2-baseline-comparison.json b/benchmarks/runtime_handle_scopes/evidence/http2-baseline-comparison.json new file mode 100644 index 0000000000..c31c9365b4 --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/http2-baseline-comparison.json @@ -0,0 +1,20 @@ +{ + "baseline_sha": "9fda98df68d9fac3c08b2385fae007aa9f5278df", + "host": "perrymaster.skelpo.net", + "test": "test_gap_gc_http2_pending_event_callback_rooting", + "baseline_worktree": "/root/runtime-handle-baseline-20260914", + "node_stdout": "settings cb fired\nping cb fired\nclose cb fired\n", + "baseline_stdout": "", + "changed_stdout": "", + "baseline_stderr": "[node:http2] bind 0.0.0.0:443 failed: Address already in use (os error 98)\n", + "changed_stderr": "[node:http2] bind 0.0.0.0:443 failed: Address already in use (os error 98)\n", + "baseline_exit_code": 0, + "changed_exit_code": 0, + "baseline_build_packages": [ + "perry", + "perry-runtime-static", + "perry-stdlib-static", + "perry-ext-net", + "perry-ext-http" + ] +} diff --git a/benchmarks/runtime_handle_scopes/evidence/http2-netns-results.json b/benchmarks/runtime_handle_scopes/evidence/http2-netns-results.json new file mode 100644 index 0000000000..89a6cb0b35 --- /dev/null +++ b/benchmarks/runtime_handle_scopes/evidence/http2-netns-results.json @@ -0,0 +1,14 @@ +[ + { + "kind": "baseline", + "exit_code": 124, + "stdout": "", + "stderr": "" + }, + { + "kind": "fix", + "exit_code": 124, + "stdout": "", + "stderr": "" + } +] diff --git a/benchmarks/runtime_handle_scopes/exec1.ts b/benchmarks/runtime_handle_scopes/exec1.ts new file mode 100644 index 0000000000..c2f866a24e --- /dev/null +++ b/benchmarks/runtime_handle_scopes/exec1.ts @@ -0,0 +1 @@ +const vals: string[] = []; for (let i = 0; i < 1000000; i++) vals.push((i % 2 ? "record_" : "!bad_") + i); let c = 0; const re = /([a-z]+)_([0-9]+)/; for (let i = 0; i < vals.length; i++) { const m = re.exec(vals[i]); if (m !== null) c += m[2].length; } console.log(c); diff --git a/benchmarks/runtime_handle_scopes/fault-results.json b/benchmarks/runtime_handle_scopes/fault-results.json new file mode 100644 index 0000000000..e9b770412d --- /dev/null +++ b/benchmarks/runtime_handle_scopes/fault-results.json @@ -0,0 +1,28 @@ +[ + { + "mutation": "omit-last-root", + "test": "gc::tests::runtime_roots::handle_stack::handle_stack_growth_preserves_every_moving_root_including_last", + "exit_code": 101, + "detected": true + }, + { + "mutation": "skip-throw-truncate", + "test": "gc::tests::runtime_roots::handle_stack::handle_stack_real_throw_restores_live_outer_scope_and_ffi_roots", + "exit_code": 101, + "detected": true + }, + { + "mutation": "skip-marking-barrier", + "test": "gc::tests::runtime_roots::handle_stack::handle_stack_pushes_and_updates_shade_all_kinds_during_marking", + "exit_code": 101, + "detected": true + }, + { + "mutation": "skip-cache-unpublish", + "test": "gc::roots::runtime_handles::tests::handle_storage_teardown_clears_cache_before_late_scope_drop", + "exit_code": 101, + "detected": true, + "evidence": "fault-skip-cache-unpublish-direct.log (same mutated test binary, --nocapture)", + "direct_exit_code": 133 + } +] diff --git a/benchmarks/runtime_handle_scopes/hoist.ts b/benchmarks/runtime_handle_scopes/hoist.ts new file mode 100644 index 0000000000..07c34ce7c5 --- /dev/null +++ b/benchmarks/runtime_handle_scopes/hoist.ts @@ -0,0 +1 @@ +const vals: string[] = []; for (let i = 0; i < 1000000; i++) vals.push((i % 2 ? "record_" : "!bad_") + i); let c = 0; const re = /^[a-z]+_[0-9]+$/; for (let i = 0; i < vals.length; i++) if (re.test(vals[i])) c++; console.log(c); diff --git a/benchmarks/runtime_handle_scopes/instructions.json b/benchmarks/runtime_handle_scopes/instructions.json new file mode 100644 index 0000000000..40031dd171 --- /dev/null +++ b/benchmarks/runtime_handle_scopes/instructions.json @@ -0,0 +1,31 @@ +{ + "base": "9fda98df68d9fac3c08b2385fae007aa9f5278df", + "event": "instructions:u", + "repeats": 3, + "results": [ + { + "workload": "promises", + "baseline_instructions": 1100168994.0, + "fix_instructions": 1050989735.0, + "reduction_percent": 4.470154973300399 + }, + { + "workload": "json", + "baseline_instructions": 3190619152.0, + "fix_instructions": 3132631719.0, + "reduction_percent": 1.8174351195645255 + }, + { + "workload": "hoist", + "baseline_instructions": 13773038016.0, + "fix_instructions": 13003278589.0, + "reduction_percent": 5.5888862435853115 + }, + { + "workload": "exec1", + "baseline_instructions": 31188918430.0, + "fix_instructions": 29854497805.0, + "reduction_percent": 4.278508817145921 + } + ] +} diff --git a/benchmarks/runtime_handle_scopes/json.ts b/benchmarks/runtime_handle_scopes/json.ts new file mode 100644 index 0000000000..cd21e41159 --- /dev/null +++ b/benchmarks/runtime_handle_scopes/json.ts @@ -0,0 +1,10 @@ +const source = '{"name":"a-long-heap-string-payload","count":42,"items":[1,2,3],"child":{"ok":true}}'; +let checksum = 0; +for (let i = 0; i < 100000; i++) { + const value = JSON.parse(source); + value.count = i; + const encoded = JSON.stringify(value); + const decoded = JSON.parse(encoded); + checksum += encoded.length + decoded.count + decoded.items[2]; +} +console.log(checksum); diff --git a/benchmarks/runtime_handle_scopes/measure.py b/benchmarks/runtime_handle_scopes/measure.py new file mode 100644 index 0000000000..a87da17c7c --- /dev/null +++ b/benchmarks/runtime_handle_scopes/measure.py @@ -0,0 +1,74 @@ +"""Instruction counts and folded stacks; run with the archives used by --perry. + +PERRY_RUNTIME_DIR and PERRY_NO_AUTO_OPTIMIZE=1 must identify the matching build. +The four sources include the original #10166 hoist/exec1 probes, unchanged. +""" +import argparse +import collections +import os +from pathlib import Path +import re +import subprocess + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--perry', required=True) + parser.add_argument('--output', required=True) + parser.add_argument('--node', default='node') + parser.add_argument('--repeats', default=3, type=int) + args = parser.parse_args() + expected_node = 'v' + (Path(__file__).resolve().parents[2] / '.node-version').read_text().strip() + actual_node = subprocess.check_output([args.node, '--version'], text=True).strip() + assert actual_node == expected_node, f'expected Node {expected_node}, found {actual_node}' + output = Path(args.output).resolve() + output.mkdir(parents=True, exist_ok=True) + env = os.environ | {'PERRY_KEEP_SYMBOLS': '1', 'PERRY_NO_AUTO_OPTIMIZE': '1'} + for name in ('promises', 'json', 'hoist', 'exec1'): + source = Path(__file__).with_name(name + '.ts') + binary = output / name + with (output / (name + '.compile.log')).open('w') as log: + subprocess.run([args.perry, 'compile', str(source), '--no-auto-optimize', + '-o', str(binary)], env=env, stdout=log, stderr=log, check=True) + expected = subprocess.check_output([args.node, str(source)]) + actual = subprocess.check_output([str(binary)]) + (output / (name + '.out')).write_bytes(actual) + assert actual == expected, f'{name}: Node output mismatch' + with (output / (name + '.runs.out')).open('w') as log: + subprocess.run(['perf', 'stat', '-x', ';', '-r', str(args.repeats), + '-e', 'instructions:u', '-o', str(output / (name + '.stat')), + str(binary)], stdout=log, check=True) + data = output / (name + '.perf.data') + subprocess.run(['perf', 'record', '-q', '-e', 'instructions:u', '-c', '1000003', + '--call-graph', 'dwarf', '-o', str(data), '--', str(binary)], + stdout=log, check=True) + process = subprocess.Popen(['perf', 'script', '-i', str(data)], + stdout=subprocess.PIPE, text=True) + stacks = collections.Counter() + frames = [] + for line in process.stdout: + if not line.strip(): + if frames: + stacks[';'.join(reversed(frames))] += 1 + frames = [] + elif line[0] in ' \t': + parts = line.strip().split(None, 1) + if len(parts) == 2: + symbol = parts[1].rsplit(' (', 1)[0] + frames.append(re.sub(r'\+0x[0-9a-f]+$', '', symbol)) + if frames: + stacks[';'.join(reversed(frames))] += 1 + assert process.wait() == 0, 'perf script failed' + with (output / (name + '.folded')).open('w') as folded: + for stack, count in stacks.most_common(): + folded.write(f'{count} {stack}\n') + total = sum(stacks.values()) + assert total > 0, 'no instruction samples' + leaf = sum(count for stack, count in stacks.items() + if re.search(r'RuntimeHandle|runtime_handle|RUNTIME_HANDLE', + stack.rsplit(';', 1)[-1])) + print(name, 'samples', total, 'handle-related leaf %', 100 * leaf / total, flush=True) + + +if __name__ == '__main__': + main() diff --git a/benchmarks/runtime_handle_scopes/promises.ts b/benchmarks/runtime_handle_scopes/promises.ts new file mode 100644 index 0000000000..bafee1b950 --- /dev/null +++ b/benchmarks/runtime_handle_scopes/promises.ts @@ -0,0 +1,9 @@ +async function run(): Promise { + let checksum = 0; + for (let i = 0; i < 100000; i++) { + const value = await Promise.resolve(i).then((n: number) => n + 1); + checksum += value; + } + console.log(checksum); +} +run(); diff --git a/changelog.d/10252-runtime-handle-scopes.md b/changelog.d/10252-runtime-handle-scopes.md new file mode 100644 index 0000000000..315813e656 --- /dev/null +++ b/changelog.d/10252-runtime-handle-scopes.md @@ -0,0 +1,6 @@ +Reduce the per-call cost of Rust runtime GC handles. Scopes cache non-dropping +TLS metadata, root slots use 16 bytes, and idle pushes skip barrier dispatch. +Index handles retain bounds and kind checks across growth, moving collections, +and caught throws. Add fault-tested coverage for relocation, savepoint restore, +incremental marking, FFI indices, and TLS teardown. Measured user instruction +counts fall by 1.8–5.6% across JSON, promises, and the hoisted regex probes. diff --git a/crates/perry-runtime/src/gc/roots.rs b/crates/perry-runtime/src/gc/roots.rs index 661431c69b..dd7bc06de8 100644 --- a/crates/perry-runtime/src/gc/roots.rs +++ b/crates/perry-runtime/src/gc/roots.rs @@ -103,8 +103,10 @@ pub(super) struct MutableRootScannerEntry { #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub(super) enum RuntimeHandleSlot { Nanbox(u64), - RawTagged { addr: usize, tag: u64 }, HeapWord(u64), + RawPointer(usize), + RawString(usize), + RawBigInt(usize), } crate::perry_thread_local! { diff --git a/crates/perry-runtime/src/gc/roots/runtime_handles.rs b/crates/perry-runtime/src/gc/roots/runtime_handles.rs index 503d47c1fb..1d6a117cd3 100644 --- a/crates/perry-runtime/src/gc/roots/runtime_handles.rs +++ b/crates/perry-runtime/src/gc/roots/runtime_handles.rs @@ -1,10 +1,16 @@ use super::*; +mod stack; +#[cfg(test)] +mod tests; +use stack::RuntimeHandleStack; + struct RuntimeHandleStackHotGuard; impl Drop for RuntimeHandleStackHotGuard { fn drop(&mut self) { crate::tls_hot::unpublish_runtime_handle_stack(); + RUNTIME_HANDLE_STACK.with(RuntimeHandleStack::release); } } @@ -12,9 +18,9 @@ thread_local! { /// This stays a raw `thread_local!` as the initialization fallback for its /// named `HotTls` slot. Going through `perry_thread_local!` here would call /// `hot()` while `HotTls::fill` is still resolving this address (#9183). - static RUNTIME_HANDLE_STACK: RefCell> = const { RefCell::new(Vec::new()) }; - /// Registered after the stack itself, so reverse-order TLS destruction - /// clears the named cache pointer before the stack storage is destroyed. + static RUNTIME_HANDLE_STACK: RuntimeHandleStack = const { RuntimeHandleStack::new() }; + /// Owns the buffer, registered before its first allocation or publication. + /// The metadata never drops; this guard unpublishes, empties, then frees it. static RUNTIME_HANDLE_STACK_HOT_GUARD: RuntimeHandleStackHotGuard = const { RuntimeHandleStackHotGuard }; } @@ -28,25 +34,28 @@ pub(crate) fn runtime_handle_stack_hot_addr() -> *mut u8 { addr } -/// Borrow this thread's transient-handle stack. +/// Resolve this thread's transient-handle metadata, without initializing HOT. /// /// On Apple aarch64 the steady-state path reads the address from an already /// published `HotTls`. During `HotTls::fill` (and on every other target) it /// uses the ordinary thread-local directly, so opening a handle scope cannot /// recursively initialize the cache (#9183). #[inline(always)] -fn with_runtime_handle_stack(f: impl FnOnce(&RefCell>) -> R) -> R { +fn runtime_handle_stack() -> &'static RuntimeHandleStack { if let Some(hot) = crate::tls_hot::hot_if_published() { let stack = hot.runtime_handle_stack.get(); - if stack.is_null() { - return RUNTIME_HANDLE_STACK.with(f); + if !stack.is_null() { + // SAFETY: fill publishes this thread's non-dropping metadata. + // The buffer owner clears it before freeing the allocation. + return unsafe { &*(stack as *const RuntimeHandleStack) }; } - // SAFETY: `fill` stores this thread's `RUNTIME_HANDLE_STACK` address - // before publishing the cache, and the address is stable for the - // lifetime of the thread. - return f(unsafe { &*(stack as *const RefCell>) }); } - RUNTIME_HANDLE_STACK.with(f) + RUNTIME_HANDLE_STACK.with(|stack| { + // SAFETY: the metadata is const-initialized and has no Drop. Its + // cells remain valid throughout thread teardown. Cell is !Sync, so + // scopes and handles carrying this reference cannot leave the thread. + unsafe { &*(stack as *const RuntimeHandleStack) } + }) } /// Scoped owner for transient runtime handles. @@ -56,26 +65,26 @@ fn with_runtime_handle_stack(f: impl FnOnce(&RefCell>) /// scope removes every handle created from it. pub struct RuntimeHandleScope { pub(super) base: usize, + stack: &'static RuntimeHandleStack, } impl RuntimeHandleScope { #[inline] pub fn new() -> Self { - let base = with_runtime_handle_stack(|stack| stack.borrow().len()); - Self { base } + let stack = runtime_handle_stack(); + Self { + base: stack.len(), + stack, + } } #[inline] pub(super) fn push<'scope>(&'scope self, slot: RuntimeHandleSlot) -> RuntimeHandle<'scope> { runtime_handle_slot_write_barrier(slot); - let index = with_runtime_handle_stack(|stack| { - let mut stack = stack.borrow_mut(); - let index = stack.len(); - stack.push(slot); - index - }); + let index = self.stack.push(slot); RuntimeHandle { index, + stack: self.stack, _scope: PhantomData, } } @@ -127,40 +136,33 @@ impl RuntimeHandleScope { #[inline] pub fn root_raw_mut_ptr<'scope, T>(&'scope self, ptr: *mut T) -> RuntimeHandle<'scope> { - self.push(RuntimeHandleSlot::RawTagged { - addr: ptr as usize, - tag: POINTER_TAG, - }) + self.push(RuntimeHandleSlot::RawPointer(ptr as usize)) } #[inline] pub fn root_raw_const_ptr<'scope, T>(&'scope self, ptr: *const T) -> RuntimeHandle<'scope> { - self.push(RuntimeHandleSlot::RawTagged { - addr: ptr as usize, - tag: POINTER_TAG, - }) + self.push(RuntimeHandleSlot::RawPointer(ptr as usize)) } pub fn root_string_ptr<'scope>( &'scope self, ptr: *const crate::StringHeader, ) -> RuntimeHandle<'scope> { - self.push(RuntimeHandleSlot::RawTagged { - addr: ptr as usize, - tag: STRING_TAG, - }) + self.push(RuntimeHandleSlot::RawString(ptr as usize)) } pub fn root_bigint_ptr<'scope, T>(&'scope self, ptr: *const T) -> RuntimeHandle<'scope> { - self.push(RuntimeHandleSlot::RawTagged { - addr: ptr as usize, - tag: BIGINT_TAG, - }) + self.push(RuntimeHandleSlot::RawBigInt(ptr as usize)) } #[cfg(test)] pub(crate) fn active_len_for_tests() -> usize { - with_runtime_handle_stack(|stack| stack.borrow().len()) + runtime_handle_stack().len() + } + + #[cfg(test)] + pub(crate) fn capacity_for_tests() -> usize { + runtime_handle_stack().capacity() } } @@ -168,22 +170,37 @@ impl RuntimeHandleScope { /// Rust frames. `longjmp` skips `RuntimeHandleScope::drop`, so exception /// unwinding restores this depth explicitly. pub(crate) fn runtime_handle_stack_savepoint() -> usize { - with_runtime_handle_stack(|stack| stack.borrow().len()) + runtime_handle_stack().len() } /// Discard transient roots owned by Rust frames skipped by a JS exception. pub(crate) fn runtime_handle_stack_restore(savepoint: usize) { - with_runtime_handle_stack(|stack| stack.borrow_mut().truncate(savepoint)); + runtime_handle_stack().truncate(savepoint); } -#[inline] +#[inline(always)] fn runtime_handle_slot_write_barrier(slot: RuntimeHandleSlot) { + // Root stores shade only during incremental marking. Keep the idle test + // ahead of kind decoding and the out-of-line active barrier machinery. + if crate::gc::barrier::incremental_mark_barrier_globally_idle() { + return; + } + runtime_handle_slot_write_barrier_active(slot); +} + +#[cold] +#[inline(never)] +fn runtime_handle_slot_write_barrier_active(slot: RuntimeHandleSlot) { match slot { RuntimeHandleSlot::Nanbox(bits) => runtime_write_barrier_root_nanbox(bits), RuntimeHandleSlot::HeapWord(bits) => runtime_write_barrier_root_heap_word(bits), - RuntimeHandleSlot::RawTagged { addr, tag } => { + RuntimeHandleSlot::RawPointer(addr) + | RuntimeHandleSlot::RawString(addr) + | RuntimeHandleSlot::RawBigInt(addr) => { if addr != 0 { - runtime_write_barrier_root_nanbox(tag | (addr as u64 & POINTER_MASK)); + runtime_write_barrier_root_nanbox( + raw_slot_tag(slot) | (addr as u64 & POINTER_MASK), + ); } } } @@ -198,15 +215,14 @@ impl Default for RuntimeHandleScope { impl Drop for RuntimeHandleScope { #[inline] fn drop(&mut self) { - with_runtime_handle_stack(|stack| { - stack.borrow_mut().truncate(self.base); - }); + self.stack.truncate(self.base); } } #[derive(Clone, Copy)] pub struct RuntimeHandle<'scope> { pub(super) index: usize, + stack: &'scope RuntimeHandleStack, pub(super) _scope: PhantomData<&'scope RuntimeHandleScope>, } @@ -228,29 +244,36 @@ fn handle_kind_mismatch(expected: &str) -> ! { panic!("runtime handle kind mismatch: expected {expected}"); } +#[inline] +fn raw_slot_tag(slot: RuntimeHandleSlot) -> u64 { + match slot { + RuntimeHandleSlot::RawPointer(_) => POINTER_TAG, + RuntimeHandleSlot::RawString(_) => STRING_TAG, + RuntimeHandleSlot::RawBigInt(_) => BIGINT_TAG, + _ => handle_kind_mismatch("raw pointer"), + } +} + +// Encode the three raw tags in the discriminant, rather than storing a +// separate u64 tag alongside every payload (24 -> 16 bytes on 64-bit hosts). +const _: () = assert!(std::mem::size_of::() == 16); + impl<'scope> RuntimeHandle<'scope> { #[inline] pub(super) fn with_slot(&self, f: impl FnOnce(RuntimeHandleSlot) -> R) -> R { - with_runtime_handle_stack(|stack| { - let stack = stack.borrow(); - let slot = match stack.get(self.index) { - Some(slot) => *slot, - None => handle_used_after_scope(), - }; - f(slot) - }) + let slot = match self.stack.get(self.index) { + Some(slot) => slot, + None => handle_used_after_scope(), + }; + f(slot) } #[inline] pub(super) fn with_slot_mut(&self, f: impl FnOnce(&mut RuntimeHandleSlot) -> R) -> R { - with_runtime_handle_stack(|stack| { - let mut stack = stack.borrow_mut(); - let slot = match stack.get_mut(self.index) { - Some(slot) => slot, - None => handle_used_after_scope(), - }; - f(slot) - }) + let mut slot = self.with_slot(|slot| slot); + let result = f(&mut slot); + self.stack.set(self.index, slot); + result } /// Pass the handle's current mutable pointer to `f` without exposing a @@ -296,9 +319,7 @@ impl<'scope> RuntimeHandle<'scope> { #[inline] pub unsafe fn with_string_bytes(&self, f: impl FnOnce(&[u8]) -> R) -> R { let ptr = self.with_slot(|slot| match slot { - RuntimeHandleSlot::RawTagged { addr, tag } if tag == STRING_TAG => { - addr as *const crate::StringHeader - } + RuntimeHandleSlot::RawString(addr) => addr as *const crate::StringHeader, _ => handle_kind_mismatch("rooted string pointer"), }); let bytes = unsafe { @@ -414,61 +435,70 @@ impl<'scope> RuntimeHandle<'scope> { #[inline] pub fn get_raw_mut_ptr(&self) -> *mut T { self.with_slot(|slot| match slot { - RuntimeHandleSlot::RawTagged { addr, .. } => addr as *mut T, + RuntimeHandleSlot::RawPointer(addr) + | RuntimeHandleSlot::RawString(addr) + | RuntimeHandleSlot::RawBigInt(addr) => addr as *mut T, _ => handle_kind_mismatch("raw pointer"), }) } pub fn set_raw_mut_ptr(&self, ptr: *mut T) { - self.with_slot_mut(|slot| match slot { - RuntimeHandleSlot::RawTagged { addr, tag } => { - *addr = ptr as usize; - if !ptr.is_null() { - runtime_write_barrier_root_nanbox(*tag | (ptr as u64 & POINTER_MASK)); - } - } - _ => panic!("runtime handle kind mismatch: expected raw pointer"), - }); + self.set_raw_const_ptr(ptr.cast_const()); } #[inline] pub fn get_raw_const_ptr(&self) -> *const T { self.with_slot(|slot| match slot { - RuntimeHandleSlot::RawTagged { addr, .. } => addr as *const T, + RuntimeHandleSlot::RawPointer(addr) + | RuntimeHandleSlot::RawString(addr) + | RuntimeHandleSlot::RawBigInt(addr) => addr as *const T, _ => handle_kind_mismatch("raw pointer"), }) } pub fn set_raw_const_ptr(&self, ptr: *const T) { - self.with_slot_mut(|slot| match slot { - RuntimeHandleSlot::RawTagged { addr, tag } => { - *addr = ptr as usize; - if !ptr.is_null() { - runtime_write_barrier_root_nanbox(*tag | (ptr as u64 & POINTER_MASK)); - } + let slot = self.with_slot_mut(|slot| { + match slot { + RuntimeHandleSlot::RawPointer(addr) + | RuntimeHandleSlot::RawString(addr) + | RuntimeHandleSlot::RawBigInt(addr) => *addr = ptr as usize, + _ => handle_kind_mismatch("raw pointer"), } - _ => panic!("runtime handle kind mismatch: expected raw pointer"), + *slot }); + runtime_handle_slot_write_barrier(slot); + } +} + +/// Visit a copy, then commit a relocation to its indexed slot. No reference +/// into the growable buffer crosses a visitor call; the legacy Copy visitor +/// may invoke arbitrary callbacks. Non-rewriting visits must not overwrite a +/// value changed by such a callback. +fn visit_runtime_handle_slot( + stack: &RuntimeHandleStack, + index: usize, + visitor: &mut RuntimeRootVisitor<'_>, +) { + let Some(mut slot) = stack.get(index) else { + return; + }; + let rewritten = match &mut slot { + RuntimeHandleSlot::Nanbox(bits) => visitor.visit_nanbox_u64_slot(bits), + RuntimeHandleSlot::RawPointer(addr) => visitor.visit_tagged_usize_slot(addr, POINTER_TAG), + RuntimeHandleSlot::RawString(addr) => visitor.visit_tagged_usize_slot(addr, STRING_TAG), + RuntimeHandleSlot::RawBigInt(addr) => visitor.visit_tagged_usize_slot(addr, BIGINT_TAG), + RuntimeHandleSlot::HeapWord(bits) => visitor.visit_heap_word_u64_slot(bits), + }; + if rewritten { + stack.set(index, slot); } } pub(crate) fn scan_runtime_handle_roots_mut(visitor: &mut RuntimeRootVisitor<'_>) { - with_runtime_handle_stack(|stack| { - let mut stack = stack.borrow_mut(); - for slot in stack.iter_mut() { - match slot { - RuntimeHandleSlot::Nanbox(bits) => { - visitor.visit_nanbox_u64_slot(bits); - } - RuntimeHandleSlot::RawTagged { addr, tag } => { - visitor.visit_tagged_usize_slot(addr, *tag); - } - RuntimeHandleSlot::HeapWord(bits) => { - visitor.visit_heap_word_u64_slot(bits); - } - } - } - }); + let stack = runtime_handle_stack(); + for index in 0..stack.len() { + visit_runtime_handle_slot(stack, index, visitor); + } } #[derive(Default)] @@ -488,25 +518,13 @@ pub(crate) fn scan_runtime_handle_roots_mut_step( let state = state .downcast_mut::() .expect("runtime handle root scanner state type"); - with_runtime_handle_stack(|stack| { - let mut stack = stack.borrow_mut(); - while *remaining > 0 && state.cursor < stack.len() { - match &mut stack[state.cursor] { - RuntimeHandleSlot::Nanbox(bits) => { - visitor.visit_nanbox_u64_slot(bits); - } - RuntimeHandleSlot::RawTagged { addr, tag } => { - visitor.visit_tagged_usize_slot(addr, *tag); - } - RuntimeHandleSlot::HeapWord(bits) => { - visitor.visit_heap_word_u64_slot(bits); - } - } - state.cursor += 1; - *remaining -= 1; - } - state.cursor >= stack.len() - }) + let stack = runtime_handle_stack(); + while *remaining > 0 && state.cursor < stack.len() { + visit_runtime_handle_slot(stack, state.cursor, visitor); + state.cursor += 1; + *remaining -= 1; + } + state.cursor >= stack.len() } // --------------------------------------------------------------------------- @@ -526,7 +544,7 @@ pub(crate) fn scan_runtime_handle_roots_mut_step( #[no_mangle] pub extern "C" fn js_ffi_root_scope_enter() -> usize { - with_runtime_handle_stack(|stack| stack.borrow().len()) + runtime_handle_stack().len() } /// Root a raw heap ADDRESS (e.g. an `i64` closure pointer from an ext @@ -535,20 +553,15 @@ pub extern "C" fn js_ffi_root_scope_enter() -> usize { pub extern "C" fn js_ffi_root_push_heap_addr(addr: u64) -> usize { let slot = RuntimeHandleSlot::HeapWord(addr); runtime_handle_slot_write_barrier(slot); - with_runtime_handle_stack(|stack| { - let mut stack = stack.borrow_mut(); - let index = stack.len(); - stack.push(slot); - index - }) + runtime_handle_stack().push(slot) } #[no_mangle] pub extern "C" fn js_ffi_root_get_heap_addr(index: usize) -> u64 { - with_runtime_handle_stack(|stack| match stack.borrow().get(index) { - Some(RuntimeHandleSlot::HeapWord(bits)) => *bits, + match runtime_handle_stack().get(index) { + Some(RuntimeHandleSlot::HeapWord(bits)) => bits, _ => 0, - }) + } } /// Root a NaN-boxed VALUE (string/buffer/object handed to callbacks). @@ -556,23 +569,18 @@ pub extern "C" fn js_ffi_root_get_heap_addr(index: usize) -> u64 { pub extern "C" fn js_ffi_root_push_nanbox(bits: u64) -> usize { let slot = RuntimeHandleSlot::Nanbox(bits); runtime_handle_slot_write_barrier(slot); - with_runtime_handle_stack(|stack| { - let mut stack = stack.borrow_mut(); - let index = stack.len(); - stack.push(slot); - index - }) + runtime_handle_stack().push(slot) } #[no_mangle] pub extern "C" fn js_ffi_root_get_nanbox(index: usize) -> u64 { - with_runtime_handle_stack(|stack| match stack.borrow().get(index) { - Some(RuntimeHandleSlot::Nanbox(bits)) => *bits, + match runtime_handle_stack().get(index) { + Some(RuntimeHandleSlot::Nanbox(bits)) => bits, _ => 0, - }) + } } #[no_mangle] pub extern "C" fn js_ffi_root_scope_exit(base: usize) { - with_runtime_handle_stack(|stack| stack.borrow_mut().truncate(base)); + runtime_handle_stack().truncate(base); } diff --git a/crates/perry-runtime/src/gc/roots/runtime_handles/stack.rs b/crates/perry-runtime/src/gc/roots/runtime_handles/stack.rs new file mode 100644 index 0000000000..5116b5a56a --- /dev/null +++ b/crates/perry-runtime/src/gc/roots/runtime_handles/stack.rs @@ -0,0 +1,125 @@ +use super::{RuntimeHandleSlot, RUNTIME_HANDLE_STACK_HOT_GUARD}; +use std::alloc::{alloc, dealloc, handle_alloc_error, realloc, Layout}; +use std::cell::Cell; + +/// Non-dropping metadata: ELF can resolve this TLS without a destructor-init +/// check. The separate hot guard owns the allocation and clears these cells +/// before freeing it. Scopes can therefore cache a reference to the metadata, +/// including in a TLS destructor that runs after the buffer has been freed. +/// Cell makes the scope and its borrowed handles thread-bound. +pub(super) struct RuntimeHandleStack { + data: Cell<*mut RuntimeHandleSlot>, + top: Cell, + capacity: Cell, +} + +impl RuntimeHandleStack { + pub(super) const fn new() -> Self { + Self { + data: Cell::new(std::ptr::null_mut()), + top: Cell::new(0), + capacity: Cell::new(0), + } + } + + #[inline(always)] + pub(super) fn len(&self) -> usize { + self.top.get() + } + + #[inline(always)] + pub(super) fn truncate(&self, base: usize) { + // Restore can precede a surviving scope's Drop. Never grow the live + // prefix back to that scope's now-obsolete base (Vec::truncate semantics). + self.top.set(self.top.get().min(base)); + } + + #[inline(always)] + pub(super) fn push(&self, slot: RuntimeHandleSlot) -> usize { + let index = self.top.get(); + if index == self.capacity.get() { + self.grow(); + } + // SAFETY: grow guarantees capacity > index. Slots are Copy, so a + // truncated slot needs no drop before reuse. Publish only after write. + unsafe { self.data.get().add(index).write(slot) }; + self.top.set(index + 1); + index + } + + #[inline(always)] + pub(super) fn get(&self, index: usize) -> Option { + if index >= self.top.get() { + return None; + } + // SAFETY: precisely [0, top) is initialized. No reference into the + // buffer escapes; a callback may grow or scan the stack after this copy. + Some(unsafe { self.data.get().add(index).read() }) + } + + #[inline(always)] + pub(super) fn set(&self, index: usize, slot: RuntimeHandleSlot) { + if index >= self.top.get() { + super::handle_used_after_scope(); + } + // SAFETY: the checked live index is initialized. Reload the base: a + // visitor called between get and set may have reallocated the buffer. + unsafe { self.data.get().add(index).write(slot) }; + } + + #[cold] + #[inline(never)] + fn grow(&self) { + // Register the owner before allocating. During late TLS teardown this + // also rejects resurrection after its destructor has already run. + RUNTIME_HANDLE_STACK_HOT_GUARD.with(|_| {}); + let old_capacity = self.capacity.get(); + let capacity = old_capacity + .checked_mul(2) + .expect("runtime handle stack capacity overflow") + .max(64); + let layout = Layout::array::(capacity) + .expect("runtime handle stack allocation overflow"); + // SAFETY: data belongs exclusively to this thread and was allocated + // with the matching old layout. Rust allocation does not run Perry GC. + let data = unsafe { + if old_capacity == 0 { + alloc(layout) + } else { + realloc( + self.data.get().cast(), + Layout::array::(old_capacity).unwrap(), + layout.size(), + ) + } + }; + if data.is_null() { + handle_alloc_error(layout); + } + self.data.set(data.cast()); + self.capacity.set(capacity); + } + + pub(super) fn release(&self) { + let capacity = self.capacity.replace(0); + let data = self.data.replace(std::ptr::null_mut()); + self.top.set(0); + if capacity != 0 { + // SAFETY: the guard releases its one allocation once, after + // unpublishing the cache. No references into the buffer exist. + unsafe { + dealloc( + data.cast(), + Layout::array::(capacity).unwrap(), + ); + } + } + } + + #[cfg(test)] + pub(super) fn capacity(&self) -> usize { + self.capacity.get() + } +} + +const _: () = assert!(!std::mem::needs_drop::()); diff --git a/crates/perry-runtime/src/gc/roots/runtime_handles/tests.rs b/crates/perry-runtime/src/gc/roots/runtime_handles/tests.rs new file mode 100644 index 0000000000..c2b141d4e3 --- /dev/null +++ b/crates/perry-runtime/src/gc/roots/runtime_handles/tests.rs @@ -0,0 +1,95 @@ +use super::*; + +#[test] +fn copy_visitor_can_read_update_and_grow_the_handle_stack() { + let scope = RuntimeHandleScope::new(); + let first = scope.root_nanbox_f64(11.0); + let second = scope.root_nanbox_f64(12.0); + let count = runtime_handle_stack().capacity() + 1; + let mut visits = 0; + let mut callback = |value| { + visits += 1; + if value == 11.0 { + first.set_nanbox_f64(21.0); + let nested = RuntimeHandleScope::new(); + for i in 0..count { + let _ = nested.root_nanbox_f64(i as f64); + } + assert_eq!(second.get_nanbox_f64(), 12.0); + } + }; + scan_runtime_handle_roots_mut(&mut RuntimeRootVisitor::for_copy(&mut callback)); + assert_eq!(visits, 2); + assert_eq!( + first.get_nanbox_f64(), + 21.0, + "a non-rewriting visit must not undo callback updates" + ); + assert_eq!(RuntimeHandleScope::active_len_for_tests(), scope.base + 2); +} + +#[test] +fn ffi_indices_and_kind_checks_survive_growth_and_restore() { + let base = js_ffi_root_scope_enter(); + let nanbox = js_ffi_root_push_nanbox(13.0f64.to_bits()); + let heap_word = js_ffi_root_push_heap_addr(0); + for i in 0..257 { + js_ffi_root_push_nanbox((i as f64).to_bits()); + } + assert_eq!(js_ffi_root_get_nanbox(nanbox), 13.0f64.to_bits()); + assert_eq!(js_ffi_root_get_heap_addr(heap_word), 0); + assert_eq!(js_ffi_root_get_heap_addr(nanbox), 0); + assert_eq!(js_ffi_root_get_nanbox(heap_word), 0); + js_ffi_root_scope_exit(usize::MAX); + assert_eq!(js_ffi_root_scope_enter(), base + 259); + js_ffi_root_scope_exit(base); + assert_eq!(js_ffi_root_scope_enter(), base); + assert_eq!(js_ffi_root_get_nanbox(nanbox), 0); + + let scope = RuntimeHandleScope::new(); + let root = scope.root_nanbox_f64(31.0); + assert!(std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| { + root.get_heap_word_u64() + })) + .is_err()); + runtime_handle_stack_restore(base); + assert!( + std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| { root.get_nanbox_f64() })) + .is_err() + ); +} + +#[test] +fn handle_storage_teardown_clears_cache_before_late_scope_drop() { + struct LateScope(RefCell>); + impl Drop for LateScope { + fn drop(&mut self) { + assert_eq!(runtime_handle_stack().len(), 0); + assert_eq!(runtime_handle_stack().capacity(), 0); + assert!(crate::tls_hot::hot().runtime_handle_stack.get().is_null()); + drop(self.0.get_mut().take()); + assert_eq!(runtime_handle_stack().len(), 0); + assert!( + std::panic::catch_unwind(|| { + let scope = RuntimeHandleScope::new(); + let _ = scope.root_nanbox_f64(1.0); + }) + .is_err(), + "released TLS storage must not be resurrected" + ); + } + } + thread_local! { + static BEFORE_BUFFER: LateScope = const { LateScope(RefCell::new(None)) }; + } + std::thread::spawn(|| { + BEFORE_BUFFER.with(|_| {}); + let scope = RuntimeHandleScope::new(); + let root = scope.root_nanbox_f64(7.0); + assert_eq!(root.get_nanbox_f64(), 7.0); + assert!(!crate::tls_hot::hot().runtime_handle_stack.get().is_null()); + BEFORE_BUFFER.with(|late| *late.0.borrow_mut() = Some(scope)); + }) + .join() + .expect("handle teardown thread"); +} diff --git a/crates/perry-runtime/src/gc/tests/runtime_roots.rs b/crates/perry-runtime/src/gc/tests/runtime_roots.rs index cfa84c979c..0a4f3e5294 100644 --- a/crates/perry-runtime/src/gc/tests/runtime_roots.rs +++ b/crates/perry-runtime/src/gc/tests/runtime_roots.rs @@ -6,6 +6,7 @@ mod bound_method_builder; mod callback_scanners; mod fs_options_object; mod generator_attach_prototype; +mod handle_stack; mod hook_dispatch_handles; mod interned_string_caches; mod iter_result_keys; diff --git a/crates/perry-runtime/src/gc/tests/runtime_roots/handle_stack.rs b/crates/perry-runtime/src/gc/tests/runtime_roots/handle_stack.rs new file mode 100644 index 0000000000..2fc6bb85c0 --- /dev/null +++ b/crates/perry-runtime/src/gc/tests/runtime_roots/handle_stack.rs @@ -0,0 +1,183 @@ +use super::*; + +#[test] +fn handle_stack_growth_preserves_every_moving_root_including_last() { + let _guard = CopyingNurseryTestGuard::new(0); + let _triggers = GcTriggerThresholdTestGuard::suppress_automatic_triggers(); + let _evacuation = ForcedEvacuationTestGuard::on(); + register_runtime_handle_root_scanner_for_tests(); + let scope = RuntimeHandleScope::new(); + let capacity_before = RuntimeHandleScope::capacity_for_tests(); + let count = capacity_before + 257; + let mut roots = Vec::new(); + for i in 0..count { + let text = format!("moving handle payload number {i}"); + let ptr = crate::js_string_from_bytes(text.as_ptr(), text.len() as u32); + roots.push(match i % 3 { + 0 => scope.root_string_ptr(ptr), + 1 => scope.root_nanbox_u64(string_bits(ptr as usize)), + _ => scope.root_heap_word_u64(ptr as u64), + }); + } + assert!(RuntimeHandleScope::capacity_for_tests() > capacity_before); + let address = |i: usize, root: &RuntimeHandle<'_>| match i % 3 { + 0 => root.with_const_ptr(|ptr: *const crate::StringHeader| ptr as usize), + 1 => (root.get_nanbox_u64() & POINTER_MASK) as usize, + _ => root.get_heap_word_u64() as usize, + }; + let before: Vec<_> = roots + .iter() + .enumerate() + .map(|(i, h)| address(i, h)) + .collect(); + gc_collect_minor(); + for (i, root) in roots.iter().enumerate() { + let after = address(i, root); + assert_ne!(before[i], after, "root {i} was not relocated"); + unsafe { + assert_string_bytes( + after as *const crate::StringHeader, + format!("moving handle payload number {i}").as_bytes(), + ); + } + } + // Grow again while these relocated handles remain live, then collect again. + let capacity = RuntimeHandleScope::capacity_for_tests(); + for i in 0..=capacity { + let _ = scope.root_nanbox_f64(i as f64); + } + assert!(RuntimeHandleScope::capacity_for_tests() > capacity); + gc_collect_minor(); + for (i, root) in roots.iter().enumerate() { + unsafe { + assert_string_bytes( + address(i, root) as *const crate::StringHeader, + format!("moving handle payload number {i}").as_bytes(), + ); + } + } +} + +#[test] +fn handle_stack_real_throw_restores_live_outer_scope_and_ffi_roots() { + unsafe extern "C" { + fn js_ffi_root_scope_enter() -> usize; + fn js_ffi_root_push_nanbox(bits: u64) -> usize; + } + let _guard = CopyingNurseryTestGuard::new(0); + let _triggers = GcTriggerThresholdTestGuard::suppress_automatic_triggers(); + let _evacuation = ForcedEvacuationTestGuard::on(); + register_runtime_handle_root_scanner_for_tests(); + let scope = RuntimeHandleScope::new(); + let ptr = crate::js_string_from_bytes(b"outer root across caught throw".as_ptr(), 30); + let root = scope.root_string_ptr(ptr); + let base = RuntimeHandleScope::active_len_for_tests(); + let result: Result<(), f64> = crate::exception::catch_js_throw(|| { + let inner = RuntimeHandleScope::new(); + for i in 0..257 { + let _ = inner.root_nanbox_f64(i as f64); + } + unsafe { + let _ffi_base = js_ffi_root_scope_enter(); + js_ffi_root_push_nanbox(42.0f64.to_bits()); + } + assert!(RuntimeHandleScope::active_len_for_tests() > base); + crate::exception::js_throw(17.0); + }); + assert_eq!(result, Err(17.0)); + assert_eq!(RuntimeHandleScope::active_len_for_tests(), base); + gc_collect_minor(); + root.with_const_ptr(|after: *const crate::StringHeader| { + assert_ne!(ptr, after.cast_mut(), "the surviving outer root must move"); + unsafe { assert_string_bytes(after, b"outer root across caught throw") }; + }); + let tail = scope.root_nanbox_f64(23.0); + assert_eq!(tail.get_nanbox_f64(), 23.0); + assert_eq!(RuntimeHandleScope::active_len_for_tests(), base + 1); +} + +#[test] +fn handle_stack_pushes_and_updates_shade_all_kinds_during_marking() { + let _guard = GcTestIsolationGuard::new(); + clear_marks(); + clear_mark_seeds(); + let pointers: Vec<_> = (0..10) + .map(|_| crate::arena::arena_alloc_gc(64, 8, GC_TYPE_OBJECT)) + .collect(); + let valid_ptrs = build_valid_pointer_set(); + let scope = RuntimeHandleScope::new(); + let mut state = new_runtime_handle_root_scan_state(); + let mut marker = RuntimeRootVisitor::for_mark(&valid_ptrs); + let mut budget = 1; + assert!(scan_runtime_handle_roots_mut_step( + &mut marker, + state.as_mut(), + &mut budget + )); + // The scanner has already passed the current prefix. These pre-existing + // white objects must be shaded by publishing roots, not allocate-black. + let active = IncrementalMarkBarrierTestGuard::new(&valid_ptrs); + let roots = [ + scope.root_nanbox_u64(ptr_bits(pointers[0] as usize)), + scope.root_heap_word_u64(pointers[1] as u64), + scope.root_raw_mut_ptr(pointers[2]), + scope.root_string_ptr(pointers[3].cast()), + scope.root_bigint_ptr(pointers[4]), + ]; + for ptr in &pointers[..5] { + assert_marked_user_ptr(*ptr as usize, "new handle during marking"); + } + roots[0].set_nanbox_u64(ptr_bits(pointers[5] as usize)); + roots[1].set_heap_word_u64(pointers[6] as u64); + roots[2].set_raw_mut_ptr(pointers[7]); + roots[3].set_raw_const_ptr(pointers[8]); + roots[4].set_raw_const_ptr(pointers[9]); + for ptr in &pointers[5..] { + assert_marked_user_ptr(*ptr as usize, "updated handle during marking"); + } + drop(active); + clear_marks(); + let _idle = scope.root_nanbox_u64(ptr_bits(pointers[0] as usize)); + unsafe { + assert_eq!( + (*header_from_user_ptr(pointers[0])).gc_flags & GC_FLAG_MARKED, + 0 + ); + } +} + +#[test] +fn handle_stack_budgeted_scan_resumes_after_growth_and_truncation() { + let _guard = GcTestIsolationGuard::new(); + let scope = RuntimeHandleScope::new(); + let _first = scope.root_nanbox_f64(1.0); + let inner = RuntimeHandleScope::new(); + let _second = inner.root_nanbox_f64(2.0); + let mut seen = Vec::new(); + let mut record = |value| seen.push(value); + let mut visitor = RuntimeRootVisitor::for_copy(&mut record); + let mut state = new_runtime_handle_root_scan_state(); + let mut budget = 1; + assert!(!scan_runtime_handle_roots_mut_step( + &mut visitor, + state.as_mut(), + &mut budget + )); + assert_eq!(budget, 0); + drop(inner); + let count = RuntimeHandleScope::capacity_for_tests() + 1; + for i in 0..count { + let _ = scope.root_nanbox_f64((i + 3) as f64); + } + let mut budget = count + 1; + assert!(scan_runtime_handle_roots_mut_step( + &mut visitor, + state.as_mut(), + &mut budget + )); + assert_eq!(budget, 1); + assert_eq!(seen.len(), count + 1); + assert_eq!(seen[0], 1.0); + assert_eq!(*seen.last().unwrap(), (count + 2) as f64); + assert!(!seen.contains(&2.0)); +} diff --git a/crates/perry-runtime/src/tls_hot.rs b/crates/perry-runtime/src/tls_hot.rs index 7a1c7a7e18..c4c7f32f20 100644 --- a/crates/perry-runtime/src/tls_hot.rs +++ b/crates/perry-runtime/src/tls_hot.rs @@ -521,9 +521,12 @@ pub(crate) fn hot_if_published() -> Option<&'static HotTls> { /// `SlotGuard`; the named fast path must preserve it (#9183). #[inline(always)] pub(crate) fn unpublish_runtime_handle_stack() { - if let Some(hot) = hot_if_published() { - hot.runtime_handle_stack.set(std::ptr::null_mut()); - } + // Teardown is cold. Use the non-dropping cache directly on every target, + // without filling it: non-Darwin targets also cache the named address even + // though hot_if_published() only exposes the Darwin direct-TSD shortcut. + HOT.with(|cell| unsafe { + (*cell.get()).runtime_handle_stack.set(std::ptr::null_mut()); + }); } /// The per-thread address cache. On Apple aarch64 this is an `mrs` plus two