示例#1
0
/* Return varpool node assigned to DECL.  Create new one when needed.  */
struct varpool_node *
varpool_node (tree decl)
{
  struct varpool_node key, *node, **slot;

  gcc_assert (TREE_CODE (decl) == VAR_DECL
	      && (TREE_STATIC (decl) || DECL_EXTERNAL (decl) || in_lto_p));

  if (!varpool_hash)
    varpool_hash = htab_create_ggc (10, hash_varpool_node,
					   eq_varpool_node, NULL);
  key.decl = decl;
  slot = (struct varpool_node **)
    htab_find_slot (varpool_hash, &key, INSERT);
  if (*slot)
    return *slot;
  node = ggc_alloc_cleared_varpool_node ();
  node->decl = decl;
  node->order = cgraph_order++;
  node->next = varpool_nodes;
  ipa_empty_ref_list (&node->ref_list);
  if (varpool_nodes)
    varpool_nodes->prev = node;
  varpool_nodes = node;
  *slot = node;
  return node;
}
示例#2
0
varpool_node *
varpool_create_empty_node (void)
{   
  varpool_node *node = ggc_alloc_cleared_varpool_node ();
  node->type = SYMTAB_VARIABLE;
  return node;
}   
示例#3
0
struct varpool_node *
varpool_extra_name_alias (tree alias, tree decl)
{
  struct varpool_node key, *alias_node, *decl_node, **slot;

#ifndef ASM_OUTPUT_DEF
  /* If aliases aren't supported by the assembler, fail.  */
  return false;
#endif

  gcc_assert (TREE_CODE (decl) == VAR_DECL);
  gcc_assert (TREE_CODE (alias) == VAR_DECL);
  /* Make sure the hash table has been created.  */
  decl_node = varpool_node (decl);

  key.decl = alias;

  slot = (struct varpool_node **) htab_find_slot (varpool_hash, &key, INSERT);

  /* If the varpool_node has been already created, fail.  */
  if (*slot)
    return NULL;

  alias_node = ggc_alloc_cleared_varpool_node ();
  alias_node->decl = alias;
  alias_node->alias = 1;
  alias_node->extra_name = decl_node;
  alias_node->next = decl_node->extra_name;
  ipa_empty_ref_list (&alias_node->ref_list);
  if (decl_node->extra_name)
    decl_node->extra_name->prev = alias_node;
  decl_node->extra_name = alias_node;
  *slot = alias_node;
  return alias_node;
}
示例#4
0
/* Return varpool node assigned to DECL.  Create new one when needed.  */
struct varpool_node *
varpool_node (tree decl)
{
  struct varpool_node *node = varpool_get_node (decl);
  gcc_assert (TREE_CODE (decl) == VAR_DECL
	      && (TREE_STATIC (decl) || DECL_EXTERNAL (decl) || in_lto_p));
  if (node)
    return node;

  node = ggc_alloc_cleared_varpool_node ();
  node->symbol.type = SYMTAB_VARIABLE;
  node->symbol.decl = decl;
  symtab_register_node ((symtab_node)node);
  return node;
}