loop invariant hoisting