Mill Computing, Inc. › Forums › The Mill › Architecture › Control flow divergence and The Belt › Reply To: Control flow divergence and The Belt
Simplifying to two items.
Say A produces two items, which are at b2 and b5 when A->B happens and b4/b7 when A->C happens.
A->B does not carry, so B inherits A’s belt. Hence at B those items are still at b2/b5. B adds an item, so the items are now at b3/b6 when B->C happens.
A->C carries, mapping b4 and b7. Let us say b4 maps to b0 and b7 to b1 (it could have been the other way around; source order is not significant).
B-C carries, mapping b3 to b0 and b6 to b1.
C receives items in b0 and b1 regardless of which path was taken. In this case the items themselves are the save regardless of path, although B could have passed different items instead of just relaying what it got from A.
A carrying branch acts like half a call, except there’s no new frame and no return.