From 665afe6f44e9fe3858e47483d38ff0fd9e244d8a Mon Sep 17 00:00:00 2001 From: jotabulacios Date: Mon, 31 Aug 2026 11:52:30 -0300 Subject: [PATCH 1/2] Skip the IR pre-capture on the riscv64 guest --- prover/src/test_utils.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/prover/src/test_utils.rs b/prover/src/test_utils.rs index d6a8b8608..3c17b2848 100644 --- a/prover/src/test_utils.rs +++ b/prover/src/test_utils.rs @@ -671,6 +671,12 @@ fn build_air + Clone + Send + Sync + 'static>( .with_name(name); // Pre-capture the constraint IR so every clone carries it (the prover's // GPU lowering and interpreter paths force it per instance otherwise). + // + // NOT on the guest: the in-VM verifier reaches `build_air` through + // `VmAirs::new` and never calls `constraint_program()`, so capturing here + // buys it nothing and costs a full IR build per AIR — measured as ~9.7% of + // the recursion guest's cycles on a real block. + #[cfg(not(target_arch = "riscv64"))] let _ = air.constraint_program(); air_prototype_cache() .lock() From 8d6e74915cbf3ca62a0a545ff5689bc422a3d416 Mon Sep 17 00:00:00 2001 From: jotabulacios Date: Wed, 2 Sep 2026 18:31:05 -0300 Subject: [PATCH 2/2] Drop the figure and the interpreter over-claim --- prover/src/test_utils.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/prover/src/test_utils.rs b/prover/src/test_utils.rs index 3c17b2848..5b4206356 100644 --- a/prover/src/test_utils.rs +++ b/prover/src/test_utils.rs @@ -670,12 +670,9 @@ fn build_air + Clone + Send + Sync + 'static>( ) .with_name(name); // Pre-capture the constraint IR so every clone carries it (the prover's - // GPU lowering and interpreter paths force it per instance otherwise). - // - // NOT on the guest: the in-VM verifier reaches `build_air` through - // `VmAirs::new` and never calls `constraint_program()`, so capturing here - // buys it nothing and costs a full IR build per AIR — measured as ~9.7% of - // the recursion guest's cycles on a real block. + // CUDA composition arm forces it per instance otherwise). NOT on the guest: + // the in-VM verifier reaches `build_air` through `VmAirs::new` and never + // calls `constraint_program()`. #[cfg(not(target_arch = "riscv64"))] let _ = air.constraint_program(); air_prototype_cache()