diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d6be33b5326..f1e69851af9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Thu Oct 22 16:46:35 1998 Bernd Schmidt + + * loop.c (express_from): Make sure that when generating a PLUS of + a PLUS, any constant expression appears on the outermost PLUS. + Thu Oct 22 15:46:23 1998 Per Bothner (bothner@cygnus.com) * Makefile.in (distdir-cvs, distdir-start): Clean up so it diff --git a/gcc/loop.c b/gcc/loop.c index 5db0a9c11ec..c8b0954e227 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -6221,7 +6221,18 @@ express_from (g1, g2) if (add == const0_rtx) return mult; else - return gen_rtx_PLUS (g2->mode, mult, add); + { + if (GET_CODE (add) == PLUS + && CONSTANT_P (XEXP (add, 1))) + { + rtx tem = XEXP (add, 1); + mult = gen_rtx_PLUS (g2->mode, mult, XEXP (add, 0)); + add = tem; + } + + return gen_rtx_PLUS (g2->mode, mult, add); + } + } /* Return an rtx, if any, that expresses giv G2 as a function of the register