From: Richard Stallman Date: Thu, 20 May 1993 04:34:02 +0000 (+0000) Subject: (scan_loop): Treat pseudo duplicated for exit tests just X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6ad216adda81c7bab0d9f4cd4887178f892ef8a1;p=gcc.git (scan_loop): Treat pseudo duplicated for exit tests just like we treat user vars in seeing if we can move a SET. From-SVN: r4514 --- diff --git a/gcc/loop.c b/gcc/loop.c index 7c72e8c72b8..357eee672d9 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -682,13 +682,16 @@ scan_loop (loop_start, end, nregs) ; /* In order to move a register, we need to have one of three cases: (1) it is used only in the same basic block as the set - (2) it is not a user variable. + (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, 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 (PATTERN (p))) + || (! REG_USERVAR_P (SET_DEST (PATTERN (p))) + && ! REG_LOOP_TEST_P (SET_DEST (PATTERN (p)))) || reg_in_basic_block_p (p, SET_DEST (PATTERN (p))))) ; else if ((tem = invariant_p (src))