support ggc hash_map and hash_set
[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   priority_type init;
1608   priority_type fini;
1609 };
1610
1611 enum symtab_state
1612 {
1613   /* Frontend is parsing and finalizing functions.  */
1614   PARSING,
1615   /* Callgraph is being constructed.  It is safe to add new functions.  */
1616   CONSTRUCTION,
1617   /* Callgraph is being at LTO time.  */
1618   LTO_STREAMING,
1619   /* Callgraph is built and IPA passes are being run.  */
1620   IPA,
1621   /* Callgraph is built and all functions are transformed to SSA form.  */
1622   IPA_SSA,
1623   /* Functions are now ordered and being passed to RTL expanders.  */
1624   EXPANSION,
1625   /* All cgraph expansion is done.  */
1626   FINISHED
1627 };
1628
1629 class GTY((tag ("SYMTAB"))) symbol_table
1630 {
1631 public:
1632   friend class symtab_node;
1633   friend class cgraph_node;
1634   friend class cgraph_edge;
1635
1636   /* Initialize callgraph dump file.  */
1637   inline void
1638   initialize (void)
1639   {
1640     if (!dump_file)
1641       dump_file = dump_begin (TDI_cgraph, NULL);
1642   }
1643
1644   /* Register a top-level asm statement ASM_STR.  */
1645   inline asm_node *finalize_toplevel_asm (tree asm_str);
1646
1647   /* Analyze the whole compilation unit once it is parsed completely.  */
1648   void finalize_compilation_unit (void);
1649
1650   /* C++ frontend produce same body aliases all over the place, even before PCH
1651      gets streamed out. It relies on us linking the aliases with their function
1652      in order to do the fixups, but ipa-ref is not PCH safe.  Consequentely we
1653      first produce aliases without links, but once C++ FE is sure he won't sream
1654      PCH we build the links via this function.  */
1655   void process_same_body_aliases (void);
1656
1657   /* Perform simple optimizations based on callgraph.  */
1658   void compile (void);
1659
1660   /* Process CGRAPH_NEW_FUNCTIONS and perform actions necessary to add these
1661      functions into callgraph in a way so they look like ordinary reachable
1662      functions inserted into callgraph already at construction time.  */
1663   void process_new_functions (void);
1664
1665   /* Once all functions from compilation unit are in memory, produce all clones
1666      and update all calls.  We might also do this on demand if we don't want to
1667      bring all functions to memory prior compilation, but current WHOPR
1668      implementation does that and it is is bit easier to keep everything right
1669      in this order.  */
1670   void materialize_all_clones (void);
1671
1672   /* Register a symbol NODE.  */
1673   inline void register_symbol (symtab_node *node);
1674
1675   inline void
1676   clear_asm_symbols (void)
1677   {
1678     asmnodes = NULL;
1679     asm_last_node = NULL;
1680   }
1681
1682   /* Perform reachability analysis and reclaim all unreachable nodes.  */
1683   bool remove_unreachable_nodes (bool before_inlining_p, FILE *file);
1684
1685   /* Optimization of function bodies might've rendered some variables as
1686      unnecessary so we want to avoid these from being compiled.  Re-do
1687      reachability starting from variables that are either externally visible
1688      or was referred from the asm output routines.  */
1689   void remove_unreferenced_decls (void);
1690
1691   /* Unregister a symbol NODE.  */
1692   inline void unregister (symtab_node *node);
1693
1694   /* Allocate new callgraph node and insert it into basic data structures.  */
1695   cgraph_node *create_empty (void);
1696
1697   /* Release a callgraph NODE with UID and put in to the list
1698      of free nodes.  */
1699   void release_symbol (cgraph_node *node, int uid);
1700
1701   /* Output all variables enqueued to be assembled.  */
1702   bool output_variables (void);
1703
1704   /* Output all asm statements we have stored up to be output.  */
1705   void output_asm_statements (void);
1706
1707   /* Weakrefs may be associated to external decls and thus not output
1708      at expansion time.  Emit all necessary aliases.  */
1709   void output_weakrefs (void);
1710
1711   /* Return first static symbol with definition.  */
1712   inline symtab_node *first_symbol (void);
1713
1714   /* Return first assembler symbol.  */
1715   inline asm_node *
1716   first_asm_symbol (void)
1717   {
1718     return asmnodes;
1719   }
1720
1721   /* Return first static symbol with definition.  */
1722   inline symtab_node *first_defined_symbol (void);
1723
1724   /* Return first variable.  */
1725   inline varpool_node *first_variable (void);
1726
1727   /* Return next variable after NODE.  */
1728   inline varpool_node *next_variable (varpool_node *node);
1729
1730   /* Return first static variable with initializer.  */
1731   inline varpool_node *first_static_initializer (void);
1732
1733   /* Return next static variable with initializer after NODE.  */
1734   inline varpool_node *next_static_initializer (varpool_node *node);
1735
1736   /* Return first static variable with definition.  */
1737   inline varpool_node *first_defined_variable (void);
1738
1739   /* Return next static variable with definition after NODE.  */
1740   inline varpool_node *next_defined_variable (varpool_node *node);
1741
1742   /* Return first function with body defined.  */
1743   inline cgraph_node *first_defined_function (void);
1744
1745   /* Return next function with body defined after NODE.  */
1746   inline cgraph_node *next_defined_function (cgraph_node *node);
1747
1748   /* Return first function.  */
1749   inline cgraph_node *first_function (void);
1750
1751   /* Return next function.  */
1752   inline cgraph_node *next_function (cgraph_node *node);
1753
1754   /* Return first function with body defined.  */
1755   cgraph_node *first_function_with_gimple_body (void);
1756
1757   /* Return next reachable static variable with initializer after NODE.  */
1758   inline cgraph_node *next_function_with_gimple_body (cgraph_node *node);
1759
1760   /* Register HOOK to be called with DATA on each removed edge.  */
1761   cgraph_edge_hook_list *add_edge_removal_hook (cgraph_edge_hook hook,
1762                                                 void *data);
1763
1764   /* Remove ENTRY from the list of hooks called on removing edges.  */
1765   void remove_edge_removal_hook (cgraph_edge_hook_list *entry);
1766
1767   /* Register HOOK to be called with DATA on each removed node.  */
1768   cgraph_node_hook_list *add_cgraph_removal_hook (cgraph_node_hook hook,
1769                                                   void *data);
1770
1771   /* Remove ENTRY from the list of hooks called on removing nodes.  */
1772   void remove_cgraph_removal_hook (cgraph_node_hook_list *entry);
1773
1774   /* Register HOOK to be called with DATA on each removed node.  */
1775   varpool_node_hook_list *add_varpool_removal_hook (varpool_node_hook hook,
1776                                                     void *data);
1777
1778   /* Remove ENTRY from the list of hooks called on removing nodes.  */
1779   void remove_varpool_removal_hook (varpool_node_hook_list *entry);
1780
1781   /* Register HOOK to be called with DATA on each inserted node.  */
1782   cgraph_node_hook_list *add_cgraph_insertion_hook (cgraph_node_hook hook,
1783                                                     void *data);
1784
1785   /* Remove ENTRY from the list of hooks called on inserted nodes.  */
1786   void remove_cgraph_insertion_hook (cgraph_node_hook_list *entry);
1787
1788   /* Register HOOK to be called with DATA on each inserted node.  */
1789   varpool_node_hook_list *add_varpool_insertion_hook (varpool_node_hook hook,
1790                                                       void *data);
1791
1792   /* Remove ENTRY from the list of hooks called on inserted nodes.  */
1793   void remove_varpool_insertion_hook (varpool_node_hook_list *entry);
1794
1795   /* Register HOOK to be called with DATA on each duplicated edge.  */
1796   cgraph_2edge_hook_list *add_edge_duplication_hook (cgraph_2edge_hook hook,
1797                                                      void *data);
1798   /* Remove ENTRY from the list of hooks called on duplicating edges.  */
1799   void remove_edge_duplication_hook (cgraph_2edge_hook_list *entry);
1800
1801   /* Register HOOK to be called with DATA on each duplicated node.  */
1802   cgraph_2node_hook_list *add_cgraph_duplication_hook (cgraph_2node_hook hook,
1803                                                        void *data);
1804
1805   /* Remove ENTRY from the list of hooks called on duplicating nodes.  */
1806   void remove_cgraph_duplication_hook (cgraph_2node_hook_list *entry);
1807
1808   /* Call all edge removal hooks.  */
1809   void call_edge_removal_hooks (cgraph_edge *e);
1810
1811   /* Call all node insertion hooks.  */
1812   void call_cgraph_insertion_hooks (cgraph_node *node);
1813
1814   /* Call all node removal hooks.  */
1815   void call_cgraph_removal_hooks (cgraph_node *node);
1816
1817   /* Call all node duplication hooks.  */
1818   void call_cgraph_duplication_hooks (cgraph_node *node, cgraph_node *node2);
1819
1820   /* Call all edge duplication hooks.  */
1821   void call_edge_duplication_hooks (cgraph_edge *cs1, cgraph_edge *cs2);
1822
1823   /* Call all node removal hooks.  */
1824   void call_varpool_removal_hooks (varpool_node *node);
1825
1826   /* Call all node insertion hooks.  */
1827   void call_varpool_insertion_hooks (varpool_node *node);
1828
1829   /* Arrange node to be first in its entry of assembler_name_hash.  */
1830   void symtab_prevail_in_asm_name_hash (symtab_node *node);
1831
1832   /* Initalize asm name hash unless.  */
1833   void symtab_initialize_asm_name_hash (void);
1834
1835   /* Set the DECL_ASSEMBLER_NAME and update symtab hashtables.  */
1836   void change_decl_assembler_name (tree decl, tree name);
1837
1838   int cgraph_count;
1839   int cgraph_max_uid;
1840
1841   int edges_count;
1842   int edges_max_uid;
1843
1844   symtab_node* GTY(()) nodes;
1845   asm_node* GTY(()) asmnodes;
1846   asm_node* GTY(()) asm_last_node;
1847   cgraph_node* GTY(()) free_nodes;
1848
1849   /* Head of a linked list of unused (freed) call graph edges.
1850      Do not GTY((delete)) this list so UIDs gets reliably recycled.  */
1851   cgraph_edge * GTY(()) free_edges;
1852
1853   /* The order index of the next symtab node to be created.  This is
1854      used so that we can sort the cgraph nodes in order by when we saw
1855      them, to support -fno-toplevel-reorder.  */
1856   int order;
1857
1858   /* Set when whole unit has been analyzed so we can access global info.  */
1859   bool global_info_ready;
1860   /* What state callgraph is in right now.  */
1861   enum symtab_state state;
1862   /* Set when the cgraph is fully build and the basic flags are computed.  */
1863   bool function_flags_ready;
1864
1865   bool cpp_implicit_aliases_done;
1866
1867   /* Hash table used to hold sectoons.  */
1868   htab_t GTY((param_is (section_hash_entry))) section_hash;
1869
1870   /* Hash table used to convert assembler names into nodes.  */
1871   htab_t GTY((param_is (symtab_node))) assembler_name_hash;
1872
1873   /* Hash table used to hold init priorities.  */
1874   hash_map<symtab_node *, symbol_priority_map> *init_priority_hash;
1875
1876   FILE* GTY ((skip)) dump_file;
1877
1878 private:
1879   /* Allocate new callgraph node.  */
1880   inline cgraph_node * allocate_cgraph_symbol (void);
1881
1882   /* Allocate a cgraph_edge structure and fill it with data according to the
1883      parameters of which only CALLEE can be NULL (when creating an indirect call
1884      edge).  */
1885   cgraph_edge *create_edge (cgraph_node *caller, cgraph_node *callee,
1886                             gimple call_stmt, gcov_type count, int freq,
1887                             bool indir_unknown_callee);
1888
1889   /* Put the edge onto the free list.  */
1890   void free_edge (cgraph_edge *e);
1891
1892   /* Insert NODE to assembler name hash.  */
1893   void insert_to_assembler_name_hash (symtab_node *node, bool with_clones);
1894
1895   /* Remove NODE from assembler name hash.  */
1896   void unlink_from_assembler_name_hash (symtab_node *node, bool with_clones);
1897
1898   /* Hash asmnames ignoring the user specified marks.  */
1899   static hashval_t decl_assembler_name_hash (const_tree asmname);
1900
1901   /* Compare ASMNAME with the DECL_ASSEMBLER_NAME of DECL.  */
1902   static bool decl_assembler_name_equal (tree decl, const_tree asmname);
1903
1904   /* Returns a hash code for P.  */
1905   static hashval_t hash_node_by_assembler_name (const void *p);
1906
1907   /* Returns nonzero if P1 and P2 are equal.  */
1908   static int eq_assembler_name (const void *p1, const void *p2);
1909
1910   /* List of hooks triggered when an edge is removed.  */
1911   cgraph_edge_hook_list * GTY((skip)) m_first_edge_removal_hook;
1912   /* List of hooks triggem_red when a cgraph node is removed.  */
1913   cgraph_node_hook_list * GTY((skip)) m_first_cgraph_removal_hook;
1914   /* List of hooks triggered when an edge is duplicated.  */
1915   cgraph_2edge_hook_list * GTY((skip)) m_first_edge_duplicated_hook;
1916   /* List of hooks triggered when a node is duplicated.  */
1917   cgraph_2node_hook_list * GTY((skip)) m_first_cgraph_duplicated_hook;
1918   /* List of hooks triggered when an function is inserted.  */
1919   cgraph_node_hook_list * GTY((skip)) m_first_cgraph_insertion_hook;
1920   /* List of hooks triggered when an variable is inserted.  */
1921   varpool_node_hook_list * GTY((skip)) m_first_varpool_insertion_hook;
1922   /* List of hooks triggered when a node is removed.  */
1923   varpool_node_hook_list * GTY((skip)) m_first_varpool_removal_hook;
1924 };
1925
1926 extern GTY(()) symbol_table *symtab;
1927
1928 extern vec<cgraph_node *> cgraph_new_nodes;
1929
1930 /* In cgraph.c  */
1931 void release_function_body (tree);
1932 cgraph_indirect_call_info *cgraph_allocate_init_indirect_info (void);
1933
1934 void cgraph_update_edges_for_call_stmt (gimple, tree, gimple);
1935 bool cgraph_function_possibly_inlined_p (tree);
1936
1937 const char* cgraph_inline_failed_string (cgraph_inline_failed_t);
1938 cgraph_inline_failed_type_t cgraph_inline_failed_type (cgraph_inline_failed_t);
1939
1940 bool resolution_used_from_other_file_p (enum ld_plugin_symbol_resolution);
1941 extern bool gimple_check_call_matching_types (gimple, tree, bool);
1942
1943 /* In cgraphunit.c  */
1944 /*  Initialize datastructures so DECL is a function in lowered gimple form.
1945     IN_SSA is true if the gimple is in SSA.  */
1946 basic_block init_lowered_empty_function (tree, bool);
1947
1948 /* In cgraphclones.c  */
1949
1950 tree clone_function_name (tree decl, const char *);
1951
1952 void tree_function_versioning (tree, tree, vec<ipa_replace_map *, va_gc> *,
1953                                bool, bitmap, bool, bitmap, basic_block);
1954
1955 /* In cgraphbuild.c  */
1956 int compute_call_stmt_bb_frequency (tree, basic_block bb);
1957 void record_references_in_initializer (tree, bool);
1958
1959 /* In ipa.c  */
1960 void cgraph_build_static_cdtor (char which, tree body, int priority);
1961 void ipa_discover_readonly_nonaddressable_vars (void);
1962
1963 /* In varpool.c  */
1964 tree ctor_for_folding (tree);
1965
1966 /* Return true when the symbol is real symbol, i.e. it is not inline clone
1967    or abstract function kept for debug info purposes only.  */
1968 inline bool
1969 symtab_node::real_symbol_p (void)
1970 {
1971   cgraph_node *cnode;
1972
1973   if (DECL_ABSTRACT (decl))
1974     return false;
1975   if (!is_a <cgraph_node *> (this))
1976     return true;
1977   cnode = dyn_cast <cgraph_node *> (this);
1978   if (cnode->global.inlined_to)
1979     return false;
1980   return true;
1981 }
1982
1983 /* Return true if DECL should have entry in symbol table if used.
1984    Those are functions and static & external veriables*/
1985
1986 static inline bool
1987 decl_in_symtab_p (const_tree decl)
1988 {
1989   return (TREE_CODE (decl) == FUNCTION_DECL
1990           || (TREE_CODE (decl) == VAR_DECL
1991               && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))));
1992 }
1993
1994 inline bool
1995 symtab_node::in_same_comdat_group_p (symtab_node *target)
1996 {
1997   symtab_node *source = this;
1998
1999   if (cgraph_node *cn = dyn_cast <cgraph_node *> (target))
2000     {
2001       if (cn->global.inlined_to)
2002         source = cn->global.inlined_to;
2003     }
2004   if (cgraph_node *cn = dyn_cast <cgraph_node *> (target))
2005     {
2006       if (cn->global.inlined_to)
2007         target = cn->global.inlined_to;
2008     }
2009
2010   return source->get_comdat_group () == target->get_comdat_group ();
2011 }
2012
2013 /* Return node that alias is aliasing.  */
2014
2015 inline symtab_node *
2016 symtab_node::get_alias_target (void)
2017 {
2018   ipa_ref *ref = NULL;
2019   iterate_reference (0, ref);
2020   gcc_checking_assert (ref->use == IPA_REF_ALIAS);
2021   return ref->referred;
2022 }
2023
2024 /* Return next reachable static symbol with initializer after the node.  */
2025 inline symtab_node *
2026 symtab_node::next_defined_symbol (void)
2027 {
2028   symtab_node *node1 = next;
2029
2030   for (; node1; node1 = node1->next)
2031     if (node1->definition)
2032       return node1;
2033
2034   return NULL;
2035 }
2036
2037 /* Return varpool node for given symbol and check it is a function. */
2038
2039 inline varpool_node *
2040 varpool_node::get (const_tree decl)
2041 {
2042   gcc_checking_assert (TREE_CODE (decl) == VAR_DECL);
2043   return dyn_cast<varpool_node *> (symtab_node::get (decl));
2044 }
2045
2046 /* Register a symbol NODE.  */
2047
2048 inline void
2049 symbol_table::register_symbol (symtab_node *node)
2050 {
2051   node->next = nodes;
2052   node->previous = NULL;
2053
2054   if (nodes)
2055     nodes->previous = node;
2056   nodes = node;
2057
2058   node->order = order++;
2059 }
2060
2061 /* Register a top-level asm statement ASM_STR.  */
2062
2063 asm_node *
2064 symbol_table::finalize_toplevel_asm (tree asm_str)
2065 {
2066   asm_node *node;
2067
2068   node = ggc_cleared_alloc<asm_node> ();
2069   node->asm_str = asm_str;
2070   node->order = order++;
2071   node->next = NULL;
2072
2073   if (asmnodes == NULL)
2074     asmnodes = node;
2075   else
2076     asm_last_node->next = node;
2077
2078   asm_last_node = node;
2079   return node;
2080 }
2081
2082 /* Unregister a symbol NODE.  */
2083 inline void
2084 symbol_table::unregister (symtab_node *node)
2085 {
2086   if (node->previous)
2087     node->previous->next = node->next;
2088   else
2089     nodes = node->next;
2090
2091   if (node->next)
2092     node->next->previous = node->previous;
2093
2094   node->next = NULL;
2095   node->previous = NULL;
2096 }
2097
2098 /* Allocate new callgraph node and insert it into basic data structures.  */
2099
2100 inline cgraph_node *
2101 symbol_table::create_empty (void)
2102 {
2103   cgraph_node *node = allocate_cgraph_symbol ();
2104
2105   node->type = SYMTAB_FUNCTION;
2106   node->frequency = NODE_FREQUENCY_NORMAL;
2107   node->count_materialization_scale = REG_BR_PROB_BASE;
2108   cgraph_count++;
2109
2110   return node;
2111 }
2112
2113 /* Release a callgraph NODE with UID and put in to the list of free nodes.  */
2114
2115 inline void
2116 symbol_table::release_symbol (cgraph_node *node, int uid)
2117 {
2118   cgraph_count--;
2119
2120   /* Clear out the node to NULL all pointers and add the node to the free
2121      list.  */
2122   memset (node, 0, sizeof (*node));
2123   node->type = SYMTAB_FUNCTION;
2124   node->uid = uid;
2125   SET_NEXT_FREE_NODE (node, free_nodes);
2126   free_nodes = node;
2127 }
2128
2129 /* Allocate new callgraph node.  */
2130
2131 inline cgraph_node *
2132 symbol_table::allocate_cgraph_symbol (void)
2133 {
2134   cgraph_node *node;
2135
2136   if (free_nodes)
2137     {
2138       node = free_nodes;
2139       free_nodes = NEXT_FREE_NODE (node);
2140     }
2141   else
2142     {
2143       node = ggc_cleared_alloc<cgraph_node> ();
2144       node->uid = cgraph_max_uid++;
2145     }
2146
2147   return node;
2148 }
2149
2150
2151 /* Return first static symbol with definition.  */
2152 inline symtab_node *
2153 symbol_table::first_symbol (void)
2154 {
2155   return nodes;
2156 }
2157
2158 /* Walk all symbols.  */
2159 #define FOR_EACH_SYMBOL(node) \
2160    for ((node) = symtab->first_symbol (); (node); (node) = (node)->next)
2161
2162 /* Return first static symbol with definition.  */
2163 inline symtab_node *
2164 symbol_table::first_defined_symbol (void)
2165 {
2166   symtab_node *node;
2167
2168   for (node = nodes; node; node = node->next)
2169     if (node->definition)
2170       return node;
2171
2172   return NULL;
2173 }
2174
2175 /* Walk all symbols with definitions in current unit.  */
2176 #define FOR_EACH_DEFINED_SYMBOL(node) \
2177    for ((node) = symtab->first_defined_symbol (); (node); \
2178         (node) = node->next_defined_symbol ())
2179
2180 /* Return first variable.  */
2181 inline varpool_node *
2182 symbol_table::first_variable (void)
2183 {
2184   symtab_node *node;
2185   for (node = nodes; node; node = node->next)
2186     if (varpool_node *vnode = dyn_cast <varpool_node *> (node))
2187       return vnode;
2188   return NULL;
2189 }
2190
2191 /* Return next variable after NODE.  */
2192 inline varpool_node *
2193 symbol_table::next_variable (varpool_node *node)
2194 {
2195   symtab_node *node1 = node->next;
2196   for (; node1; node1 = node1->next)
2197     if (varpool_node *vnode1 = dyn_cast <varpool_node *> (node1))
2198       return vnode1;
2199   return NULL;
2200 }
2201 /* Walk all variables.  */
2202 #define FOR_EACH_VARIABLE(node) \
2203    for ((node) = symtab->first_variable (); \
2204         (node); \
2205         (node) = symtab->next_variable ((node)))
2206
2207 /* Return first static variable with initializer.  */
2208 inline varpool_node *
2209 symbol_table::first_static_initializer (void)
2210 {
2211   symtab_node *node;
2212   for (node = nodes; node; node = node->next)
2213     {
2214       varpool_node *vnode = dyn_cast <varpool_node *> (node);
2215       if (vnode && DECL_INITIAL (node->decl))
2216         return vnode;
2217     }
2218   return NULL;
2219 }
2220
2221 /* Return next static variable with initializer after NODE.  */
2222 inline varpool_node *
2223 symbol_table::next_static_initializer (varpool_node *node)
2224 {
2225   symtab_node *node1 = node->next;
2226   for (; node1; node1 = node1->next)
2227     {
2228       varpool_node *vnode1 = dyn_cast <varpool_node *> (node1);
2229       if (vnode1 && DECL_INITIAL (node1->decl))
2230         return vnode1;
2231     }
2232   return NULL;
2233 }
2234
2235 /* Walk all static variables with initializer set.  */
2236 #define FOR_EACH_STATIC_INITIALIZER(node) \
2237    for ((node) = symtab->first_static_initializer (); (node); \
2238         (node) = symtab->next_static_initializer (node))
2239
2240 /* Return first static variable with definition.  */
2241 inline varpool_node *
2242 symbol_table::first_defined_variable (void)
2243 {
2244   symtab_node *node;
2245   for (node = nodes; node; node = node->next)
2246     {
2247       varpool_node *vnode = dyn_cast <varpool_node *> (node);
2248       if (vnode && vnode->definition)
2249         return vnode;
2250     }
2251   return NULL;
2252 }
2253
2254 /* Return next static variable with definition after NODE.  */
2255 inline varpool_node *
2256 symbol_table::next_defined_variable (varpool_node *node)
2257 {
2258   symtab_node *node1 = node->next;
2259   for (; node1; node1 = node1->next)
2260     {
2261       varpool_node *vnode1 = dyn_cast <varpool_node *> (node1);
2262       if (vnode1 && vnode1->definition)
2263         return vnode1;
2264     }
2265   return NULL;
2266 }
2267 /* Walk all variables with definitions in current unit.  */
2268 #define FOR_EACH_DEFINED_VARIABLE(node) \
2269    for ((node) = symtab->first_defined_variable (); (node); \
2270         (node) = symtab->next_defined_variable (node))
2271
2272 /* Return first function with body defined.  */
2273 inline cgraph_node *
2274 symbol_table::first_defined_function (void)
2275 {
2276   symtab_node *node;
2277   for (node = nodes; node; node = node->next)
2278     {
2279       cgraph_node *cn = dyn_cast <cgraph_node *> (node);
2280       if (cn && cn->definition)
2281         return cn;
2282     }
2283   return NULL;
2284 }
2285
2286 /* Return next function with body defined after NODE.  */
2287 inline cgraph_node *
2288 symbol_table::next_defined_function (cgraph_node *node)
2289 {
2290   symtab_node *node1 = node->next;
2291   for (; node1; node1 = node1->next)
2292     {
2293       cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1);
2294       if (cn1 && cn1->definition)
2295         return cn1;
2296     }
2297   return NULL;
2298 }
2299
2300 /* Walk all functions with body defined.  */
2301 #define FOR_EACH_DEFINED_FUNCTION(node) \
2302    for ((node) = symtab->first_defined_function (); (node); \
2303         (node) = symtab->next_defined_function ((node)))
2304
2305 /* Return first function.  */
2306 inline cgraph_node *
2307 symbol_table::first_function (void)
2308 {
2309   symtab_node *node;
2310   for (node = nodes; node; node = node->next)
2311     if (cgraph_node *cn = dyn_cast <cgraph_node *> (node))
2312       return cn;
2313   return NULL;
2314 }
2315
2316 /* Return next function.  */
2317 inline cgraph_node *
2318 symbol_table::next_function (cgraph_node *node)
2319 {
2320   symtab_node *node1 = node->next;
2321   for (; node1; node1 = node1->next)
2322     if (cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1))
2323       return cn1;
2324   return NULL;
2325 }
2326
2327 /* Return first function with body defined.  */
2328 inline cgraph_node *
2329 symbol_table::first_function_with_gimple_body (void)
2330 {
2331   symtab_node *node;
2332   for (node = nodes; node; node = node->next)
2333     {
2334       cgraph_node *cn = dyn_cast <cgraph_node *> (node);
2335       if (cn && cn->has_gimple_body_p ())
2336         return cn;
2337     }
2338   return NULL;
2339 }
2340
2341 /* Return next reachable static variable with initializer after NODE.  */
2342 inline cgraph_node *
2343 symbol_table::next_function_with_gimple_body (cgraph_node *node)
2344 {
2345   symtab_node *node1 = node->next;
2346   for (; node1; node1 = node1->next)
2347     {
2348       cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1);
2349       if (cn1 && cn1->has_gimple_body_p ())
2350         return cn1;
2351     }
2352   return NULL;
2353 }
2354
2355 /* Walk all functions.  */
2356 #define FOR_EACH_FUNCTION(node) \
2357    for ((node) = symtab->first_function (); (node); \
2358         (node) = symtab->next_function ((node)))
2359
2360 /* Return true when callgraph node is a function with Gimple body defined
2361    in current unit.  Functions can also be define externally or they
2362    can be thunks with no Gimple representation.
2363
2364    Note that at WPA stage, the function body may not be present in memory.  */
2365
2366 inline bool
2367 cgraph_node::has_gimple_body_p (void)
2368 {
2369   return definition && !thunk.thunk_p && !alias;
2370 }
2371
2372 /* Walk all functions with body defined.  */
2373 #define FOR_EACH_FUNCTION_WITH_GIMPLE_BODY(node) \
2374    for ((node) = symtab->first_function_with_gimple_body (); (node); \
2375         (node) = symtab->next_function_with_gimple_body (node))
2376
2377 /* Create a new static variable of type TYPE.  */
2378 tree add_new_static_var (tree type);
2379
2380 /* Uniquize all constants that appear in memory.
2381    Each constant in memory thus far output is recorded
2382    in `const_desc_table'.  */
2383
2384 struct GTY(()) constant_descriptor_tree {
2385   /* A MEM for the constant.  */
2386   rtx rtl;
2387
2388   /* The value of the constant.  */
2389   tree value;
2390
2391   /* Hash of value.  Computing the hash from value each time
2392      hashfn is called can't work properly, as that means recursive
2393      use of the hash table during hash table expansion.  */
2394   hashval_t hash;
2395 };
2396
2397 /* Return true when function is only called directly or it has alias.
2398    i.e. it is not externally visible, address was not taken and
2399    it is not used in any other non-standard way.  */
2400
2401 inline bool
2402 cgraph_node::only_called_directly_or_aliased_p (void)
2403 {
2404   gcc_assert (!global.inlined_to);
2405   return (!force_output && !address_taken
2406           && !used_from_other_partition
2407           && !DECL_VIRTUAL_P (decl)
2408           && !DECL_STATIC_CONSTRUCTOR (decl)
2409           && !DECL_STATIC_DESTRUCTOR (decl)
2410           && !externally_visible);
2411 }
2412
2413 /* Return true when variable can be removed from variable pool
2414    if all direct calls are eliminated.  */
2415
2416 inline bool
2417 varpool_node::can_remove_if_no_refs_p (void)
2418 {
2419   if (DECL_EXTERNAL (decl))
2420     return true;
2421   return (!force_output && !used_from_other_partition
2422           && ((DECL_COMDAT (decl)
2423                && !forced_by_abi
2424                && !used_from_object_file_p ())
2425               || !externally_visible
2426               || DECL_HAS_VALUE_EXPR_P (decl)));
2427 }
2428
2429 /* Return true when all references to variable must be visible in ipa_ref_list.
2430    i.e. if the variable is not externally visible or not used in some magic
2431    way (asm statement or such).
2432    The magic uses are all summarized in force_output flag.  */
2433
2434 inline bool
2435 varpool_node::all_refs_explicit_p ()
2436 {
2437   return (definition
2438           && !externally_visible
2439           && !used_from_other_partition
2440           && !force_output);
2441 }
2442
2443 /* Constant pool accessor function.  */
2444 htab_t constant_pool_htab (void);
2445
2446 /* Return node that alias is aliasing.  */
2447
2448 inline cgraph_node *
2449 cgraph_node::get_alias_target (void)
2450 {
2451   return dyn_cast <cgraph_node *> (symtab_node::get_alias_target ());
2452 }
2453
2454 /* Return node that alias is aliasing.  */
2455
2456 inline varpool_node *
2457 varpool_node::get_alias_target (void)
2458 {
2459   return dyn_cast <varpool_node *> (symtab_node::get_alias_target ());
2460 }
2461
2462 /* Given function symbol, walk the alias chain to return the function node
2463    is alias of. Do not walk through thunks.
2464    When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
2465
2466 inline cgraph_node *
2467 cgraph_node::ultimate_alias_target (enum availability *availability)
2468 {
2469   cgraph_node *n = dyn_cast <cgraph_node *> (symtab_node::ultimate_alias_target
2470     (availability));
2471   if (!n && availability)
2472     *availability = AVAIL_NOT_AVAILABLE;
2473   return n;
2474 }
2475
2476 /* For given variable pool node, walk the alias chain to return the function
2477    the variable is alias of. Do not walk through thunks.
2478    When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
2479
2480 inline varpool_node *
2481 varpool_node::ultimate_alias_target (availability *availability)
2482 {
2483   varpool_node *n = dyn_cast <varpool_node *>
2484     (symtab_node::ultimate_alias_target (availability));
2485
2486   if (!n && availability)
2487     *availability = AVAIL_NOT_AVAILABLE;
2488   return n;
2489 }
2490
2491 /* Return true when the edge represents a direct recursion.  */
2492 inline bool
2493 cgraph_edge::recursive_p (void)
2494 {
2495   cgraph_node *c = callee->ultimate_alias_target ();
2496   if (caller->global.inlined_to)
2497     return caller->global.inlined_to->decl == c->decl;
2498   else
2499     return caller->decl == c->decl;
2500 }
2501
2502 /* Return true if the TM_CLONE bit is set for a given FNDECL.  */
2503 static inline bool
2504 decl_is_tm_clone (const_tree fndecl)
2505 {
2506   cgraph_node *n = cgraph_node::get (fndecl);
2507   if (n)
2508     return n->tm_clone;
2509   return false;
2510 }
2511
2512 /* Likewise indicate that a node is needed, i.e. reachable via some
2513    external means.  */
2514
2515 inline void
2516 cgraph_node::mark_force_output (void)
2517 {
2518   force_output = 1;
2519   gcc_checking_assert (!global.inlined_to);
2520 }
2521
2522 #endif  /* GCC_CGRAPH_H  */