Programs spend 90% of time in loops, so LICM, unrolling, and strength reduction are the highest-value passes in GCC and LLVM — Fortran compilers built the supercomputing industry on them. Polyhedral frameworks like LLVM's Polly and the loop optimizers in Intel's ICC are billion-dollar elaborations of what you implement here.