Right now, we consider it lockstep as long as the nIters are fixed and it is not a stream controller. Really, we want it to be considered lockstep also if the start/stop/step come from RegReads not enclosed by a relative control. For example
'LOOP1.Foreach(M by 1 par 2){i =>
val x = reg.value
'LOOP2.Foreach(N by 1 par 2){j =>
'LOCKSTEP.Foreach(x by 1){k => ...}
}
}
LOCKSTEP should be true if we look relative to LOOP2 but false if we look relative to LOOP1
has been made stricter. Now it will consider lockstep if the controller is not a stream or FSM and if one of the following is true
fixed number of ctr iterations
Relative to some outer controller to be unrolled, all of the start, step, or stop are each either constants, reads of an ArgIn, or are RegReads that happen outside the scope of that controller
Right now, we consider it lockstep as long as the nIters are fixed and it is not a stream controller. Really, we want it to be considered lockstep also if the start/stop/step come from RegReads not enclosed by a relative control. For example
LOCKSTEP
should be true if we look relative toLOOP2
but false if we look relative toLOOP1
Working on this now