flow.c (insn_dead_p): Don't consider two memrefs equivalent unless anti_dependence says they are.
* flow.c (insn_dead_p): Don't consider two memrefs equivalent unless anti_dependence says they are. * alias.c (objects_must_conflict): If neither has a type specified, they must conflict. From-SVN: r40420
This commit is contained in:
parent
89c9653e9a
commit
e8ea2809d0
@ -1,3 +1,10 @@
|
||||
Mon Mar 12 14:05:32 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
|
||||
|
||||
* flow.c (insn_dead_p): Don't consider two memrefs equivalent
|
||||
unless anti_dependence says they are.
|
||||
* alias.c (objects_must_conflict): If neither has a type specified,
|
||||
they must conflict.
|
||||
|
||||
2001-03-12 Neil Booth <neil@daikokuya.demon.co.uk>
|
||||
David Billinghurst <David.Billinghurst@riotinto.com>
|
||||
|
||||
|
@ -309,6 +309,12 @@ int
|
||||
objects_must_conflict_p (t1, t2)
|
||||
tree t1, t2;
|
||||
{
|
||||
/* If neither has a type specified, we don't know if they'll conflict
|
||||
because we may be using them to store objects of various types, for
|
||||
example the argument and local variables areas of inlined functions. */
|
||||
if (t1 == 0 && t1 == 0)
|
||||
return 0;
|
||||
|
||||
/* If one or the other has readonly fields or is readonly,
|
||||
then they may not conflict. */
|
||||
if ((t1 != 0 && readonly_fields_p (t1))
|
||||
|
37
gcc/flow.c
37
gcc/flow.c
@ -4420,27 +4420,28 @@ insn_dead_p (pbi, x, call_ok, notes)
|
||||
/* Walk the set of memory locations we are currently tracking
|
||||
and see if one is an identical match to this memory location.
|
||||
If so, this memory write is dead (remember, we're walking
|
||||
backwards from the end of the block to the start). */
|
||||
temp = pbi->mem_set_list;
|
||||
while (temp)
|
||||
{
|
||||
rtx mem = XEXP (temp, 0);
|
||||
backwards from the end of the block to the start). Since
|
||||
rtx_equal_p does not check the alias set or flags, we also
|
||||
must have the potential for them to conflict (anti_dependence). */
|
||||
for (temp = pbi->mem_set_list; temp != 0; temp = XEXP (temp, 1))
|
||||
if (anti_dependence (r, XEXP (temp, 0)))
|
||||
{
|
||||
rtx mem = XEXP (temp, 0);
|
||||
|
||||
if (rtx_equal_p (mem, r))
|
||||
return 1;
|
||||
if (rtx_equal_p (mem, r))
|
||||
return 1;
|
||||
#ifdef AUTO_INC_DEC
|
||||
/* Check if memory reference matches an auto increment. Only
|
||||
post increment/decrement or modify are valid. */
|
||||
if (GET_MODE (mem) == GET_MODE (r)
|
||||
&& (GET_CODE (XEXP (mem, 0)) == POST_DEC
|
||||
|| GET_CODE (XEXP (mem, 0)) == POST_INC
|
||||
|| GET_CODE (XEXP (mem, 0)) == POST_MODIFY)
|
||||
&& GET_MODE (XEXP (mem, 0)) == GET_MODE (r)
|
||||
&& rtx_equal_p (XEXP (XEXP (mem, 0), 0), XEXP (r, 0)))
|
||||
return 1;
|
||||
/* Check if memory reference matches an auto increment. Only
|
||||
post increment/decrement or modify are valid. */
|
||||
if (GET_MODE (mem) == GET_MODE (r)
|
||||
&& (GET_CODE (XEXP (mem, 0)) == POST_DEC
|
||||
|| GET_CODE (XEXP (mem, 0)) == POST_INC
|
||||
|| GET_CODE (XEXP (mem, 0)) == POST_MODIFY)
|
||||
&& GET_MODE (XEXP (mem, 0)) == GET_MODE (r)
|
||||
&& rtx_equal_p (XEXP (XEXP (mem, 0), 0), XEXP (r, 0)))
|
||||
return 1;
|
||||
#endif
|
||||
temp = XEXP (temp, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user