A DAGRootSet models an induction variable being used in a rerollable
loop. For example:
x[i*3+0] = y1 x[i*3+1] = y2 x[i*3+2] = y3 Base instruction -> i*3 +---+----+ / | \ ST[y1] +1 +2 <-- Roots | | ST[y2] ST[y3]
There may be multiple DAGRootSets, for example:
x[i*2+0] = ... (1) x[i*2+1] = ... (1) x[i*2+4] = ... (2) x[i*2+5] = ... (2) x[(i+1234)*2+5678] = ... (3) x[(i+1234)*2+5679] = ... (3)
This concept is similar to the "Scale" member used previously, but allows
multiple independent sets of roots based off the same induction variable.
Please also explain here how the loop will be rerolled (by adding multiple induction variables to the rerolled loop, one for each DAGRootSet).