Description
Reasoning about and implementing trace stitching is made much easier if we guarantee that individual executors make progress.
We need to guarantee that tier 2 execution as a whole makes progress, otherwise we might get stuck.
Implementing this guarantee is blocking progress on #112354.
There are many ways to guarantee progress, but the simplest conceptually, to my mind, is to guarantee that all individual executors make progress. If all executors make progress, then any (non-empty) graph of executors must also make progress.
The implementation is reasonably straightforward: De-specialize the first (tier 1) instruction when creating the executor.
Our concern is that this will negatively impact performance.
We await profiling and stats to see what the performance impact might be.
Until we do stitching, all executors start with JUMP_BACKWARD
which is not specialized, so de-specializing has no effect for now.