Пример #1
0
static void
process_references (struct ipa_ref_list *list,
		    struct cgraph_node **first,
		    struct varpool_node **first_varpool,
		    bool before_inlining_p)
{
  int i;
  struct ipa_ref *ref;
  for (i = 0; ipa_ref_list_reference_iterate (list, i, ref); i++)
    {
      if (ref->refered_type == IPA_REF_CGRAPH)
	{
	  struct cgraph_node *node = ipa_ref_node (ref);
	  if (!node->reachable
	      && node->analyzed
	      && (!DECL_EXTERNAL (node->decl)
	          || before_inlining_p))
	    node->reachable = true;
	  enqueue_cgraph_node (node, first);
	}
      else
	{
	  struct varpool_node *node = ipa_ref_varpool_node (ref);
	  if (!node->needed)
	    {
	      varpool_mark_needed_node (node);
	      enqueue_varpool_node (node, first_varpool);
	    }
	}
    }
}
Пример #2
0
static void
process_references (struct ipa_ref_list *list,
		    symtab_node *first,
		    bool before_inlining_p,
		    struct pointer_set_t *reachable)
{
  int i;
  struct ipa_ref *ref;
  for (i = 0; ipa_ref_list_reference_iterate (list, i, ref); i++)
    {
      if (is_a <cgraph_node> (ref->referred))
	{
	  struct cgraph_node *node = ipa_ref_node (ref);

	  if (node->analyzed
	      && (!DECL_EXTERNAL (node->symbol.decl)
		  || node->alias
	          || before_inlining_p))
	    pointer_set_insert (reachable, node);
	  enqueue_node ((symtab_node) node, first, reachable);
	}
      else
	{
	  struct varpool_node *node = ipa_ref_varpool_node (ref);

	  if (node->analyzed
	      && (!DECL_EXTERNAL (node->symbol.decl)
		  || node->alias
		  || before_inlining_p))
	    pointer_set_insert (reachable, node);
	  enqueue_node ((symtab_node) node, first, reachable);
	}
    }
}