!lsei_end_p (lsei);
lsei_next_in_partition (&lsei))
{
- symtab_node *node = lsei_node (lsei);
+ symtab_node *node = dyn_cast <symtab_node *> (lsei_node (lsei));
+ if (!node)
+ continue;
if (m_symtab_node_map.get (node))
count++;
!lsei_end_p (lsei);
lsei_next_in_partition (&lsei))
{
- symtab_node *node = lsei_node (lsei);
+ symtab_node *node = dyn_cast <symtab_node *> (lsei_node (lsei));
+ if (!node)
+ continue;
sem_item **item = m_symtab_node_map.get (node);
for (i = 0; i < count; i++)
{
unsigned int index;
- symtab_node *node;
+ toplevel_node *node;
lto_symtab_encoder_t encoder;
index = streamer_read_uhwi (&ib_main);
node = lto_symtab_encoder_deref (encoder, index);
hashval_t hash = streamer_read_uhwi (&ib_main);
- gcc_assert (node->definition);
+ if (symtab_node *snode = dyn_cast <symtab_node *> (node))
+ gcc_assert (snode->definition);
- if (is_a<cgraph_node *> (node))
+ if (cgraph_node *cnode = dyn_cast <cgraph_node *> (node))
{
- cgraph_node *cnode = dyn_cast <cgraph_node *> (node);
-
sem_function *fn = new sem_function (cnode, &m_bmstack);
unsigned count = streamer_read_uhwi (&ib_main);
inchash::hash hstate (0);
fn->set_hash (hash);
m_items.safe_push (fn);
}
- else
+ else if (varpool_node *vnode = dyn_cast <varpool_node *> (node))
{
- varpool_node *vnode = dyn_cast <varpool_node *> (node);
-
sem_variable *var = new sem_variable (vnode, &m_bmstack);
var->set_hash (hash);
m_items.safe_push (var);
for (i = 0; i < lto_symtab_encoder_size (encoder); i++)
{
- symtab_node *snode = lto_symtab_encoder_deref (encoder, i);
- cgraph_node *cnode = dyn_cast <cgraph_node *> (snode);
+ toplevel_node *tnode = lto_symtab_encoder_deref (encoder, i);
+ cgraph_node *cnode = dyn_cast <cgraph_node *> (tnode);
modref_summary_lto *r;
if (cnode && cnode->definition && !cnode->alias
for (i = 0; i < lto_symtab_encoder_size (encoder); i++)
{
- symtab_node *snode = lto_symtab_encoder_deref (encoder, i);
- cgraph_node *cnode = dyn_cast <cgraph_node *> (snode);
+ toplevel_node *tnode = lto_symtab_encoder_deref (encoder, i);
+ cgraph_node *cnode = dyn_cast <cgraph_node *> (tnode);
if (cnode && cnode->definition && !cnode->alias)
{
unsigned int count = 0;
for (int i = 0; i < lto_symtab_encoder_size (encoder); i++)
{
- symtab_node *snode = lto_symtab_encoder_deref (encoder, i);
- cgraph_node *cnode = dyn_cast <cgraph_node *> (snode);
+ toplevel_node *tnode = lto_symtab_encoder_deref (encoder, i);
+ cgraph_node *cnode = dyn_cast <cgraph_node *> (tnode);
ipa_return_value_summary *v;
if (cnode && cnode->definition && !cnode->alias
for (int i = 0; i < lto_symtab_encoder_size (encoder); i++)
{
- symtab_node *snode = lto_symtab_encoder_deref (encoder, i);
- cgraph_node *cnode = dyn_cast <cgraph_node *> (snode);
+ toplevel_node *tnode = lto_symtab_encoder_deref (encoder, i);
+ cgraph_node *cnode = dyn_cast <cgraph_node *> (tnode);
ipa_return_value_summary *v;
if (cnode && cnode->definition && !cnode->alias
for (int i = 0; i < lto_symtab_encoder_size (encoder); i++)
{
- symtab_node *snode = lto_symtab_encoder_deref (encoder, i);
- cgraph_node *cnode = dyn_cast <cgraph_node *> (snode);
+ toplevel_node *tnode = lto_symtab_encoder_deref (encoder, i);
+ cgraph_node *cnode = dyn_cast <cgraph_node *> (tnode);
if (!cnode)
continue;
ipcp_transformation *ts = ipcp_get_transformation_summary (cnode);
for (int i = 0; i < lto_symtab_encoder_size (encoder); i++)
{
- symtab_node *snode = lto_symtab_encoder_deref (encoder, i);
- cgraph_node *cnode = dyn_cast <cgraph_node *> (snode);
+ toplevel_node *tnode = lto_symtab_encoder_deref (encoder, i);
+ cgraph_node *cnode = dyn_cast <cgraph_node *> (tnode);
if (!cnode)
continue;
ipcp_transformation *ts = ipcp_get_transformation_summary (cnode);
/* See what variables we are interested in. */
for (i = 0; i < lto_symtab_encoder_size (encoder); i++)
{
- symtab_node *snode = lto_symtab_encoder_deref (encoder, i);
- varpool_node *vnode = dyn_cast <varpool_node *> (snode);
+ toplevel_node *tnode = lto_symtab_encoder_deref (encoder, i);
+ varpool_node *vnode = dyn_cast <varpool_node *> (tnode);
int id;
if (vnode
if (ltrans_statics_bitcount)
for (i = 0; i < lto_symtab_encoder_size (encoder); i++)
{
- symtab_node *snode = lto_symtab_encoder_deref (encoder, i);
- cgraph_node *cnode = dyn_cast <cgraph_node *> (snode);
+ toplevel_node *tnode = lto_symtab_encoder_deref (encoder, i);
+ cgraph_node *cnode = dyn_cast <cgraph_node *> (tnode);
if (cnode && write_node_summary_p (cnode, encoder, ltrans_statics))
count++;
}
if (ltrans_statics_bitcount)
for (i = 0; i < lto_symtab_encoder_size (encoder); i++)
{
- symtab_node *snode = lto_symtab_encoder_deref (encoder, i);
- cgraph_node *cnode = dyn_cast <cgraph_node *> (snode);
+ toplevel_node *tnode = lto_symtab_encoder_deref (encoder, i);
+ cgraph_node *cnode = dyn_cast <cgraph_node *> (tnode);
if (cnode && write_node_summary_p (cnode, encoder, ltrans_statics))
{
ipa_reference_optimization_summary_t info;
int node_ref;
info = get_reference_optimization_summary (cnode);
- node_ref = lto_symtab_encoder_encode (encoder, snode);
+ node_ref = lto_symtab_encoder_encode (encoder, tnode);
streamer_write_uhwi_stream (ob->main_stream, node_ref);
stream_out_bitmap (ob, info->statics_read, ltrans_statics,
lto_symtab_encoder_t encoder = XCNEW (struct lto_symtab_encoder_d);
if (!for_input)
- encoder->map = new hash_map<symtab_node *, size_t>;
+ encoder->map = new hash_map<toplevel_node *, size_t>;
encoder->nodes.create (0);
return encoder;
}
int
lto_symtab_encoder_encode (lto_symtab_encoder_t encoder,
- symtab_node *node)
+ toplevel_node *node)
{
int ref;
bool
lto_symtab_encoder_delete_node (lto_symtab_encoder_t encoder,
- symtab_node *node)
+ toplevel_node *node)
{
int index;
bool
lto_symtab_encoder_in_partition_p (lto_symtab_encoder_t encoder,
- symtab_node *node)
+ toplevel_node *node)
{
int index = lto_symtab_encoder_lookup (encoder, node);
if (index == LCC_NOT_FOUND)
void
lto_set_symtab_encoder_in_partition (lto_symtab_encoder_t encoder,
- symtab_node *node)
+ toplevel_node *node)
{
int index = lto_symtab_encoder_encode (encoder, node);
if (dump_file)
- fprintf(dump_file, "Node %s, index %d\n", node->asm_name(), index);
+ {
+ if (symtab_node* snode = dyn_cast<symtab_node*> (node))
+ fprintf (dump_file, "Node %s, index %d\n", snode->asm_name (), index);
+ else
+ fprintf (dump_file, "Asm node, index %d\n", index);
+ }
encoder->nodes[index].in_partition = true;
}
for (int i = 0; i < lto_symtab_encoder_size (encoder); i++)
{
- symtab_node *node = lto_symtab_encoder_deref (encoder, i);
+ toplevel_node *tnode = lto_symtab_encoder_deref (encoder, i);
+ symtab_node *node = dyn_cast <symtab_node *> (tnode);
+ if (!node)
+ continue;
/* IPA_REF_ALIAS references are always preserved
in the boundary. Alias node can't have other references and
pickle those too. */
for (i = 0; i < lto_symtab_encoder_size (encoder); i++)
{
- symtab_node *node = lto_symtab_encoder_deref (encoder, i);
+ toplevel_node *node = lto_symtab_encoder_deref (encoder, i);
if (varpool_node *vnode = dyn_cast <varpool_node *> (node))
{
if (!lto_symtab_encoder_encode_initializer_p (encoder,
to stay to aid local calling conventions. */
for (i = 0; i < lto_symtab_encoder_size (encoder); i++)
{
- symtab_node *node = lto_symtab_encoder_deref (encoder, i);
+ toplevel_node *tnode = lto_symtab_encoder_deref (encoder, i);
+ symtab_node *node = dyn_cast <symtab_node *> (tnode);
+ if (!node)
+ continue;
+
cgraph_node *cnode = dyn_cast <cgraph_node *> (node);
if (node->alias && node->analyzed)
n_nodes = lto_symtab_encoder_size (encoder);
for (i = 0; i < n_nodes; i++)
{
- symtab_node *node = lto_symtab_encoder_deref (encoder, i);
+ toplevel_node *node = lto_symtab_encoder_deref (encoder, i);
if (cgraph_node *cnode = dyn_cast <cgraph_node *> (node))
lto_output_node (ob, cnode, encoder);
- else
- lto_output_varpool_node (ob, dyn_cast<varpool_node *> (node), encoder);
+ else if (varpool_node *vnode = dyn_cast <varpool_node *> (node))
+ lto_output_varpool_node (ob, vnode, encoder);
}
/* Go over the nodes in SET again to write edges. */
n_nodes = lto_symtab_encoder_size (encoder);
for (i = 0; i < n_nodes; i++)
{
- symtab_node *node = lto_symtab_encoder_deref (encoder, i);
+ toplevel_node *node = lto_symtab_encoder_deref (encoder, i);
cgraph_node *cnode = dyn_cast <cgraph_node *> (node);
if (cnode && output_cgraph_opt_summary_p (cnode))
count++;
streamer_write_uhwi (ob, count);
for (i = 0; i < n_nodes; i++)
{
- symtab_node *node = lto_symtab_encoder_deref (encoder, i);
+ toplevel_node *node = lto_symtab_encoder_deref (encoder, i);
cgraph_node *cnode = dyn_cast <cgraph_node *> (node);
if (cnode && output_cgraph_opt_summary_p (cnode))
{
section copying. */
for (i = 0; i < n_nodes; i++)
{
- symtab_node *snode = lto_symtab_encoder_deref (encoder, i);
- if (snode->alias)
+ toplevel_node *tnode = lto_symtab_encoder_deref (encoder, i);
+ symtab_node *node = dyn_cast <symtab_node *> (tnode);
+ if (!node || node->alias)
continue;
- if (cgraph_node *node = dyn_cast <cgraph_node *> (snode))
+
+ if (cgraph_node *node = dyn_cast <cgraph_node *> (tnode))
{
if (lto_symtab_encoder_encode_body_p (encoder, node)
&& !node->clone_of)
symbols_to_copy.safe_push (node);
}
- else if (varpool_node *node = dyn_cast <varpool_node *> (snode))
+ else if (varpool_node *node = dyn_cast <varpool_node *> (tnode))
{
/* Wrap symbol references inside the ctor in a type
preserving MEM_REF. */
for (lsei = lsei_start (encoder);
!lsei_end_p (lsei); lsei_next (&lsei))
{
- symtab_node *node = lsei_node (lsei);
+ toplevel_node *tnode = lsei_node (lsei);
+ symtab_node *node = dyn_cast<symtab_node*> (tnode);
+ if (!node)
+ continue;
if (DECL_EXTERNAL (node->decl) || !node->output_to_lto_symbol_table_p ())
continue;
for (lsei = lsei_start (encoder);
!lsei_end_p (lsei); lsei_next (&lsei))
{
- symtab_node *node = lsei_node (lsei);
+ toplevel_node *tnode = lsei_node (lsei);
+ symtab_node *node = dyn_cast<symtab_node*> (tnode);
+ if (!node)
+ continue;
if (!DECL_EXTERNAL (node->decl) || !node->output_to_lto_symbol_table_p ())
continue;
for (lsei = lsei_start (encoder);
!lsei_end_p (lsei); lsei_next (&lsei))
{
- symtab_node *node = lsei_node (lsei);
+ toplevel_node *tnode = lsei_node (lsei);
+ symtab_node *node = dyn_cast<symtab_node*> (tnode);
+ if (!node)
+ continue;
if (DECL_EXTERNAL (node->decl) || !node->output_to_lto_symbol_table_p ())
continue;
for (lsei = lsei_start (encoder);
!lsei_end_p (lsei); lsei_next (&lsei))
{
- symtab_node *node = lsei_node (lsei);
+ toplevel_node *tnode = lsei_node (lsei);
+ symtab_node *node = dyn_cast<symtab_node*> (tnode);
+ if (!node)
+ continue;
if (!DECL_EXTERNAL (node->decl) || !node->output_to_lto_symbol_table_p ())
continue;
struct lto_encoder_entry
{
/* Constructor. */
- lto_encoder_entry (symtab_node* n)
+ lto_encoder_entry (toplevel_node* n)
: node (n), in_partition (false), body (false), only_for_inlining (true),
initializer (false)
{}
- symtab_node *node;
+ toplevel_node *node;
/* Is the node in this partition (i.e. ltrans of this partition will
be responsible for outputting it)? */
unsigned int in_partition:1;
struct lto_symtab_encoder_d
{
vec<lto_encoder_entry> nodes;
- hash_map<symtab_node *, size_t> *map;
+ hash_map<toplevel_node *, size_t> *map;
/* Mapping of input order of nodes onto output order. */
hash_map<int_hash<int, -1, -2>, int> *order_remap;
/* In lto-cgraph.cc */
extern bool asm_nodes_output;
lto_symtab_encoder_t lto_symtab_encoder_new (bool);
-int lto_symtab_encoder_encode (lto_symtab_encoder_t, symtab_node *);
+int lto_symtab_encoder_encode (lto_symtab_encoder_t, toplevel_node *);
void lto_symtab_encoder_delete (lto_symtab_encoder_t);
-bool lto_symtab_encoder_delete_node (lto_symtab_encoder_t, symtab_node *);
+bool lto_symtab_encoder_delete_node (lto_symtab_encoder_t, toplevel_node *);
bool lto_symtab_encoder_encode_body_p (lto_symtab_encoder_t,
struct cgraph_node *);
bool lto_symtab_encoder_only_for_inlining_p (lto_symtab_encoder_t,
struct cgraph_node *);
bool lto_symtab_encoder_in_partition_p (lto_symtab_encoder_t,
- symtab_node *);
+ toplevel_node *);
void lto_set_symtab_encoder_in_partition (lto_symtab_encoder_t,
- symtab_node *);
+ toplevel_node *);
bool lto_symtab_encoder_encode_initializer_p (lto_symtab_encoder_t,
varpool_node *);
inline int
lto_symtab_encoder_lookup (lto_symtab_encoder_t encoder,
- symtab_node *node)
+ toplevel_node *node)
{
size_t *slot = encoder->map->get (node);
return (slot && *slot ? *(slot) - 1 : LCC_NOT_FOUND);
}
/* Return the node pointed to by LSI. */
-inline symtab_node *
+inline toplevel_node *
lsei_node (lto_symtab_encoder_iterator lsei)
{
return lsei.encoder->nodes[lsei.index].node;
/* Return the cgraph node corresponding to REF using ENCODER. */
-inline symtab_node *
+inline toplevel_node *
lto_symtab_encoder_deref (lto_symtab_encoder_t encoder, int ref)
{
if (ref == LCC_NOT_FOUND)
vec<ltrans_partition> ltrans_partitions;
-static void add_symbol_to_partition (ltrans_partition part, symtab_node *node);
+static void add_symbol_to_partition (ltrans_partition part,
+ toplevel_node *node);
/* Helper for qsort; compare partitions and return one with smaller order. */
of other symbol definition, add the other symbol, too. */
static void
-add_symbol_to_partition (ltrans_partition part, symtab_node *node)
+add_symbol_to_partition (ltrans_partition part, toplevel_node *tnode)
{
symtab_node *node1;
+ symtab_node* node = dyn_cast <symtab_node*> (tnode);
+ if (!node)
+ {
+ lto_set_symtab_encoder_in_partition (part->encoder, tnode);
+ return;
+ }
/* Verify that we do not try to duplicate something that cannot be. */
gcc_checking_assert (node->get_partitioning_class () == SYMBOL_DUPLICATE
{
while (lto_symtab_encoder_size (partition->encoder) > (int)n_nodes)
{
- symtab_node *node = lto_symtab_encoder_deref (partition->encoder,
- n_nodes);
- partition->symbols--;
- cgraph_node *cnode;
+ toplevel_node *tnode = lto_symtab_encoder_deref (partition->encoder,
+ n_nodes);
/* After UNDO we no longer know what was visited. */
if (partition->initializers_visited)
delete partition->initializers_visited;
partition->initializers_visited = NULL;
- if (!node->alias && (cnode = dyn_cast <cgraph_node *> (node))
- && node->get_partitioning_class () == SYMBOL_PARTITION)
- partition->insns -= ipa_size_summaries->get (cnode)->size;
- lto_symtab_encoder_delete_node (partition->encoder, node);
- node->aux = (void *)((size_t)node->aux - 1);
+ lto_symtab_encoder_delete_node (partition->encoder, tnode);
+
+ if (symtab_node* node = dyn_cast <symtab_node *> (tnode))
+ {
+ partition->symbols--;
+ cgraph_node *cnode;
+ if (!node->alias && (cnode = dyn_cast <cgraph_node *> (node))
+ && node->get_partitioning_class () == SYMBOL_PARTITION)
+ partition->insns -= ipa_size_summaries->get (cnode)->size;
+ node->aux = (void *)((size_t)node->aux - 1);
+ }
}
}
before adding any symbols to other partition. */
for (lsei = lsei_start (encoder); !lsei_end_p (lsei); lsei_next (&lsei))
{
- symtab_node *node = lsei_node (lsei);
- node->aux = (void *)((size_t)node->aux - 1);
+ if (symtab_node *node = dyn_cast <symtab_node*> (lsei_node (lsei)))
+ node->aux = (void *)((size_t)node->aux - 1);
}
for (lsei = lsei_start (encoder); !lsei_end_p (lsei); lsei_next (&lsei))
{
- symtab_node *node = lsei_node (lsei);
+ toplevel_node *node = lsei_node (lsei);
- if (symbol_partitioned_p (node))
- continue;
+ if (symtab_node *snode = dyn_cast <symtab_node*> (node))
+ if (symbol_partitioned_p (snode))
+ continue;
add_symbol_to_partition (into, node);
}
for (lsei = lsei_start (encoder); !lsei_end_p (lsei); lsei_next (&lsei))
{
- symtab_node *node = lsei_node (lsei);
- node->aux = (void *)((size_t)node->aux - 1);
+ if (symtab_node *node = dyn_cast <symtab_node*> (lsei_node (lsei)))
+ node->aux = (void *)((size_t)node->aux - 1);
}
for (lsei = lsei_start (encoder); !lsei_end_p (lsei); lsei_next (&lsei))
{
- symtab_node *node = lsei_node (lsei);
+ toplevel_node *node = lsei_node (lsei);
- if (node->get_partitioning_class () != SYMBOL_PARTITION
- || symbol_partitioned_p (node))
+ symtab_node *snode = dyn_cast <symtab_node*> (node);
+ if (snode->get_partitioning_class () != SYMBOL_PARTITION
+ || symbol_partitioned_p (snode))
continue;
ltrans_partition new_part = new_partition_no_push (part->name);
for (lsei = lsei_start (encoder); !lsei_end_p (lsei); lsei_next (&lsei))
{
- symtab_node *node = lsei_node (lsei);
- if (node->no_reorder)
+ symtab_node *node = dyn_cast <symtab_node*> (lsei_node (lsei));
+ if (!node || node->no_reorder)
return false;
}
return true;
{
int j;
struct ipa_ref *ref = NULL;
- symtab_node *snode = lto_symtab_encoder_deref (partition->encoder,
- last_visited_node);
+ toplevel_node *tnode = lto_symtab_encoder_deref (partition->encoder,
+ last_visited_node);
+
+ symtab_node* snode = dyn_cast <symtab_node*> (tnode);
+ if (!snode)
+ continue;
if (cgraph_node *node = dyn_cast <cgraph_node *> (snode))
{
for (lsei = lsei_start (encoder); !lsei_end_p (lsei);
lsei_next (&lsei))
{
- symtab_node *node = lsei_node (lsei);
+ toplevel_node *tnode = lsei_node (lsei);
+ symtab_node *node = dyn_cast <symtab_node*> (tnode);
+ if (!node)
+ continue;
/* If symbol is static, rename it if its assembler name
clashes with anything else in this unit. */
!lsei_end_p (lsei);
lsei_next_in_partition (&lsei))
{
- symtab_node *node = lsei_node (lsei);
- fprintf (symtab->dump_file, "%s ", node->dump_asm_name ());
+ symtab_node *node = dyn_cast<symtab_node*> (lsei_node (lsei));
+ if (node)
+ fprintf (symtab->dump_file, "%s ", node->dump_asm_name ());
}
fprintf (symtab->dump_file, "\n Symbols in boundary: ");
for (lsei = lsei_start (part->encoder); !lsei_end_p (lsei);
lsei_next (&lsei))
{
- symtab_node *node = lsei_node (lsei);
+ symtab_node *node = dyn_cast<symtab_node*> (lsei_node (lsei));
+ if (!node)
+ continue;
if (!lto_symtab_encoder_in_partition_p (part->encoder, node))
{
fprintf (symtab->dump_file, "%s ", node->dump_asm_name ());