You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
If the pipeline is branching and one of the stages inside of a branch can be 'killed' due to misspeculation
(i.e., it contains a spec_check() or spec_barrier() command in any of its stages),
Then this currently causes the pipeline to deadlock because of how branches are handled.
To compile a branch, a signal is sent from the beginning of the branch to the join point afterwards, in order to signal which branch was taken. The join point waits for data from the signaled stage before executing.
When speculative stages are killed, this extra conditional signal will not be killed, and thus the join point is waiting for data that will never arrive - or worse data may arrive from a later instruction and unintentionally this will execute out-of-order.
The text was updated successfully, but these errors were encountered:
I'd also like to allow conditional speculation checks more precisely; right now I'm not entirely sure what happens if you conditionally establish that you're non-speculative (which frees up a slot in the spec table) and then unconditionally check it later.
This is going to lead to a codegen bug when you try to conditionally establish that a stage is non-speculative.
If the pipeline is branching and one of the stages inside of a branch can be 'killed' due to misspeculation
(i.e., it contains a
spec_check()
orspec_barrier()
command in any of its stages),Then this currently causes the pipeline to deadlock because of how branches are handled.
To compile a branch, a signal is sent from the beginning of the branch to the join point afterwards, in order to signal which branch was taken. The join point waits for data from the signaled stage before executing.
When speculative stages are killed, this extra conditional signal will not be killed, and thus the join point is waiting for data that will never arrive - or worse data may arrive from a later instruction and unintentionally this will execute out-of-order.
The text was updated successfully, but these errors were encountered: