Fix ia64-linux miscompilation or tcl/generic/tclCompExpr.c

Fix ia64-linux miscompilation or tcl/generic/tclCompExpr.c
	* loop.c (check_final_value): Check for biv use before checking for
	giv use.  Check for both biv and giv uses.  Always set last_giv_use
	if there is a giv use.

From-SVN: r36104
This commit is contained in:
Jim Wilson 2000-09-01 22:01:43 +00:00 committed by Jim Wilson
parent 11a1370459
commit 8a09bb272c
2 changed files with 18 additions and 6 deletions

View File

@ -1,3 +1,9 @@
2000-09-01 Jim Wilson <wilson@cygnus.com>
* loop.c (check_final_value): Check for biv use before checking for
giv use. Check for both biv and giv uses. Always set last_giv_use
if there is a giv use.
2000-09-01 Richard Henderson <rth@cygnus.com>
* config/ia64/ia64.md (mulsi3): Use grfr_register_operand.

View File

@ -5677,19 +5677,25 @@ check_final_value (loop, v)
if (GET_CODE (p) == INSN || GET_CODE (p) == JUMP_INSN
|| GET_CODE (p) == CALL_INSN)
{
if (biv_increment_seen)
/* It is possible for the BIV increment to use the GIV if we
have a cycle. Thus we must be sure to check each insn for
both BIV and GIV uses, and we must check for BIV uses
first. */
if (! biv_increment_seen
&& reg_set_p (v->src_reg, PATTERN (p)))
biv_increment_seen = 1;
if (reg_mentioned_p (v->dest_reg, PATTERN (p)))
{
if (reg_mentioned_p (v->dest_reg, PATTERN (p)))
if (biv_increment_seen)
{
v->replaceable = 0;
v->not_replaceable = 1;
break;
}
last_giv_use = p;
}
else if (reg_set_p (v->src_reg, PATTERN (p)))
biv_increment_seen = 1;
else if (reg_mentioned_p (v->dest_reg, PATTERN (p)))
last_giv_use = p;
}
}