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