Update gcc-50 to SVN version 221261
[dragonfly.git] / contrib / gcc-5.0 / gcc / cgraph.h
1 /* Callgraph handling code.
2    Copyright (C) 2003-2015 Free Software Foundation, Inc.
3    Contributed by Jan Hubicka
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20
21 #ifndef GCC_CGRAPH_H
22 #define GCC_CGRAPH_H
23
24
25 /* Symbol table consists of functions and variables.
26    TODO: add labels and CONST_DECLs.  */
27 enum symtab_type
28 {
29   SYMTAB_SYMBOL,
30   SYMTAB_FUNCTION,
31   SYMTAB_VARIABLE
32 };
33
34 /* Section names are stored as reference counted strings in GGC safe hashtable
35    (to make them survive through PCH).  */
36
37 struct GTY((for_user)) section_hash_entry_d
38 {
39   int ref_count;
40   char *name;  /* As long as this datastructure stays in GGC, we can not put
41                   string at the tail of structure of GGC dies in horrible
42                   way  */
43 };
44
45 typedef struct section_hash_entry_d section_hash_entry;
46
47 struct section_name_hasher : ggc_hasher<section_hash_entry *>
48 {
49   typedef const char *compare_type;
50
51   static hashval_t hash (section_hash_entry *);
52   static bool equal (section_hash_entry *, const char *);
53 };
54
55 enum availability
56 {
57   /* Not yet set by cgraph_function_body_availability.  */
58   AVAIL_UNSET,
59   /* Function body/variable initializer is unknown.  */
60   AVAIL_NOT_AVAILABLE,
61   /* Function body/variable initializer is known but might be replaced
62      by a different one from other compilation unit and thus needs to
63      be dealt with a care.  Like AVAIL_NOT_AVAILABLE it can have
64      arbitrary side effects on escaping variables and functions, while
65      like AVAILABLE it might access static variables.  */
66   AVAIL_INTERPOSABLE,
67   /* Function body/variable initializer is known and will be used in final
68      program.  */
69   AVAIL_AVAILABLE,
70   /* Function body/variable initializer is known and all it's uses are
71      explicitly visible within current unit (ie it's address is never taken and
72      it is not exported to other units). Currently used only for functions.  */
73   AVAIL_LOCAL
74 };
75
76 /* Classification of symbols WRT partitioning.  */
77 enum symbol_partitioning_class
78 {
79    /* External declarations are ignored by partitioning algorithms and they are
80       added into the boundary later via compute_ltrans_boundary.  */
81    SYMBOL_EXTERNAL,
82    /* Partitioned symbols are pur into one of partitions.  */
83    SYMBOL_PARTITION,
84    /* Duplicated symbols (such as comdat or constant pool references) are
85       copied into every node needing them via add_symbol_to_partition.  */
86    SYMBOL_DUPLICATE
87 };
88
89 /* Base of all entries in the symbol table.
90    The symtab_node is inherited by cgraph and varpol nodes.  */
91 class GTY((desc ("%h.type"), tag ("SYMTAB_SYMBOL"),
92            chain_next ("%h.next"), chain_prev ("%h.previous")))
93   symtab_node
94 {
95 public:
96   /* Return name.  */
97   const char *name () const;
98
99   /* Return asm name.  */
100   const char * asm_name () const;
101
102   /* Add node into symbol table.  This function is not used directly, but via
103      cgraph/varpool node creation routines.  */
104   void register_symbol (void);
105
106   /* Remove symbol from symbol table.  */
107   void remove (void);
108
109   /* Dump symtab node to F.  */
110   void dump (FILE *f);
111
112   /* Dump symtab node to stderr.  */
113   void DEBUG_FUNCTION debug (void);
114
115   /* Verify consistency of node.  */
116   void DEBUG_FUNCTION verify (void);
117
118   /* Return ipa reference from this symtab_node to
119      REFERED_NODE or REFERED_VARPOOL_NODE. USE_TYPE specify type
120      of the use and STMT the statement (if it exists).  */
121   ipa_ref *create_reference (symtab_node *referred_node,
122                              enum ipa_ref_use use_type);
123
124   /* Return ipa reference from this symtab_node to
125      REFERED_NODE or REFERED_VARPOOL_NODE. USE_TYPE specify type
126      of the use and STMT the statement (if it exists).  */
127   ipa_ref *create_reference (symtab_node *referred_node,
128                              enum ipa_ref_use use_type, gimple stmt);
129
130   /* If VAL is a reference to a function or a variable, add a reference from
131      this symtab_node to the corresponding symbol table node.  USE_TYPE specify
132      type of the use and STMT the statement (if it exists).  Return the new
133      reference or NULL if none was created.  */
134   ipa_ref *maybe_create_reference (tree val, enum ipa_ref_use use_type,
135                                    gimple stmt);
136
137   /* Clone all references from symtab NODE to this symtab_node.  */
138   void clone_references (symtab_node *node);
139
140   /* Remove all stmt references in non-speculative references.
141      Those are not maintained during inlining & clonning.
142      The exception are speculative references that are updated along
143      with callgraph edges associated with them.  */
144   void clone_referring (symtab_node *node);
145
146   /* Clone reference REF to this symtab_node and set its stmt to STMT.  */
147   ipa_ref *clone_reference (ipa_ref *ref, gimple stmt);
148
149   /* Find the structure describing a reference to REFERRED_NODE
150      and associated with statement STMT.  */
151   ipa_ref *find_reference (symtab_node *referred_node, gimple stmt,
152                            unsigned int lto_stmt_uid);
153
154   /* Remove all references that are associated with statement STMT.  */
155   void remove_stmt_references (gimple stmt);
156
157   /* Remove all stmt references in non-speculative references.
158      Those are not maintained during inlining & clonning.
159      The exception are speculative references that are updated along
160      with callgraph edges associated with them.  */
161   void clear_stmts_in_references (void);
162
163   /* Remove all references in ref list.  */
164   void remove_all_references (void);
165
166   /* Remove all referring items in ref list.  */
167   void remove_all_referring (void);
168
169   /* Dump references in ref list to FILE.  */
170   void dump_references (FILE *file);
171
172   /* Dump referring in list to FILE.  */
173   void dump_referring (FILE *);
174
175   /* Get number of references for this node.  */
176   inline unsigned num_references (void)
177   {
178     return ref_list.references ? ref_list.references->length () : 0;
179   }
180
181   /* Iterates I-th reference in the list, REF is also set.  */
182   ipa_ref *iterate_reference (unsigned i, ipa_ref *&ref);
183
184   /* Iterates I-th referring item in the list, REF is also set.  */
185   ipa_ref *iterate_referring (unsigned i, ipa_ref *&ref);
186
187   /* Iterates I-th referring alias item in the list, REF is also set.  */
188   ipa_ref *iterate_direct_aliases (unsigned i, ipa_ref *&ref);
189
190   /* Return true if symtab node and TARGET represents
191      semantically equivalent symbols.  */
192   bool semantically_equivalent_p (symtab_node *target);
193
194   /* Classify symbol symtab node for partitioning.  */
195   enum symbol_partitioning_class get_partitioning_class (void);
196
197   /* Return comdat group.  */
198   tree get_comdat_group ()
199     {
200       return x_comdat_group;
201     }
202
203   /* Return comdat group as identifier_node.  */
204   tree get_comdat_group_id ()
205     {
206       if (x_comdat_group && TREE_CODE (x_comdat_group) != IDENTIFIER_NODE)
207         x_comdat_group = DECL_ASSEMBLER_NAME (x_comdat_group);
208       return x_comdat_group;
209     }
210
211   /* Set comdat group.  */
212   void set_comdat_group (tree group)
213     {
214       gcc_checking_assert (!group || TREE_CODE (group) == IDENTIFIER_NODE
215                            || DECL_P (group));
216       x_comdat_group = group;
217     }
218
219   /* Return section as string.  */
220   const char * get_section ()
221     {
222       if (!x_section)
223         return NULL;
224       return x_section->name;
225     }
226
227   /* Remove node from same comdat group.   */
228   void remove_from_same_comdat_group (void);
229
230   /* Add this symtab_node to the same comdat group that OLD is in.  */
231   void add_to_same_comdat_group (symtab_node *old_node);
232
233   /* Dissolve the same_comdat_group list in which NODE resides.  */
234   void dissolve_same_comdat_group_list (void);
235
236   /* Return true when symtab_node is known to be used from other (non-LTO)
237      object file. Known only when doing LTO via linker plugin.  */
238   bool used_from_object_file_p (void);
239
240   /* Walk the alias chain to return the symbol NODE is alias of.
241      If NODE is not an alias, return NODE.
242      When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
243   symtab_node *ultimate_alias_target (enum availability *avail = NULL);
244
245   /* Return next reachable static symbol with initializer after NODE.  */
246   inline symtab_node *next_defined_symbol (void);
247
248   /* Add reference recording that symtab node is alias of TARGET.
249      The function can fail in the case of aliasing cycles; in this case
250      it returns false.  */
251   bool resolve_alias (symtab_node *target);
252
253   /* C++ FE sometimes change linkage flags after producing same
254      body aliases.  */
255   void fixup_same_cpp_alias_visibility (symtab_node *target);
256
257   /* Call callback on symtab node and aliases associated to this node.
258      When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
259      skipped.  */
260   bool call_for_symbol_and_aliases (bool (*callback) (symtab_node *, void *),
261                                     void *data,
262                                     bool include_overwrite);
263
264   /* If node can not be interposable by static or dynamic linker to point to
265      different definition, return this symbol. Otherwise look for alias with
266      such property and if none exists, introduce new one.  */
267   symtab_node *noninterposable_alias (void);
268
269   /* Return node that alias is aliasing.  */
270   inline symtab_node *get_alias_target (void);
271
272   /* Set section for symbol and its aliases.  */
273   void set_section (const char *section);
274
275   /* Set section, do not recurse into aliases.
276      When one wants to change section of symbol and its aliases,
277      use set_section.  */
278   void set_section_for_node (const char *section);
279
280   /* Set initialization priority to PRIORITY.  */
281   void set_init_priority (priority_type priority);
282
283   /* Return the initialization priority.  */
284   priority_type get_init_priority ();
285
286   /* Return availability of NODE.  */
287   enum availability get_availability (void);
288
289   /* Make DECL local.  */
290   void make_decl_local (void);
291
292   /* Return true if list contains an alias.  */
293   bool has_aliases_p (void);
294
295   /* Return true when the symbol is real symbol, i.e. it is not inline clone
296      or abstract function kept for debug info purposes only.  */
297   bool real_symbol_p (void);
298
299   /* Determine if symbol declaration is needed.  That is, visible to something
300      either outside this translation unit, something magic in the system
301      configury. This function is used just during symbol creation.  */
302   bool needed_p (void);
303
304   /* Return true when there are references to the node.  */
305   bool referred_to_p (void);
306
307   /* Return true if NODE can be discarded by linker from the binary.  */
308   inline bool
309   can_be_discarded_p (void)
310   {
311     return (DECL_EXTERNAL (decl)
312             || (get_comdat_group ()
313                 && resolution != LDPR_PREVAILING_DEF
314                 && resolution != LDPR_PREVAILING_DEF_IRONLY
315                 && resolution != LDPR_PREVAILING_DEF_IRONLY_EXP));
316   }
317
318   /* Return true if NODE is local to a particular COMDAT group, and must not
319      be named from outside the COMDAT.  This is used for C++ decloned
320      constructors.  */
321   inline bool comdat_local_p (void)
322   {
323     return (same_comdat_group && !TREE_PUBLIC (decl));
324   }
325
326   /* Return true if ONE and TWO are part of the same COMDAT group.  */
327   inline bool in_same_comdat_group_p (symtab_node *target);
328
329   /* Return true if symbol is known to be nonzero.  */
330   bool nonzero_address ();
331
332   /* Return 0 if symbol is known to have different address than S2,
333      Return 1 if symbol is known to have same address as S2,
334      return 2 otherwise.   */
335   int equal_address_to (symtab_node *s2);
336
337   /* Return true if symbol's address may possibly be compared to other
338      symbol's address.  */
339   bool address_matters_p ();
340
341   /* Return true if NODE's address can be compared.  This use properties
342      of NODE only and does not look if the address is actually taken in
343      interesting way.  For that use ADDRESS_MATTERS_P instead.  */
344   bool address_can_be_compared_p (void);
345
346   /* Return symbol table node associated with DECL, if any,
347      and NULL otherwise.  */
348   static inline symtab_node *get (const_tree decl)
349   {
350 #ifdef ENABLE_CHECKING
351     /* Check that we are called for sane type of object - functions
352        and static or external variables.  */
353     gcc_checking_assert (TREE_CODE (decl) == FUNCTION_DECL
354                          || (TREE_CODE (decl) == VAR_DECL
355                              && (TREE_STATIC (decl) || DECL_EXTERNAL (decl)
356                                  || in_lto_p)));
357     /* Check that the mapping is sane - perhaps this check can go away,
358        but at the moment frontends tends to corrupt the mapping by calling
359        memcpy/memset on the tree nodes.  */
360     gcc_checking_assert (!decl->decl_with_vis.symtab_node
361                          || decl->decl_with_vis.symtab_node->decl == decl);
362 #endif
363     return decl->decl_with_vis.symtab_node;
364   }
365
366   /* Try to find a symtab node for declaration DECL and if it does not
367      exist or if it corresponds to an inline clone, create a new one.  */
368   static inline symtab_node * get_create (tree node);
369
370   /* Return the cgraph node that has ASMNAME for its DECL_ASSEMBLER_NAME.
371      Return NULL if there's no such node.  */
372   static symtab_node *get_for_asmname (const_tree asmname);
373
374   /* Dump symbol table to F.  */
375   static void dump_table (FILE *);
376
377   /* Dump symbol table to stderr.  */
378   static inline DEBUG_FUNCTION void debug_symtab (void)
379   {
380     dump_table (stderr);
381   }
382
383   /* Verify symbol table for internal consistency.  */
384   static DEBUG_FUNCTION void verify_symtab_nodes (void);
385
386   /* Type of the symbol.  */
387   ENUM_BITFIELD (symtab_type) type : 8;
388
389   /* The symbols resolution.  */
390   ENUM_BITFIELD (ld_plugin_symbol_resolution) resolution : 8;
391
392   /*** Flags representing the symbol type.  ***/
393
394   /* True when symbol corresponds to a definition in current unit.
395      set via finalize_function or finalize_decl  */
396   unsigned definition : 1;
397   /* True when symbol is an alias.
398      Set by ssemble_alias.  */
399   unsigned alias : 1;
400   /* True when alias is a weakref.  */
401   unsigned weakref : 1;
402   /* C++ frontend produce same body aliases and extra name aliases for
403      virtual functions and vtables that are obviously equivalent.
404      Those aliases are bit special, especially because C++ frontend
405      visibility code is so ugly it can not get them right at first time
406      and their visibility needs to be copied from their "masters" at
407      the end of parsing.  */
408   unsigned cpp_implicit_alias : 1;
409   /* Set once the definition was analyzed.  The list of references and
410      other properties are built during analysis.  */
411   unsigned analyzed : 1;
412   /* Set for write-only variables.  */
413   unsigned writeonly : 1;
414   /* Visibility of symbol was used for further optimization; do not
415      permit further changes.  */
416   unsigned refuse_visibility_changes : 1;
417
418   /*** Visibility and linkage flags.  ***/
419
420   /* Set when function is visible by other units.  */
421   unsigned externally_visible : 1;
422   /* Don't reorder to other symbols having this set.  */
423   unsigned no_reorder : 1;
424   /* The symbol will be assumed to be used in an invisible way (like
425      by an toplevel asm statement).  */
426   unsigned force_output : 1;
427   /* Like FORCE_OUTPUT, but in the case it is ABI requiring the symbol to be
428      exported.  Unlike FORCE_OUTPUT this flag gets cleared to symbols promoted
429      to static and it does not inhibit optimization.  */
430   unsigned forced_by_abi : 1;
431   /* True when the name is known to be unique and thus it does not need mangling.  */
432   unsigned unique_name : 1;
433   /* Specify whether the section was set by user or by
434      compiler via -ffunction-sections.  */
435   unsigned implicit_section : 1;
436   /* True when body and other characteristics have been removed by
437      symtab_remove_unreachable_nodes. */
438   unsigned body_removed : 1;
439
440   /*** WHOPR Partitioning flags.
441        These flags are used at ltrans stage when only part of the callgraph is
442        available. ***/
443
444   /* Set when variable is used from other LTRANS partition.  */
445   unsigned used_from_other_partition : 1;
446   /* Set when function is available in the other LTRANS partition.
447      During WPA output it is used to mark nodes that are present in
448      multiple partitions.  */
449   unsigned in_other_partition : 1;
450
451
452
453   /*** other flags.  ***/
454
455   /* Set when symbol has address taken. */
456   unsigned address_taken : 1;
457   /* Set when init priority is set.  */
458   unsigned in_init_priority_hash : 1;
459
460   /* Set when symbol needs to be streamed into LTO bytecode for LTO, or in case
461      of offloading, for separate compilation for a different target.  */
462   unsigned need_lto_streaming : 1;
463
464   /* Set when symbol can be streamed into bytecode for offloading.  */
465   unsigned offloadable : 1;
466
467
468   /* Ordering of all symtab entries.  */
469   int order;
470
471   /* Declaration representing the symbol.  */
472   tree decl;
473
474   /* Linked list of symbol table entries starting with symtab_nodes.  */
475   symtab_node *next;
476   symtab_node *previous;
477
478   /* Linked list of symbols with the same asm name.  There may be multiple
479      entries for single symbol name during LTO, because symbols are renamed
480      only after partitioning.
481
482      Because inline clones are kept in the assembler name has, they also produce
483      duplicate entries.
484
485      There are also several long standing bugs where frontends and builtin
486      code produce duplicated decls.  */
487   symtab_node *next_sharing_asm_name;
488   symtab_node *previous_sharing_asm_name;
489
490   /* Circular list of nodes in the same comdat group if non-NULL.  */
491   symtab_node *same_comdat_group;
492
493   /* Vectors of referring and referenced entities.  */
494   ipa_ref_list ref_list;
495
496   /* Alias target. May be either DECL pointer or ASSEMBLER_NAME pointer
497      depending to what was known to frontend on the creation time.
498      Once alias is resolved, this pointer become NULL.  */
499   tree alias_target;
500
501   /* File stream where this node is being written to.  */
502   struct lto_file_decl_data * lto_file_data;
503
504   PTR GTY ((skip)) aux;
505
506   /* Comdat group the symbol is in.  Can be private if GGC allowed that.  */
507   tree x_comdat_group;
508
509   /* Section name. Again can be private, if allowed.  */
510   section_hash_entry *x_section;
511
512 protected:
513   /* Dump base fields of symtab nodes to F.  Not to be used directly.  */
514   void dump_base (FILE *);
515
516   /* Verify common part of symtab node.  */
517   bool DEBUG_FUNCTION verify_base (void);
518
519   /* Remove node from symbol table.  This function is not used directly, but via
520      cgraph/varpool node removal routines.  */
521   void unregister (void);
522
523   /* Return the initialization and finalization priority information for
524      DECL.  If there is no previous priority information, a freshly
525      allocated structure is returned.  */
526   struct symbol_priority_map *priority_info (void);
527
528   /* Worker for call_for_symbol_and_aliases_1.  */
529   bool call_for_symbol_and_aliases_1 (bool (*callback) (symtab_node *, void *),
530                                       void *data,
531                                       bool include_overwrite);
532 private:
533   /* Worker for set_section.  */
534   static bool set_section (symtab_node *n, void *s);
535
536   /* Worker for symtab_resolve_alias.  */
537   static bool set_implicit_section (symtab_node *n, void *);
538
539   /* Worker searching noninterposable alias.  */
540   static bool noninterposable_alias (symtab_node *node, void *data);
541
542   /* Worker for ultimate_alias_target.  */
543   symtab_node *ultimate_alias_target_1 (enum availability *avail = NULL);
544 };
545
546 /* Walk all aliases for NODE.  */
547 #define FOR_EACH_ALIAS(node, alias) \
548   for (unsigned x_i = 0; node->iterate_direct_aliases (x_i, alias); x_i++)
549
550 /* This is the information that is put into the cgraph local structure
551    to recover a function.  */
552 struct lto_file_decl_data;
553
554 extern const char * const cgraph_availability_names[];
555 extern const char * const ld_plugin_symbol_resolution_names[];
556 extern const char * const tls_model_names[];
557
558 /* Information about thunk, used only for same body aliases.  */
559
560 struct GTY(()) cgraph_thunk_info {
561   /* Information about the thunk.  */
562   HOST_WIDE_INT fixed_offset;
563   HOST_WIDE_INT virtual_value;
564   tree alias;
565   bool this_adjusting;
566   bool virtual_offset_p;
567   bool add_pointer_bounds_args;
568   /* Set to true when alias node is thunk.  */
569   bool thunk_p;
570 };
571
572 /* Information about the function collected locally.
573    Available after function is analyzed.  */
574
575 struct GTY(()) cgraph_local_info {
576   /* Set when function function is visible in current compilation unit only
577      and its address is never taken.  */
578   unsigned local : 1;
579
580   /* False when there is something makes versioning impossible.  */
581   unsigned versionable : 1;
582
583   /* False when function calling convention and signature can not be changed.
584      This is the case when __builtin_apply_args is used.  */
585   unsigned can_change_signature : 1;
586
587   /* True when the function has been originally extern inline, but it is
588      redefined now.  */
589   unsigned redefined_extern_inline : 1;
590
591   /* True if the function may enter serial irrevocable mode.  */
592   unsigned tm_may_enter_irr : 1;
593 };
594
595 /* Information about the function that needs to be computed globally
596    once compilation is finished.  Available only with -funit-at-a-time.  */
597
598 struct GTY(()) cgraph_global_info {
599   /* For inline clones this points to the function they will be
600      inlined into.  */
601   cgraph_node *inlined_to;
602 };
603
604 /* Information about the function that is propagated by the RTL backend.
605    Available only for functions that has been already assembled.  */
606
607 struct GTY(()) cgraph_rtl_info {
608    unsigned int preferred_incoming_stack_boundary;
609
610   /* Call unsaved hard registers really used by the corresponding
611      function (including ones used by functions called by the
612      function).  */
613   HARD_REG_SET function_used_regs;
614   /* Set if function_used_regs is valid.  */
615   unsigned function_used_regs_valid: 1;
616 };
617
618 /* Represent which DECL tree (or reference to such tree)
619    will be replaced by another tree while versioning.  */
620 struct GTY(()) ipa_replace_map
621 {
622   /* The tree that will be replaced.  */
623   tree old_tree;
624   /* The new (replacing) tree.  */
625   tree new_tree;
626   /* Parameter number to replace, when old_tree is NULL.  */
627   int parm_num;
628   /* True when a substitution should be done, false otherwise.  */
629   bool replace_p;
630   /* True when we replace a reference to old_tree.  */
631   bool ref_p;
632 };
633
634 struct GTY(()) cgraph_clone_info
635 {
636   vec<ipa_replace_map *, va_gc> *tree_map;
637   bitmap args_to_skip;
638   bitmap combined_args_to_skip;
639 };
640
641 enum cgraph_simd_clone_arg_type
642 {
643   SIMD_CLONE_ARG_TYPE_VECTOR,
644   SIMD_CLONE_ARG_TYPE_UNIFORM,
645   SIMD_CLONE_ARG_TYPE_LINEAR_CONSTANT_STEP,
646   SIMD_CLONE_ARG_TYPE_LINEAR_VARIABLE_STEP,
647   SIMD_CLONE_ARG_TYPE_MASK
648 };
649
650 /* Function arguments in the original function of a SIMD clone.
651    Supplementary data for `struct simd_clone'.  */
652
653 struct GTY(()) cgraph_simd_clone_arg {
654   /* Original function argument as it originally existed in
655      DECL_ARGUMENTS.  */
656   tree orig_arg;
657
658   /* orig_arg's function (or for extern functions type from
659      TYPE_ARG_TYPES).  */
660   tree orig_type;
661
662   /* If argument is a vector, this holds the vector version of
663      orig_arg that after adjusting the argument types will live in
664      DECL_ARGUMENTS.  Otherwise, this is NULL.
665
666      This basically holds:
667        vector(simdlen) __typeof__(orig_arg) new_arg.  */
668   tree vector_arg;
669
670   /* vector_arg's type (or for extern functions new vector type.  */
671   tree vector_type;
672
673   /* If argument is a vector, this holds the array where the simd
674      argument is held while executing the simd clone function.  This
675      is a local variable in the cloned function.  Its content is
676      copied from vector_arg upon entry to the clone.
677
678      This basically holds:
679        __typeof__(orig_arg) simd_array[simdlen].  */
680   tree simd_array;
681
682   /* A SIMD clone's argument can be either linear (constant or
683      variable), uniform, or vector.  */
684   enum cgraph_simd_clone_arg_type arg_type;
685
686   /* For arg_type SIMD_CLONE_ARG_TYPE_LINEAR_CONSTANT_STEP this is
687      the constant linear step, if arg_type is
688      SIMD_CLONE_ARG_TYPE_LINEAR_VARIABLE_STEP, this is index of
689      the uniform argument holding the step, otherwise 0.  */
690   HOST_WIDE_INT linear_step;
691
692   /* Variable alignment if available, otherwise 0.  */
693   unsigned int alignment;
694 };
695
696 /* Specific data for a SIMD function clone.  */
697
698 struct GTY(()) cgraph_simd_clone {
699   /* Number of words in the SIMD lane associated with this clone.  */
700   unsigned int simdlen;
701
702   /* Number of annotated function arguments in `args'.  This is
703      usually the number of named arguments in FNDECL.  */
704   unsigned int nargs;
705
706   /* Max hardware vector size in bits for integral vectors.  */
707   unsigned int vecsize_int;
708
709   /* Max hardware vector size in bits for floating point vectors.  */
710   unsigned int vecsize_float;
711
712   /* The mangling character for a given vector size.  This is is used
713      to determine the ISA mangling bit as specified in the Intel
714      Vector ABI.  */
715   unsigned char vecsize_mangle;
716
717   /* True if this is the masked, in-branch version of the clone,
718      otherwise false.  */
719   unsigned int inbranch : 1;
720
721   /* True if this is a Cilk Plus variant.  */
722   unsigned int cilk_elemental : 1;
723
724   /* Doubly linked list of SIMD clones.  */
725   cgraph_node *prev_clone, *next_clone;
726
727   /* Original cgraph node the SIMD clones were created for.  */
728   cgraph_node *origin;
729
730   /* Annotated function arguments for the original function.  */
731   cgraph_simd_clone_arg GTY((length ("%h.nargs"))) args[1];
732 };
733
734 /* Function Multiversioning info.  */
735 struct GTY((for_user)) cgraph_function_version_info {
736   /* The cgraph_node for which the function version info is stored.  */
737   cgraph_node *this_node;
738   /* Chains all the semantically identical function versions.  The
739      first function in this chain is the version_info node of the
740      default function.  */
741   cgraph_function_version_info *prev;
742   /* If this version node corresponds to a dispatcher for function
743      versions, this points to the version info node of the default
744      function, the first node in the chain.  */
745   cgraph_function_version_info *next;
746   /* If this node corresponds to a function version, this points
747      to the dispatcher function decl, which is the function that must
748      be called to execute the right function version at run-time.
749
750      If this cgraph node is a dispatcher (if dispatcher_function is
751      true, in the cgraph_node struct) for function versions, this
752      points to resolver function, which holds the function body of the
753      dispatcher. The dispatcher decl is an alias to the resolver
754      function decl.  */
755   tree dispatcher_resolver;
756 };
757
758 #define DEFCIFCODE(code, type, string)  CIF_ ## code,
759 /* Reasons for inlining failures.  */
760
761 enum cgraph_inline_failed_t {
762 #include "cif-code.def"
763   CIF_N_REASONS
764 };
765
766 enum cgraph_inline_failed_type_t
767 {
768   CIF_FINAL_NORMAL = 0,
769   CIF_FINAL_ERROR
770 };
771
772 struct cgraph_edge;
773
774 struct cgraph_edge_hasher : ggc_hasher<cgraph_edge *>
775 {
776   typedef gimple compare_type;
777
778   static hashval_t hash (cgraph_edge *);
779   static bool equal (cgraph_edge *, gimple);
780 };
781
782 /* The cgraph data structure.
783    Each function decl has assigned cgraph_node listing callees and callers.  */
784
785 struct GTY((tag ("SYMTAB_FUNCTION"))) cgraph_node : public symtab_node {
786 public:
787   /* Remove the node from cgraph and all inline clones inlined into it.
788      Skip however removal of FORBIDDEN_NODE and return true if it needs to be
789      removed.  This allows to call the function from outer loop walking clone
790      tree.  */
791   bool remove_symbol_and_inline_clones (cgraph_node *forbidden_node = NULL);
792
793   /* Record all references from cgraph_node that are taken
794      in statement STMT.  */
795   void record_stmt_references (gimple stmt);
796
797   /* Like cgraph_set_call_stmt but walk the clone tree and update all
798      clones sharing the same function body.
799      When WHOLE_SPECULATIVE_EDGES is true, all three components of
800      speculative edge gets updated.  Otherwise we update only direct
801      call.  */
802   void set_call_stmt_including_clones (gimple old_stmt, gcall *new_stmt,
803                                        bool update_speculative = true);
804
805   /* Walk the alias chain to return the function cgraph_node is alias of.
806      Walk through thunk, too.
807      When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
808   cgraph_node *function_symbol (enum availability *avail = NULL);
809
810   /* Walk the alias chain to return the function cgraph_node is alias of.
811      Walk through non virtual thunks, too.  Thus we return either a function
812      or a virtual thunk node.
813      When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
814   cgraph_node *function_or_virtual_thunk_symbol
815                                 (enum availability *avail = NULL);
816
817   /* Create node representing clone of N executed COUNT times.  Decrease
818      the execution counts from original node too.
819      The new clone will have decl set to DECL that may or may not be the same
820      as decl of N.
821
822      When UPDATE_ORIGINAL is true, the counts are subtracted from the original
823      function's profile to reflect the fact that part of execution is handled
824      by node.
825      When CALL_DUPLICATOIN_HOOK is true, the ipa passes are acknowledged about
826      the new clone. Otherwise the caller is responsible for doing so later.
827
828      If the new node is being inlined into another one, NEW_INLINED_TO should be
829      the outline function the new one is (even indirectly) inlined to.
830      All hooks will see this in node's global.inlined_to, when invoked.
831      Can be NULL if the node is not inlined.  */
832   cgraph_node *create_clone (tree decl, gcov_type count, int freq,
833                              bool update_original,
834                              vec<cgraph_edge *> redirect_callers,
835                              bool call_duplication_hook,
836                              cgraph_node *new_inlined_to,
837                              bitmap args_to_skip);
838
839   /* Create callgraph node clone with new declaration.  The actual body will
840      be copied later at compilation stage.  */
841   cgraph_node *create_virtual_clone (vec<cgraph_edge *> redirect_callers,
842                                      vec<ipa_replace_map *, va_gc> *tree_map,
843                                      bitmap args_to_skip, const char * suffix);
844
845   /* cgraph node being removed from symbol table; see if its entry can be
846    replaced by other inline clone.  */
847   cgraph_node *find_replacement (void);
848
849   /* Create a new cgraph node which is the new version of
850      callgraph node.  REDIRECT_CALLERS holds the callers
851      edges which should be redirected to point to
852      NEW_VERSION.  ALL the callees edges of the node
853      are cloned to the new version node.  Return the new
854      version node.
855
856      If non-NULL BLOCK_TO_COPY determine what basic blocks
857      was copied to prevent duplications of calls that are dead
858      in the clone.  */
859
860   cgraph_node *create_version_clone (tree new_decl,
861                                     vec<cgraph_edge *> redirect_callers,
862                                     bitmap bbs_to_copy);
863
864   /* Perform function versioning.
865      Function versioning includes copying of the tree and
866      a callgraph update (creating a new cgraph node and updating
867      its callees and callers).
868
869      REDIRECT_CALLERS varray includes the edges to be redirected
870      to the new version.
871
872      TREE_MAP is a mapping of tree nodes we want to replace with
873      new ones (according to results of prior analysis).
874
875      If non-NULL ARGS_TO_SKIP determine function parameters to remove
876      from new version.
877      If SKIP_RETURN is true, the new version will return void.
878      If non-NULL BLOCK_TO_COPY determine what basic blocks to copy.
879      If non_NULL NEW_ENTRY determine new entry BB of the clone.
880
881      Return the new version's cgraph node.  */
882   cgraph_node *create_version_clone_with_body
883     (vec<cgraph_edge *> redirect_callers,
884      vec<ipa_replace_map *, va_gc> *tree_map, bitmap args_to_skip,
885      bool skip_return, bitmap bbs_to_copy, basic_block new_entry_block,
886      const char *clone_name);
887
888   /* Insert a new cgraph_function_version_info node into cgraph_fnver_htab
889      corresponding to cgraph_node.  */
890   cgraph_function_version_info *insert_new_function_version (void);
891
892   /* Get the cgraph_function_version_info node corresponding to node.  */
893   cgraph_function_version_info *function_version (void);
894
895   /* Discover all functions and variables that are trivially needed, analyze
896      them as well as all functions and variables referred by them  */
897   void analyze (void);
898
899   /* Add thunk alias into callgraph.  The alias declaration is ALIAS and it
900      aliases DECL with an adjustments made into the first parameter.
901      See comments in thunk_adjust for detail on the parameters.  */
902   cgraph_node * create_thunk (tree alias, tree, bool this_adjusting,
903                               HOST_WIDE_INT fixed_offset,
904                               HOST_WIDE_INT virtual_value,
905                               tree virtual_offset,
906                               tree real_alias);
907
908
909   /* Return node that alias is aliasing.  */
910   inline cgraph_node *get_alias_target (void);
911
912   /* Given function symbol, walk the alias chain to return the function node
913      is alias of. Do not walk through thunks.
914      When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
915
916   cgraph_node *ultimate_alias_target (availability *availability = NULL);
917
918   /* Expand thunk NODE to gimple if possible.
919      When FORCE_GIMPLE_THUNK is true, gimple thunk is created and
920      no assembler is produced.
921      When OUTPUT_ASM_THUNK is true, also produce assembler for
922      thunks that are not lowered.  */
923   bool expand_thunk (bool output_asm_thunks, bool force_gimple_thunk);
924
925   /*  Call expand_thunk on all callers that are thunks and analyze those
926       nodes that were expanded.  */
927   void expand_all_artificial_thunks ();
928
929   /* Assemble thunks and aliases associated to node.  */
930   void assemble_thunks_and_aliases (void);
931
932   /* Expand function specified by node.  */
933   void expand (void);
934
935   /* As an GCC extension we allow redefinition of the function.  The
936      semantics when both copies of bodies differ is not well defined.
937      We replace the old body with new body so in unit at a time mode
938      we always use new body, while in normal mode we may end up with
939      old body inlined into some functions and new body expanded and
940      inlined in others.  */
941   void reset (void);
942
943   /* Creates a wrapper from cgraph_node to TARGET node. Thunk is used for this
944      kind of wrapper method.  */
945   void create_wrapper (cgraph_node *target);
946
947   /* Verify cgraph nodes of the cgraph node.  */
948   void DEBUG_FUNCTION verify_node (void);
949
950   /* Remove function from symbol table.  */
951   void remove (void);
952
953   /* Dump call graph node to file F.  */
954   void dump (FILE *f);
955
956   /* Dump call graph node to stderr.  */
957   void DEBUG_FUNCTION debug (void);
958
959   /* When doing LTO, read cgraph_node's body from disk if it is not already
960      present.  */
961   bool get_untransformed_body (void);
962
963   /* Prepare function body.  When doing LTO, read cgraph_node's body from disk 
964      if it is not already present.  When some IPA transformations are scheduled,
965      apply them.  */
966   bool get_body (void);
967
968   /* Release memory used to represent body of function.
969      Use this only for functions that are released before being translated to
970      target code (i.e. RTL).  Functions that are compiled to RTL and beyond
971      are free'd in final.c via free_after_compilation().  */
972   void release_body (bool keep_arguments = false);
973
974   /* Return the DECL_STRUCT_FUNCTION of the function.  */
975   struct function *get_fun (void);
976
977   /* cgraph_node is no longer nested function; update cgraph accordingly.  */
978   void unnest (void);
979
980   /* Bring cgraph node local.  */
981   void make_local (void);
982
983   /* Likewise indicate that a node is having address taken.  */
984   void mark_address_taken (void);
985
986   /* Set fialization priority to PRIORITY.  */
987   void set_fini_priority (priority_type priority);
988
989   /* Return the finalization priority.  */
990   priority_type get_fini_priority (void);
991
992   /* Create edge from a given function to CALLEE in the cgraph.  */
993   cgraph_edge *create_edge (cgraph_node *callee,
994                             gcall *call_stmt, gcov_type count,
995                             int freq);
996
997   /* Create an indirect edge with a yet-undetermined callee where the call
998      statement destination is a formal parameter of the caller with index
999      PARAM_INDEX. */
1000   cgraph_edge *create_indirect_edge (gcall *call_stmt, int ecf_flags,
1001                                      gcov_type count, int freq,
1002                                      bool compute_indirect_info = true);
1003
1004   /* Like cgraph_create_edge walk the clone tree and update all clones sharing
1005    same function body.  If clones already have edge for OLD_STMT; only
1006    update the edge same way as cgraph_set_call_stmt_including_clones does.  */
1007   void create_edge_including_clones (cgraph_node *callee,
1008                                      gimple old_stmt, gcall *stmt,
1009                                      gcov_type count,
1010                                      int freq,
1011                                      cgraph_inline_failed_t reason);
1012
1013   /* Return the callgraph edge representing the GIMPLE_CALL statement
1014      CALL_STMT.  */
1015   cgraph_edge *get_edge (gimple call_stmt);
1016
1017   /* Collect all callers of cgraph_node and its aliases that are known to lead
1018      to NODE (i.e. are not overwritable).  */
1019   vec<cgraph_edge *> collect_callers (void);
1020
1021   /* Remove all callers from the node.  */
1022   void remove_callers (void);
1023
1024   /* Remove all callees from the node.  */
1025   void remove_callees (void);
1026
1027   /* Return function availability.  See cgraph.h for description of individual
1028      return values.  */
1029   enum availability get_availability (void);
1030
1031   /* Set TREE_NOTHROW on cgraph_node's decl and on aliases of the node
1032      if any to NOTHROW.  */
1033   void set_nothrow_flag (bool nothrow);
1034
1035   /* Set TREE_READONLY on cgraph_node's decl and on aliases of the node
1036      if any to READONLY.  */
1037   void set_const_flag (bool readonly, bool looping);
1038
1039   /* Set DECL_PURE_P on cgraph_node's decl and on aliases of the node
1040      if any to PURE.  */
1041   void set_pure_flag (bool pure, bool looping);
1042
1043   /* Call callback on function and aliases associated to the function.
1044      When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
1045      skipped. */
1046
1047   bool call_for_symbol_and_aliases (bool (*callback) (cgraph_node *,
1048                                                       void *),
1049                                     void *data, bool include_overwritable);
1050
1051   /* Call callback on cgraph_node, thunks and aliases associated to NODE.
1052      When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
1053      skipped.  When EXCLUDE_VIRTUAL_THUNKS is true, virtual thunks are
1054      skipped.  */
1055   bool call_for_symbol_thunks_and_aliases (bool (*callback) (cgraph_node *node,
1056                                                              void *data),
1057                                            void *data,
1058                                            bool include_overwritable,
1059                                            bool exclude_virtual_thunks = false);
1060
1061   /* Likewise indicate that a node is needed, i.e. reachable via some
1062      external means.  */
1063   inline void mark_force_output (void);
1064
1065   /* Return true when function can be marked local.  */
1066   bool local_p (void);
1067
1068   /* Return true if cgraph_node can be made local for API change.
1069      Extern inline functions and C++ COMDAT functions can be made local
1070      at the expense of possible code size growth if function is used in multiple
1071      compilation units.  */
1072   bool can_be_local_p (void);
1073
1074   /* Return true when cgraph_node can not return or throw and thus
1075      it is safe to ignore its side effects for IPA analysis.  */
1076   bool cannot_return_p (void);
1077
1078   /* Return true when function cgraph_node and all its aliases are only called
1079      directly.
1080      i.e. it is not externally visible, address was not taken and
1081      it is not used in any other non-standard way.  */
1082   bool only_called_directly_p (void);
1083
1084   /* Return true when function is only called directly or it has alias.
1085      i.e. it is not externally visible, address was not taken and
1086      it is not used in any other non-standard way.  */
1087   inline bool only_called_directly_or_aliased_p (void);
1088
1089   /* Return true when function cgraph_node can be expected to be removed
1090      from program when direct calls in this compilation unit are removed.
1091
1092      As a special case COMDAT functions are
1093      cgraph_can_remove_if_no_direct_calls_p while the are not
1094      cgraph_only_called_directly_p (it is possible they are called from other
1095      unit)
1096
1097      This function behaves as cgraph_only_called_directly_p because eliminating
1098      all uses of COMDAT function does not make it necessarily disappear from
1099      the program unless we are compiling whole program or we do LTO.  In this
1100      case we know we win since dynamic linking will not really discard the
1101      linkonce section.  */
1102   bool will_be_removed_from_program_if_no_direct_calls_p (void);
1103
1104   /* Return true when function can be removed from callgraph
1105      if all direct calls are eliminated.  */
1106   bool can_remove_if_no_direct_calls_and_refs_p (void);
1107
1108   /* Return true when function cgraph_node and its aliases can be removed from
1109      callgraph if all direct calls are eliminated.  */
1110   bool can_remove_if_no_direct_calls_p (void);
1111
1112   /* Return true when callgraph node is a function with Gimple body defined
1113      in current unit.  Functions can also be define externally or they
1114      can be thunks with no Gimple representation.
1115
1116      Note that at WPA stage, the function body may not be present in memory.  */
1117   inline bool has_gimple_body_p (void);
1118
1119   /* Return true if function should be optimized for size.  */
1120   bool optimize_for_size_p (void);
1121
1122   /* Dump the callgraph to file F.  */
1123   static void dump_cgraph (FILE *f);
1124
1125   /* Dump the call graph to stderr.  */
1126   static inline
1127   void debug_cgraph (void)
1128   {
1129     dump_cgraph (stderr);
1130   }
1131
1132   /* Record that DECL1 and DECL2 are semantically identical function
1133      versions.  */
1134   static void record_function_versions (tree decl1, tree decl2);
1135
1136   /* Remove the cgraph_function_version_info and cgraph_node for DECL.  This
1137      DECL is a duplicate declaration.  */
1138   static void delete_function_version (tree decl);
1139
1140   /* Add the function FNDECL to the call graph.
1141      Unlike finalize_function, this function is intended to be used
1142      by middle end and allows insertion of new function at arbitrary point
1143      of compilation.  The function can be either in high, low or SSA form
1144      GIMPLE.
1145
1146      The function is assumed to be reachable and have address taken (so no
1147      API breaking optimizations are performed on it).
1148
1149      Main work done by this function is to enqueue the function for later
1150      processing to avoid need the passes to be re-entrant.  */
1151   static void add_new_function (tree fndecl, bool lowered);
1152
1153   /* Return callgraph node for given symbol and check it is a function. */
1154   static inline cgraph_node *get (const_tree decl)
1155   {
1156     gcc_checking_assert (TREE_CODE (decl) == FUNCTION_DECL);
1157     return dyn_cast <cgraph_node *> (symtab_node::get (decl));
1158   }
1159
1160   /* DECL has been parsed.  Take it, queue it, compile it at the whim of the
1161      logic in effect.  If NO_COLLECT is true, then our caller cannot stand to
1162      have the garbage collector run at the moment.  We would need to either
1163      create a new GC context, or just not compile right now.  */
1164   static void finalize_function (tree, bool);
1165
1166   /* Return cgraph node assigned to DECL.  Create new one when needed.  */
1167   static cgraph_node * create (tree decl);
1168
1169   /* Try to find a call graph node for declaration DECL and if it does not
1170      exist or if it corresponds to an inline clone, create a new one.  */
1171   static cgraph_node * get_create (tree);
1172
1173   /* Return local info for the compiled function.  */
1174   static cgraph_local_info *local_info (tree decl);
1175
1176   /* Return local info for the compiled function.  */
1177   static cgraph_rtl_info *rtl_info (tree);
1178
1179   /* Return the cgraph node that has ASMNAME for its DECL_ASSEMBLER_NAME.
1180      Return NULL if there's no such node.  */
1181   static cgraph_node *get_for_asmname (tree asmname);
1182
1183   /* Attempt to mark ALIAS as an alias to DECL.  Return alias node if
1184      successful and NULL otherwise.
1185      Same body aliases are output whenever the body of DECL is output,
1186      and cgraph_node::get (ALIAS) transparently
1187      returns cgraph_node::get (DECL).  */
1188   static cgraph_node * create_same_body_alias (tree alias, tree decl);
1189
1190   /* Verify whole cgraph structure.  */
1191   static void DEBUG_FUNCTION verify_cgraph_nodes (void);
1192
1193   /* Worker to bring NODE local.  */
1194   static bool make_local (cgraph_node *node, void *);
1195
1196   /* Mark ALIAS as an alias to DECL.  DECL_NODE is cgraph node representing
1197      the function body is associated
1198      with (not necessarily cgraph_node (DECL).  */
1199   static cgraph_node *create_alias (tree alias, tree target);
1200
1201   /* Return true if NODE has thunk.  */
1202   static bool has_thunk_p (cgraph_node *node, void *);
1203
1204   cgraph_edge *callees;
1205   cgraph_edge *callers;
1206   /* List of edges representing indirect calls with a yet undetermined
1207      callee.  */
1208   cgraph_edge *indirect_calls;
1209   /* For nested functions points to function the node is nested in.  */
1210   cgraph_node *origin;
1211   /* Points to first nested function, if any.  */
1212   cgraph_node *nested;
1213   /* Pointer to the next function with same origin, if any.  */
1214   cgraph_node *next_nested;
1215   /* Pointer to the next clone.  */
1216   cgraph_node *next_sibling_clone;
1217   cgraph_node *prev_sibling_clone;
1218   cgraph_node *clones;
1219   cgraph_node *clone_of;
1220   /* If instrumentation_clone is 1 then instrumented_version points
1221      to the original function used to make instrumented version.
1222      Otherwise points to instrumented version of the function.  */
1223   cgraph_node *instrumented_version;
1224   /* If instrumentation_clone is 1 then orig_decl is the original
1225      function declaration.  */
1226   tree orig_decl;
1227   /* For functions with many calls sites it holds map from call expression
1228      to the edge to speed up cgraph_edge function.  */
1229   hash_table<cgraph_edge_hasher> *GTY(()) call_site_hash;
1230   /* Declaration node used to be clone of. */
1231   tree former_clone_of;
1232
1233   /* If this is a SIMD clone, this points to the SIMD specific
1234      information for it.  */
1235   cgraph_simd_clone *simdclone;
1236   /* If this function has SIMD clones, this points to the first clone.  */
1237   cgraph_node *simd_clones;
1238
1239   /* Interprocedural passes scheduled to have their transform functions
1240      applied next time we execute local pass on them.  We maintain it
1241      per-function in order to allow IPA passes to introduce new functions.  */
1242   vec<ipa_opt_pass> GTY((skip)) ipa_transforms_to_apply;
1243
1244   cgraph_local_info local;
1245   cgraph_global_info global;
1246   cgraph_rtl_info rtl;
1247   cgraph_clone_info clone;
1248   cgraph_thunk_info thunk;
1249
1250   /* Expected number of executions: calculated in profile.c.  */
1251   gcov_type count;
1252   /* How to scale counts at materialization time; used to merge
1253      LTO units with different number of profile runs.  */
1254   int count_materialization_scale;
1255   /* Unique id of the node.  */
1256   int uid;
1257   /* Summary unique id of the node.  */
1258   int summary_uid;
1259   /* ID assigned by the profiling.  */
1260   unsigned int profile_id;
1261   /* Time profiler: first run of function.  */
1262   int tp_first_run;
1263
1264   /* Set when decl is an abstract function pointed to by the
1265      ABSTRACT_DECL_ORIGIN of a reachable function.  */
1266   unsigned used_as_abstract_origin : 1;
1267   /* Set once the function is lowered (i.e. its CFG is built).  */
1268   unsigned lowered : 1;
1269   /* Set once the function has been instantiated and its callee
1270      lists created.  */
1271   unsigned process : 1;
1272   /* How commonly executed the node is.  Initialized during branch
1273      probabilities pass.  */
1274   ENUM_BITFIELD (node_frequency) frequency : 2;
1275   /* True when function can only be called at startup (from static ctor).  */
1276   unsigned only_called_at_startup : 1;
1277   /* True when function can only be called at startup (from static dtor).  */
1278   unsigned only_called_at_exit : 1;
1279   /* True when function is the transactional clone of a function which
1280      is called only from inside transactions.  */
1281   /* ?? We should be able to remove this.  We have enough bits in
1282      cgraph to calculate it.  */
1283   unsigned tm_clone : 1;
1284   /* True if this decl is a dispatcher for function versions.  */
1285   unsigned dispatcher_function : 1;
1286   /* True if this decl calls a COMDAT-local function.  This is set up in
1287      compute_inline_parameters and inline_call.  */
1288   unsigned calls_comdat_local : 1;
1289   /* True if node has been created by merge operation in IPA-ICF.  */
1290   unsigned icf_merged: 1;
1291   /* True when function is clone created for Pointer Bounds Checker
1292      instrumentation.  */
1293   unsigned instrumentation_clone : 1;
1294   /* True if call to node can't result in a call to free, munmap or
1295      other operation that could make previously non-trapping memory
1296      accesses trapping.  */
1297   unsigned nonfreeing_fn : 1;
1298   /* True if there was multiple COMDAT bodies merged by lto-symtab.  */
1299   unsigned merged : 1;
1300
1301 private:
1302   /* Worker for call_for_symbol_and_aliases.  */
1303   bool call_for_symbol_and_aliases_1 (bool (*callback) (cgraph_node *,
1304                                                         void *),
1305                                       void *data, bool include_overwritable);
1306 };
1307
1308 /* A cgraph node set is a collection of cgraph nodes.  A cgraph node
1309    can appear in multiple sets.  */
1310 struct cgraph_node_set_def
1311 {
1312   hash_map<cgraph_node *, size_t> *map;
1313   vec<cgraph_node *> nodes;
1314 };
1315
1316 typedef cgraph_node_set_def *cgraph_node_set;
1317 typedef struct varpool_node_set_def *varpool_node_set;
1318
1319 class varpool_node;
1320
1321 /* A varpool node set is a collection of varpool nodes.  A varpool node
1322    can appear in multiple sets.  */
1323 struct varpool_node_set_def
1324 {
1325   hash_map<varpool_node *, size_t> * map;
1326   vec<varpool_node *> nodes;
1327 };
1328
1329 /* Iterator structure for cgraph node sets.  */
1330 struct cgraph_node_set_iterator
1331 {
1332   cgraph_node_set set;
1333   unsigned index;
1334 };
1335
1336 /* Iterator structure for varpool node sets.  */
1337 struct varpool_node_set_iterator
1338 {
1339   varpool_node_set set;
1340   unsigned index;
1341 };
1342
1343 /* Context of polymorphic call. It represent information about the type of
1344    instance that may reach the call.  This is used by ipa-devirt walkers of the
1345    type inheritance graph.  */
1346
1347 class GTY(()) ipa_polymorphic_call_context {
1348 public:
1349   /* The called object appears in an object of type OUTER_TYPE
1350      at offset OFFSET.  When information is not 100% reliable, we
1351      use SPECULATIVE_OUTER_TYPE and SPECULATIVE_OFFSET. */
1352   HOST_WIDE_INT offset;
1353   HOST_WIDE_INT speculative_offset;
1354   tree outer_type;
1355   tree speculative_outer_type;
1356   /* True if outer object may be in construction or destruction.  */
1357   unsigned maybe_in_construction : 1;
1358   /* True if outer object may be of derived type.  */
1359   unsigned maybe_derived_type : 1;
1360   /* True if speculative outer object may be of derived type.  We always
1361      speculate that construction does not happen.  */
1362   unsigned speculative_maybe_derived_type : 1;
1363   /* True if the context is invalid and all calls should be redirected
1364      to BUILTIN_UNREACHABLE.  */
1365   unsigned invalid : 1;
1366   /* True if the outer type is dynamic.  */
1367   unsigned dynamic : 1;
1368
1369   /* Build empty "I know nothing" context.  */
1370   ipa_polymorphic_call_context ();
1371   /* Build polymorphic call context for indirect call E.  */
1372   ipa_polymorphic_call_context (cgraph_edge *e);
1373   /* Build polymorphic call context for IP invariant CST.
1374      If specified, OTR_TYPE specify the type of polymorphic call
1375      that takes CST+OFFSET as a prameter.  */
1376   ipa_polymorphic_call_context (tree cst, tree otr_type = NULL,
1377                                 HOST_WIDE_INT offset = 0);
1378   /* Build context for pointer REF contained in FNDECL at statement STMT.
1379      if INSTANCE is non-NULL, return pointer to the object described by
1380      the context.  */
1381   ipa_polymorphic_call_context (tree fndecl, tree ref, gimple stmt,
1382                                 tree *instance = NULL);
1383
1384   /* Look for vtable stores or constructor calls to work out dynamic type
1385      of memory location.  */
1386   bool get_dynamic_type (tree, tree, tree, gimple);
1387
1388   /* Make context non-speculative.  */
1389   void clear_speculation ();
1390
1391   /* Produce context specifying all derrived types of OTR_TYPE.  If OTR_TYPE is
1392      NULL, the context is set to dummy "I know nothing" setting.  */
1393   void clear_outer_type (tree otr_type = NULL);
1394
1395   /* Walk container types and modify context to point to actual class
1396      containing OTR_TYPE (if non-NULL) as base class.
1397      Return true if resulting context is valid.
1398
1399      When CONSIDER_PLACEMENT_NEW is false, reject contexts that may be made
1400      valid only via alocation of new polymorphic type inside by means
1401      of placement new.
1402
1403      When CONSIDER_BASES is false, only look for actual fields, not base types
1404      of TYPE.  */
1405   bool restrict_to_inner_class (tree otr_type,
1406                                 bool consider_placement_new = true,
1407                                 bool consider_bases = true);
1408
1409   /* Adjust all offsets in contexts by given number of bits.  */
1410   void offset_by (HOST_WIDE_INT);
1411   /* Use when we can not track dynamic type change.  This speculatively assume
1412      type change is not happening.  */
1413   void possible_dynamic_type_change (bool, tree otr_type = NULL);
1414   /* Assume that both THIS and a given context is valid and strenghten THIS
1415      if possible.  Return true if any strenghtening was made.
1416      If actual type the context is being used in is known, OTR_TYPE should be
1417      set accordingly. This improves quality of combined result.  */
1418   bool combine_with (ipa_polymorphic_call_context, tree otr_type = NULL);
1419   bool meet_with (ipa_polymorphic_call_context, tree otr_type = NULL);
1420
1421   /* Return TRUE if context is fully useless.  */
1422   bool useless_p () const;
1423   /* Return TRUE if this context conveys the same information as X.  */
1424   bool equal_to (const ipa_polymorphic_call_context &x) const;
1425
1426   /* Dump human readable context to F.  If NEWLINE is true, it will be
1427      terminated by a newline.  */
1428   void dump (FILE *f, bool newline = true) const;
1429   void DEBUG_FUNCTION debug () const;
1430
1431   /* LTO streaming.  */
1432   void stream_out (struct output_block *) const;
1433   void stream_in (struct lto_input_block *, struct data_in *data_in);
1434
1435 private:
1436   bool combine_speculation_with (tree, HOST_WIDE_INT, bool, tree);
1437   bool meet_speculation_with (tree, HOST_WIDE_INT, bool, tree);
1438   void set_by_decl (tree, HOST_WIDE_INT);
1439   bool set_by_invariant (tree, tree, HOST_WIDE_INT);
1440   bool speculation_consistent_p (tree, HOST_WIDE_INT, bool, tree) const;
1441   void make_speculative (tree otr_type = NULL);
1442 };
1443
1444 /* Structure containing additional information about an indirect call.  */
1445
1446 struct GTY(()) cgraph_indirect_call_info
1447 {
1448   /* When agg_content is set, an offset where the call pointer is located
1449      within the aggregate.  */
1450   HOST_WIDE_INT offset;
1451   /* Context of the polymorphic call; use only when POLYMORPHIC flag is set.  */
1452   ipa_polymorphic_call_context context;
1453   /* OBJ_TYPE_REF_TOKEN of a polymorphic call (if polymorphic is set).  */
1454   HOST_WIDE_INT otr_token;
1455   /* Type of the object from OBJ_TYPE_REF_OBJECT. */
1456   tree otr_type;
1457   /* Index of the parameter that is called.  */
1458   int param_index;
1459   /* ECF flags determined from the caller.  */
1460   int ecf_flags;
1461   /* Profile_id of common target obtrained from profile.  */
1462   int common_target_id;
1463   /* Probability that call will land in function with COMMON_TARGET_ID.  */
1464   int common_target_probability;
1465
1466   /* Set when the call is a virtual call with the parameter being the
1467      associated object pointer rather than a simple direct call.  */
1468   unsigned polymorphic : 1;
1469   /* Set when the call is a call of a pointer loaded from contents of an
1470      aggregate at offset.  */
1471   unsigned agg_contents : 1;
1472   /* Set when this is a call through a member pointer.  */
1473   unsigned member_ptr : 1;
1474   /* When the previous bit is set, this one determines whether the destination
1475      is loaded from a parameter passed by reference. */
1476   unsigned by_ref : 1;
1477   /* For polymorphic calls this specify whether the virtual table pointer
1478      may have changed in between function entry and the call.  */
1479   unsigned vptr_changed : 1;
1480 };
1481
1482 struct GTY((chain_next ("%h.next_caller"), chain_prev ("%h.prev_caller"),
1483             for_user)) cgraph_edge {
1484   friend class cgraph_node;
1485
1486   /* Remove the edge in the cgraph.  */
1487   void remove (void);
1488
1489   /* Change field call_stmt of edge to NEW_STMT.
1490      If UPDATE_SPECULATIVE and E is any component of speculative
1491      edge, then update all components.  */
1492   void set_call_stmt (gcall *new_stmt, bool update_speculative = true);
1493
1494   /* Redirect callee of the edge to N.  The function does not update underlying
1495      call expression.  */
1496   void redirect_callee (cgraph_node *n);
1497
1498   /* If the edge does not lead to a thunk, simply redirect it to N.  Otherwise
1499      create one or more equivalent thunks for N and redirect E to the first in
1500      the chain.  Note that it is then necessary to call
1501      n->expand_all_artificial_thunks once all callers are redirected.  */
1502   void redirect_callee_duplicating_thunks (cgraph_node *n);
1503
1504   /* Make an indirect edge with an unknown callee an ordinary edge leading to
1505      CALLEE.  DELTA is an integer constant that is to be added to the this
1506      pointer (first parameter) to compensate for skipping
1507      a thunk adjustment.  */
1508   cgraph_edge *make_direct (cgraph_node *callee);
1509
1510   /* Turn edge into speculative call calling N2. Update
1511      the profile so the direct call is taken COUNT times
1512      with FREQUENCY.  */
1513   cgraph_edge *make_speculative (cgraph_node *n2, gcov_type direct_count,
1514                                  int direct_frequency);
1515
1516    /* Given speculative call edge, return all three components.  */
1517   void speculative_call_info (cgraph_edge *&direct, cgraph_edge *&indirect,
1518                               ipa_ref *&reference);
1519
1520   /* Speculative call edge turned out to be direct call to CALLE_DECL.
1521      Remove the speculative call sequence and return edge representing the call.
1522      It is up to caller to redirect the call as appropriate. */
1523   cgraph_edge *resolve_speculation (tree callee_decl = NULL);
1524
1525   /* If necessary, change the function declaration in the call statement
1526      associated with the edge so that it corresponds to the edge callee.  */
1527   gimple redirect_call_stmt_to_callee (void);
1528
1529   /* Create clone of edge in the node N represented
1530      by CALL_EXPR the callgraph.  */
1531   cgraph_edge * clone (cgraph_node *n, gcall *call_stmt, unsigned stmt_uid,
1532                        gcov_type count_scale, int freq_scale, bool update_original);
1533
1534   /* Verify edge count and frequency.  */
1535   bool verify_count_and_frequency ();
1536
1537   /* Return true when call of edge can not lead to return from caller
1538      and thus it is safe to ignore its side effects for IPA analysis
1539      when computing side effects of the caller.  */
1540   bool cannot_lead_to_return_p (void);
1541
1542   /* Return true when the edge represents a direct recursion.  */
1543   bool recursive_p (void);
1544
1545   /* Return true if the call can be hot.  */
1546   bool maybe_hot_p (void);
1547
1548   /* Rebuild cgraph edges for current function node.  This needs to be run after
1549      passes that don't update the cgraph.  */
1550   static unsigned int rebuild_edges (void);
1551
1552   /* Rebuild cgraph references for current function node.  This needs to be run
1553      after passes that don't update the cgraph.  */
1554   static void rebuild_references (void);
1555
1556   /* Expected number of executions: calculated in profile.c.  */
1557   gcov_type count;
1558   cgraph_node *caller;
1559   cgraph_node *callee;
1560   cgraph_edge *prev_caller;
1561   cgraph_edge *next_caller;
1562   cgraph_edge *prev_callee;
1563   cgraph_edge *next_callee;
1564   gcall *call_stmt;
1565   /* Additional information about an indirect call.  Not cleared when an edge
1566      becomes direct.  */
1567   cgraph_indirect_call_info *indirect_info;
1568   PTR GTY ((skip (""))) aux;
1569   /* When equal to CIF_OK, inline this call.  Otherwise, points to the
1570      explanation why function was not inlined.  */
1571   enum cgraph_inline_failed_t inline_failed;
1572   /* The stmt_uid of call_stmt.  This is used by LTO to recover the call_stmt
1573      when the function is serialized in.  */
1574   unsigned int lto_stmt_uid;
1575   /* Expected frequency of executions within the function.
1576      When set to CGRAPH_FREQ_BASE, the edge is expected to be called once
1577      per function call.  The range is 0 to CGRAPH_FREQ_MAX.  */
1578   int frequency;
1579   /* Unique id of the edge.  */
1580   int uid;
1581   /* Whether this edge was made direct by indirect inlining.  */
1582   unsigned int indirect_inlining_edge : 1;
1583   /* Whether this edge describes an indirect call with an undetermined
1584      callee.  */
1585   unsigned int indirect_unknown_callee : 1;
1586   /* Whether this edge is still a dangling  */
1587   /* True if the corresponding CALL stmt cannot be inlined.  */
1588   unsigned int call_stmt_cannot_inline_p : 1;
1589   /* Can this call throw externally?  */
1590   unsigned int can_throw_external : 1;
1591   /* Edges with SPECULATIVE flag represents indirect calls that was
1592      speculatively turned into direct (i.e. by profile feedback).
1593      The final code sequence will have form:
1594
1595      if (call_target == expected_fn)
1596        expected_fn ();
1597      else
1598        call_target ();
1599
1600      Every speculative call is represented by three components attached
1601      to a same call statement:
1602      1) a direct call (to expected_fn)
1603      2) an indirect call (to call_target)
1604      3) a IPA_REF_ADDR refrence to expected_fn.
1605
1606      Optimizers may later redirect direct call to clone, so 1) and 3)
1607      do not need to necesarily agree with destination.  */
1608   unsigned int speculative : 1;
1609   /* Set to true when caller is a constructor or destructor of polymorphic
1610      type.  */
1611   unsigned in_polymorphic_cdtor : 1;
1612
1613 private:
1614   /* Remove the edge from the list of the callers of the callee.  */
1615   void remove_caller (void);
1616
1617   /* Remove the edge from the list of the callees of the caller.  */
1618   void remove_callee (void);
1619
1620   /* Set callee N of call graph edge and add it to the corresponding set of
1621      callers. */
1622   void set_callee (cgraph_node *n);
1623
1624   /* Output flags of edge to a file F.  */
1625   void dump_edge_flags (FILE *f);
1626
1627   /* Verify that call graph edge corresponds to DECL from the associated
1628      statement.  Return true if the verification should fail.  */
1629   bool verify_corresponds_to_fndecl (tree decl);
1630 };
1631
1632 #define CGRAPH_FREQ_BASE 1000
1633 #define CGRAPH_FREQ_MAX 100000
1634
1635 /* The varpool data structure.
1636    Each static variable decl has assigned varpool_node.  */
1637
1638 class GTY((tag ("SYMTAB_VARIABLE"))) varpool_node : public symtab_node {
1639 public:
1640   /* Dump given varpool node to F.  */
1641   void dump (FILE *f);
1642
1643   /* Dump given varpool node to stderr.  */
1644   void DEBUG_FUNCTION debug (void);
1645
1646   /* Remove variable from symbol table.  */
1647   void remove (void);
1648
1649   /* Remove node initializer when it is no longer needed.  */
1650   void remove_initializer (void);
1651
1652   void analyze (void);
1653
1654   /* Return variable availability.  */
1655   availability get_availability (void);
1656
1657   /* When doing LTO, read variable's constructor from disk if
1658      it is not already present.  */
1659   tree get_constructor (void);
1660
1661   /* Return true if variable has constructor that can be used for folding.  */
1662   bool ctor_useable_for_folding_p (void);
1663
1664   /* For given variable pool node, walk the alias chain to return the function
1665      the variable is alias of. Do not walk through thunks.
1666      When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
1667   inline varpool_node *ultimate_alias_target
1668     (availability *availability = NULL);
1669
1670   /* Return node that alias is aliasing.  */
1671   inline varpool_node *get_alias_target (void);
1672
1673   /* Output one variable, if necessary.  Return whether we output it.  */
1674   bool assemble_decl (void);
1675
1676   /* For variables in named sections make sure get_variable_section
1677      is called before we switch to those sections.  Then section
1678      conflicts between read-only and read-only requiring relocations
1679      sections can be resolved.  */
1680   void finalize_named_section_flags (void);
1681
1682   /* Call calback on varpool symbol and aliases associated to varpool symbol.
1683      When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
1684      skipped. */
1685   bool call_for_symbol_and_aliases (bool (*callback) (varpool_node *, void *),
1686                                     void *data,
1687                                     bool include_overwritable);
1688
1689   /* Return true when variable should be considered externally visible.  */
1690   bool externally_visible_p (void);
1691
1692   /* Return true when all references to variable must be visible
1693      in ipa_ref_list.
1694      i.e. if the variable is not externally visible or not used in some magic
1695      way (asm statement or such).
1696      The magic uses are all summarized in force_output flag.  */
1697   inline bool all_refs_explicit_p ();
1698
1699   /* Return true when variable can be removed from variable pool
1700      if all direct calls are eliminated.  */
1701   inline bool can_remove_if_no_refs_p (void);
1702
1703   /* Add the variable DECL to the varpool.
1704      Unlike finalize_decl function is intended to be used
1705      by middle end and allows insertion of new variable at arbitrary point
1706      of compilation.  */
1707   static void add (tree decl);
1708
1709   /* Return varpool node for given symbol and check it is a function. */
1710   static inline varpool_node *get (const_tree decl);
1711
1712   /* Mark DECL as finalized.  By finalizing the declaration, frontend instruct
1713      the middle end to output the variable to asm file, if needed or externally
1714      visible.  */
1715   static void finalize_decl (tree decl);
1716
1717   /* Attempt to mark ALIAS as an alias to DECL.  Return TRUE if successful.
1718      Extra name aliases are output whenever DECL is output.  */
1719   static varpool_node * create_extra_name_alias (tree alias, tree decl);
1720
1721   /* Attempt to mark ALIAS as an alias to DECL.  Return TRUE if successful.
1722      Extra name aliases are output whenever DECL is output.  */
1723   static varpool_node * create_alias (tree, tree);
1724
1725   /* Dump the variable pool to F.  */
1726   static void dump_varpool (FILE *f);
1727
1728   /* Dump the variable pool to stderr.  */
1729   static void DEBUG_FUNCTION debug_varpool (void);
1730
1731   /* Allocate new callgraph node and insert it into basic data structures.  */
1732   static varpool_node *create_empty (void);
1733
1734   /* Return varpool node assigned to DECL.  Create new one when needed.  */
1735   static varpool_node *get_create (tree decl);
1736
1737   /* Given an assembler name, lookup node.  */
1738   static varpool_node *get_for_asmname (tree asmname);
1739
1740   /* Set when variable is scheduled to be assembled.  */
1741   unsigned output : 1;
1742
1743   /* Set when variable has statically initialized pointer
1744      or is a static bounds variable and needs initalization.  */
1745   unsigned need_bounds_init : 1;
1746
1747   /* Set if the variable is dynamically initialized, except for
1748      function local statics.   */
1749   unsigned dynamically_initialized : 1;
1750
1751   ENUM_BITFIELD(tls_model) tls_model : 3;
1752
1753   /* Set if the variable is known to be used by single function only.
1754      This is computed by ipa_signle_use pass and used by late optimizations
1755      in places where optimization would be valid for local static variable
1756      if we did not do any inter-procedural code movement.  */
1757   unsigned used_by_single_function : 1;
1758
1759 private:
1760   /* Assemble thunks and aliases associated to varpool node.  */
1761   void assemble_aliases (void);
1762
1763   /* Worker for call_for_node_and_aliases.  */
1764   bool call_for_symbol_and_aliases_1 (bool (*callback) (varpool_node *, void *),
1765                                       void *data,
1766                                       bool include_overwritable);
1767 };
1768
1769 /* Every top level asm statement is put into a asm_node.  */
1770
1771 struct GTY(()) asm_node {
1772
1773
1774   /* Next asm node.  */
1775   asm_node *next;
1776   /* String for this asm node.  */
1777   tree asm_str;
1778   /* Ordering of all cgraph nodes.  */
1779   int order;
1780 };
1781
1782 /* Report whether or not THIS symtab node is a function, aka cgraph_node.  */
1783
1784 template <>
1785 template <>
1786 inline bool
1787 is_a_helper <cgraph_node *>::test (symtab_node *p)
1788 {
1789   return p && p->type == SYMTAB_FUNCTION;
1790 }
1791
1792 /* Report whether or not THIS symtab node is a vriable, aka varpool_node.  */
1793
1794 template <>
1795 template <>
1796 inline bool
1797 is_a_helper <varpool_node *>::test (symtab_node *p)
1798 {
1799   return p && p->type == SYMTAB_VARIABLE;
1800 }
1801
1802 /* Macros to access the next item in the list of free cgraph nodes and
1803    edges. */
1804 #define NEXT_FREE_NODE(NODE) dyn_cast<cgraph_node *> ((NODE)->next)
1805 #define SET_NEXT_FREE_NODE(NODE,NODE2) ((NODE))->next = NODE2
1806 #define NEXT_FREE_EDGE(EDGE) (EDGE)->prev_caller
1807
1808 typedef void (*cgraph_edge_hook)(cgraph_edge *, void *);
1809 typedef void (*cgraph_node_hook)(cgraph_node *, void *);
1810 typedef void (*varpool_node_hook)(varpool_node *, void *);
1811 typedef void (*cgraph_2edge_hook)(cgraph_edge *, cgraph_edge *, void *);
1812 typedef void (*cgraph_2node_hook)(cgraph_node *, cgraph_node *, void *);
1813
1814 struct cgraph_edge_hook_list;
1815 struct cgraph_node_hook_list;
1816 struct varpool_node_hook_list;
1817 struct cgraph_2edge_hook_list;
1818 struct cgraph_2node_hook_list;
1819
1820 /* Map from a symbol to initialization/finalization priorities.  */
1821 struct GTY(()) symbol_priority_map {
1822   priority_type init;
1823   priority_type fini;
1824 };
1825
1826 enum symtab_state
1827 {
1828   /* Frontend is parsing and finalizing functions.  */
1829   PARSING,
1830   /* Callgraph is being constructed.  It is safe to add new functions.  */
1831   CONSTRUCTION,
1832   /* Callgraph is being streamed-in at LTO time.  */
1833   LTO_STREAMING,
1834   /* Callgraph is built and early IPA passes are being run.  */
1835   IPA,
1836   /* Callgraph is built and all functions are transformed to SSA form.  */
1837   IPA_SSA,
1838   /* All inline decisions are done; it is now possible to remove extern inline
1839      functions and virtual call targets.  */
1840   IPA_SSA_AFTER_INLINING,
1841   /* Functions are now ordered and being passed to RTL expanders.  */
1842   EXPANSION,
1843   /* All cgraph expansion is done.  */
1844   FINISHED
1845 };
1846
1847 struct asmname_hasher
1848 {
1849   typedef symtab_node *value_type;
1850   typedef const_tree compare_type;
1851   typedef int store_values_directly;
1852
1853   static hashval_t hash (symtab_node *n);
1854   static bool equal (symtab_node *n, const_tree t);
1855   static void ggc_mx (symtab_node *n);
1856   static void pch_nx (symtab_node *&);
1857   static void pch_nx (symtab_node *&, gt_pointer_operator, void *);
1858   static void remove (symtab_node *) {}
1859 };
1860
1861 class GTY((tag ("SYMTAB"))) symbol_table
1862 {
1863 public:
1864   friend class symtab_node;
1865   friend class cgraph_node;
1866   friend class cgraph_edge;
1867
1868   symbol_table (): cgraph_max_summary_uid (1)
1869   {
1870   }
1871
1872   /* Initialize callgraph dump file.  */
1873   void initialize (void);
1874
1875   /* Register a top-level asm statement ASM_STR.  */
1876   inline asm_node *finalize_toplevel_asm (tree asm_str);
1877
1878   /* Analyze the whole compilation unit once it is parsed completely.  */
1879   void finalize_compilation_unit (void);
1880
1881   /* C++ frontend produce same body aliases all over the place, even before PCH
1882      gets streamed out. It relies on us linking the aliases with their function
1883      in order to do the fixups, but ipa-ref is not PCH safe.  Consequentely we
1884      first produce aliases without links, but once C++ FE is sure he won't sream
1885      PCH we build the links via this function.  */
1886   void process_same_body_aliases (void);
1887
1888   /* Perform simple optimizations based on callgraph.  */
1889   void compile (void);
1890
1891   /* Process CGRAPH_NEW_FUNCTIONS and perform actions necessary to add these
1892      functions into callgraph in a way so they look like ordinary reachable
1893      functions inserted into callgraph already at construction time.  */
1894   void process_new_functions (void);
1895
1896   /* Once all functions from compilation unit are in memory, produce all clones
1897      and update all calls.  We might also do this on demand if we don't want to
1898      bring all functions to memory prior compilation, but current WHOPR
1899      implementation does that and it is is bit easier to keep everything right
1900      in this order.  */
1901   void materialize_all_clones (void);
1902
1903   /* Register a symbol NODE.  */
1904   inline void register_symbol (symtab_node *node);
1905
1906   inline void
1907   clear_asm_symbols (void)
1908   {
1909     asmnodes = NULL;
1910     asm_last_node = NULL;
1911   }
1912
1913   /* Perform reachability analysis and reclaim all unreachable nodes.  */
1914   bool remove_unreachable_nodes (FILE *file);
1915
1916   /* Optimization of function bodies might've rendered some variables as
1917      unnecessary so we want to avoid these from being compiled.  Re-do
1918      reachability starting from variables that are either externally visible
1919      or was referred from the asm output routines.  */
1920   void remove_unreferenced_decls (void);
1921
1922   /* Unregister a symbol NODE.  */
1923   inline void unregister (symtab_node *node);
1924
1925   /* Allocate new callgraph node and insert it into basic data structures.  */
1926   cgraph_node *create_empty (void);
1927
1928   /* Release a callgraph NODE with UID and put in to the list
1929      of free nodes.  */
1930   void release_symbol (cgraph_node *node, int uid);
1931
1932   /* Output all variables enqueued to be assembled.  */
1933   bool output_variables (void);
1934
1935   /* Weakrefs may be associated to external decls and thus not output
1936      at expansion time.  Emit all necessary aliases.  */
1937   void output_weakrefs (void);
1938
1939   /* Return first static symbol with definition.  */
1940   inline symtab_node *first_symbol (void);
1941
1942   /* Return first assembler symbol.  */
1943   inline asm_node *
1944   first_asm_symbol (void)
1945   {
1946     return asmnodes;
1947   }
1948
1949   /* Return first static symbol with definition.  */
1950   inline symtab_node *first_defined_symbol (void);
1951
1952   /* Return first variable.  */
1953   inline varpool_node *first_variable (void);
1954
1955   /* Return next variable after NODE.  */
1956   inline varpool_node *next_variable (varpool_node *node);
1957
1958   /* Return first static variable with initializer.  */
1959   inline varpool_node *first_static_initializer (void);
1960
1961   /* Return next static variable with initializer after NODE.  */
1962   inline varpool_node *next_static_initializer (varpool_node *node);
1963
1964   /* Return first static variable with definition.  */
1965   inline varpool_node *first_defined_variable (void);
1966
1967   /* Return next static variable with definition after NODE.  */
1968   inline varpool_node *next_defined_variable (varpool_node *node);
1969
1970   /* Return first function with body defined.  */
1971   inline cgraph_node *first_defined_function (void);
1972
1973   /* Return next function with body defined after NODE.  */
1974   inline cgraph_node *next_defined_function (cgraph_node *node);
1975
1976   /* Return first function.  */
1977   inline cgraph_node *first_function (void);
1978
1979   /* Return next function.  */
1980   inline cgraph_node *next_function (cgraph_node *node);
1981
1982   /* Return first function with body defined.  */
1983   cgraph_node *first_function_with_gimple_body (void);
1984
1985   /* Return next reachable static variable with initializer after NODE.  */
1986   inline cgraph_node *next_function_with_gimple_body (cgraph_node *node);
1987
1988   /* Register HOOK to be called with DATA on each removed edge.  */
1989   cgraph_edge_hook_list *add_edge_removal_hook (cgraph_edge_hook hook,
1990                                                 void *data);
1991
1992   /* Remove ENTRY from the list of hooks called on removing edges.  */
1993   void remove_edge_removal_hook (cgraph_edge_hook_list *entry);
1994
1995   /* Register HOOK to be called with DATA on each removed node.  */
1996   cgraph_node_hook_list *add_cgraph_removal_hook (cgraph_node_hook hook,
1997                                                   void *data);
1998
1999   /* Remove ENTRY from the list of hooks called on removing nodes.  */
2000   void remove_cgraph_removal_hook (cgraph_node_hook_list *entry);
2001
2002   /* Register HOOK to be called with DATA on each removed node.  */
2003   varpool_node_hook_list *add_varpool_removal_hook (varpool_node_hook hook,
2004                                                     void *data);
2005
2006   /* Remove ENTRY from the list of hooks called on removing nodes.  */
2007   void remove_varpool_removal_hook (varpool_node_hook_list *entry);
2008
2009   /* Register HOOK to be called with DATA on each inserted node.  */
2010   cgraph_node_hook_list *add_cgraph_insertion_hook (cgraph_node_hook hook,
2011                                                     void *data);
2012
2013   /* Remove ENTRY from the list of hooks called on inserted nodes.  */
2014   void remove_cgraph_insertion_hook (cgraph_node_hook_list *entry);
2015
2016   /* Register HOOK to be called with DATA on each inserted node.  */
2017   varpool_node_hook_list *add_varpool_insertion_hook (varpool_node_hook hook,
2018                                                       void *data);
2019
2020   /* Remove ENTRY from the list of hooks called on inserted nodes.  */
2021   void remove_varpool_insertion_hook (varpool_node_hook_list *entry);
2022
2023   /* Register HOOK to be called with DATA on each duplicated edge.  */
2024   cgraph_2edge_hook_list *add_edge_duplication_hook (cgraph_2edge_hook hook,
2025                                                      void *data);
2026   /* Remove ENTRY from the list of hooks called on duplicating edges.  */
2027   void remove_edge_duplication_hook (cgraph_2edge_hook_list *entry);
2028
2029   /* Register HOOK to be called with DATA on each duplicated node.  */
2030   cgraph_2node_hook_list *add_cgraph_duplication_hook (cgraph_2node_hook hook,
2031                                                        void *data);
2032
2033   /* Remove ENTRY from the list of hooks called on duplicating nodes.  */
2034   void remove_cgraph_duplication_hook (cgraph_2node_hook_list *entry);
2035
2036   /* Call all edge removal hooks.  */
2037   void call_edge_removal_hooks (cgraph_edge *e);
2038
2039   /* Call all node insertion hooks.  */
2040   void call_cgraph_insertion_hooks (cgraph_node *node);
2041
2042   /* Call all node removal hooks.  */
2043   void call_cgraph_removal_hooks (cgraph_node *node);
2044
2045   /* Call all node duplication hooks.  */
2046   void call_cgraph_duplication_hooks (cgraph_node *node, cgraph_node *node2);
2047
2048   /* Call all edge duplication hooks.  */
2049   void call_edge_duplication_hooks (cgraph_edge *cs1, cgraph_edge *cs2);
2050
2051   /* Call all node removal hooks.  */
2052   void call_varpool_removal_hooks (varpool_node *node);
2053
2054   /* Call all node insertion hooks.  */
2055   void call_varpool_insertion_hooks (varpool_node *node);
2056
2057   /* Arrange node to be first in its entry of assembler_name_hash.  */
2058   void symtab_prevail_in_asm_name_hash (symtab_node *node);
2059
2060   /* Initalize asm name hash unless.  */
2061   void symtab_initialize_asm_name_hash (void);
2062
2063   /* Set the DECL_ASSEMBLER_NAME and update symtab hashtables.  */
2064   void change_decl_assembler_name (tree decl, tree name);
2065
2066   int cgraph_count;
2067   int cgraph_max_uid;
2068   int cgraph_max_summary_uid;
2069
2070   int edges_count;
2071   int edges_max_uid;
2072
2073   symtab_node* GTY(()) nodes;
2074   asm_node* GTY(()) asmnodes;
2075   asm_node* GTY(()) asm_last_node;
2076   cgraph_node* GTY(()) free_nodes;
2077
2078   /* Head of a linked list of unused (freed) call graph edges.
2079      Do not GTY((delete)) this list so UIDs gets reliably recycled.  */
2080   cgraph_edge * GTY(()) free_edges;
2081
2082   /* The order index of the next symtab node to be created.  This is
2083      used so that we can sort the cgraph nodes in order by when we saw
2084      them, to support -fno-toplevel-reorder.  */
2085   int order;
2086
2087   /* Set when whole unit has been analyzed so we can access global info.  */
2088   bool global_info_ready;
2089   /* What state callgraph is in right now.  */
2090   enum symtab_state state;
2091   /* Set when the cgraph is fully build and the basic flags are computed.  */
2092   bool function_flags_ready;
2093
2094   bool cpp_implicit_aliases_done;
2095
2096   /* Hash table used to hold sectoons.  */
2097   hash_table<section_name_hasher> *GTY(()) section_hash;
2098
2099   /* Hash table used to convert assembler names into nodes.  */
2100   hash_table<asmname_hasher> *assembler_name_hash;
2101
2102   /* Hash table used to hold init priorities.  */
2103   hash_map<symtab_node *, symbol_priority_map> *init_priority_hash;
2104
2105   FILE* GTY ((skip)) dump_file;
2106
2107 private:
2108   /* Allocate new callgraph node.  */
2109   inline cgraph_node * allocate_cgraph_symbol (void);
2110
2111   /* Allocate a cgraph_edge structure and fill it with data according to the
2112      parameters of which only CALLEE can be NULL (when creating an indirect call
2113      edge).  */
2114   cgraph_edge *create_edge (cgraph_node *caller, cgraph_node *callee,
2115                             gcall *call_stmt, gcov_type count, int freq,
2116                             bool indir_unknown_callee);
2117
2118   /* Put the edge onto the free list.  */
2119   void free_edge (cgraph_edge *e);
2120
2121   /* Insert NODE to assembler name hash.  */
2122   void insert_to_assembler_name_hash (symtab_node *node, bool with_clones);
2123
2124   /* Remove NODE from assembler name hash.  */
2125   void unlink_from_assembler_name_hash (symtab_node *node, bool with_clones);
2126
2127   /* Hash asmnames ignoring the user specified marks.  */
2128   static hashval_t decl_assembler_name_hash (const_tree asmname);
2129
2130   /* Compare ASMNAME with the DECL_ASSEMBLER_NAME of DECL.  */
2131   static bool decl_assembler_name_equal (tree decl, const_tree asmname);
2132
2133   friend struct asmname_hasher;
2134
2135   /* List of hooks triggered when an edge is removed.  */
2136   cgraph_edge_hook_list * GTY((skip)) m_first_edge_removal_hook;
2137   /* List of hooks triggem_red when a cgraph node is removed.  */
2138   cgraph_node_hook_list * GTY((skip)) m_first_cgraph_removal_hook;
2139   /* List of hooks triggered when an edge is duplicated.  */
2140   cgraph_2edge_hook_list * GTY((skip)) m_first_edge_duplicated_hook;
2141   /* List of hooks triggered when a node is duplicated.  */
2142   cgraph_2node_hook_list * GTY((skip)) m_first_cgraph_duplicated_hook;
2143   /* List of hooks triggered when an function is inserted.  */
2144   cgraph_node_hook_list * GTY((skip)) m_first_cgraph_insertion_hook;
2145   /* List of hooks triggered when an variable is inserted.  */
2146   varpool_node_hook_list * GTY((skip)) m_first_varpool_insertion_hook;
2147   /* List of hooks triggered when a node is removed.  */
2148   varpool_node_hook_list * GTY((skip)) m_first_varpool_removal_hook;
2149 };
2150
2151 extern GTY(()) symbol_table *symtab;
2152
2153 extern vec<cgraph_node *> cgraph_new_nodes;
2154
2155 inline hashval_t
2156 asmname_hasher::hash (symtab_node *n)
2157 {
2158   return symbol_table::decl_assembler_name_hash
2159     (DECL_ASSEMBLER_NAME (n->decl));
2160 }
2161
2162 inline bool
2163 asmname_hasher::equal (symtab_node *n, const_tree t)
2164 {
2165   return symbol_table::decl_assembler_name_equal (n->decl, t);
2166 }
2167
2168 extern void gt_ggc_mx (symtab_node *&);
2169
2170 inline void
2171 asmname_hasher::ggc_mx (symtab_node *n)
2172 {
2173   gt_ggc_mx (n);
2174 }
2175
2176 extern void gt_pch_nx (symtab_node *&);
2177
2178 inline void
2179 asmname_hasher::pch_nx (symtab_node *&n)
2180 {
2181   gt_pch_nx (n);
2182 }
2183
2184 inline void
2185 asmname_hasher::pch_nx (symtab_node *&n, gt_pointer_operator op, void *cookie)
2186 {
2187   op (&n, cookie);
2188 }
2189
2190 /* In cgraph.c  */
2191 void cgraph_c_finalize (void);
2192 void release_function_body (tree);
2193 cgraph_indirect_call_info *cgraph_allocate_init_indirect_info (void);
2194
2195 void cgraph_update_edges_for_call_stmt (gimple, tree, gimple);
2196 bool cgraph_function_possibly_inlined_p (tree);
2197
2198 const char* cgraph_inline_failed_string (cgraph_inline_failed_t);
2199 cgraph_inline_failed_type_t cgraph_inline_failed_type (cgraph_inline_failed_t);
2200
2201 extern bool gimple_check_call_matching_types (gimple, tree, bool);
2202
2203 /* In cgraphunit.c  */
2204 void cgraphunit_c_finalize (void);
2205
2206 /*  Initialize datastructures so DECL is a function in lowered gimple form.
2207     IN_SSA is true if the gimple is in SSA.  */
2208 basic_block init_lowered_empty_function (tree, bool, gcov_type);
2209
2210 /* In cgraphclones.c  */
2211
2212 tree clone_function_name_1 (const char *, const char *);
2213 tree clone_function_name (tree decl, const char *);
2214
2215 void tree_function_versioning (tree, tree, vec<ipa_replace_map *, va_gc> *,
2216                                bool, bitmap, bool, bitmap, basic_block);
2217
2218 /* In cgraphbuild.c  */
2219 int compute_call_stmt_bb_frequency (tree, basic_block bb);
2220 void record_references_in_initializer (tree, bool);
2221
2222 /* In ipa.c  */
2223 void cgraph_build_static_cdtor (char which, tree body, int priority);
2224 bool ipa_discover_readonly_nonaddressable_vars (void);
2225
2226 /* In varpool.c  */
2227 tree ctor_for_folding (tree);
2228
2229 /* In tree-chkp.c  */
2230 extern bool chkp_function_instrumented_p (tree fndecl);
2231
2232 /* Return true when the symbol is real symbol, i.e. it is not inline clone
2233    or abstract function kept for debug info purposes only.  */
2234 inline bool
2235 symtab_node::real_symbol_p (void)
2236 {
2237   cgraph_node *cnode;
2238
2239   if (DECL_ABSTRACT_P (decl))
2240     return false;
2241   if (!is_a <cgraph_node *> (this))
2242     return true;
2243   cnode = dyn_cast <cgraph_node *> (this);
2244   if (cnode->global.inlined_to)
2245     return false;
2246   return true;
2247 }
2248
2249 /* Return true if DECL should have entry in symbol table if used.
2250    Those are functions and static & external veriables*/
2251
2252 static inline bool
2253 decl_in_symtab_p (const_tree decl)
2254 {
2255   return (TREE_CODE (decl) == FUNCTION_DECL
2256           || (TREE_CODE (decl) == VAR_DECL
2257               && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))));
2258 }
2259
2260 inline bool
2261 symtab_node::in_same_comdat_group_p (symtab_node *target)
2262 {
2263   symtab_node *source = this;
2264
2265   if (cgraph_node *cn = dyn_cast <cgraph_node *> (target))
2266     {
2267       if (cn->global.inlined_to)
2268         source = cn->global.inlined_to;
2269     }
2270   if (cgraph_node *cn = dyn_cast <cgraph_node *> (target))
2271     {
2272       if (cn->global.inlined_to)
2273         target = cn->global.inlined_to;
2274     }
2275
2276   return source->get_comdat_group () == target->get_comdat_group ();
2277 }
2278
2279 /* Return node that alias is aliasing.  */
2280
2281 inline symtab_node *
2282 symtab_node::get_alias_target (void)
2283 {
2284   ipa_ref *ref = NULL;
2285   iterate_reference (0, ref);
2286   if (ref->use == IPA_REF_CHKP)
2287     iterate_reference (1, ref);
2288   gcc_checking_assert (ref->use == IPA_REF_ALIAS);
2289   return ref->referred;
2290 }
2291
2292 /* Return next reachable static symbol with initializer after the node.  */
2293
2294 inline symtab_node *
2295 symtab_node::next_defined_symbol (void)
2296 {
2297   symtab_node *node1 = next;
2298
2299   for (; node1; node1 = node1->next)
2300     if (node1->definition)
2301       return node1;
2302
2303   return NULL;
2304 }
2305
2306 /* Iterates I-th reference in the list, REF is also set.  */
2307
2308 inline ipa_ref *
2309 symtab_node::iterate_reference (unsigned i, ipa_ref *&ref)
2310 {
2311   vec_safe_iterate (ref_list.references, i, &ref);
2312
2313   return ref;
2314 }
2315
2316 /* Iterates I-th referring item in the list, REF is also set.  */
2317
2318 inline ipa_ref *
2319 symtab_node::iterate_referring (unsigned i, ipa_ref *&ref)
2320 {
2321   ref_list.referring.iterate (i, &ref);
2322
2323   return ref;
2324 }
2325
2326 /* Iterates I-th referring alias item in the list, REF is also set.  */
2327
2328 inline ipa_ref *
2329 symtab_node::iterate_direct_aliases (unsigned i, ipa_ref *&ref)
2330 {
2331   ref_list.referring.iterate (i, &ref);
2332
2333   if (ref && ref->use != IPA_REF_ALIAS)
2334     return NULL;
2335
2336   return ref;
2337 }
2338
2339 /* Return true if list contains an alias.  */
2340
2341 inline bool
2342 symtab_node::has_aliases_p (void)
2343 {
2344   ipa_ref *ref = NULL;
2345
2346   return (iterate_direct_aliases (0, ref) != NULL);
2347 }
2348
2349 /* Return true when RESOLUTION indicate that linker will use
2350    the symbol from non-LTO object files.  */
2351
2352 inline bool
2353 resolution_used_from_other_file_p (enum ld_plugin_symbol_resolution resolution)
2354 {
2355   return (resolution == LDPR_PREVAILING_DEF
2356           || resolution == LDPR_PREEMPTED_REG
2357           || resolution == LDPR_RESOLVED_EXEC
2358           || resolution == LDPR_RESOLVED_DYN);
2359 }
2360
2361 /* Return true when symtab_node is known to be used from other (non-LTO)
2362    object file. Known only when doing LTO via linker plugin.  */
2363
2364 inline bool
2365 symtab_node::used_from_object_file_p (void)
2366 {
2367   if (!TREE_PUBLIC (decl) || DECL_EXTERNAL (decl))
2368     return false;
2369   if (resolution_used_from_other_file_p (resolution))
2370     return true;
2371   return false;
2372 }
2373
2374 /* Return varpool node for given symbol and check it is a function. */
2375
2376 inline varpool_node *
2377 varpool_node::get (const_tree decl)
2378 {
2379   gcc_checking_assert (TREE_CODE (decl) == VAR_DECL);
2380   return dyn_cast<varpool_node *> (symtab_node::get (decl));
2381 }
2382
2383 /* Register a symbol NODE.  */
2384
2385 inline void
2386 symbol_table::register_symbol (symtab_node *node)
2387 {
2388   node->next = nodes;
2389   node->previous = NULL;
2390
2391   if (nodes)
2392     nodes->previous = node;
2393   nodes = node;
2394
2395   node->order = order++;
2396 }
2397
2398 /* Register a top-level asm statement ASM_STR.  */
2399
2400 asm_node *
2401 symbol_table::finalize_toplevel_asm (tree asm_str)
2402 {
2403   asm_node *node;
2404
2405   node = ggc_cleared_alloc<asm_node> ();
2406   node->asm_str = asm_str;
2407   node->order = order++;
2408   node->next = NULL;
2409
2410   if (asmnodes == NULL)
2411     asmnodes = node;
2412   else
2413     asm_last_node->next = node;
2414
2415   asm_last_node = node;
2416   return node;
2417 }
2418
2419 /* Unregister a symbol NODE.  */
2420 inline void
2421 symbol_table::unregister (symtab_node *node)
2422 {
2423   if (node->previous)
2424     node->previous->next = node->next;
2425   else
2426     nodes = node->next;
2427
2428   if (node->next)
2429     node->next->previous = node->previous;
2430
2431   node->next = NULL;
2432   node->previous = NULL;
2433 }
2434
2435 /* Release a callgraph NODE with UID and put in to the list of free nodes.  */
2436
2437 inline void
2438 symbol_table::release_symbol (cgraph_node *node, int uid)
2439 {
2440   cgraph_count--;
2441
2442   /* Clear out the node to NULL all pointers and add the node to the free
2443      list.  */
2444   memset (node, 0, sizeof (*node));
2445   node->type = SYMTAB_FUNCTION;
2446   node->uid = uid;
2447   SET_NEXT_FREE_NODE (node, free_nodes);
2448   free_nodes = node;
2449 }
2450
2451 /* Allocate new callgraph node.  */
2452
2453 inline cgraph_node *
2454 symbol_table::allocate_cgraph_symbol (void)
2455 {
2456   cgraph_node *node;
2457
2458   if (free_nodes)
2459     {
2460       node = free_nodes;
2461       free_nodes = NEXT_FREE_NODE (node);
2462     }
2463   else
2464     {
2465       node = ggc_cleared_alloc<cgraph_node> ();
2466       node->uid = cgraph_max_uid++;
2467     }
2468
2469   node->summary_uid = cgraph_max_summary_uid++;
2470   return node;
2471 }
2472
2473
2474 /* Return first static symbol with definition.  */
2475 inline symtab_node *
2476 symbol_table::first_symbol (void)
2477 {
2478   return nodes;
2479 }
2480
2481 /* Walk all symbols.  */
2482 #define FOR_EACH_SYMBOL(node) \
2483    for ((node) = symtab->first_symbol (); (node); (node) = (node)->next)
2484
2485 /* Return first static symbol with definition.  */
2486 inline symtab_node *
2487 symbol_table::first_defined_symbol (void)
2488 {
2489   symtab_node *node;
2490
2491   for (node = nodes; node; node = node->next)
2492     if (node->definition)
2493       return node;
2494
2495   return NULL;
2496 }
2497
2498 /* Walk all symbols with definitions in current unit.  */
2499 #define FOR_EACH_DEFINED_SYMBOL(node) \
2500    for ((node) = symtab->first_defined_symbol (); (node); \
2501         (node) = node->next_defined_symbol ())
2502
2503 /* Return first variable.  */
2504 inline varpool_node *
2505 symbol_table::first_variable (void)
2506 {
2507   symtab_node *node;
2508   for (node = nodes; node; node = node->next)
2509     if (varpool_node *vnode = dyn_cast <varpool_node *> (node))
2510       return vnode;
2511   return NULL;
2512 }
2513
2514 /* Return next variable after NODE.  */
2515 inline varpool_node *
2516 symbol_table::next_variable (varpool_node *node)
2517 {
2518   symtab_node *node1 = node->next;
2519   for (; node1; node1 = node1->next)
2520     if (varpool_node *vnode1 = dyn_cast <varpool_node *> (node1))
2521       return vnode1;
2522   return NULL;
2523 }
2524 /* Walk all variables.  */
2525 #define FOR_EACH_VARIABLE(node) \
2526    for ((node) = symtab->first_variable (); \
2527         (node); \
2528         (node) = symtab->next_variable ((node)))
2529
2530 /* Return first static variable with initializer.  */
2531 inline varpool_node *
2532 symbol_table::first_static_initializer (void)
2533 {
2534   symtab_node *node;
2535   for (node = nodes; node; node = node->next)
2536     {
2537       varpool_node *vnode = dyn_cast <varpool_node *> (node);
2538       if (vnode && DECL_INITIAL (node->decl))
2539         return vnode;
2540     }
2541   return NULL;
2542 }
2543
2544 /* Return next static variable with initializer after NODE.  */
2545 inline varpool_node *
2546 symbol_table::next_static_initializer (varpool_node *node)
2547 {
2548   symtab_node *node1 = node->next;
2549   for (; node1; node1 = node1->next)
2550     {
2551       varpool_node *vnode1 = dyn_cast <varpool_node *> (node1);
2552       if (vnode1 && DECL_INITIAL (node1->decl))
2553         return vnode1;
2554     }
2555   return NULL;
2556 }
2557
2558 /* Walk all static variables with initializer set.  */
2559 #define FOR_EACH_STATIC_INITIALIZER(node) \
2560    for ((node) = symtab->first_static_initializer (); (node); \
2561         (node) = symtab->next_static_initializer (node))
2562
2563 /* Return first static variable with definition.  */
2564 inline varpool_node *
2565 symbol_table::first_defined_variable (void)
2566 {
2567   symtab_node *node;
2568   for (node = nodes; node; node = node->next)
2569     {
2570       varpool_node *vnode = dyn_cast <varpool_node *> (node);
2571       if (vnode && vnode->definition)
2572         return vnode;
2573     }
2574   return NULL;
2575 }
2576
2577 /* Return next static variable with definition after NODE.  */
2578 inline varpool_node *
2579 symbol_table::next_defined_variable (varpool_node *node)
2580 {
2581   symtab_node *node1 = node->next;
2582   for (; node1; node1 = node1->next)
2583     {
2584       varpool_node *vnode1 = dyn_cast <varpool_node *> (node1);
2585       if (vnode1 && vnode1->definition)
2586         return vnode1;
2587     }
2588   return NULL;
2589 }
2590 /* Walk all variables with definitions in current unit.  */
2591 #define FOR_EACH_DEFINED_VARIABLE(node) \
2592    for ((node) = symtab->first_defined_variable (); (node); \
2593         (node) = symtab->next_defined_variable (node))
2594
2595 /* Return first function with body defined.  */
2596 inline cgraph_node *
2597 symbol_table::first_defined_function (void)
2598 {
2599   symtab_node *node;
2600   for (node = nodes; node; node = node->next)
2601     {
2602       cgraph_node *cn = dyn_cast <cgraph_node *> (node);
2603       if (cn && cn->definition)
2604         return cn;
2605     }
2606   return NULL;
2607 }
2608
2609 /* Return next function with body defined after NODE.  */
2610 inline cgraph_node *
2611 symbol_table::next_defined_function (cgraph_node *node)
2612 {
2613   symtab_node *node1 = node->next;
2614   for (; node1; node1 = node1->next)
2615     {
2616       cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1);
2617       if (cn1 && cn1->definition)
2618         return cn1;
2619     }
2620   return NULL;
2621 }
2622
2623 /* Walk all functions with body defined.  */
2624 #define FOR_EACH_DEFINED_FUNCTION(node) \
2625    for ((node) = symtab->first_defined_function (); (node); \
2626         (node) = symtab->next_defined_function ((node)))
2627
2628 /* Return first function.  */
2629 inline cgraph_node *
2630 symbol_table::first_function (void)
2631 {
2632   symtab_node *node;
2633   for (node = nodes; node; node = node->next)
2634     if (cgraph_node *cn = dyn_cast <cgraph_node *> (node))
2635       return cn;
2636   return NULL;
2637 }
2638
2639 /* Return next function.  */
2640 inline cgraph_node *
2641 symbol_table::next_function (cgraph_node *node)
2642 {
2643   symtab_node *node1 = node->next;
2644   for (; node1; node1 = node1->next)
2645     if (cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1))
2646       return cn1;
2647   return NULL;
2648 }
2649
2650 /* Return first function with body defined.  */
2651 inline cgraph_node *
2652 symbol_table::first_function_with_gimple_body (void)
2653 {
2654   symtab_node *node;
2655   for (node = nodes; node; node = node->next)
2656     {
2657       cgraph_node *cn = dyn_cast <cgraph_node *> (node);
2658       if (cn && cn->has_gimple_body_p ())
2659         return cn;
2660     }
2661   return NULL;
2662 }
2663
2664 /* Return next reachable static variable with initializer after NODE.  */
2665 inline cgraph_node *
2666 symbol_table::next_function_with_gimple_body (cgraph_node *node)
2667 {
2668   symtab_node *node1 = node->next;
2669   for (; node1; node1 = node1->next)
2670     {
2671       cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1);
2672       if (cn1 && cn1->has_gimple_body_p ())
2673         return cn1;
2674     }
2675   return NULL;
2676 }
2677
2678 /* Walk all functions.  */
2679 #define FOR_EACH_FUNCTION(node) \
2680    for ((node) = symtab->first_function (); (node); \
2681         (node) = symtab->next_function ((node)))
2682
2683 /* Return true when callgraph node is a function with Gimple body defined
2684    in current unit.  Functions can also be define externally or they
2685    can be thunks with no Gimple representation.
2686
2687    Note that at WPA stage, the function body may not be present in memory.  */
2688
2689 inline bool
2690 cgraph_node::has_gimple_body_p (void)
2691 {
2692   return definition && !thunk.thunk_p && !alias;
2693 }
2694
2695 /* Walk all functions with body defined.  */
2696 #define FOR_EACH_FUNCTION_WITH_GIMPLE_BODY(node) \
2697    for ((node) = symtab->first_function_with_gimple_body (); (node); \
2698         (node) = symtab->next_function_with_gimple_body (node))
2699
2700 /* Create a new static variable of type TYPE.  */
2701 tree add_new_static_var (tree type);
2702
2703 /* Uniquize all constants that appear in memory.
2704    Each constant in memory thus far output is recorded
2705    in `const_desc_table'.  */
2706
2707 struct GTY((for_user)) constant_descriptor_tree {
2708   /* A MEM for the constant.  */
2709   rtx rtl;
2710
2711   /* The value of the constant.  */
2712   tree value;
2713
2714   /* Hash of value.  Computing the hash from value each time
2715      hashfn is called can't work properly, as that means recursive
2716      use of the hash table during hash table expansion.  */
2717   hashval_t hash;
2718 };
2719
2720 /* Return true when function is only called directly or it has alias.
2721    i.e. it is not externally visible, address was not taken and
2722    it is not used in any other non-standard way.  */
2723
2724 inline bool
2725 cgraph_node::only_called_directly_or_aliased_p (void)
2726 {
2727   gcc_assert (!global.inlined_to);
2728   return (!force_output && !address_taken
2729           && !used_from_other_partition
2730           && !DECL_VIRTUAL_P (decl)
2731           && !DECL_STATIC_CONSTRUCTOR (decl)
2732           && !DECL_STATIC_DESTRUCTOR (decl)
2733           && !used_from_object_file_p ()
2734           && !externally_visible);
2735 }
2736
2737 /* Return true when function can be removed from callgraph
2738    if all direct calls are eliminated.  */
2739
2740 inline bool
2741 cgraph_node::can_remove_if_no_direct_calls_and_refs_p (void)
2742 {
2743   gcc_checking_assert (!global.inlined_to);
2744   /* Instrumentation clones should not be removed before
2745      instrumentation happens.  New callers may appear after
2746      instrumentation.  */
2747   if (instrumentation_clone
2748       && !chkp_function_instrumented_p (decl))
2749     return false;
2750   /* Extern inlines can always go, we will use the external definition.  */
2751   if (DECL_EXTERNAL (decl))
2752     return true;
2753   /* When function is needed, we can not remove it.  */
2754   if (force_output || used_from_other_partition)
2755     return false;
2756   if (DECL_STATIC_CONSTRUCTOR (decl)
2757       || DECL_STATIC_DESTRUCTOR (decl))
2758     return false;
2759   /* Only COMDAT functions can be removed if externally visible.  */
2760   if (externally_visible
2761       && (!DECL_COMDAT (decl)
2762           || forced_by_abi
2763           || used_from_object_file_p ()))
2764     return false;
2765   return true;
2766 }
2767
2768 /* Return true when variable can be removed from variable pool
2769    if all direct calls are eliminated.  */
2770
2771 inline bool
2772 varpool_node::can_remove_if_no_refs_p (void)
2773 {
2774   if (DECL_EXTERNAL (decl))
2775     return true;
2776   return (!force_output && !used_from_other_partition
2777           && ((DECL_COMDAT (decl)
2778                && !forced_by_abi
2779                && !used_from_object_file_p ())
2780               || !externally_visible
2781               || DECL_HAS_VALUE_EXPR_P (decl)));
2782 }
2783
2784 /* Return true when all references to variable must be visible in ipa_ref_list.
2785    i.e. if the variable is not externally visible or not used in some magic
2786    way (asm statement or such).
2787    The magic uses are all summarized in force_output flag.  */
2788
2789 inline bool
2790 varpool_node::all_refs_explicit_p ()
2791 {
2792   return (definition
2793           && !externally_visible
2794           && !used_from_other_partition
2795           && !force_output);
2796 }
2797
2798 struct tree_descriptor_hasher : ggc_hasher<constant_descriptor_tree *>
2799 {
2800   static hashval_t hash (constant_descriptor_tree *);
2801   static bool equal (constant_descriptor_tree *, constant_descriptor_tree *);
2802 };
2803
2804 /* Constant pool accessor function.  */
2805 hash_table<tree_descriptor_hasher> *constant_pool_htab (void);
2806
2807 /* Return node that alias is aliasing.  */
2808
2809 inline cgraph_node *
2810 cgraph_node::get_alias_target (void)
2811 {
2812   return dyn_cast <cgraph_node *> (symtab_node::get_alias_target ());
2813 }
2814
2815 /* Return node that alias is aliasing.  */
2816
2817 inline varpool_node *
2818 varpool_node::get_alias_target (void)
2819 {
2820   return dyn_cast <varpool_node *> (symtab_node::get_alias_target ());
2821 }
2822
2823 /* Walk the alias chain to return the symbol NODE is alias of.
2824    If NODE is not an alias, return NODE.
2825    When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
2826
2827 inline symtab_node *
2828 symtab_node::ultimate_alias_target (enum availability *availability)
2829 {
2830   if (!alias)
2831     {
2832       if (availability)
2833         *availability = get_availability ();
2834       return this;
2835     }
2836
2837   return ultimate_alias_target_1 (availability);
2838 }
2839
2840 /* Given function symbol, walk the alias chain to return the function node
2841    is alias of. Do not walk through thunks.
2842    When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
2843
2844 inline cgraph_node *
2845 cgraph_node::ultimate_alias_target (enum availability *availability)
2846 {
2847   cgraph_node *n = dyn_cast <cgraph_node *>
2848     (symtab_node::ultimate_alias_target (availability));
2849   if (!n && availability)
2850     *availability = AVAIL_NOT_AVAILABLE;
2851   return n;
2852 }
2853
2854 /* For given variable pool node, walk the alias chain to return the function
2855    the variable is alias of. Do not walk through thunks.
2856    When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
2857
2858 inline varpool_node *
2859 varpool_node::ultimate_alias_target (availability *availability)
2860 {
2861   varpool_node *n = dyn_cast <varpool_node *>
2862     (symtab_node::ultimate_alias_target (availability));
2863
2864   if (!n && availability)
2865     *availability = AVAIL_NOT_AVAILABLE;
2866   return n;
2867 }
2868
2869 /* Set callee N of call graph edge and add it to the corresponding set of
2870    callers. */
2871
2872 inline void
2873 cgraph_edge::set_callee (cgraph_node *n)
2874 {
2875   prev_caller = NULL;
2876   if (n->callers)
2877     n->callers->prev_caller = this;
2878   next_caller = n->callers;
2879   n->callers = this;
2880   callee = n;
2881 }
2882
2883 /* Redirect callee of the edge to N.  The function does not update underlying
2884    call expression.  */
2885
2886 inline void
2887 cgraph_edge::redirect_callee (cgraph_node *n)
2888 {
2889   /* Remove from callers list of the current callee.  */
2890   remove_callee ();
2891
2892   /* Insert to callers list of the new callee.  */
2893   set_callee (n);
2894 }
2895
2896 /* Return true when the edge represents a direct recursion.  */
2897
2898 inline bool
2899 cgraph_edge::recursive_p (void)
2900 {
2901   cgraph_node *c = callee->ultimate_alias_target ();
2902   if (caller->global.inlined_to)
2903     return caller->global.inlined_to->decl == c->decl;
2904   else
2905     return caller->decl == c->decl;
2906 }
2907
2908 /* Remove the edge from the list of the callers of the callee.  */
2909
2910 inline void
2911 cgraph_edge::remove_callee (void)
2912 {
2913   gcc_assert (!indirect_unknown_callee);
2914   if (prev_caller)
2915     prev_caller->next_caller = next_caller;
2916   if (next_caller)
2917     next_caller->prev_caller = prev_caller;
2918   if (!prev_caller)
2919     callee->callers = next_caller;
2920 }
2921
2922 /* Return true if the TM_CLONE bit is set for a given FNDECL.  */
2923 static inline bool
2924 decl_is_tm_clone (const_tree fndecl)
2925 {
2926   cgraph_node *n = cgraph_node::get (fndecl);
2927   if (n)
2928     return n->tm_clone;
2929   return false;
2930 }
2931
2932 /* Likewise indicate that a node is needed, i.e. reachable via some
2933    external means.  */
2934
2935 inline void
2936 cgraph_node::mark_force_output (void)
2937 {
2938   force_output = 1;
2939   gcc_checking_assert (!global.inlined_to);
2940 }
2941
2942 /* Return true if function should be optimized for size.  */
2943
2944 inline bool
2945 cgraph_node::optimize_for_size_p (void)
2946 {
2947   if (opt_for_fn (decl, optimize_size))
2948     return true;
2949   if (frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED)
2950     return true;
2951   else
2952     return false;
2953 }
2954
2955 /* Return symtab_node for NODE or create one if it is not present
2956    in symtab.  */
2957
2958 inline symtab_node *
2959 symtab_node::get_create (tree node)
2960 {
2961   if (TREE_CODE (node) == VAR_DECL)
2962     return varpool_node::get_create (node);
2963   else
2964     return cgraph_node::get_create (node);
2965 }
2966
2967 /* Return availability of NODE.  */
2968
2969 inline enum availability
2970 symtab_node::get_availability (void)
2971 {
2972   if (is_a <cgraph_node *> (this))
2973     return dyn_cast <cgraph_node *> (this)->get_availability ();
2974   else
2975     return dyn_cast <varpool_node *> (this)->get_availability ();;
2976 }
2977
2978 /* Call calback on symtab node and aliases associated to this node.
2979    When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
2980    skipped. */
2981
2982 inline bool
2983 symtab_node::call_for_symbol_and_aliases (bool (*callback) (symtab_node *,
2984                                                             void *),
2985                                           void *data,
2986                                           bool include_overwritable)
2987 {
2988   if (callback (this, data))
2989     return true;
2990   if (has_aliases_p ())
2991     return call_for_symbol_and_aliases_1 (callback, data, include_overwritable);
2992   return false;
2993 }
2994
2995 /* Call callback on function and aliases associated to the function.
2996    When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
2997    skipped.  */
2998
2999 inline bool
3000 cgraph_node::call_for_symbol_and_aliases (bool (*callback) (cgraph_node *,
3001                                                             void *),
3002                                           void *data,
3003                                           bool include_overwritable)
3004 {
3005   if (callback (this, data))
3006     return true;
3007   if (has_aliases_p ())
3008     return call_for_symbol_and_aliases_1 (callback, data, include_overwritable);
3009   return false;
3010 }
3011
3012 /* Call calback on varpool symbol and aliases associated to varpool symbol.
3013    When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
3014    skipped. */
3015
3016 inline bool
3017 varpool_node::call_for_symbol_and_aliases (bool (*callback) (varpool_node *,
3018                                                              void *),
3019                                            void *data,
3020                                            bool include_overwritable)
3021 {
3022   if (callback (this, data))
3023     return true;
3024   if (has_aliases_p ())
3025     return call_for_symbol_and_aliases_1 (callback, data, include_overwritable);
3026   return false;
3027 }
3028
3029 /* Return true if NODE's address can be compared.  */
3030
3031 inline bool
3032 symtab_node::address_can_be_compared_p ()
3033 {
3034   /* Address of virtual tables and functions is never compared.  */
3035   if (DECL_VIRTUAL_P (decl))
3036     return false;
3037   /* Address of C++ cdtors is never compared.  */
3038   if (is_a <cgraph_node *> (this)
3039       && (DECL_CXX_CONSTRUCTOR_P (decl)
3040           || DECL_CXX_DESTRUCTOR_P (decl)))
3041     return false;
3042   /* Constant pool symbols addresses are never compared.
3043      flag_merge_constants permits us to assume the same on readonly vars.  */
3044   if (is_a <varpool_node *> (this)
3045       && (DECL_IN_CONSTANT_POOL (decl)
3046           || (flag_merge_constants >= 2
3047               && TREE_READONLY (decl) && !TREE_THIS_VOLATILE (decl))))
3048     return false;
3049   return true;
3050 }
3051
3052 /* Return true if refernece may be used in address compare.  */
3053
3054 inline bool
3055 ipa_ref::address_matters_p ()
3056 {
3057   if (use != IPA_REF_ADDR)
3058     return false;
3059   /* Addresses taken from virtual tables are never compared.  */
3060   if (is_a <varpool_node *> (referring)
3061       && DECL_VIRTUAL_P (referring->decl))
3062     return false;
3063   return referred->address_can_be_compared_p ();
3064 }
3065
3066 /* Build polymorphic call context for indirect call E.  */
3067
3068 inline
3069 ipa_polymorphic_call_context::ipa_polymorphic_call_context (cgraph_edge *e)
3070 {
3071   gcc_checking_assert (e->indirect_info->polymorphic);
3072   *this = e->indirect_info->context;
3073 }
3074
3075 /* Build empty "I know nothing" context.  */
3076
3077 inline
3078 ipa_polymorphic_call_context::ipa_polymorphic_call_context ()
3079 {
3080   clear_speculation ();
3081   clear_outer_type ();
3082   invalid = false;
3083 }
3084
3085 /* Make context non-speculative.  */
3086
3087 inline void
3088 ipa_polymorphic_call_context::clear_speculation ()
3089 {
3090   speculative_outer_type = NULL;
3091   speculative_offset = 0;
3092   speculative_maybe_derived_type = false;
3093 }
3094
3095 /* Produce context specifying all derrived types of OTR_TYPE.  If OTR_TYPE is
3096    NULL, the context is set to dummy "I know nothing" setting.  */
3097
3098 inline void
3099 ipa_polymorphic_call_context::clear_outer_type (tree otr_type)
3100 {
3101   outer_type = otr_type ? TYPE_MAIN_VARIANT (otr_type) : NULL;
3102   offset = 0;
3103   maybe_derived_type = true;
3104   maybe_in_construction = true;
3105   dynamic = true;
3106 }
3107
3108 /* Adjust all offsets in contexts by OFF bits.  */
3109
3110 inline void
3111 ipa_polymorphic_call_context::offset_by (HOST_WIDE_INT off)
3112 {
3113   if (outer_type)
3114     offset += off;
3115   if (speculative_outer_type)
3116     speculative_offset += off;
3117 }
3118
3119 /* Return TRUE if context is fully useless.  */
3120
3121 inline bool
3122 ipa_polymorphic_call_context::useless_p () const
3123 {
3124   return (!outer_type && !speculative_outer_type);
3125 }
3126
3127 /* Return true if NODE is local.  Instrumentation clones are counted as local
3128    only when original function is local.  */
3129
3130 static inline bool
3131 cgraph_local_p (cgraph_node *node)
3132 {
3133   if (!node->instrumentation_clone || !node->instrumented_version)
3134     return node->local.local;
3135
3136   return node->local.local && node->instrumented_version->local.local;
3137 }
3138
3139 /* When using fprintf (or similar), problems can arise with
3140    transient generated strings.  Many string-generation APIs
3141    only support one result being alive at once (e.g. by
3142    returning a pointer to a statically-allocated buffer).
3143
3144    If there is more than one generated string within one
3145    fprintf call: the first string gets evicted or overwritten
3146    by the second, before fprintf is fully evaluated.
3147    See e.g. PR/53136.
3148
3149    This function provides a workaround for this, by providing
3150    a simple way to create copies of these transient strings,
3151    without the need to have explicit cleanup:
3152
3153        fprintf (dumpfile, "string 1: %s string 2:%s\n",
3154                 xstrdup_for_dump (EXPR_1),
3155                 xstrdup_for_dump (EXPR_2));
3156
3157    This is actually a simple wrapper around ggc_strdup, but
3158    the name documents the intent.  We require that no GC can occur
3159    within the fprintf call.  */
3160
3161 static inline const char *
3162 xstrdup_for_dump (const char *transient_str)
3163 {
3164   return ggc_strdup (transient_str);
3165 }
3166
3167 #endif  /* GCC_CGRAPH_H  */