The point of hoisting towards entry is to reduce code size, as the changelog indicates. It's safe to hoist the expression from program points P_{0..i..n-1} to some point Q that dominates all P_i if the expression is available at each P_i. That reduces the number of occurrences by n - 1.
It's a basic corollary of PRE.
This is identical to what LLVM's load-store motion does for loads, except for all expressions and not just loads.