This patch adds tests for nested loops like this:
for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { a[(i * (N + 1)) + j] += b[(i * N) + j]; } }
where we generate runtime checks for the inner loop that do not
currently get hoisted above the outer loop.
nit: might be good to include the fact that this is for nested loops in the name