https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84037
--- Comment #25 from amker at gcc dot gnu.org --- I tend to believe this is an register pressure based strength-reduction + lim problem than ivopts. So given class of memory references like: reg = ... Loop: MEM[iv_base + reg * 0]; MEM[iv_base + reg * 1]; MEM[iv_base + reg * 2]; MEM[iv_base + reg * 3]; MEM[iv_base + reg * 4]; MEM[iv_base + reg * 5]; MEM[iv_base + reg * 6]; MEM[iv_base + reg * 7]; The best arrangement probably would be: reg = ... regX = reg * 3; Loop: MEM[iv_base + reg * 0]; MEM[iv_base + reg * 1]; MEM[iv_base + reg * 2]; t = iv_base + regX; MEM[t]; MEM[iv_base + reg * 4]; MEM[t + reg * 2]; MEM[iv_base + regX * 2]; MEM[t + reg * 4]; Depending on the register pressure, regX should be re-materialized in loop or hoisted as invariant.