IPA C++ refactoring 4/N
[platform/upstream/gcc.git] / gcc / cgraph.h
1 /* Callgraph handling code.
2    Copyright (C) 2003-2014 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 #include "hash-map.h"
25 #include "is-a.h"
26 #include "plugin-api.h"
27 #include "vec.h"
28 #include "basic-block.h"
29 #include "function.h"
30 #include "ipa-ref.h"
31 #include "dumpfile.h"
32
33 /* Symbol table consists of functions and variables.
34    TODO: add labels and CONST_DECLs.  */
35 enum symtab_type
36 {
37   SYMTAB_SYMBOL,
38   SYMTAB_FUNCTION,
39   SYMTAB_VARIABLE
40 };
41
42 /* Section names are stored as reference counted strings in GGC safe hashtable
43    (to make them survive through PCH).  */
44
45 struct GTY(()) section_hash_entry_d
46 {
47   int ref_count;
48   char *name;  /* As long as this datastructure stays in GGC, we can not put
49                   string at the tail of structure of GGC dies in horrible
50                   way  */
51 };
52
53 typedef struct section_hash_entry_d section_hash_entry;
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   /* Iterates I-th reference in the list, REF is also set.  */
176   ipa_ref *iterate_reference (unsigned i, ipa_ref *&ref);
177
178   /* Iterates I-th referring item in the list, REF is also set.  */
179   ipa_ref *iterate_referring (unsigned i, ipa_ref *&ref);
180
181   /* Iterates I-th referring alias item in the list, REF is also set.  */
182   ipa_ref *iterate_direct_aliases (unsigned i, ipa_ref *&ref);
183
184   /* Return true if symtab node and TARGET represents
185      semantically equivalent symbols.  */
186   bool semantically_equivalent_p (symtab_node *target);
187
188   /* Classify symbol symtab node for partitioning.  */
189   enum symbol_partitioning_class get_partitioning_class (void);
190
191   /* Return comdat group.  */
192   tree get_comdat_group ()
193     {
194       return x_comdat_group;
195     }
196
197   /* Return comdat group as identifier_node.  */
198   tree get_comdat_group_id ()
199     {
200       if (x_comdat_group && TREE_CODE (x_comdat_group) != IDENTIFIER_NODE)
201         x_comdat_group = DECL_ASSEMBLER_NAME (x_comdat_group);
202       return x_comdat_group;
203     }
204
205   /* Set comdat group.  */
206   void set_comdat_group (tree group)
207     {
208       gcc_checking_assert (!group || TREE_CODE (group) == IDENTIFIER_NODE
209                            || DECL_P (group));
210       x_comdat_group = group;
211     }
212
213   /* Return section as string.  */
214   const char * get_section ()
215     {
216       if (!x_section)
217         return NULL;
218       return x_section->name;
219     }
220
221   /* Remove node from same comdat group.   */
222   void remove_from_same_comdat_group (void);
223
224   /* Add this symtab_node to the same comdat group that OLD is in.  */
225   void add_to_same_comdat_group (symtab_node *old_node);
226
227   /* Dissolve the same_comdat_group list in which NODE resides.  */
228   void dissolve_same_comdat_group_list (void);
229
230   /* Return true when symtab_node is known to be used from other (non-LTO)
231      object file. Known only when doing LTO via linker plugin.  */
232   bool used_from_object_file_p (void);
233
234   /* Walk the alias chain to return the symbol NODE is alias of.
235      If NODE is not an alias, return NODE.
236      When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
237   symtab_node *ultimate_alias_target (enum availability *avail = NULL);
238
239   /* Return next reachable static symbol with initializer after NODE.  */
240   inline symtab_node *next_defined_symbol (void);
241
242   /* Add reference recording that symtab node is alias of TARGET.
243      The function can fail in the case of aliasing cycles; in this case
244      it returns false.  */
245   bool resolve_alias (symtab_node *target);
246
247   /* C++ FE sometimes change linkage flags after producing same
248      body aliases.  */
249   void fixup_same_cpp_alias_visibility (symtab_node *target);
250
251   /* Call calback on symtab node and aliases associated to this node.
252      When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
253      skipped. */
254   bool call_for_symbol_and_aliases (bool (*callback) (symtab_node *, void *),
255                                   void *data,
256                                   bool include_overwrite);
257
258   /* If node can not be interposable by static or dynamic linker to point to
259      different definition, return this symbol. Otherwise look for alias with
260      such property and if none exists, introduce new one.  */
261   symtab_node *noninterposable_alias (void);
262
263   /* Return node that alias is aliasing.  */
264   inline symtab_node *get_alias_target (void);
265
266   /* Set section for symbol and its aliases.  */
267   void set_section (const char *section);
268
269   /* Set section, do not recurse into aliases.
270      When one wants to change section of symbol and its aliases,
271      use set_section.  */
272   void set_section_for_node (const char *section);
273
274   /* Set initialization priority to PRIORITY.  */
275   void set_init_priority (priority_type priority);
276
277   /* Return the initialization priority.  */
278   priority_type get_init_priority ();
279
280   /* Return availability of NODE.  */
281   enum availability get_availability (void);
282
283   /* Make DECL local.  */
284   void make_decl_local (void);
285
286   /* Return true if list contains an alias.  */
287   bool has_aliases_p (void);
288
289   /* Return true when the symbol is real symbol, i.e. it is not inline clone
290      or abstract function kept for debug info purposes only.  */
291   bool real_symbol_p (void);
292
293   /* Determine if symbol declaration is needed.  That is, visible to something
294      either outside this translation unit, something magic in the system
295      configury. This function is used just during symbol creation.  */
296   bool needed_p (void);
297
298   /* Return true when there are references to the node.  */
299   bool referred_to_p (void);
300
301   /* Return true if NODE can be discarded by linker from the binary.  */
302   inline bool
303   can_be_discarded_p (void)
304   {
305     return (DECL_EXTERNAL (decl)
306             || (get_comdat_group ()
307                 && resolution != LDPR_PREVAILING_DEF
308                 && resolution != LDPR_PREVAILING_DEF_IRONLY
309                 && resolution != LDPR_PREVAILING_DEF_IRONLY_EXP));
310   }
311
312   /* Return true if NODE is local to a particular COMDAT group, and must not
313      be named from outside the COMDAT.  This is used for C++ decloned
314      constructors.  */
315   inline bool comdat_local_p (void)
316   {
317     return (same_comdat_group && !TREE_PUBLIC (decl));
318   }
319
320   /* Return true if ONE and TWO are part of the same COMDAT group.  */
321   inline bool in_same_comdat_group_p (symtab_node *target);
322
323   /* Return true when there is a reference to node and it is not vtable.  */
324   bool address_taken_from_non_vtable_p (void);
325
326   /* Return true if symbol is known to be nonzero.  */
327   bool nonzero_address ();
328
329   /* Return symbol table node associated with DECL, if any,
330      and NULL otherwise.  */
331   static inline symtab_node *get (const_tree decl)
332   {
333 #ifdef ENABLE_CHECKING
334     /* Check that we are called for sane type of object - functions
335        and static or external variables.  */
336     gcc_checking_assert (TREE_CODE (decl) == FUNCTION_DECL
337                          || (TREE_CODE (decl) == VAR_DECL
338                              && (TREE_STATIC (decl) || DECL_EXTERNAL (decl)
339                                  || in_lto_p)));
340     /* Check that the mapping is sane - perhaps this check can go away,
341        but at the moment frontends tends to corrupt the mapping by calling
342        memcpy/memset on the tree nodes.  */
343     gcc_checking_assert (!decl->decl_with_vis.symtab_node
344                          || decl->decl_with_vis.symtab_node->decl == decl);
345 #endif
346     return decl->decl_with_vis.symtab_node;
347   }
348
349   /* Return the cgraph node that has ASMNAME for its DECL_ASSEMBLER_NAME.
350      Return NULL if there's no such node.  */
351   static symtab_node *get_for_asmname (const_tree asmname);
352
353   /* Dump symbol table to F.  */
354   static void dump_table (FILE *);
355
356   /* Dump symbol table to stderr.  */
357   static inline DEBUG_FUNCTION void debug_symtab (void)
358   {
359     dump_table (stderr);
360   }
361
362   /* Verify symbol table for internal consistency.  */
363   static DEBUG_FUNCTION void verify_symtab_nodes (void);
364
365   /* Return true when NODE is known to be used from other (non-LTO)
366      object file. Known only when doing LTO via linker plugin.  */
367   static bool used_from_object_file_p_worker (symtab_node *node);
368
369   /* Type of the symbol.  */
370   ENUM_BITFIELD (symtab_type) type : 8;
371
372   /* The symbols resolution.  */
373   ENUM_BITFIELD (ld_plugin_symbol_resolution) resolution : 8;
374
375   /*** Flags representing the symbol type.  ***/
376
377   /* True when symbol corresponds to a definition in current unit.
378      set via finalize_function or finalize_decl  */
379   unsigned definition : 1;
380   /* True when symbol is an alias.
381      Set by ssemble_alias.  */
382   unsigned alias : 1;
383   /* True when alias is a weakref.  */
384   unsigned weakref : 1;
385   /* C++ frontend produce same body aliases and extra name aliases for
386      virtual functions and vtables that are obviously equivalent.
387      Those aliases are bit special, especially because C++ frontend
388      visibility code is so ugly it can not get them right at first time
389      and their visibility needs to be copied from their "masters" at
390      the end of parsing.  */
391   unsigned cpp_implicit_alias : 1;
392   /* Set once the definition was analyzed.  The list of references and
393      other properties are built during analysis.  */
394   unsigned analyzed : 1;
395   /* Set for write-only variables.  */
396   unsigned writeonly : 1;
397
398
399   /*** Visibility and linkage flags.  ***/
400
401   /* Set when function is visible by other units.  */
402   unsigned externally_visible : 1;
403   /* The symbol will be assumed to be used in an invisible way (like
404      by an toplevel asm statement).  */
405   unsigned force_output : 1;
406   /* Like FORCE_OUTPUT, but in the case it is ABI requiring the symbol to be
407      exported.  Unlike FORCE_OUTPUT this flag gets cleared to symbols promoted
408      to static and it does not inhibit optimization.  */
409   unsigned forced_by_abi : 1;
410   /* True when the name is known to be unique and thus it does not need mangling.  */
411   unsigned unique_name : 1;
412   /* Specify whether the section was set by user or by
413      compiler via -ffunction-sections.  */
414   unsigned implicit_section : 1;
415   /* True when body and other characteristics have been removed by
416      symtab_remove_unreachable_nodes. */
417   unsigned body_removed : 1;
418
419   /*** WHOPR Partitioning flags.
420        These flags are used at ltrans stage when only part of the callgraph is
421        available. ***/
422
423   /* Set when variable is used from other LTRANS partition.  */
424   unsigned used_from_other_partition : 1;
425   /* Set when function is available in the other LTRANS partition.
426      During WPA output it is used to mark nodes that are present in
427      multiple partitions.  */
428   unsigned in_other_partition : 1;
429
430
431
432   /*** other flags.  ***/
433
434   /* Set when symbol has address taken. */
435   unsigned address_taken : 1;
436   /* Set when init priority is set.  */
437   unsigned in_init_priority_hash : 1;
438
439
440   /* Ordering of all symtab entries.  */
441   int order;
442
443   /* Declaration representing the symbol.  */
444   tree decl;
445
446   /* Linked list of symbol table entries starting with symtab_nodes.  */
447   symtab_node *next;
448   symtab_node *previous;
449
450   /* Linked list of symbols with the same asm name.  There may be multiple
451      entries for single symbol name during LTO, because symbols are renamed
452      only after partitioning.
453
454      Because inline clones are kept in the assembler name has, they also produce
455      duplicate entries.
456
457      There are also several long standing bugs where frontends and builtin
458      code produce duplicated decls.  */
459   symtab_node *next_sharing_asm_name;
460   symtab_node *previous_sharing_asm_name;
461
462   /* Circular list of nodes in the same comdat group if non-NULL.  */
463   symtab_node *same_comdat_group;
464
465   /* Vectors of referring and referenced entities.  */
466   ipa_ref_list ref_list;
467
468   /* Alias target. May be either DECL pointer or ASSEMBLER_NAME pointer
469      depending to what was known to frontend on the creation time.
470      Once alias is resolved, this pointer become NULL.  */
471   tree alias_target;
472
473   /* File stream where this node is being written to.  */
474   struct lto_file_decl_data * lto_file_data;
475
476   PTR GTY ((skip)) aux;
477
478   /* Comdat group the symbol is in.  Can be private if GGC allowed that.  */
479   tree x_comdat_group;
480
481   /* Section name. Again can be private, if allowed.  */
482   section_hash_entry *x_section;
483
484 protected:
485   /* Dump base fields of symtab nodes to F.  Not to be used directly.  */
486   void dump_base (FILE *);
487
488   /* Verify common part of symtab node.  */
489   bool DEBUG_FUNCTION verify_base (void);
490
491   /* Remove node from symbol table.  This function is not used directly, but via
492      cgraph/varpool node removal routines.  */
493   void unregister (void);
494
495   /* Return the initialization and finalization priority information for
496      DECL.  If there is no previous priority information, a freshly
497      allocated structure is returned.  */
498   struct symbol_priority_map *priority_info (void);
499
500 private:
501   /* Worker for set_section.  */
502   static bool set_section (symtab_node *n, void *s);
503
504   /* Worker for symtab_resolve_alias.  */
505   static bool set_implicit_section (symtab_node *n, void *);
506
507   /* Worker searching noninterposable alias.  */
508   static bool noninterposable_alias (symtab_node *node, void *data);
509 };
510
511 /* Walk all aliases for NODE.  */
512 #define FOR_EACH_ALIAS(node, alias) \
513   for (unsigned x_i = 0; node->iterate_direct_aliases (x_i, alias); x_i++)
514
515 /* This is the information that is put into the cgraph local structure
516    to recover a function.  */
517 struct lto_file_decl_data;
518
519 extern const char * const cgraph_availability_names[];
520 extern const char * const ld_plugin_symbol_resolution_names[];
521 extern const char * const tls_model_names[];
522
523 /* Information about thunk, used only for same body aliases.  */
524
525 struct GTY(()) cgraph_thunk_info {
526   /* Information about the thunk.  */
527   HOST_WIDE_INT fixed_offset;
528   HOST_WIDE_INT virtual_value;
529   tree alias;
530   bool this_adjusting;
531   bool virtual_offset_p;
532   /* Set to true when alias node is thunk.  */
533   bool thunk_p;
534 };
535
536 /* Information about the function collected locally.
537    Available after function is analyzed.  */
538
539 struct GTY(()) cgraph_local_info {
540   /* Set when function function is visible in current compilation unit only
541      and its address is never taken.  */
542   unsigned local : 1;
543
544   /* False when there is something makes versioning impossible.  */
545   unsigned versionable : 1;
546
547   /* False when function calling convention and signature can not be changed.
548      This is the case when __builtin_apply_args is used.  */
549   unsigned can_change_signature : 1;
550
551   /* True when the function has been originally extern inline, but it is
552      redefined now.  */
553   unsigned redefined_extern_inline : 1;
554
555   /* True if the function may enter serial irrevocable mode.  */
556   unsigned tm_may_enter_irr : 1;
557 };
558
559 /* Information about the function that needs to be computed globally
560    once compilation is finished.  Available only with -funit-at-a-time.  */
561
562 struct GTY(()) cgraph_global_info {
563   /* For inline clones this points to the function they will be
564      inlined into.  */
565   cgraph_node *inlined_to;
566 };
567
568 /* Information about the function that is propagated by the RTL backend.
569    Available only for functions that has been already assembled.  */
570
571 struct GTY(()) cgraph_rtl_info {
572    unsigned int preferred_incoming_stack_boundary;
573
574   /* Call unsaved hard registers really used by the corresponding
575      function (including ones used by functions called by the
576      function).  */
577   HARD_REG_SET function_used_regs;
578   /* Set if function_used_regs is valid.  */
579   unsigned function_used_regs_valid: 1;
580 };
581
582 /* Represent which DECL tree (or reference to such tree)
583    will be replaced by another tree while versioning.  */
584 struct GTY(()) ipa_replace_map
585 {
586   /* The tree that will be replaced.  */
587   tree old_tree;
588   /* The new (replacing) tree.  */
589   tree new_tree;
590   /* Parameter number to replace, when old_tree is NULL.  */
591   int parm_num;
592   /* True when a substitution should be done, false otherwise.  */
593   bool replace_p;
594   /* True when we replace a reference to old_tree.  */
595   bool ref_p;
596 };
597
598 struct GTY(()) cgraph_clone_info
599 {
600   vec<ipa_replace_map *, va_gc> *tree_map;
601   bitmap args_to_skip;
602   bitmap combined_args_to_skip;
603 };
604
605 enum cgraph_simd_clone_arg_type
606 {
607   SIMD_CLONE_ARG_TYPE_VECTOR,
608   SIMD_CLONE_ARG_TYPE_UNIFORM,
609   SIMD_CLONE_ARG_TYPE_LINEAR_CONSTANT_STEP,
610   SIMD_CLONE_ARG_TYPE_LINEAR_VARIABLE_STEP,
611   SIMD_CLONE_ARG_TYPE_MASK
612 };
613
614 /* Function arguments in the original function of a SIMD clone.
615    Supplementary data for `struct simd_clone'.  */
616
617 struct GTY(()) cgraph_simd_clone_arg {
618   /* Original function argument as it originally existed in
619      DECL_ARGUMENTS.  */
620   tree orig_arg;
621
622   /* orig_arg's function (or for extern functions type from
623      TYPE_ARG_TYPES).  */
624   tree orig_type;
625
626   /* If argument is a vector, this holds the vector version of
627      orig_arg that after adjusting the argument types will live in
628      DECL_ARGUMENTS.  Otherwise, this is NULL.
629
630      This basically holds:
631        vector(simdlen) __typeof__(orig_arg) new_arg.  */
632   tree vector_arg;
633
634   /* vector_arg's type (or for extern functions new vector type.  */
635   tree vector_type;
636
637   /* If argument is a vector, this holds the array where the simd
638      argument is held while executing the simd clone function.  This
639      is a local variable in the cloned function.  Its content is
640      copied from vector_arg upon entry to the clone.
641
642      This basically holds:
643        __typeof__(orig_arg) simd_array[simdlen].  */
644   tree simd_array;
645
646   /* A SIMD clone's argument can be either linear (constant or
647      variable), uniform, or vector.  */
648   enum cgraph_simd_clone_arg_type arg_type;
649
650   /* For arg_type SIMD_CLONE_ARG_TYPE_LINEAR_CONSTANT_STEP this is
651      the constant linear step, if arg_type is
652      SIMD_CLONE_ARG_TYPE_LINEAR_VARIABLE_STEP, this is index of
653      the uniform argument holding the step, otherwise 0.  */
654   HOST_WIDE_INT linear_step;
655
656   /* Variable alignment if available, otherwise 0.  */
657   unsigned int alignment;
658 };
659
660 /* Specific data for a SIMD function clone.  */
661
662 struct GTY(()) cgraph_simd_clone {
663   /* Number of words in the SIMD lane associated with this clone.  */
664   unsigned int simdlen;
665
666   /* Number of annotated function arguments in `args'.  This is
667      usually the number of named arguments in FNDECL.  */
668   unsigned int nargs;
669
670   /* Max hardware vector size in bits for integral vectors.  */
671   unsigned int vecsize_int;
672
673   /* Max hardware vector size in bits for floating point vectors.  */
674   unsigned int vecsize_float;
675
676   /* The mangling character for a given vector size.  This is is used
677      to determine the ISA mangling bit as specified in the Intel
678      Vector ABI.  */
679   unsigned char vecsize_mangle;
680
681   /* True if this is the masked, in-branch version of the clone,
682      otherwise false.  */
683   unsigned int inbranch : 1;
684
685   /* True if this is a Cilk Plus variant.  */
686   unsigned int cilk_elemental : 1;
687
688   /* Doubly linked list of SIMD clones.  */
689   cgraph_node *prev_clone, *next_clone;
690
691   /* Original cgraph node the SIMD clones were created for.  */
692   cgraph_node *origin;
693
694   /* Annotated function arguments for the original function.  */
695   cgraph_simd_clone_arg GTY((length ("%h.nargs"))) args[1];
696 };
697
698 /* Function Multiversioning info.  */
699 struct GTY(()) cgraph_function_version_info {
700   /* The cgraph_node for which the function version info is stored.  */
701   cgraph_node *this_node;
702   /* Chains all the semantically identical function versions.  The
703      first function in this chain is the version_info node of the
704      default function.  */
705   cgraph_function_version_info *prev;
706   /* If this version node corresponds to a dispatcher for function
707      versions, this points to the version info node of the default
708      function, the first node in the chain.  */
709   cgraph_function_version_info *next;
710   /* If this node corresponds to a function version, this points
711      to the dispatcher function decl, which is the function that must
712      be called to execute the right function version at run-time.
713
714      If this cgraph node is a dispatcher (if dispatcher_function is
715      true, in the cgraph_node struct) for function versions, this
716      points to resolver function, which holds the function body of the
717      dispatcher. The dispatcher decl is an alias to the resolver
718      function decl.  */
719   tree dispatcher_resolver;
720 };
721
722 #define DEFCIFCODE(code, type, string)  CIF_ ## code,
723 /* Reasons for inlining failures.  */
724
725 enum cgraph_inline_failed_t {
726 #include "cif-code.def"
727   CIF_N_REASONS
728 };
729
730 enum cgraph_inline_failed_type_t
731 {
732   CIF_FINAL_NORMAL = 0,
733   CIF_FINAL_ERROR
734 };
735
736 struct cgraph_edge;
737
738 /* The cgraph data structure.
739    Each function decl has assigned cgraph_node listing callees and callers.  */
740
741 struct GTY((tag ("SYMTAB_FUNCTION"))) cgraph_node : public symtab_node {
742 public:
743   /* Remove the node from cgraph and all inline clones inlined into it.
744      Skip however removal of FORBIDDEN_NODE and return true if it needs to be
745      removed.  This allows to call the function from outer loop walking clone
746      tree.  */
747   bool remove_symbol_and_inline_clones (cgraph_node *forbidden_node = NULL);
748
749   /* Record all references from cgraph_node that are taken
750      in statement STMT.  */
751   void record_stmt_references (gimple stmt);
752
753   /* Like cgraph_set_call_stmt but walk the clone tree and update all
754      clones sharing the same function body.
755      When WHOLE_SPECULATIVE_EDGES is true, all three components of
756      speculative edge gets updated.  Otherwise we update only direct
757      call.  */
758   void set_call_stmt_including_clones (gimple old_stmt, gimple new_stmt,
759                                        bool update_speculative = true);
760
761   /* Walk the alias chain to return the function cgraph_node is alias of.
762      Walk through thunk, too.
763      When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
764   cgraph_node *function_symbol (enum availability *avail = NULL);
765
766   /* Create node representing clone of N executed COUNT times.  Decrease
767      the execution counts from original node too.
768      The new clone will have decl set to DECL that may or may not be the same
769      as decl of N.
770
771      When UPDATE_ORIGINAL is true, the counts are subtracted from the original
772      function's profile to reflect the fact that part of execution is handled
773      by node.
774      When CALL_DUPLICATOIN_HOOK is true, the ipa passes are acknowledged about
775      the new clone. Otherwise the caller is responsible for doing so later.
776
777      If the new node is being inlined into another one, NEW_INLINED_TO should be
778      the outline function the new one is (even indirectly) inlined to.
779      All hooks will see this in node's global.inlined_to, when invoked.
780      Can be NULL if the node is not inlined.  */
781   cgraph_node *create_clone (tree decl, gcov_type count, int freq,
782                              bool update_original,
783                              vec<cgraph_edge *> redirect_callers,
784                              bool call_duplication_hook,
785                              cgraph_node *new_inlined_to,
786                              bitmap args_to_skip);
787
788   /* Create callgraph node clone with new declaration.  The actual body will
789      be copied later at compilation stage.  */
790   cgraph_node *create_virtual_clone (vec<cgraph_edge *> redirect_callers,
791                                      vec<ipa_replace_map *, va_gc> *tree_map,
792                                      bitmap args_to_skip, const char * suffix);
793
794   /* cgraph node being removed from symbol table; see if its entry can be
795    replaced by other inline clone.  */
796   cgraph_node *find_replacement (void);
797
798   /* Create a new cgraph node which is the new version of
799      callgraph node.  REDIRECT_CALLERS holds the callers
800      edges which should be redirected to point to
801      NEW_VERSION.  ALL the callees edges of the node
802      are cloned to the new version node.  Return the new
803      version node.
804
805      If non-NULL BLOCK_TO_COPY determine what basic blocks
806      was copied to prevent duplications of calls that are dead
807      in the clone.  */
808
809   cgraph_node *create_version_clone (tree new_decl,
810                                     vec<cgraph_edge *> redirect_callers,
811                                     bitmap bbs_to_copy);
812
813   /* Perform function versioning.
814      Function versioning includes copying of the tree and
815      a callgraph update (creating a new cgraph node and updating
816      its callees and callers).
817
818      REDIRECT_CALLERS varray includes the edges to be redirected
819      to the new version.
820
821      TREE_MAP is a mapping of tree nodes we want to replace with
822      new ones (according to results of prior analysis).
823
824      If non-NULL ARGS_TO_SKIP determine function parameters to remove
825      from new version.
826      If SKIP_RETURN is true, the new version will return void.
827      If non-NULL BLOCK_TO_COPY determine what basic blocks to copy.
828      If non_NULL NEW_ENTRY determine new entry BB of the clone.
829
830      Return the new version's cgraph node.  */
831   cgraph_node *create_version_clone_with_body
832     (vec<cgraph_edge *> redirect_callers,
833      vec<ipa_replace_map *, va_gc> *tree_map, bitmap args_to_skip,
834      bool skip_return, bitmap bbs_to_copy, basic_block new_entry_block,
835      const char *clone_name);
836
837   /* Insert a new cgraph_function_version_info node into cgraph_fnver_htab
838      corresponding to cgraph_node.  */
839   cgraph_function_version_info *insert_new_function_version (void);
840
841   /* Get the cgraph_function_version_info node corresponding to node.  */
842   cgraph_function_version_info *function_version (void);
843
844   /* Discover all functions and variables that are trivially needed, analyze
845      them as well as all functions and variables referred by them  */
846   void analyze (void);
847
848   /* Add thunk alias into callgraph.  The alias declaration is ALIAS and it
849      aliases DECL with an adjustments made into the first parameter.
850      See comments in thunk_adjust for detail on the parameters.  */
851   cgraph_node * create_thunk (tree alias, tree, bool this_adjusting,
852                               HOST_WIDE_INT fixed_offset,
853                               HOST_WIDE_INT virtual_value,
854                               tree virtual_offset,
855                               tree real_alias);
856
857
858   /* Return node that alias is aliasing.  */
859   inline cgraph_node *get_alias_target (void);
860
861   /* Given function symbol, walk the alias chain to return the function node
862      is alias of. Do not walk through thunks.
863      When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
864
865   cgraph_node *ultimate_alias_target (availability *availability = NULL);
866
867   /* Expand thunk NODE to gimple if possible.
868      When FORCE_GIMPLE_THUNK is true, gimple thunk is created and
869      no assembler is produced.
870      When OUTPUT_ASM_THUNK is true, also produce assembler for
871      thunks that are not lowered.  */
872   bool expand_thunk (bool output_asm_thunks, bool force_gimple_thunk);
873
874   /* Assemble thunks and aliases associated to node.  */
875   void assemble_thunks_and_aliases (void);
876
877   /* Expand function specified by node.  */
878   void expand (void);
879
880   /* As an GCC extension we allow redefinition of the function.  The
881      semantics when both copies of bodies differ is not well defined.
882      We replace the old body with new body so in unit at a time mode
883      we always use new body, while in normal mode we may end up with
884      old body inlined into some functions and new body expanded and
885      inlined in others.  */
886   void reset (void);
887
888   /* Creates a wrapper from cgraph_node to TARGET node. Thunk is used for this
889      kind of wrapper method.  */
890   void create_wrapper (cgraph_node *target);
891
892   /* Verify cgraph nodes of the cgraph node.  */
893   void DEBUG_FUNCTION verify_node (void);
894
895   /* Remove function from symbol table.  */
896   void remove (void);
897
898   /* Dump call graph node to file F.  */
899   void dump (FILE *f);
900
901   /* Dump call graph node to stderr.  */
902   void DEBUG_FUNCTION debug (void);
903
904   /* When doing LTO, read cgraph_node's body from disk if it is not already
905      present.  */
906   bool get_body (void);
907
908   /* Release memory used to represent body of function.
909      Use this only for functions that are released before being translated to
910      target code (i.e. RTL).  Functions that are compiled to RTL and beyond
911      are free'd in final.c via free_after_compilation().  */
912   void release_body (void);
913
914   /* cgraph_node is no longer nested function; update cgraph accordingly.  */
915   void unnest (void);
916
917   /* Bring cgraph node local.  */
918   void make_local (void);
919
920   /* Likewise indicate that a node is having address taken.  */
921   void mark_address_taken (void);
922
923   /* Set fialization priority to PRIORITY.  */
924   void set_fini_priority (priority_type priority);
925
926   /* Return the finalization priority.  */
927   priority_type get_fini_priority (void);
928
929   /* Create edge from a given function to CALLEE in the cgraph.  */
930   cgraph_edge *create_edge (cgraph_node *callee,
931                             gimple call_stmt, gcov_type count,
932                             int freq);
933
934   /* Create an indirect edge with a yet-undetermined callee where the call
935      statement destination is a formal parameter of the caller with index
936      PARAM_INDEX. */
937   cgraph_edge *create_indirect_edge (gimple call_stmt, int ecf_flags,
938                                      gcov_type count, int freq,
939                                      bool compute_indirect_info = true);
940
941   /* Like cgraph_create_edge walk the clone tree and update all clones sharing
942    same function body.  If clones already have edge for OLD_STMT; only
943    update the edge same way as cgraph_set_call_stmt_including_clones does.  */
944   void create_edge_including_clones (cgraph_node *callee,
945                                      gimple old_stmt, gimple stmt,
946                                      gcov_type count,
947                                      int freq,
948                                      cgraph_inline_failed_t reason);
949
950   /* Return the callgraph edge representing the GIMPLE_CALL statement
951      CALL_STMT.  */
952   cgraph_edge *get_edge (gimple call_stmt);
953
954   /* Collect all callers of cgraph_node and its aliases that are known to lead
955      to NODE (i.e. are not overwritable).  */
956   vec<cgraph_edge *> collect_callers (void);
957
958   /* Remove all callers from the node.  */
959   void remove_callers (void);
960
961   /* Remove all callees from the node.  */
962   void remove_callees (void);
963
964   /* Return function availability.  See cgraph.h for description of individual
965      return values.  */
966   enum availability get_availability (void);
967
968   /* Set TREE_NOTHROW on cgraph_node's decl and on aliases of the node
969      if any to NOTHROW.  */
970   void set_nothrow_flag (bool nothrow);
971
972   /* Set TREE_READONLY on cgraph_node's decl and on aliases of the node
973      if any to READONLY.  */
974   void set_const_flag (bool readonly, bool looping);
975
976   /* Set DECL_PURE_P on cgraph_node's decl and on aliases of the node
977      if any to PURE.  */
978   void set_pure_flag (bool pure, bool looping);
979
980   /* Call calback on function and aliases associated to the function.
981      When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
982      skipped. */
983
984   bool call_for_symbol_and_aliases (bool (*callback) (cgraph_node *,
985                                                       void *),
986                                     void *data, bool include_overwritable);
987
988   /* Call calback on cgraph_node, thunks and aliases associated to NODE.
989      When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
990      skipped.  */
991   bool call_for_symbol_thunks_and_aliases (bool (*callback) (cgraph_node *node,
992                                                            void *data),
993                                          void *data,
994                                          bool include_overwritable);
995
996   /* Likewise indicate that a node is needed, i.e. reachable via some
997      external means.  */
998   inline void mark_force_output (void);
999
1000   /* Return true when function can be marked local.  */
1001   bool local_p (void);
1002
1003   /* Return true if cgraph_node can be made local for API change.
1004      Extern inline functions and C++ COMDAT functions can be made local
1005      at the expense of possible code size growth if function is used in multiple
1006      compilation units.  */
1007   bool can_be_local_p (void);
1008
1009   /* Return true when cgraph_node can not return or throw and thus
1010      it is safe to ignore its side effects for IPA analysis.  */
1011   bool cannot_return_p (void);
1012
1013   /* Return true when function cgraph_node and all its aliases are only called
1014      directly.
1015      i.e. it is not externally visible, address was not taken and
1016      it is not used in any other non-standard way.  */
1017   bool only_called_directly_p (void);
1018
1019   /* Return true when function is only called directly or it has alias.
1020      i.e. it is not externally visible, address was not taken and
1021      it is not used in any other non-standard way.  */
1022   inline bool only_called_directly_or_aliased_p (void);
1023
1024   /* Return true when function cgraph_node can be expected to be removed
1025      from program when direct calls in this compilation unit are removed.
1026
1027      As a special case COMDAT functions are
1028      cgraph_can_remove_if_no_direct_calls_p while the are not
1029      cgraph_only_called_directly_p (it is possible they are called from other
1030      unit)
1031
1032      This function behaves as cgraph_only_called_directly_p because eliminating
1033      all uses of COMDAT function does not make it necessarily disappear from
1034      the program unless we are compiling whole program or we do LTO.  In this
1035      case we know we win since dynamic linking will not really discard the
1036      linkonce section.  */
1037   bool will_be_removed_from_program_if_no_direct_calls_p (void);
1038
1039   /* Return true when function can be removed from callgraph
1040      if all direct calls are eliminated.  */
1041   bool can_remove_if_no_direct_calls_and_refs_p (void);
1042
1043   /* Return true when function cgraph_node and its aliases can be removed from
1044      callgraph if all direct calls are eliminated.  */
1045   bool can_remove_if_no_direct_calls_p (void);
1046
1047   /* Return true when callgraph node is a function with Gimple body defined
1048      in current unit.  Functions can also be define externally or they
1049      can be thunks with no Gimple representation.
1050
1051      Note that at WPA stage, the function body may not be present in memory.  */
1052   inline bool has_gimple_body_p (void);
1053
1054   /* Return true if function should be optimized for size.  */
1055   bool optimize_for_size_p (void);
1056
1057   /* Dump the callgraph to file F.  */
1058   static void dump_cgraph (FILE *f);
1059
1060   /* Dump the call graph to stderr.  */
1061   static inline
1062   void debug_cgraph (void)
1063   {
1064     dump_cgraph (stderr);
1065   }
1066
1067   /* Record that DECL1 and DECL2 are semantically identical function
1068      versions.  */
1069   static void record_function_versions (tree decl1, tree decl2);
1070
1071   /* Remove the cgraph_function_version_info and cgraph_node for DECL.  This
1072      DECL is a duplicate declaration.  */
1073   static void delete_function_version (tree decl);
1074
1075   /* Add the function FNDECL to the call graph.
1076      Unlike finalize_function, this function is intended to be used
1077      by middle end and allows insertion of new function at arbitrary point
1078      of compilation.  The function can be either in high, low or SSA form
1079      GIMPLE.
1080
1081      The function is assumed to be reachable and have address taken (so no
1082      API breaking optimizations are performed on it).
1083
1084      Main work done by this function is to enqueue the function for later
1085      processing to avoid need the passes to be re-entrant.  */
1086   static void add_new_function (tree fndecl, bool lowered);
1087
1088   /* Return callgraph node for given symbol and check it is a function. */
1089   static inline cgraph_node *get (const_tree decl)
1090   {
1091     gcc_checking_assert (TREE_CODE (decl) == FUNCTION_DECL);
1092     return dyn_cast <cgraph_node *> (symtab_node::get (decl));
1093   }
1094
1095   /* DECL has been parsed.  Take it, queue it, compile it at the whim of the
1096      logic in effect.  If NO_COLLECT is true, then our caller cannot stand to
1097      have the garbage collector run at the moment.  We would need to either
1098      create a new GC context, or just not compile right now.  */
1099   static void finalize_function (tree, bool);
1100
1101   /* Return cgraph node assigned to DECL.  Create new one when needed.  */
1102   static cgraph_node * create (tree decl);
1103
1104   /* Try to find a call graph node for declaration DECL and if it does not
1105      exist or if it corresponds to an inline clone, create a new one.  */
1106   static cgraph_node * get_create (tree);
1107
1108   /* Return local info for the compiled function.  */
1109   static cgraph_local_info *local_info (tree decl);
1110
1111   /* Return global info for the compiled function.  */
1112   static cgraph_global_info *global_info (tree);
1113
1114   /* Return local info for the compiled function.  */
1115   static cgraph_rtl_info *rtl_info (tree);
1116
1117   /* Return the cgraph node that has ASMNAME for its DECL_ASSEMBLER_NAME.
1118      Return NULL if there's no such node.  */
1119   static cgraph_node *get_for_asmname (tree asmname);
1120
1121   /* Attempt to mark ALIAS as an alias to DECL.  Return alias node if
1122      successful and NULL otherwise.
1123      Same body aliases are output whenever the body of DECL is output,
1124      and cgraph_node::get (ALIAS) transparently
1125      returns cgraph_node::get (DECL).  */
1126   static cgraph_node * create_same_body_alias (tree alias, tree decl);
1127
1128   /* Worker for cgraph_can_remove_if_no_direct_calls_p.  */
1129   static bool used_from_object_file_p_worker (cgraph_node *node, void *)
1130   {
1131     return node->used_from_object_file_p ();
1132   }
1133
1134   /* Return true when cgraph_node can not be local.
1135      Worker for cgraph_local_node_p.  */
1136   static bool non_local_p (cgraph_node *node, void *);
1137
1138   /* Verify whole cgraph structure.  */
1139   static void DEBUG_FUNCTION verify_cgraph_nodes (void);
1140
1141   /* Worker to bring NODE local.  */
1142   static bool make_local (cgraph_node *node, void *);
1143
1144   /* Mark ALIAS as an alias to DECL.  DECL_NODE is cgraph node representing
1145      the function body is associated
1146      with (not necessarily cgraph_node (DECL).  */
1147   static cgraph_node *create_alias (tree alias, tree target);
1148
1149   cgraph_edge *callees;
1150   cgraph_edge *callers;
1151   /* List of edges representing indirect calls with a yet undetermined
1152      callee.  */
1153   cgraph_edge *indirect_calls;
1154   /* For nested functions points to function the node is nested in.  */
1155   cgraph_node *origin;
1156   /* Points to first nested function, if any.  */
1157   cgraph_node *nested;
1158   /* Pointer to the next function with same origin, if any.  */
1159   cgraph_node *next_nested;
1160   /* Pointer to the next clone.  */
1161   cgraph_node *next_sibling_clone;
1162   cgraph_node *prev_sibling_clone;
1163   cgraph_node *clones;
1164   cgraph_node *clone_of;
1165   /* For functions with many calls sites it holds map from call expression
1166      to the edge to speed up cgraph_edge function.  */
1167   htab_t GTY((param_is (cgraph_edge))) call_site_hash;
1168   /* Declaration node used to be clone of. */
1169   tree former_clone_of;
1170
1171   /* If this is a SIMD clone, this points to the SIMD specific
1172      information for it.  */
1173   cgraph_simd_clone *simdclone;
1174   /* If this function has SIMD clones, this points to the first clone.  */
1175   cgraph_node *simd_clones;
1176
1177   /* Interprocedural passes scheduled to have their transform functions
1178      applied next time we execute local pass on them.  We maintain it
1179      per-function in order to allow IPA passes to introduce new functions.  */
1180   vec<ipa_opt_pass> GTY((skip)) ipa_transforms_to_apply;
1181
1182   cgraph_local_info local;
1183   cgraph_global_info global;
1184   cgraph_rtl_info rtl;
1185   cgraph_clone_info clone;
1186   cgraph_thunk_info thunk;
1187
1188   /* Expected number of executions: calculated in profile.c.  */
1189   gcov_type count;
1190   /* How to scale counts at materialization time; used to merge
1191      LTO units with different number of profile runs.  */
1192   int count_materialization_scale;
1193   /* Unique id of the node.  */
1194   int uid;
1195   /* ID assigned by the profiling.  */
1196   unsigned int profile_id;
1197   /* Time profiler: first run of function.  */
1198   int tp_first_run;
1199
1200   /* Set when decl is an abstract function pointed to by the
1201      ABSTRACT_DECL_ORIGIN of a reachable function.  */
1202   unsigned used_as_abstract_origin : 1;
1203   /* Set once the function is lowered (i.e. its CFG is built).  */
1204   unsigned lowered : 1;
1205   /* Set once the function has been instantiated and its callee
1206      lists created.  */
1207   unsigned process : 1;
1208   /* How commonly executed the node is.  Initialized during branch
1209      probabilities pass.  */
1210   ENUM_BITFIELD (node_frequency) frequency : 2;
1211   /* True when function can only be called at startup (from static ctor).  */
1212   unsigned only_called_at_startup : 1;
1213   /* True when function can only be called at startup (from static dtor).  */
1214   unsigned only_called_at_exit : 1;
1215   /* True when function is the transactional clone of a function which
1216      is called only from inside transactions.  */
1217   /* ?? We should be able to remove this.  We have enough bits in
1218      cgraph to calculate it.  */
1219   unsigned tm_clone : 1;
1220   /* True if this decl is a dispatcher for function versions.  */
1221   unsigned dispatcher_function : 1;
1222   /* True if this decl calls a COMDAT-local function.  This is set up in
1223      compute_inline_parameters and inline_call.  */
1224   unsigned calls_comdat_local : 1;
1225 };
1226
1227 /* A cgraph node set is a collection of cgraph nodes.  A cgraph node
1228    can appear in multiple sets.  */
1229 struct cgraph_node_set_def
1230 {
1231   hash_map<cgraph_node *, size_t> *map;
1232   vec<cgraph_node *> nodes;
1233 };
1234
1235 typedef cgraph_node_set_def *cgraph_node_set;
1236 typedef struct varpool_node_set_def *varpool_node_set;
1237
1238 class varpool_node;
1239
1240 /* A varpool node set is a collection of varpool nodes.  A varpool node
1241    can appear in multiple sets.  */
1242 struct varpool_node_set_def
1243 {
1244   hash_map<varpool_node *, size_t> * map;
1245   vec<varpool_node *> nodes;
1246 };
1247
1248 /* Iterator structure for cgraph node sets.  */
1249 struct cgraph_node_set_iterator
1250 {
1251   cgraph_node_set set;
1252   unsigned index;
1253 };
1254
1255 /* Iterator structure for varpool node sets.  */
1256 struct varpool_node_set_iterator
1257 {
1258   varpool_node_set set;
1259   unsigned index;
1260 };
1261
1262 /* Structure containing additional information about an indirect call.  */
1263
1264 struct GTY(()) cgraph_indirect_call_info
1265 {
1266   /* When polymorphic is set, this field contains offset where the object which
1267      was actually used in the polymorphic resides within a larger structure.
1268      If agg_contents is set, the field contains the offset within the aggregate
1269      from which the address to call was loaded.  */
1270   HOST_WIDE_INT offset, speculative_offset;
1271   /* OBJ_TYPE_REF_TOKEN of a polymorphic call (if polymorphic is set).  */
1272   HOST_WIDE_INT otr_token;
1273   /* Type of the object from OBJ_TYPE_REF_OBJECT. */
1274   tree otr_type, outer_type, speculative_outer_type;
1275   /* Index of the parameter that is called.  */
1276   int param_index;
1277   /* ECF flags determined from the caller.  */
1278   int ecf_flags;
1279   /* Profile_id of common target obtrained from profile.  */
1280   int common_target_id;
1281   /* Probability that call will land in function with COMMON_TARGET_ID.  */
1282   int common_target_probability;
1283
1284   /* Set when the call is a virtual call with the parameter being the
1285      associated object pointer rather than a simple direct call.  */
1286   unsigned polymorphic : 1;
1287   /* Set when the call is a call of a pointer loaded from contents of an
1288      aggregate at offset.  */
1289   unsigned agg_contents : 1;
1290   /* Set when this is a call through a member pointer.  */
1291   unsigned member_ptr : 1;
1292   /* When the previous bit is set, this one determines whether the destination
1293      is loaded from a parameter passed by reference. */
1294   unsigned by_ref : 1;
1295   unsigned int maybe_in_construction : 1;
1296   unsigned int maybe_derived_type : 1;
1297   unsigned int speculative_maybe_derived_type : 1;
1298 };
1299
1300 struct GTY((chain_next ("%h.next_caller"), chain_prev ("%h.prev_caller"))) cgraph_edge {
1301   friend class cgraph_node;
1302
1303   /* Remove the edge in the cgraph.  */
1304   void remove (void);
1305
1306   /* Change field call_stmt of edge to NEW_STMT.
1307      If UPDATE_SPECULATIVE and E is any component of speculative
1308      edge, then update all components.  */
1309   void set_call_stmt (gimple new_stmt, bool update_speculative = true);
1310
1311   /* Redirect callee of the edge to N.  The function does not update underlying
1312      call expression.  */
1313   void redirect_callee (cgraph_node *n);
1314
1315   /* Make an indirect edge with an unknown callee an ordinary edge leading to
1316      CALLEE.  DELTA is an integer constant that is to be added to the this
1317      pointer (first parameter) to compensate for skipping
1318      a thunk adjustment.  */
1319   cgraph_edge *make_direct (cgraph_node *callee);
1320
1321   /* Turn edge into speculative call calling N2. Update
1322      the profile so the direct call is taken COUNT times
1323      with FREQUENCY.  */
1324   cgraph_edge *make_speculative (cgraph_node *n2, gcov_type direct_count,
1325                                  int direct_frequency);
1326
1327    /* Given speculative call edge, return all three components.  */
1328   void speculative_call_info (cgraph_edge *&direct, cgraph_edge *&indirect,
1329                               ipa_ref *&reference);
1330
1331   /* Speculative call edge turned out to be direct call to CALLE_DECL.
1332      Remove the speculative call sequence and return edge representing the call.
1333      It is up to caller to redirect the call as appropriate. */
1334   cgraph_edge *resolve_speculation (tree callee_decl = NULL);
1335
1336   /* If necessary, change the function declaration in the call statement
1337      associated with the edge so that it corresponds to the edge callee.  */
1338   gimple redirect_call_stmt_to_callee (void);
1339
1340   /* Create clone of edge in the node N represented
1341      by CALL_EXPR the callgraph.  */
1342   cgraph_edge * clone (cgraph_node *n, gimple call_stmt, unsigned stmt_uid,
1343                        gcov_type count_scale, int freq_scale, bool update_original);
1344
1345   /* Return true when call of edge can not lead to return from caller
1346      and thus it is safe to ignore its side effects for IPA analysis
1347      when computing side effects of the caller.  */
1348   bool cannot_lead_to_return_p (void);
1349
1350   /* Return true when the edge represents a direct recursion.  */
1351   bool recursive_p (void);
1352
1353   /* Return true if the call can be hot.  */
1354   bool maybe_hot_p (void);
1355
1356   /* Rebuild cgraph edges for current function node.  This needs to be run after
1357      passes that don't update the cgraph.  */
1358   static unsigned int rebuild_edges (void);
1359
1360   /* Rebuild cgraph references for current function node.  This needs to be run
1361      after passes that don't update the cgraph.  */
1362   static void rebuild_references (void);
1363
1364   /* Expected number of executions: calculated in profile.c.  */
1365   gcov_type count;
1366   cgraph_node *caller;
1367   cgraph_node *callee;
1368   cgraph_edge *prev_caller;
1369   cgraph_edge *next_caller;
1370   cgraph_edge *prev_callee;
1371   cgraph_edge *next_callee;
1372   gimple call_stmt;
1373   /* Additional information about an indirect call.  Not cleared when an edge
1374      becomes direct.  */
1375   cgraph_indirect_call_info *indirect_info;
1376   PTR GTY ((skip (""))) aux;
1377   /* When equal to CIF_OK, inline this call.  Otherwise, points to the
1378      explanation why function was not inlined.  */
1379   enum cgraph_inline_failed_t inline_failed;
1380   /* The stmt_uid of call_stmt.  This is used by LTO to recover the call_stmt
1381      when the function is serialized in.  */
1382   unsigned int lto_stmt_uid;
1383   /* Expected frequency of executions within the function.
1384      When set to CGRAPH_FREQ_BASE, the edge is expected to be called once
1385      per function call.  The range is 0 to CGRAPH_FREQ_MAX.  */
1386   int frequency;
1387   /* Unique id of the edge.  */
1388   int uid;
1389   /* Whether this edge was made direct by indirect inlining.  */
1390   unsigned int indirect_inlining_edge : 1;
1391   /* Whether this edge describes an indirect call with an undetermined
1392      callee.  */
1393   unsigned int indirect_unknown_callee : 1;
1394   /* Whether this edge is still a dangling  */
1395   /* True if the corresponding CALL stmt cannot be inlined.  */
1396   unsigned int call_stmt_cannot_inline_p : 1;
1397   /* Can this call throw externally?  */
1398   unsigned int can_throw_external : 1;
1399   /* Edges with SPECULATIVE flag represents indirect calls that was
1400      speculatively turned into direct (i.e. by profile feedback).
1401      The final code sequence will have form:
1402
1403      if (call_target == expected_fn)
1404        expected_fn ();
1405      else
1406        call_target ();
1407
1408      Every speculative call is represented by three components attached
1409      to a same call statement:
1410      1) a direct call (to expected_fn)
1411      2) an indirect call (to call_target)
1412      3) a IPA_REF_ADDR refrence to expected_fn.
1413
1414      Optimizers may later redirect direct call to clone, so 1) and 3)
1415      do not need to necesarily agree with destination.  */
1416   unsigned int speculative : 1;
1417
1418 private:
1419   /* Remove the edge from the list of the callers of the callee.  */
1420   void remove_caller (void);
1421
1422   /* Remove the edge from the list of the callees of the caller.  */
1423   void remove_callee (void);
1424 };
1425
1426 #define CGRAPH_FREQ_BASE 1000
1427 #define CGRAPH_FREQ_MAX 100000
1428
1429 /* The varpool data structure.
1430    Each static variable decl has assigned varpool_node.  */
1431
1432 class GTY((tag ("SYMTAB_VARIABLE"))) varpool_node : public symtab_node {
1433 public:
1434   /* Dump given varpool node to F.  */
1435   void dump (FILE *f);
1436
1437   /* Dump given varpool node to stderr.  */
1438   void DEBUG_FUNCTION debug (void);
1439
1440   /* Remove variable from symbol table.  */
1441   void remove (void);
1442
1443   /* Remove node initializer when it is no longer needed.  */
1444   void remove_initializer (void);
1445
1446   void analyze (void);
1447
1448   /* Return variable availability.  */
1449   availability get_availability (void);
1450
1451   /* When doing LTO, read variable's constructor from disk if
1452      it is not already present.  */
1453   tree get_constructor (void);
1454
1455   /* Return true if variable has constructor that can be used for folding.  */
1456   bool ctor_useable_for_folding_p (void);
1457
1458   /* For given variable pool node, walk the alias chain to return the function
1459      the variable is alias of. Do not walk through thunks.
1460      When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
1461   inline varpool_node *ultimate_alias_target
1462     (availability *availability = NULL);
1463
1464   /* Return node that alias is aliasing.  */
1465   inline varpool_node *get_alias_target (void);
1466
1467   /* Output one variable, if necessary.  Return whether we output it.  */
1468   bool assemble_decl (void);
1469
1470   /* For variables in named sections make sure get_variable_section
1471      is called before we switch to those sections.  Then section
1472      conflicts between read-only and read-only requiring relocations
1473      sections can be resolved.  */
1474   void finalize_named_section_flags (void);
1475
1476   /* Call calback on varpool symbol and aliases associated to varpool symbol.
1477      When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
1478      skipped. */
1479   bool call_for_node_and_aliases (bool (*callback) (varpool_node *, void *),
1480                                   void *data,
1481                                    bool include_overwritable);
1482
1483   /* Return true when variable should be considered externally visible.  */
1484   bool externally_visible_p (void);
1485
1486   /* Return true when all references to variable must be visible
1487      in ipa_ref_list.
1488      i.e. if the variable is not externally visible or not used in some magic
1489      way (asm statement or such).
1490      The magic uses are all summarized in force_output flag.  */
1491   inline bool all_refs_explicit_p ();
1492
1493   /* Return true when variable can be removed from variable pool
1494      if all direct calls are eliminated.  */
1495   inline bool can_remove_if_no_refs_p (void);
1496
1497   /* Add the variable DECL to the varpool.
1498      Unlike finalize_decl function is intended to be used
1499      by middle end and allows insertion of new variable at arbitrary point
1500      of compilation.  */
1501   static void add (tree decl);
1502
1503   /* Return varpool node for given symbol and check it is a function. */
1504   static inline varpool_node *get (const_tree decl);
1505
1506   /* Mark DECL as finalized.  By finalizing the declaration, frontend instruct
1507      the middle end to output the variable to asm file, if needed or externally
1508      visible.  */
1509   static void finalize_decl (tree decl);
1510
1511   /* Attempt to mark ALIAS as an alias to DECL.  Return TRUE if successful.
1512      Extra name aliases are output whenever DECL is output.  */
1513   static varpool_node * create_extra_name_alias (tree alias, tree decl);
1514
1515   /* Attempt to mark ALIAS as an alias to DECL.  Return TRUE if successful.
1516      Extra name aliases are output whenever DECL is output.  */
1517   static varpool_node * create_alias (tree, tree);
1518
1519   /* Dump the variable pool to F.  */
1520   static void dump_varpool (FILE *f);
1521
1522   /* Dump the variable pool to stderr.  */
1523   static void DEBUG_FUNCTION debug_varpool (void);
1524
1525   /* Allocate new callgraph node and insert it into basic data structures.  */
1526   static varpool_node *create_empty (void);
1527
1528   /* Return varpool node assigned to DECL.  Create new one when needed.  */
1529   static varpool_node *get_create (tree decl);
1530
1531   /* Given an assembler name, lookup node.  */
1532   static varpool_node *get_for_asmname (tree asmname);
1533
1534   /* Set when variable is scheduled to be assembled.  */
1535   unsigned output : 1;
1536
1537   /* Set if the variable is dynamically initialized, except for
1538      function local statics.   */
1539   unsigned dynamically_initialized : 1;
1540
1541   ENUM_BITFIELD(tls_model) tls_model : 3;
1542
1543   /* Set if the variable is known to be used by single function only.
1544      This is computed by ipa_signle_use pass and used by late optimizations
1545      in places where optimization would be valid for local static variable
1546      if we did not do any inter-procedural code movement.  */
1547   unsigned used_by_single_function : 1;
1548
1549 private:
1550   /* Assemble thunks and aliases associated to varpool node.  */
1551   void assemble_aliases (void);
1552 };
1553
1554 /* Every top level asm statement is put into a asm_node.  */
1555
1556 struct GTY(()) asm_node {
1557
1558
1559   /* Next asm node.  */
1560   asm_node *next;
1561   /* String for this asm node.  */
1562   tree asm_str;
1563   /* Ordering of all cgraph nodes.  */
1564   int order;
1565 };
1566
1567 /* Report whether or not THIS symtab node is a function, aka cgraph_node.  */
1568
1569 template <>
1570 template <>
1571 inline bool
1572 is_a_helper <cgraph_node *>::test (symtab_node *p)
1573 {
1574   return p && p->type == SYMTAB_FUNCTION;
1575 }
1576
1577 /* Report whether or not THIS symtab node is a vriable, aka varpool_node.  */
1578
1579 template <>
1580 template <>
1581 inline bool
1582 is_a_helper <varpool_node *>::test (symtab_node *p)
1583 {
1584   return p && p->type == SYMTAB_VARIABLE;
1585 }
1586
1587 /* Macros to access the next item in the list of free cgraph nodes and
1588    edges. */
1589 #define NEXT_FREE_NODE(NODE) dyn_cast<cgraph_node *> ((NODE)->next)
1590 #define SET_NEXT_FREE_NODE(NODE,NODE2) ((NODE))->next = NODE2
1591 #define NEXT_FREE_EDGE(EDGE) (EDGE)->prev_caller
1592
1593 typedef void (*cgraph_edge_hook)(cgraph_edge *, void *);
1594 typedef void (*cgraph_node_hook)(cgraph_node *, void *);
1595 typedef void (*varpool_node_hook)(varpool_node *, void *);
1596 typedef void (*cgraph_2edge_hook)(cgraph_edge *, cgraph_edge *, void *);
1597 typedef void (*cgraph_2node_hook)(cgraph_node *, cgraph_node *, void *);
1598
1599 struct cgraph_edge_hook_list;
1600 struct cgraph_node_hook_list;
1601 struct varpool_node_hook_list;
1602 struct cgraph_2edge_hook_list;
1603 struct cgraph_2node_hook_list;
1604
1605 /* Map from a symbol to initialization/finalization priorities.  */
1606 struct GTY(()) symbol_priority_map {
1607   symtab_node *symbol;
1608   priority_type init;
1609   priority_type fini;
1610 };
1611
1612 enum symtab_state
1613 {
1614   /* Frontend is parsing and finalizing functions.  */
1615   PARSING,
1616   /* Callgraph is being constructed.  It is safe to add new functions.  */
1617   CONSTRUCTION,
1618   /* Callgraph is being at LTO time.  */
1619   LTO_STREAMING,
1620   /* Callgraph is built and IPA passes are being run.  */
1621   IPA,
1622   /* Callgraph is built and all functions are transformed to SSA form.  */
1623   IPA_SSA,
1624   /* Functions are now ordered and being passed to RTL expanders.  */
1625   EXPANSION,
1626   /* All cgraph expansion is done.  */
1627   FINISHED
1628 };
1629
1630 class GTY((tag ("SYMTAB"))) symbol_table
1631 {
1632 public:
1633   friend class symtab_node;
1634   friend class cgraph_node;
1635   friend class cgraph_edge;
1636
1637   /* Initialize callgraph dump file.  */
1638   inline void
1639   initialize (void)
1640   {
1641     if (!dump_file)
1642       dump_file = dump_begin (TDI_cgraph, NULL);
1643   }
1644
1645   /* Register a top-level asm statement ASM_STR.  */
1646   inline asm_node *finalize_toplevel_asm (tree asm_str);
1647
1648   /* Analyze the whole compilation unit once it is parsed completely.  */
1649   void finalize_compilation_unit (void);
1650
1651   /* C++ frontend produce same body aliases all over the place, even before PCH
1652      gets streamed out. It relies on us linking the aliases with their function
1653      in order to do the fixups, but ipa-ref is not PCH safe.  Consequentely we
1654      first produce aliases without links, but once C++ FE is sure he won't sream
1655      PCH we build the links via this function.  */
1656   void process_same_body_aliases (void);
1657
1658   /* Perform simple optimizations based on callgraph.  */
1659   void compile (void);
1660
1661   /* Process CGRAPH_NEW_FUNCTIONS and perform actions necessary to add these
1662      functions into callgraph in a way so they look like ordinary reachable
1663      functions inserted into callgraph already at construction time.  */
1664   void process_new_functions (void);
1665
1666   /* Once all functions from compilation unit are in memory, produce all clones
1667      and update all calls.  We might also do this on demand if we don't want to
1668      bring all functions to memory prior compilation, but current WHOPR
1669      implementation does that and it is is bit easier to keep everything right
1670      in this order.  */
1671   void materialize_all_clones (void);
1672
1673   /* Register a symbol NODE.  */
1674   inline void register_symbol (symtab_node *node);
1675
1676   inline void
1677   clear_asm_symbols (void)
1678   {
1679     asmnodes = NULL;
1680     asm_last_node = NULL;
1681   }
1682
1683   /* Perform reachability analysis and reclaim all unreachable nodes.  */
1684   bool remove_unreachable_nodes (bool before_inlining_p, FILE *file);
1685
1686   /* Optimization of function bodies might've rendered some variables as
1687      unnecessary so we want to avoid these from being compiled.  Re-do
1688      reachability starting from variables that are either externally visible
1689      or was referred from the asm output routines.  */
1690   void remove_unreferenced_decls (void);
1691
1692   /* Unregister a symbol NODE.  */
1693   inline void unregister (symtab_node *node);
1694
1695   /* Allocate new callgraph node and insert it into basic data structures.  */
1696   cgraph_node *create_empty (void);
1697
1698   /* Release a callgraph NODE with UID and put in to the list
1699      of free nodes.  */
1700   void release_symbol (cgraph_node *node, int uid);
1701
1702   /* Output all variables enqueued to be assembled.  */
1703   bool output_variables (void);
1704
1705   /* Output all asm statements we have stored up to be output.  */
1706   void output_asm_statements (void);
1707
1708   /* Weakrefs may be associated to external decls and thus not output
1709      at expansion time.  Emit all necessary aliases.  */
1710   void output_weakrefs (void);
1711
1712   /* Return first static symbol with definition.  */
1713   inline symtab_node *first_symbol (void);
1714
1715   /* Return first assembler symbol.  */
1716   inline asm_node *
1717   first_asm_symbol (void)
1718   {
1719     return asmnodes;
1720   }
1721
1722   /* Return first static symbol with definition.  */
1723   inline symtab_node *first_defined_symbol (void);
1724
1725   /* Return first variable.  */
1726   inline varpool_node *first_variable (void);
1727
1728   /* Return next variable after NODE.  */
1729   inline varpool_node *next_variable (varpool_node *node);
1730
1731   /* Return first static variable with initializer.  */
1732   inline varpool_node *first_static_initializer (void);
1733
1734   /* Return next static variable with initializer after NODE.  */
1735   inline varpool_node *next_static_initializer (varpool_node *node);
1736
1737   /* Return first static variable with definition.  */
1738   inline varpool_node *first_defined_variable (void);
1739
1740   /* Return next static variable with definition after NODE.  */
1741   inline varpool_node *next_defined_variable (varpool_node *node);
1742
1743   /* Return first function with body defined.  */
1744   inline cgraph_node *first_defined_function (void);
1745
1746   /* Return next function with body defined after NODE.  */
1747   inline cgraph_node *next_defined_function (cgraph_node *node);
1748
1749   /* Return first function.  */
1750   inline cgraph_node *first_function (void);
1751
1752   /* Return next function.  */
1753   inline cgraph_node *next_function (cgraph_node *node);
1754
1755   /* Return first function with body defined.  */
1756   cgraph_node *first_function_with_gimple_body (void);
1757
1758   /* Return next reachable static variable with initializer after NODE.  */
1759   inline cgraph_node *next_function_with_gimple_body (cgraph_node *node);
1760
1761   /* Register HOOK to be called with DATA on each removed edge.  */
1762   cgraph_edge_hook_list *add_edge_removal_hook (cgraph_edge_hook hook,
1763                                                 void *data);
1764
1765   /* Remove ENTRY from the list of hooks called on removing edges.  */
1766   void remove_edge_removal_hook (cgraph_edge_hook_list *entry);
1767
1768   /* Register HOOK to be called with DATA on each removed node.  */
1769   cgraph_node_hook_list *add_cgraph_removal_hook (cgraph_node_hook hook,
1770                                                   void *data);
1771
1772   /* Remove ENTRY from the list of hooks called on removing nodes.  */
1773   void remove_cgraph_removal_hook (cgraph_node_hook_list *entry);
1774
1775   /* Register HOOK to be called with DATA on each removed node.  */
1776   varpool_node_hook_list *add_varpool_removal_hook (varpool_node_hook hook,
1777                                                     void *data);
1778
1779   /* Remove ENTRY from the list of hooks called on removing nodes.  */
1780   void remove_varpool_removal_hook (varpool_node_hook_list *entry);
1781
1782   /* Register HOOK to be called with DATA on each inserted node.  */
1783   cgraph_node_hook_list *add_cgraph_insertion_hook (cgraph_node_hook hook,
1784                                                     void *data);
1785
1786   /* Remove ENTRY from the list of hooks called on inserted nodes.  */
1787   void remove_cgraph_insertion_hook (cgraph_node_hook_list *entry);
1788
1789   /* Register HOOK to be called with DATA on each inserted node.  */
1790   varpool_node_hook_list *add_varpool_insertion_hook (varpool_node_hook hook,
1791                                                       void *data);
1792
1793   /* Remove ENTRY from the list of hooks called on inserted nodes.  */
1794   void remove_varpool_insertion_hook (varpool_node_hook_list *entry);
1795
1796   /* Register HOOK to be called with DATA on each duplicated edge.  */
1797   cgraph_2edge_hook_list *add_edge_duplication_hook (cgraph_2edge_hook hook,
1798                                                      void *data);
1799   /* Remove ENTRY from the list of hooks called on duplicating edges.  */
1800   void remove_edge_duplication_hook (cgraph_2edge_hook_list *entry);
1801
1802   /* Register HOOK to be called with DATA on each duplicated node.  */
1803   cgraph_2node_hook_list *add_cgraph_duplication_hook (cgraph_2node_hook hook,
1804                                                        void *data);
1805
1806   /* Remove ENTRY from the list of hooks called on duplicating nodes.  */
1807   void remove_cgraph_duplication_hook (cgraph_2node_hook_list *entry);
1808
1809   /* Call all edge removal hooks.  */
1810   void call_edge_removal_hooks (cgraph_edge *e);
1811
1812   /* Call all node insertion hooks.  */
1813   void call_cgraph_insertion_hooks (cgraph_node *node);
1814
1815   /* Call all node removal hooks.  */
1816   void call_cgraph_removal_hooks (cgraph_node *node);
1817
1818   /* Call all node duplication hooks.  */
1819   void call_cgraph_duplication_hooks (cgraph_node *node, cgraph_node *node2);
1820
1821   /* Call all edge duplication hooks.  */
1822   void call_edge_duplication_hooks (cgraph_edge *cs1, cgraph_edge *cs2);
1823
1824   /* Call all node removal hooks.  */
1825   void call_varpool_removal_hooks (varpool_node *node);
1826
1827   /* Call all node insertion hooks.  */
1828   void call_varpool_insertion_hooks (varpool_node *node);
1829
1830   /* Arrange node to be first in its entry of assembler_name_hash.  */
1831   void symtab_prevail_in_asm_name_hash (symtab_node *node);
1832
1833   /* Initalize asm name hash unless.  */
1834   void symtab_initialize_asm_name_hash (void);
1835
1836   /* Set the DECL_ASSEMBLER_NAME and update symtab hashtables.  */
1837   void change_decl_assembler_name (tree decl, tree name);
1838
1839   int cgraph_count;
1840   int cgraph_max_uid;
1841
1842   int edges_count;
1843   int edges_max_uid;
1844
1845   symtab_node* GTY(()) nodes;
1846   asm_node* GTY(()) asmnodes;
1847   asm_node* GTY(()) asm_last_node;
1848   cgraph_node* GTY(()) free_nodes;
1849
1850   /* Head of a linked list of unused (freed) call graph edges.
1851      Do not GTY((delete)) this list so UIDs gets reliably recycled.  */
1852   cgraph_edge * GTY(()) free_edges;
1853
1854   /* The order index of the next symtab node to be created.  This is
1855      used so that we can sort the cgraph nodes in order by when we saw
1856      them, to support -fno-toplevel-reorder.  */
1857   int order;
1858
1859   /* Set when whole unit has been analyzed so we can access global info.  */
1860   bool global_info_ready;
1861   /* What state callgraph is in right now.  */
1862   enum symtab_state state;
1863   /* Set when the cgraph is fully build and the basic flags are computed.  */
1864   bool function_flags_ready;
1865
1866   bool cpp_implicit_aliases_done;
1867
1868   /* Hash table used to hold sectoons.  */
1869   htab_t GTY((param_is (section_hash_entry))) section_hash;
1870
1871   /* Hash table used to convert assembler names into nodes.  */
1872   htab_t GTY((param_is (symtab_node))) assembler_name_hash;
1873
1874   /* Hash table used to hold init priorities.  */
1875   htab_t GTY ((param_is (symbol_priority_map))) init_priority_hash;
1876
1877   FILE* GTY ((skip)) dump_file;
1878
1879 private:
1880   /* Allocate new callgraph node.  */
1881   inline cgraph_node * allocate_cgraph_symbol (void);
1882
1883   /* Allocate a cgraph_edge structure and fill it with data according to the
1884      parameters of which only CALLEE can be NULL (when creating an indirect call
1885      edge).  */
1886   cgraph_edge *create_edge (cgraph_node *caller, cgraph_node *callee,
1887                             gimple call_stmt, gcov_type count, int freq,
1888                             bool indir_unknown_callee);
1889
1890   /* Put the edge onto the free list.  */
1891   void free_edge (cgraph_edge *e);
1892
1893   /* Insert NODE to assembler name hash.  */
1894   void insert_to_assembler_name_hash (symtab_node *node, bool with_clones);
1895
1896   /* Remove NODE from assembler name hash.  */
1897   void unlink_from_assembler_name_hash (symtab_node *node, bool with_clones);
1898
1899   /* Hash asmnames ignoring the user specified marks.  */
1900   static hashval_t decl_assembler_name_hash (const_tree asmname);
1901
1902   /* Compare ASMNAME with the DECL_ASSEMBLER_NAME of DECL.  */
1903   static bool decl_assembler_name_equal (tree decl, const_tree asmname);
1904
1905   /* Returns a hash code for P.  */
1906   static hashval_t hash_node_by_assembler_name (const void *p);
1907
1908   /* Returns nonzero if P1 and P2 are equal.  */
1909   static int eq_assembler_name (const void *p1, const void *p2);
1910
1911   /* List of hooks triggered when an edge is removed.  */
1912   cgraph_edge_hook_list * GTY((skip)) m_first_edge_removal_hook;
1913   /* List of hooks triggem_red when a cgraph node is removed.  */
1914   cgraph_node_hook_list * GTY((skip)) m_first_cgraph_removal_hook;
1915   /* List of hooks triggered when an edge is duplicated.  */
1916   cgraph_2edge_hook_list * GTY((skip)) m_first_edge_duplicated_hook;
1917   /* List of hooks triggered when a node is duplicated.  */
1918   cgraph_2node_hook_list * GTY((skip)) m_first_cgraph_duplicated_hook;
1919   /* List of hooks triggered when an function is inserted.  */
1920   cgraph_node_hook_list * GTY((skip)) m_first_cgraph_insertion_hook;
1921   /* List of hooks triggered when an variable is inserted.  */
1922   varpool_node_hook_list * GTY((skip)) m_first_varpool_insertion_hook;
1923   /* List of hooks triggered when a node is removed.  */
1924   varpool_node_hook_list * GTY((skip)) m_first_varpool_removal_hook;
1925 };
1926
1927 extern GTY(()) symbol_table *symtab;
1928
1929 extern vec<cgraph_node *> cgraph_new_nodes;
1930
1931 /* In cgraph.c  */
1932 void release_function_body (tree);
1933 cgraph_indirect_call_info *cgraph_allocate_init_indirect_info (void);
1934
1935 void cgraph_update_edges_for_call_stmt (gimple, tree, gimple);
1936 bool cgraph_function_possibly_inlined_p (tree);
1937
1938 const char* cgraph_inline_failed_string (cgraph_inline_failed_t);
1939 cgraph_inline_failed_type_t cgraph_inline_failed_type (cgraph_inline_failed_t);
1940
1941 bool resolution_used_from_other_file_p (enum ld_plugin_symbol_resolution);
1942 extern bool gimple_check_call_matching_types (gimple, tree, bool);
1943
1944 /* In cgraphunit.c  */
1945 /*  Initialize datastructures so DECL is a function in lowered gimple form.
1946     IN_SSA is true if the gimple is in SSA.  */
1947 basic_block init_lowered_empty_function (tree, bool);
1948
1949 /* In cgraphclones.c  */
1950
1951 tree clone_function_name (tree decl, const char *);
1952
1953 void tree_function_versioning (tree, tree, vec<ipa_replace_map *, va_gc> *,
1954                                bool, bitmap, bool, bitmap, basic_block);
1955
1956 /* In cgraphbuild.c  */
1957 int compute_call_stmt_bb_frequency (tree, basic_block bb);
1958 void record_references_in_initializer (tree, bool);
1959
1960 /* In ipa.c  */
1961 void cgraph_build_static_cdtor (char which, tree body, int priority);
1962 void ipa_discover_readonly_nonaddressable_vars (void);
1963
1964 /* In varpool.c  */
1965 tree ctor_for_folding (tree);
1966
1967 /* Return true when the symbol is real symbol, i.e. it is not inline clone
1968    or abstract function kept for debug info purposes only.  */
1969 inline bool
1970 symtab_node::real_symbol_p (void)
1971 {
1972   cgraph_node *cnode;
1973
1974   if (DECL_ABSTRACT (decl))
1975     return false;
1976   if (!is_a <cgraph_node *> (this))
1977     return true;
1978   cnode = dyn_cast <cgraph_node *> (this);
1979   if (cnode->global.inlined_to)
1980     return false;
1981   return true;
1982 }
1983
1984 /* Return true if DECL should have entry in symbol table if used.
1985    Those are functions and static & external veriables*/
1986
1987 static inline bool
1988 decl_in_symtab_p (const_tree decl)
1989 {
1990   return (TREE_CODE (decl) == FUNCTION_DECL
1991           || (TREE_CODE (decl) == VAR_DECL
1992               && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))));
1993 }
1994
1995 inline bool
1996 symtab_node::in_same_comdat_group_p (symtab_node *target)
1997 {
1998   symtab_node *source = this;
1999
2000   if (cgraph_node *cn = dyn_cast <cgraph_node *> (target))
2001     {
2002       if (cn->global.inlined_to)
2003         source = cn->global.inlined_to;
2004     }
2005   if (cgraph_node *cn = dyn_cast <cgraph_node *> (target))
2006     {
2007       if (cn->global.inlined_to)
2008         target = cn->global.inlined_to;
2009     }
2010
2011   return source->get_comdat_group () == target->get_comdat_group ();
2012 }
2013
2014 /* Return node that alias is aliasing.  */
2015
2016 inline symtab_node *
2017 symtab_node::get_alias_target (void)
2018 {
2019   ipa_ref *ref = NULL;
2020   iterate_reference (0, ref);
2021   gcc_checking_assert (ref->use == IPA_REF_ALIAS);
2022   return ref->referred;
2023 }
2024
2025 /* Return next reachable static symbol with initializer after the node.  */
2026 inline symtab_node *
2027 symtab_node::next_defined_symbol (void)
2028 {
2029   symtab_node *node1 = next;
2030
2031   for (; node1; node1 = node1->next)
2032     if (node1->definition)
2033       return node1;
2034
2035   return NULL;
2036 }
2037
2038 /* Return varpool node for given symbol and check it is a function. */
2039
2040 inline varpool_node *
2041 varpool_node::get (const_tree decl)
2042 {
2043   gcc_checking_assert (TREE_CODE (decl) == VAR_DECL);
2044   return dyn_cast<varpool_node *> (symtab_node::get (decl));
2045 }
2046
2047 /* Register a symbol NODE.  */
2048
2049 inline void
2050 symbol_table::register_symbol (symtab_node *node)
2051 {
2052   node->next = nodes;
2053   node->previous = NULL;
2054
2055   if (nodes)
2056     nodes->previous = node;
2057   nodes = node;
2058
2059   node->order = order++;
2060 }
2061
2062 /* Register a top-level asm statement ASM_STR.  */
2063
2064 asm_node *
2065 symbol_table::finalize_toplevel_asm (tree asm_str)
2066 {
2067   asm_node *node;
2068
2069   node = ggc_cleared_alloc<asm_node> ();
2070   node->asm_str = asm_str;
2071   node->order = order++;
2072   node->next = NULL;
2073
2074   if (asmnodes == NULL)
2075     asmnodes = node;
2076   else
2077     asm_last_node->next = node;
2078
2079   asm_last_node = node;
2080   return node;
2081 }
2082
2083 /* Unregister a symbol NODE.  */
2084 inline void
2085 symbol_table::unregister (symtab_node *node)
2086 {
2087   if (node->previous)
2088     node->previous->next = node->next;
2089   else
2090     nodes = node->next;
2091
2092   if (node->next)
2093     node->next->previous = node->previous;
2094
2095   node->next = NULL;
2096   node->previous = NULL;
2097 }
2098
2099 /* Allocate new callgraph node and insert it into basic data structures.  */
2100
2101 inline cgraph_node *
2102 symbol_table::create_empty (void)
2103 {
2104   cgraph_node *node = allocate_cgraph_symbol ();
2105
2106   node->type = SYMTAB_FUNCTION;
2107   node->frequency = NODE_FREQUENCY_NORMAL;
2108   node->count_materialization_scale = REG_BR_PROB_BASE;
2109   cgraph_count++;
2110
2111   return node;
2112 }
2113
2114 /* Release a callgraph NODE with UID and put in to the list of free nodes.  */
2115
2116 inline void
2117 symbol_table::release_symbol (cgraph_node *node, int uid)
2118 {
2119   cgraph_count--;
2120
2121   /* Clear out the node to NULL all pointers and add the node to the free
2122      list.  */
2123   memset (node, 0, sizeof (*node));
2124   node->type = SYMTAB_FUNCTION;
2125   node->uid = uid;
2126   SET_NEXT_FREE_NODE (node, free_nodes);
2127   free_nodes = node;
2128 }
2129
2130 /* Allocate new callgraph node.  */
2131
2132 inline cgraph_node *
2133 symbol_table::allocate_cgraph_symbol (void)
2134 {
2135   cgraph_node *node;
2136
2137   if (free_nodes)
2138     {
2139       node = free_nodes;
2140       free_nodes = NEXT_FREE_NODE (node);
2141     }
2142   else
2143     {
2144       node = ggc_cleared_alloc<cgraph_node> ();
2145       node->uid = cgraph_max_uid++;
2146     }
2147
2148   return node;
2149 }
2150
2151
2152 /* Return first static symbol with definition.  */
2153 inline symtab_node *
2154 symbol_table::first_symbol (void)
2155 {
2156   return nodes;
2157 }
2158
2159 /* Walk all symbols.  */
2160 #define FOR_EACH_SYMBOL(node) \
2161    for ((node) = symtab->first_symbol (); (node); (node) = (node)->next)
2162
2163 /* Return first static symbol with definition.  */
2164 inline symtab_node *
2165 symbol_table::first_defined_symbol (void)
2166 {
2167   symtab_node *node;
2168
2169   for (node = nodes; node; node = node->next)
2170     if (node->definition)
2171       return node;
2172
2173   return NULL;
2174 }
2175
2176 /* Walk all symbols with definitions in current unit.  */
2177 #define FOR_EACH_DEFINED_SYMBOL(node) \
2178    for ((node) = symtab->first_defined_symbol (); (node); \
2179         (node) = node->next_defined_symbol ())
2180
2181 /* Return first variable.  */
2182 inline varpool_node *
2183 symbol_table::first_variable (void)
2184 {
2185   symtab_node *node;
2186   for (node = nodes; node; node = node->next)
2187     if (varpool_node *vnode = dyn_cast <varpool_node *> (node))
2188       return vnode;
2189   return NULL;
2190 }
2191
2192 /* Return next variable after NODE.  */
2193 inline varpool_node *
2194 symbol_table::next_variable (varpool_node *node)
2195 {
2196   symtab_node *node1 = node->next;
2197   for (; node1; node1 = node1->next)
2198     if (varpool_node *vnode1 = dyn_cast <varpool_node *> (node1))
2199       return vnode1;
2200   return NULL;
2201 }
2202 /* Walk all variables.  */
2203 #define FOR_EACH_VARIABLE(node) \
2204    for ((node) = symtab->first_variable (); \
2205         (node); \
2206         (node) = symtab->next_variable ((node)))
2207
2208 /* Return first static variable with initializer.  */
2209 inline varpool_node *
2210 symbol_table::first_static_initializer (void)
2211 {
2212   symtab_node *node;
2213   for (node = nodes; node; node = node->next)
2214     {
2215       varpool_node *vnode = dyn_cast <varpool_node *> (node);
2216       if (vnode && DECL_INITIAL (node->decl))
2217         return vnode;
2218     }
2219   return NULL;
2220 }
2221
2222 /* Return next static variable with initializer after NODE.  */
2223 inline varpool_node *
2224 symbol_table::next_static_initializer (varpool_node *node)
2225 {
2226   symtab_node *node1 = node->next;
2227   for (; node1; node1 = node1->next)
2228     {
2229       varpool_node *vnode1 = dyn_cast <varpool_node *> (node1);
2230       if (vnode1 && DECL_INITIAL (node1->decl))
2231         return vnode1;
2232     }
2233   return NULL;
2234 }
2235
2236 /* Walk all static variables with initializer set.  */
2237 #define FOR_EACH_STATIC_INITIALIZER(node) \
2238    for ((node) = symtab->first_static_initializer (); (node); \
2239         (node) = symtab->next_static_initializer (node))
2240
2241 /* Return first static variable with definition.  */
2242 inline varpool_node *
2243 symbol_table::first_defined_variable (void)
2244 {
2245   symtab_node *node;
2246   for (node = nodes; node; node = node->next)
2247     {
2248       varpool_node *vnode = dyn_cast <varpool_node *> (node);
2249       if (vnode && vnode->definition)
2250         return vnode;
2251     }
2252   return NULL;
2253 }
2254
2255 /* Return next static variable with definition after NODE.  */
2256 inline varpool_node *
2257 symbol_table::next_defined_variable (varpool_node *node)
2258 {
2259   symtab_node *node1 = node->next;
2260   for (; node1; node1 = node1->next)
2261     {
2262       varpool_node *vnode1 = dyn_cast <varpool_node *> (node1);
2263       if (vnode1 && vnode1->definition)
2264         return vnode1;
2265     }
2266   return NULL;
2267 }
2268 /* Walk all variables with definitions in current unit.  */
2269 #define FOR_EACH_DEFINED_VARIABLE(node) \
2270    for ((node) = symtab->first_defined_variable (); (node); \
2271         (node) = symtab->next_defined_variable (node))
2272
2273 /* Return first function with body defined.  */
2274 inline cgraph_node *
2275 symbol_table::first_defined_function (void)
2276 {
2277   symtab_node *node;
2278   for (node = nodes; node; node = node->next)
2279     {
2280       cgraph_node *cn = dyn_cast <cgraph_node *> (node);
2281       if (cn && cn->definition)
2282         return cn;
2283     }
2284   return NULL;
2285 }
2286
2287 /* Return next function with body defined after NODE.  */
2288 inline cgraph_node *
2289 symbol_table::next_defined_function (cgraph_node *node)
2290 {
2291   symtab_node *node1 = node->next;
2292   for (; node1; node1 = node1->next)
2293     {
2294       cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1);
2295       if (cn1 && cn1->definition)
2296         return cn1;
2297     }
2298   return NULL;
2299 }
2300
2301 /* Walk all functions with body defined.  */
2302 #define FOR_EACH_DEFINED_FUNCTION(node) \
2303    for ((node) = symtab->first_defined_function (); (node); \
2304         (node) = symtab->next_defined_function ((node)))
2305
2306 /* Return first function.  */
2307 inline cgraph_node *
2308 symbol_table::first_function (void)
2309 {
2310   symtab_node *node;
2311   for (node = nodes; node; node = node->next)
2312     if (cgraph_node *cn = dyn_cast <cgraph_node *> (node))
2313       return cn;
2314   return NULL;
2315 }
2316
2317 /* Return next function.  */
2318 inline cgraph_node *
2319 symbol_table::next_function (cgraph_node *node)
2320 {
2321   symtab_node *node1 = node->next;
2322   for (; node1; node1 = node1->next)
2323     if (cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1))
2324       return cn1;
2325   return NULL;
2326 }
2327
2328 /* Return first function with body defined.  */
2329 inline cgraph_node *
2330 symbol_table::first_function_with_gimple_body (void)
2331 {
2332   symtab_node *node;
2333   for (node = nodes; node; node = node->next)
2334     {
2335       cgraph_node *cn = dyn_cast <cgraph_node *> (node);
2336       if (cn && cn->has_gimple_body_p ())
2337         return cn;
2338     }
2339   return NULL;
2340 }
2341
2342 /* Return next reachable static variable with initializer after NODE.  */
2343 inline cgraph_node *
2344 symbol_table::next_function_with_gimple_body (cgraph_node *node)
2345 {
2346   symtab_node *node1 = node->next;
2347   for (; node1; node1 = node1->next)
2348     {
2349       cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1);
2350       if (cn1 && cn1->has_gimple_body_p ())
2351         return cn1;
2352     }
2353   return NULL;
2354 }
2355
2356 /* Walk all functions.  */
2357 #define FOR_EACH_FUNCTION(node) \
2358    for ((node) = symtab->first_function (); (node); \
2359         (node) = symtab->next_function ((node)))
2360
2361 /* Return true when callgraph node is a function with Gimple body defined
2362    in current unit.  Functions can also be define externally or they
2363    can be thunks with no Gimple representation.
2364
2365    Note that at WPA stage, the function body may not be present in memory.  */
2366
2367 inline bool
2368 cgraph_node::has_gimple_body_p (void)
2369 {
2370   return definition && !thunk.thunk_p && !alias;
2371 }
2372
2373 /* Walk all functions with body defined.  */
2374 #define FOR_EACH_FUNCTION_WITH_GIMPLE_BODY(node) \
2375    for ((node) = symtab->first_function_with_gimple_body (); (node); \
2376         (node) = symtab->next_function_with_gimple_body (node))
2377
2378 /* Create a new static variable of type TYPE.  */
2379 tree add_new_static_var (tree type);
2380
2381 /* Uniquize all constants that appear in memory.
2382    Each constant in memory thus far output is recorded
2383    in `const_desc_table'.  */
2384
2385 struct GTY(()) constant_descriptor_tree {
2386   /* A MEM for the constant.  */
2387   rtx rtl;
2388
2389   /* The value of the constant.  */
2390   tree value;
2391
2392   /* Hash of value.  Computing the hash from value each time
2393      hashfn is called can't work properly, as that means recursive
2394      use of the hash table during hash table expansion.  */
2395   hashval_t hash;
2396 };
2397
2398 /* Return true when function is only called directly or it has alias.
2399    i.e. it is not externally visible, address was not taken and
2400    it is not used in any other non-standard way.  */
2401
2402 inline bool
2403 cgraph_node::only_called_directly_or_aliased_p (void)
2404 {
2405   gcc_assert (!global.inlined_to);
2406   return (!force_output && !address_taken
2407           && !used_from_other_partition
2408           && !DECL_VIRTUAL_P (decl)
2409           && !DECL_STATIC_CONSTRUCTOR (decl)
2410           && !DECL_STATIC_DESTRUCTOR (decl)
2411           && !externally_visible);
2412 }
2413
2414 /* Return true when variable can be removed from variable pool
2415    if all direct calls are eliminated.  */
2416
2417 inline bool
2418 varpool_node::can_remove_if_no_refs_p (void)
2419 {
2420   if (DECL_EXTERNAL (decl))
2421     return true;
2422   return (!force_output && !used_from_other_partition
2423           && ((DECL_COMDAT (decl)
2424                && !forced_by_abi
2425                && !used_from_object_file_p ())
2426               || !externally_visible
2427               || DECL_HAS_VALUE_EXPR_P (decl)));
2428 }
2429
2430 /* Return true when all references to variable must be visible in ipa_ref_list.
2431    i.e. if the variable is not externally visible or not used in some magic
2432    way (asm statement or such).
2433    The magic uses are all summarized in force_output flag.  */
2434
2435 inline bool
2436 varpool_node::all_refs_explicit_p ()
2437 {
2438   return (definition
2439           && !externally_visible
2440           && !used_from_other_partition
2441           && !force_output);
2442 }
2443
2444 /* Constant pool accessor function.  */
2445 htab_t constant_pool_htab (void);
2446
2447 /* Return node that alias is aliasing.  */
2448
2449 inline cgraph_node *
2450 cgraph_node::get_alias_target (void)
2451 {
2452   return dyn_cast <cgraph_node *> (symtab_node::get_alias_target ());
2453 }
2454
2455 /* Return node that alias is aliasing.  */
2456
2457 inline varpool_node *
2458 varpool_node::get_alias_target (void)
2459 {
2460   return dyn_cast <varpool_node *> (symtab_node::get_alias_target ());
2461 }
2462
2463 /* Given function symbol, walk the alias chain to return the function node
2464    is alias of. Do not walk through thunks.
2465    When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
2466
2467 inline cgraph_node *
2468 cgraph_node::ultimate_alias_target (enum availability *availability)
2469 {
2470   cgraph_node *n = dyn_cast <cgraph_node *> (symtab_node::ultimate_alias_target
2471     (availability));
2472   if (!n && availability)
2473     *availability = AVAIL_NOT_AVAILABLE;
2474   return n;
2475 }
2476
2477 /* For given variable pool node, walk the alias chain to return the function
2478    the variable is alias of. Do not walk through thunks.
2479    When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
2480
2481 inline varpool_node *
2482 varpool_node::ultimate_alias_target (availability *availability)
2483 {
2484   varpool_node *n = dyn_cast <varpool_node *>
2485     (symtab_node::ultimate_alias_target (availability));
2486
2487   if (!n && availability)
2488     *availability = AVAIL_NOT_AVAILABLE;
2489   return n;
2490 }
2491
2492 /* Return true when the edge represents a direct recursion.  */
2493 inline bool
2494 cgraph_edge::recursive_p (void)
2495 {
2496   cgraph_node *c = callee->ultimate_alias_target ();
2497   if (caller->global.inlined_to)
2498     return caller->global.inlined_to->decl == c->decl;
2499   else
2500     return caller->decl == c->decl;
2501 }
2502
2503 /* Return true if the TM_CLONE bit is set for a given FNDECL.  */
2504 static inline bool
2505 decl_is_tm_clone (const_tree fndecl)
2506 {
2507   cgraph_node *n = cgraph_node::get (fndecl);
2508   if (n)
2509     return n->tm_clone;
2510   return false;
2511 }
2512
2513 /* Likewise indicate that a node is needed, i.e. reachable via some
2514    external means.  */
2515
2516 inline void
2517 cgraph_node::mark_force_output (void)
2518 {
2519   force_output = 1;
2520   gcc_checking_assert (!global.inlined_to);
2521 }
2522
2523 #endif  /* GCC_CGRAPH_H  */