Commit 0e3df013 by Craig Burley Committed by Craig Burley

Add some transitive closure

From-SVN: r26850
parent 26837cfb
Mon May 10 01:28:10 1999 Craig Burley <craig@jcb-sc.com>
From Fri May 7 9:31:41 1999 Donn Terry (donn@interix.com):
* varasm.c (mark_constant_pool): Add some transitive closure.
Sun May 9 22:51:04 1999 Craig Burley <craig@jcb-sc.com>
Fix gcc.dg/990506-0.c:
......
......@@ -3718,6 +3718,33 @@ mark_constant_pool ()
insn = XEXP (insn, 1))
if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
mark_constants (PATTERN (insn));
/* It's possible that the only reference to a symbol is in a symbol
that's in the constant pool. This happens in Fortran under some
situations. (When the constant contains the address of another
constant, and only the first is used directly in an insn.)
This is potentially suboptimal if there's ever a possibility of
backwards (in pool order) 2'd level references. However, it's
not clear that 2'd level references can happen. */
for (pool = first_pool; pool; pool = pool->next)
{
struct pool_sym *sym;
char *label;
/* skip unmarked entries; no insn refers to them. */
if (!pool->mark)
continue;
label = XSTR (pool->constant, 0);
/* Be sure the symbol's value is marked. */
for (sym = const_rtx_sym_hash_table[SYMHASH (label)]; sym;
sym = sym->next)
if (sym->label == label)
sym->pool->mark = 1;
/* If we didn't find it, there's something truly wrong here, but it
will be announced by the assembler. */
}
}
static void
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment