loop.c (strength_reduce): Don't do biv increment -> DEST_REG giv conversion if we don't know the lifetime.

* loop.c (strength_reduce): Don't do biv increment -> DEST_REG giv
	conversion if we don't know the lifetime.

From-SVN: r25702
This commit is contained in:
J"orn Rennecke 1999-03-11 13:28:55 +00:00 committed by Joern Rennecke
parent 3900dc09bc
commit 8e9fb571ee
2 changed files with 41 additions and 3 deletions

View File

@ -1,3 +1,8 @@
Thu Mar 11 21:25:59 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
* loop.c (strength_reduce): Don't do biv increment -> DEST_REG giv
conversion if we don't know the lifetime.
Thu Mar 11 20:37:59 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
* reload.1c (delete_address_reloads_1): Check for reloads of

View File

@ -4198,13 +4198,46 @@ strength_reduce (scan_start, end, loop_top, insn_count,
VARRAY_GROW (may_not_optimize, nregs);
}
validate_change (v->insn, &SET_DEST (set), dest_reg, 1);
validate_change (next->insn, next->location, add_val, 1);
if (! apply_change_group ())
if (! validate_change (next->insn, next->location, add_val, 0))
{
vp = &v->next_iv;
continue;
}
/* Here we can try to eliminate the increment by combining
it into the uses. */
/* Set last_use_insn so that we can check against it. */
for (last_use_insn = v->insn, p = NEXT_INSN (v->insn);
p != next->insn;
p = next_insn_in_loop (p, scan_start, end, loop_top))
{
rtx note;
if (GET_RTX_CLASS (GET_CODE (p)) != 'i')
continue;
if (reg_mentioned_p (old_reg, PATTERN (p)))
{
last_use_insn = p;
}
}
/* If we can't get the LUIDs for the insns, we can't
calculate the lifetime. This is likely from unrolling
of an inner loop, so there is little point in making this
a DEST_REG giv anyways. */
if (INSN_UID (v->insn) >= max_uid_for_loop
|| INSN_UID (last_use_insn) >= max_uid_for_loop
|| ! validate_change (v->insn, &SET_DEST (set), dest_reg, 0))
{
/* Change the increment at NEXT back to what it was. */
if (! validate_change (next->insn, next->location,
next->add_val, 0))
abort ();
vp = &v->next_iv;
continue;
}
next->add_val = add_val;
v->dest_reg = dest_reg;
v->giv_type = DEST_REG;