summaryrefslogtreecommitdiff
path: root/gcc/varasm.c
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2000-11-14 10:31:32 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2000-11-14 10:31:32 +0000
commit2e04a8ae9c72b180c2e9d0275059a86559e630fd (patch)
tree85dd6b90df7b539c4c5d766822ce71cb2177a169 /gcc/varasm.c
parentaf9687ec6585c95c58d11b26801d8c2d1cdf89e4 (diff)
downloadgcc-2e04a8ae9c72b180c2e9d0275059a86559e630fd.tar.gz
* varasm.c (struct varasm_status): Change x_const_rtx_sym_hash_table
to array of pool_constnat pointers. (struct pool_constant): Add next_sym and label members. (struct pool_sym): Remove. (init_varasm_status): Change pool_sym into pool_constant. (mark_pool_constant): Mark pc->label string as well. (mark_pool_sym_hash_table): Remove. (mark_varasm_status): Remove it from caller as well. (free_varasm_status): Don't free pool_sym structures. (force_const_mem): Don't allocate pool_sym structure, instead fill pool->label and chain it into rtx_sym hash table. (find_pool_constant, mark_constant_pool): Use pool_constant instead of pool_sym. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37451 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r--gcc/varasm.c75
1 files changed, 20 insertions, 55 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c
index a6e65fd2400..b4a8c2e976e 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -101,7 +101,7 @@ struct varasm_status
so each function gets its own constants-pool that comes right before
it. */
struct constant_descriptor **x_const_rtx_hash_table;
- struct pool_sym **x_const_rtx_sym_hash_table;
+ struct pool_constant **x_const_rtx_sym_hash_table;
/* Pointers to first and last constant in pool. */
struct pool_constant *x_first_pool, *x_last_pool;
@@ -184,7 +184,6 @@ static void asm_output_aligned_bss PARAMS ((FILE *, tree, const char *,
#endif
#endif /* BSS_SECTION_ASM_OP */
static void mark_pool_constant PARAMS ((struct pool_constant *));
-static void mark_pool_sym_hash_table PARAMS ((struct pool_sym **));
static void mark_const_hash_entry PARAMS ((void *));
static void asm_emit_uninitialised PARAMS ((tree, const char*, int, int));
@@ -3220,25 +3219,16 @@ output_constant_def_contents (exp, reloc, labelno)
struct pool_constant
{
struct constant_descriptor *desc;
- struct pool_constant *next;
- enum machine_mode mode;
+ struct pool_constant *next, *next_sym;
+ char *label;
rtx constant;
+ enum machine_mode mode;
int labelno;
int align;
int offset;
int mark;
};
-/* Structure used to maintain hash table mapping symbols used to their
- corresponding constants. */
-
-struct pool_sym
-{
- char *label;
- struct pool_constant *pool;
- struct pool_sym *next;
-};
-
/* Hash code for a SYMBOL_REF with CONSTANT_POOL_ADDRESS_P true.
The argument is XSTR (... , 0) */
@@ -3258,8 +3248,8 @@ init_varasm_status (f)
= ((struct constant_descriptor **)
xcalloc (MAX_RTX_HASH_TABLE, sizeof (struct constant_descriptor *)));
p->x_const_rtx_sym_hash_table
- = ((struct pool_sym **)
- xcalloc (MAX_RTX_HASH_TABLE, sizeof (struct pool_sym *)));
+ = ((struct pool_constant **)
+ xcalloc (MAX_RTX_HASH_TABLE, sizeof (struct pool_constant *)));
p->x_first_pool = p->x_last_pool = 0;
p->x_pool_offset = 0;
@@ -3276,24 +3266,11 @@ mark_pool_constant (pc)
{
ggc_mark (pc);
ggc_mark_rtx (pc->constant);
+ ggc_mark_string (pc->label);
pc = pc->next;
}
}
-/* Mark PPS for GC. */
-
-static void
-mark_pool_sym_hash_table (pps)
- struct pool_sym **pps;
-{
- struct pool_sym *ps;
- int i;
-
- for (i = 0; i < MAX_RTX_HASH_TABLE; ++i)
- for (ps = pps[i]; ps ; ps = ps->next)
- ggc_mark_string (ps->label);
-}
-
/* Mark P for GC. */
void
@@ -3304,7 +3281,6 @@ mark_varasm_status (p)
return;
mark_pool_constant (p->x_first_pool);
- mark_pool_sym_hash_table (p->x_const_rtx_sym_hash_table);
ggc_mark_rtx (p->x_const_double_chain);
}
@@ -3325,7 +3301,6 @@ free_varasm_status (f)
for (i = 0; i < MAX_RTX_HASH_TABLE; ++i)
{
struct constant_descriptor* cd;
- struct pool_sym *ps;
cd = p->x_const_rtx_hash_table[i];
while (cd) {
@@ -3333,13 +3308,6 @@ free_varasm_status (f)
free (cd);
cd = next;
}
-
- ps = p->x_const_rtx_sym_hash_table[i];
- while (ps) {
- struct pool_sym *next = ps->next;
- free (ps);
- ps = next;
- }
}
free (p->x_const_rtx_hash_table);
@@ -3562,7 +3530,6 @@ force_const_mem (mode, x)
if (found == 0)
{
register struct pool_constant *pool;
- register struct pool_sym *sym;
int align;
/* No constant equal to X is known to have been output.
@@ -3615,11 +3582,9 @@ force_const_mem (mode, x)
/* Add label to symbol hash table. */
hash = SYMHASH (found);
- sym = (struct pool_sym *) xmalloc (sizeof (struct pool_sym));
- sym->label = found;
- sym->pool = pool;
- sym->next = const_rtx_sym_hash_table[hash];
- const_rtx_sym_hash_table[hash] = sym;
+ pool->label = found;
+ pool->next_sym = const_rtx_sym_hash_table[hash];
+ const_rtx_sym_hash_table[hash] = pool;
}
/* We have a symbol name; construct the SYMBOL_REF and the MEM. */
@@ -3653,13 +3618,13 @@ find_pool_constant (f, addr)
struct function *f;
rtx addr;
{
- struct pool_sym *sym;
+ struct pool_constant *pool;
const char *label = XSTR (addr, 0);
- for (sym = f->varasm->x_const_rtx_sym_hash_table[SYMHASH (label)]; sym;
- sym = sym->next)
- if (sym->label == label)
- return sym->pool;
+ for (pool = f->varasm->x_const_rtx_sym_hash_table[SYMHASH (label)]; pool;
+ pool = pool->next_sym)
+ if (pool->label == label)
+ return pool;
abort ();
}
@@ -3866,7 +3831,7 @@ mark_constant_pool ()
not clear that 2'd level references can happen. */
for (pool = first_pool; pool; pool = pool->next)
{
- struct pool_sym *sym;
+ struct pool_constant *tem;
const char *label;
/* skip unmarked entries; no insn refers to them. */
@@ -3879,10 +3844,10 @@ mark_constant_pool ()
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;
+ for (tem = const_rtx_sym_hash_table[SYMHASH (label)]; tem;
+ tem = tem->next)
+ if (tem->label == label)
+ tem->mark = 1;
/* If we didn't find it, there's something truly wrong here, but it
will be announced by the assembler. */
}