From: Geoff Keating Date: Mon, 19 Oct 1998 12:24:48 +0000 (+0000) Subject: loop.c (scan_loop): Be more selective about what invariants are moved out of a loop. X-Git-Tag: prereleases/egcs-1.1.1-pre~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aaae7cecd607521e36c18b6e7d5f141c9fd97d76;p=thirdparty%2Fgcc.git loop.c (scan_loop): Be more selective about what invariants are moved out of a loop. * loop.c (scan_loop): Be more selective about what invariants are moved out of a loop. From-SVN: r23179 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b678ae2b24c2..6d810e0a636f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Mon Oct 19 13:22:13 1998 Geoff Keating + + * loop.c (scan_loop): Be more selective about what invariants are + moved out of a loop. + Wed Oct 14 23:27:08 1998 Didier FORT (didier.fort@fedex.com) * fixincludes: Fix up rpc/{clnt,svr,xdr}.h for SunOS. diff --git a/gcc/loop.c b/gcc/loop.c index 3af6750de26a..702711477715 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -786,18 +786,13 @@ scan_loop (loop_start, end, nregs, unroll_p) We don't know its life-span, so we can't compute the benefit. */ if (REGNO (SET_DEST (set)) >= max_reg_before_loop) ; - /* In order to move a register, we need to have one of three cases: + /* In order to move a register, we need to have either: (1) it is used only in the same basic block as the set - (2) it is not a user variable and it is not used in the - exit test (this can cause the variable to be used - before it is set just like a user-variable). - (3) the set is guaranteed to be executed once the loop starts, + (2) the set is guaranteed to be executed once the loop starts, and the reg is not used until after that. */ else if (! ((! maybe_never && ! loop_reg_used_before_p (set, p, loop_start, scan_start, end)) - || (! REG_USERVAR_P (SET_DEST (set)) - && ! REG_LOOP_TEST_P (SET_DEST (set))) || reg_in_basic_block_p (p, SET_DEST (set)))) ; else if ((tem = invariant_p (src))