@@ -8,7 +8,7 @@ use crate::{
88} ;
99use ceno_rt:: WORD_SIZE ;
1010use smallvec:: SmallVec ;
11- use std:: { collections:: BTreeMap , fmt, mem} ;
11+ use std:: { collections:: BTreeMap , fmt, mem, sync :: Arc } ;
1212
1313/// An instruction and its context in an execution trace. That is concrete values of registers and memory.
1414///
@@ -88,6 +88,14 @@ pub trait Tracer {
8888
8989 fn new ( platform : & Platform ) -> Self ;
9090
91+ fn with_next_accesses ( platform : & Platform , next_accesses : Option < Arc < NextCycleAccess > > ) -> Self
92+ where
93+ Self : Sized ,
94+ {
95+ let _ = next_accesses;
96+ Self :: new ( platform)
97+ }
98+
9199 fn advance ( & mut self ) -> Self :: Record ;
92100
93101 fn is_busy_loop ( & self , record : & Self :: Record ) -> bool ;
@@ -541,10 +549,6 @@ pub struct FullTracer {
541549
542550 // keep track of each address that the cycle when they were last accessed.
543551 latest_accesses : LatestAccesses ,
544-
545- // keep track of each cycle that accessed addresses in the future with respective future cycles.
546- // format: [current cycle -> Vec<(WordAddr, Cycle)>]
547- next_accesses : NextCycleAccess ,
548552}
549553
550554impl FullTracer {
@@ -565,7 +569,6 @@ impl FullTracer {
565569 } ,
566570 platform : platform. clone ( ) ,
567571 latest_accesses : LatestAccesses :: new ( platform) ,
568- next_accesses : NextCycleAccess :: new ( ACCESSED_CHUNK_SIZE ) ,
569572 max_heap_addr_access : ByteAddr :: from ( platform. heap . start ) ,
570573 max_hint_addr_access : ByteAddr :: from ( platform. hints . start ) ,
571574 }
@@ -711,21 +714,13 @@ impl FullTracer {
711714 #[ inline( always) ]
712715 pub fn track_access ( & mut self , addr : WordAddr , subcycle : Cycle ) -> Cycle {
713716 let cur_cycle = self . record . cycle + subcycle;
714- let prev_cycle = self . latest_accesses . track ( addr, cur_cycle) ;
715- self . next_accesses
716- . get_or_create ( prev_cycle as usize )
717- . push ( ( addr, cur_cycle) ) ;
718- prev_cycle
717+ self . latest_accesses . track ( addr, cur_cycle)
719718 }
720719
721720 pub fn final_accesses ( & self ) -> & LatestAccesses {
722721 & self . latest_accesses
723722 }
724723
725- pub fn next_accesses ( self ) -> NextCycleAccess {
726- self . next_accesses
727- }
728-
729724 /// Return the cycle of the pending instruction (after the last completed step).
730725 pub fn cycle ( & self ) -> Cycle {
731726 self . record . cycle
@@ -1010,7 +1005,7 @@ impl Tracer for FullTracer {
10101005 }
10111006
10121007 fn into_next_accesses ( self ) -> NextCycleAccess {
1013- self . next_accesses ( )
1008+ unimplemented ! ( "FullTracer does not record next access metadata" )
10141009 }
10151010
10161011 fn cycle ( & self ) -> Cycle {
0 commit comments