1 /* Write and read the cgraph to the memory mapped representation of a
4 Copyright 2009 Free Software Foundation, Inc.
5 Contributed by Kenneth Zadeck <zadeck@naturalbridge.com>
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License as published by the Free
11 Software Foundation; either version 3, or (at your option) any later
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
25 #include "coretypes.h"
35 #include "langhooks.h"
36 #include "basic-block.h"
37 #include "tree-flow.h"
41 #include "diagnostic.h"
46 #include "pointer-set.h"
47 #include "lto-streamer.h"
50 /* Create a new cgraph encoder. */
53 lto_cgraph_encoder_new (void)
55 lto_cgraph_encoder_t encoder = XCNEW (struct lto_cgraph_encoder_d);
56 encoder->map = pointer_map_create ();
57 encoder->nodes = NULL;
62 /* Delete ENCODER and its components. */
65 lto_cgraph_encoder_delete (lto_cgraph_encoder_t encoder)
67 VEC_free (cgraph_node_ptr, heap, encoder->nodes);
68 pointer_map_destroy (encoder->map);
73 /* Return the existing reference number of NODE in the cgraph encoder in
74 output block OB. Assign a new reference if this is the first time
78 lto_cgraph_encoder_encode (lto_cgraph_encoder_t encoder,
79 struct cgraph_node *node)
84 slot = pointer_map_contains (encoder->map, node);
87 ref = VEC_length (cgraph_node_ptr, encoder->nodes);
88 slot = pointer_map_insert (encoder->map, node);
89 *slot = (void *) (intptr_t) ref;
90 VEC_safe_push (cgraph_node_ptr, heap, encoder->nodes, node);
93 ref = (int) (intptr_t) *slot;
99 /* Look up NODE in encoder. Return NODE's reference if it has been encoded
100 or LCC_NOT_FOUND if it is not there. */
103 lto_cgraph_encoder_lookup (lto_cgraph_encoder_t encoder,
104 struct cgraph_node *node)
106 void **slot = pointer_map_contains (encoder->map, node);
107 return (slot ? (int) (intptr_t) *slot : LCC_NOT_FOUND);
111 /* Return the cgraph node corresponding to REF using ENCODER. */
114 lto_cgraph_encoder_deref (lto_cgraph_encoder_t encoder, int ref)
116 if (ref == LCC_NOT_FOUND)
119 return VEC_index (cgraph_node_ptr, encoder->nodes, ref);
123 /* Return number of encoded nodes in ENCODER. */
126 lto_cgraph_encoder_size (lto_cgraph_encoder_t encoder)
128 return VEC_length (cgraph_node_ptr, encoder->nodes);
132 /* Output the cgraph EDGE to OB using ENCODER. */
135 lto_output_edge (struct lto_simple_output_block *ob, struct cgraph_edge *edge,
136 lto_cgraph_encoder_t encoder)
140 struct bitpack_d *bp;
142 lto_output_uleb128_stream (ob->main_stream, LTO_cgraph_edge);
144 ref = lto_cgraph_encoder_lookup (encoder, edge->caller);
145 gcc_assert (ref != LCC_NOT_FOUND);
146 lto_output_sleb128_stream (ob->main_stream, ref);
148 ref = lto_cgraph_encoder_lookup (encoder, edge->callee);
149 gcc_assert (ref != LCC_NOT_FOUND);
150 lto_output_sleb128_stream (ob->main_stream, ref);
152 lto_output_sleb128_stream (ob->main_stream, edge->count);
154 bp = bitpack_create ();
155 uid = flag_wpa ? edge->lto_stmt_uid : gimple_uid (edge->call_stmt);
156 bp_pack_value (bp, uid, HOST_BITS_PER_INT);
157 bp_pack_value (bp, edge->inline_failed, HOST_BITS_PER_INT);
158 bp_pack_value (bp, edge->frequency, HOST_BITS_PER_INT);
159 bp_pack_value (bp, edge->loop_nest, 30);
160 bp_pack_value (bp, edge->indirect_call, 1);
161 bp_pack_value (bp, edge->call_stmt_cannot_inline_p, 1);
162 bp_pack_value (bp, edge->can_throw_external, 1);
163 lto_output_bitpack (ob->main_stream, bp);
168 /* Output the cgraph NODE to OB. ENCODER is used to find the
169 reference number of NODE->inlined_to. SET is the set of nodes we
170 are writing to the current file. If NODE is not in SET, then NODE
171 is a boundary of a cgraph_node_set and we pretend NODE just has a
172 decl and no callees. WRITTEN_DECLS is the set of FUNCTION_DECLs
173 that have had their callgraph node written so far. This is used to
174 determine if NODE is a clone of a previously written node. */
177 lto_output_node (struct lto_simple_output_block *ob, struct cgraph_node *node,
178 lto_cgraph_encoder_t encoder, cgraph_node_set set,
179 bitmap written_decls)
182 struct bitpack_d *bp;
183 unsigned local, externally_visible, inlinable, analyzed;
184 bool boundary_p, wrote_decl_p;
187 boundary_p = !cgraph_node_in_set_p (node, set);
188 wrote_decl_p = bitmap_bit_p (written_decls, DECL_UID (node->decl));
190 switch (cgraph_function_body_availability (node))
192 case AVAIL_NOT_AVAILABLE:
193 tag = LTO_cgraph_unavail_node;
196 case AVAIL_AVAILABLE:
198 tag = LTO_cgraph_avail_node;
201 case AVAIL_OVERWRITABLE:
202 tag = LTO_cgraph_overwritable_node;
210 tag = LTO_cgraph_unavail_node;
212 lto_output_uleb128_stream (ob->main_stream, tag);
214 local = node->local.local;
215 externally_visible = node->local.externally_visible;
216 inlinable = node->local.inlinable;
217 analyzed = node->analyzed;
219 /* In WPA mode, we only output part of the call-graph. Also, we
220 fake cgraph node attributes. There are two cases that we care.
222 Boundary nodes: There are nodes that are not part of SET but are
223 called from within SET. We artificially make them look like
224 externally visible nodes with no function body.
226 Cherry-picked nodes: These are nodes we pulled from other
227 translation units into SET during IPA-inlining. We make them as
228 local static nodes to prevent clashes with other local statics. */
231 /* Inline clones can not be part of boundary. */
232 gcc_assert (!node->global.inlined_to);
234 externally_visible = 1;
238 else if (lto_forced_extern_inline_p (node->decl))
241 externally_visible = 0;
245 lto_output_uleb128_stream (ob->main_stream, wrote_decl_p);
248 bitmap_set_bit (written_decls, DECL_UID (node->decl));
250 lto_output_fn_decl_index (ob->decl_state, ob->main_stream, node->decl);
251 lto_output_sleb128_stream (ob->main_stream, node->count);
253 bp = bitpack_create ();
254 bp_pack_value (bp, local, 1);
255 bp_pack_value (bp, externally_visible, 1);
256 bp_pack_value (bp, node->local.finalized, 1);
257 bp_pack_value (bp, inlinable, 1);
258 bp_pack_value (bp, node->local.disregard_inline_limits, 1);
259 bp_pack_value (bp, node->local.redefined_extern_inline, 1);
260 bp_pack_value (bp, node->local.for_functions_valid, 1);
261 bp_pack_value (bp, node->local.vtable_method, 1);
262 bp_pack_value (bp, node->needed, 1);
263 bp_pack_value (bp, node->address_taken, 1);
264 bp_pack_value (bp, node->abstract_and_needed, 1);
265 bp_pack_value (bp, node->reachable, 1);
266 bp_pack_value (bp, node->lowered, 1);
267 bp_pack_value (bp, analyzed, 1);
268 bp_pack_value (bp, node->process, 1);
269 bp_pack_value (bp, node->alias, 1);
270 bp_pack_value (bp, node->finalized_by_frontend, 1);
271 lto_output_bitpack (ob->main_stream, bp);
274 if (tag != LTO_cgraph_unavail_node)
276 lto_output_sleb128_stream (ob->main_stream,
277 node->local.inline_summary.estimated_self_stack_size);
278 lto_output_sleb128_stream (ob->main_stream,
279 node->local.inline_summary.self_size);
280 lto_output_sleb128_stream (ob->main_stream,
281 node->local.inline_summary.size_inlining_benefit);
282 lto_output_sleb128_stream (ob->main_stream,
283 node->local.inline_summary.self_time);
284 lto_output_sleb128_stream (ob->main_stream,
285 node->local.inline_summary.time_inlining_benefit);
288 /* FIXME lto: Outputting global info is not neccesary until after
289 inliner was run. Global structure holds results of propagation
291 lto_output_sleb128_stream (ob->main_stream,
292 node->global.estimated_stack_size);
293 lto_output_sleb128_stream (ob->main_stream,
294 node->global.stack_frame_offset);
295 if (node->global.inlined_to && !boundary_p)
297 ref = lto_cgraph_encoder_lookup (encoder, node->global.inlined_to);
298 gcc_assert (ref != LCC_NOT_FOUND);
302 lto_output_sleb128_stream (ob->main_stream, ref);
304 lto_output_sleb128_stream (ob->main_stream, node->global.time);
305 lto_output_sleb128_stream (ob->main_stream, node->global.size);
306 lto_output_sleb128_stream (ob->main_stream,
307 node->global.estimated_growth);
308 lto_output_uleb128_stream (ob->main_stream, node->global.inlined);
311 struct cgraph_node *alias;
312 unsigned long alias_count = 1;
313 for (alias = node->same_body; alias->next; alias = alias->next)
315 lto_output_uleb128_stream (ob->main_stream, alias_count);
318 lto_output_fn_decl_index (ob->decl_state, ob->main_stream,
320 alias = alias->previous;
325 lto_output_uleb128_stream (ob->main_stream, 0);
328 /* Stream out profile_summary to OB. */
331 output_profile_summary (struct lto_simple_output_block *ob)
335 /* We do not output num, it is not terribly useful. */
336 gcc_assert (profile_info->runs);
337 lto_output_uleb128_stream (ob->main_stream, profile_info->runs);
338 lto_output_sleb128_stream (ob->main_stream, profile_info->sum_all);
339 lto_output_sleb128_stream (ob->main_stream, profile_info->run_max);
340 lto_output_sleb128_stream (ob->main_stream, profile_info->sum_max);
343 lto_output_uleb128_stream (ob->main_stream, 0);
347 /* Output the part of the cgraph in SET. */
350 output_cgraph (cgraph_node_set set)
352 struct cgraph_node *node;
353 struct lto_simple_output_block *ob;
354 cgraph_node_set_iterator csi;
355 struct cgraph_edge *edge;
357 bitmap written_decls;
358 lto_cgraph_encoder_t encoder;
359 struct cgraph_asm_node *can;
361 ob = lto_create_simple_output_block (LTO_section_cgraph);
363 output_profile_summary (ob);
365 /* An encoder for cgraph nodes should have been created by
366 ipa_write_summaries_1. */
367 gcc_assert (ob->decl_state->cgraph_node_encoder);
368 encoder = ob->decl_state->cgraph_node_encoder;
370 /* The FUNCTION_DECLs for which we have written a node. The first
371 node found is written as the "original" node, the remaining nodes
372 are considered its clones. */
373 written_decls = lto_bitmap_alloc ();
375 /* Go over all the nodes in SET and assign references. */
376 for (csi = csi_start (set); !csi_end_p (csi); csi_next (&csi))
378 node = csi_node (csi);
379 lto_cgraph_encoder_encode (encoder, node);
382 /* Go over all the nodes again to include callees that are not in
384 for (csi = csi_start (set); !csi_end_p (csi); csi_next (&csi))
386 node = csi_node (csi);
387 for (edge = node->callees; edge; edge = edge->next_callee)
389 struct cgraph_node *callee = edge->callee;
390 if (!cgraph_node_in_set_p (callee, set))
392 /* We should have moved all the inlines. */
393 gcc_assert (!callee->global.inlined_to);
394 lto_cgraph_encoder_encode (encoder, callee);
399 /* Write out the nodes. */
400 n_nodes = lto_cgraph_encoder_size (encoder);
401 for (i = 0; i < n_nodes; i++)
403 node = lto_cgraph_encoder_deref (encoder, i);
404 lto_output_node (ob, node, encoder, set, written_decls);
407 lto_bitmap_free (written_decls);
409 /* Go over the nodes in SET again to write edges. */
410 for (csi = csi_start (set); !csi_end_p (csi); csi_next (&csi))
412 node = csi_node (csi);
415 /* Output edges in backward direction, so the reconstructed callgraph
416 match and it is easy to associate call sites in the IPA pass summaries. */
417 edge = node->callees;
418 while (edge->next_callee)
419 edge = edge->next_callee;
420 for (; edge; edge = edge->prev_callee)
421 lto_output_edge (ob, edge, encoder);
425 lto_output_uleb128_stream (ob->main_stream, 0);
427 /* Emit toplevel asms. */
428 for (can = cgraph_asm_nodes; can; can = can->next)
430 int len = TREE_STRING_LENGTH (can->asm_str);
431 lto_output_uleb128_stream (ob->main_stream, len);
432 for (i = 0; i < len; ++i)
433 lto_output_1_stream (ob->main_stream,
434 TREE_STRING_POINTER (can->asm_str)[i]);
437 lto_output_uleb128_stream (ob->main_stream, 0);
439 lto_destroy_simple_output_block (ob);
443 /* Overwrite the information in NODE based on FILE_DATA, TAG, FLAGS,
444 STACK_SIZE, SELF_TIME and SELF_SIZE. This is called either to initialize
445 NODE or to replace the values in it, for instance because the first
446 time we saw it, the function body was not available but now it
447 is. BP is a bitpack with all the bitflags for NODE read from the
451 input_overwrite_node (struct lto_file_decl_data *file_data,
452 struct cgraph_node *node,
453 enum LTO_cgraph_tags tag,
454 struct bitpack_d *bp,
455 unsigned int stack_size,
456 unsigned int self_time,
457 unsigned int time_inlining_benefit,
458 unsigned int self_size,
459 unsigned int size_inlining_benefit)
461 node->aux = (void *) tag;
462 node->local.inline_summary.estimated_self_stack_size = stack_size;
463 node->local.inline_summary.self_time = self_time;
464 node->local.inline_summary.time_inlining_benefit = time_inlining_benefit;
465 node->local.inline_summary.self_size = self_size;
466 node->local.inline_summary.size_inlining_benefit = size_inlining_benefit;
467 node->global.time = self_time;
468 node->global.size = self_size;
469 node->local.lto_file_data = file_data;
471 node->local.local = bp_unpack_value (bp, 1);
472 node->local.externally_visible = bp_unpack_value (bp, 1);
473 node->local.finalized = bp_unpack_value (bp, 1);
474 node->local.inlinable = bp_unpack_value (bp, 1);
475 node->local.disregard_inline_limits = bp_unpack_value (bp, 1);
476 node->local.redefined_extern_inline = bp_unpack_value (bp, 1);
477 node->local.for_functions_valid = bp_unpack_value (bp, 1);
478 node->local.vtable_method = bp_unpack_value (bp, 1);
479 node->needed = bp_unpack_value (bp, 1);
480 node->address_taken = bp_unpack_value (bp, 1);
481 node->abstract_and_needed = bp_unpack_value (bp, 1);
482 node->reachable = bp_unpack_value (bp, 1);
483 node->lowered = bp_unpack_value (bp, 1);
484 node->analyzed = bp_unpack_value (bp, 1);
485 node->process = bp_unpack_value (bp, 1);
486 node->alias = bp_unpack_value (bp, 1);
487 node->finalized_by_frontend = bp_unpack_value (bp, 1);
491 /* Read a node from input_block IB. TAG is the node's tag just read.
492 Return the node read or overwriten. */
494 static struct cgraph_node *
495 input_node (struct lto_file_decl_data *file_data,
496 struct lto_input_block *ib,
497 enum LTO_cgraph_tags tag)
500 struct cgraph_node *node;
501 struct bitpack_d *bp;
505 int estimated_stack_size = 0;
506 int stack_frame_offset = 0;
507 int ref = LCC_NOT_FOUND;
508 int estimated_growth = 0;
513 int time_inlining_benefit = 0;
514 int size_inlining_benefit = 0;
515 unsigned long same_body_count = 0;
516 bool inlined = false;
518 clone_p = (lto_input_uleb128 (ib) != 0);
520 decl_index = lto_input_uleb128 (ib);
521 fn_decl = lto_file_decl_data_get_fn_decl (file_data, decl_index);
524 node = cgraph_clone_node (cgraph_node (fn_decl), 0,
525 CGRAPH_FREQ_BASE, 0, false, NULL);
528 node = cgraph_node (fn_decl);
530 node->count = lto_input_sleb128 (ib);
531 bp = lto_input_bitpack (ib);
533 if (tag != LTO_cgraph_unavail_node)
535 stack_size = lto_input_sleb128 (ib);
536 self_size = lto_input_sleb128 (ib);
537 size_inlining_benefit = lto_input_sleb128 (ib);
538 self_time = lto_input_sleb128 (ib);
539 time_inlining_benefit = lto_input_sleb128 (ib);
542 estimated_stack_size = lto_input_sleb128 (ib);
543 stack_frame_offset = lto_input_sleb128 (ib);
544 ref = lto_input_sleb128 (ib);
545 time = lto_input_sleb128 (ib);
546 size = lto_input_sleb128 (ib);
547 estimated_growth = lto_input_sleb128 (ib);
548 inlined = lto_input_uleb128 (ib);
549 same_body_count = lto_input_uleb128 (ib);
551 /* Make sure that we have not read this node before. Nodes that
552 have already been read will have their tag stored in the 'aux'
553 field. Since built-in functions can be referenced in multiple
554 functions, they are expected to be read more than once. */
555 if (node->aux && !DECL_IS_BUILTIN (node->decl))
556 internal_error ("bytecode stream: found multiple instances of cgraph "
557 "node %d", node->uid);
559 input_overwrite_node (file_data, node, tag, bp, stack_size, self_time,
560 time_inlining_benefit, self_size,
561 size_inlining_benefit);
564 node->global.estimated_stack_size = estimated_stack_size;
565 node->global.stack_frame_offset = stack_frame_offset;
566 node->global.time = time;
567 node->global.size = size;
569 /* Store a reference for now, and fix up later to be a pointer. */
570 node->global.inlined_to = (cgraph_node_ptr) (intptr_t) ref;
572 node->global.estimated_growth = estimated_growth;
573 node->global.inlined = inlined;
575 while (same_body_count-- > 0)
578 decl_index = lto_input_uleb128 (ib);
579 alias_decl = lto_file_decl_data_get_fn_decl (file_data, decl_index);
580 cgraph_same_body_alias (alias_decl, fn_decl);
586 /* Read an edge from IB. NODES points to a vector of previously read
587 nodes for decoding caller and callee of the edge to be read. */
590 input_edge (struct lto_input_block *ib, VEC(cgraph_node_ptr, heap) *nodes)
592 struct cgraph_node *caller, *callee;
593 struct cgraph_edge *edge;
594 unsigned int stmt_id;
598 cgraph_inline_failed_t inline_failed;
599 struct bitpack_d *bp;
600 enum ld_plugin_symbol_resolution caller_resolution;
602 caller = VEC_index (cgraph_node_ptr, nodes, lto_input_sleb128 (ib));
603 if (caller == NULL || caller->decl == NULL_TREE)
604 internal_error ("bytecode stream: no caller found while reading edge");
606 callee = VEC_index (cgraph_node_ptr, nodes, lto_input_sleb128 (ib));
607 if (callee == NULL || callee->decl == NULL_TREE)
608 internal_error ("bytecode stream: no callee found while reading edge");
610 count = (gcov_type) lto_input_sleb128 (ib);
612 bp = lto_input_bitpack (ib);
613 stmt_id = (unsigned int) bp_unpack_value (bp, HOST_BITS_PER_INT);
614 inline_failed = (cgraph_inline_failed_t) bp_unpack_value (bp,
616 freq = (int) bp_unpack_value (bp, HOST_BITS_PER_INT);
617 nest = (unsigned) bp_unpack_value (bp, 30);
619 /* If the caller was preempted, don't create the edge.
620 ??? Should we ever have edges from a preempted caller? */
621 caller_resolution = lto_symtab_get_resolution (caller->decl);
622 if (caller_resolution == LDPR_PREEMPTED_REG
623 || caller_resolution == LDPR_PREEMPTED_IR)
626 edge = cgraph_create_edge (caller, callee, NULL, count, freq, nest);
627 edge->lto_stmt_uid = stmt_id;
628 edge->inline_failed = inline_failed;
629 edge->indirect_call = bp_unpack_value (bp, 1);
630 edge->call_stmt_cannot_inline_p = bp_unpack_value (bp, 1);
631 edge->can_throw_external = bp_unpack_value (bp, 1);
636 /* Read a cgraph from IB using the info in FILE_DATA. */
639 input_cgraph_1 (struct lto_file_decl_data *file_data,
640 struct lto_input_block *ib)
642 enum LTO_cgraph_tags tag;
643 VEC(cgraph_node_ptr, heap) *nodes = NULL;
644 struct cgraph_node *node;
646 unsigned HOST_WIDE_INT len;
648 tag = (enum LTO_cgraph_tags) lto_input_uleb128 (ib);
651 if (tag == LTO_cgraph_edge)
652 input_edge (ib, nodes);
655 node = input_node (file_data, ib, tag);
656 if (node == NULL || node->decl == NULL_TREE)
657 internal_error ("bytecode stream: found empty cgraph node");
658 VEC_safe_push (cgraph_node_ptr, heap, nodes, node);
659 lto_cgraph_encoder_encode (file_data->cgraph_node_encoder, node);
662 tag = (enum LTO_cgraph_tags) lto_input_uleb128 (ib);
665 /* Input toplevel asms. */
666 len = lto_input_uleb128 (ib);
669 char *str = (char *)xmalloc (len + 1);
670 for (i = 0; i < len; ++i)
671 str[i] = lto_input_1_unsigned (ib);
672 cgraph_add_asm_node (build_string (len, str));
675 len = lto_input_uleb128 (ib);
678 for (i = 0; VEC_iterate (cgraph_node_ptr, nodes, i, node); i++)
680 const int ref = (int) (intptr_t) node->global.inlined_to;
682 /* Fixup inlined_to from reference to pointer. */
683 if (ref != LCC_NOT_FOUND)
684 node->global.inlined_to = VEC_index (cgraph_node_ptr, nodes, ref);
686 node->global.inlined_to = NULL;
689 VEC_free (cgraph_node_ptr, heap, nodes);
692 static struct gcov_ctr_summary lto_gcov_summary;
694 /* Input profile_info from IB. */
696 input_profile_summary (struct lto_input_block *ib)
698 unsigned int runs = lto_input_uleb128 (ib);
703 profile_info = <o_gcov_summary;
704 lto_gcov_summary.runs = runs;
705 lto_gcov_summary.sum_all = lto_input_sleb128 (ib);
706 lto_gcov_summary.run_max = lto_input_sleb128 (ib);
707 lto_gcov_summary.sum_max = lto_input_sleb128 (ib);
709 /* We can support this by scaling all counts to nearest common multiple
710 of all different runs, but it is perhaps not worth the effort. */
711 else if (profile_info->runs != runs
712 || profile_info->sum_all != lto_input_sleb128 (ib)
713 || profile_info->run_max != lto_input_sleb128 (ib)
714 || profile_info->sum_max != lto_input_sleb128 (ib))
715 sorry ("Combining units with different profiles is not supported.");
716 /* We allow some units to have profile and other to not have one. This will
717 just make unprofiled units to be size optimized that is sane. */
722 /* Input and merge the cgraph from each of the .o files passed to
728 struct lto_file_decl_data **file_data_vec = lto_get_file_decl_data ();
729 struct lto_file_decl_data *file_data;
731 struct cgraph_node *node;
733 while ((file_data = file_data_vec[j++]))
737 struct lto_input_block *ib;
739 ib = lto_create_simple_input_block (file_data, LTO_section_cgraph,
741 input_profile_summary (ib);
742 file_data->cgraph_node_encoder = lto_cgraph_encoder_new ();
743 input_cgraph_1 (file_data, ib);
744 lto_destroy_simple_input_block (file_data, LTO_section_cgraph,
747 /* Assume that every file read needs to be processed by LTRANS. */
749 lto_mark_file_for_ltrans (file_data);
752 /* Clear out the aux field that was used to store enough state to
753 tell which nodes should be overwritten. */
754 for (node = cgraph_nodes; node; node = node->next)
756 /* Some nodes may have been created by cgraph_node. This
757 happens when the callgraph contains nested functions. If the
758 node for the parent function was never emitted to the gimple
759 file, cgraph_node will create a node for it when setting the
760 context of the nested function. */
761 if (node->local.lto_file_data)