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:
parent
3900dc09bc
commit
8e9fb571ee
@ -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
|
||||
|
39
gcc/loop.c
39
gcc/loop.c
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user