* ipa-polymorphic-call.c
[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   /* cgraph_node is no longer nested function; update cgraph accordingly.  */
923   void unnest (void);
924
925   /* Bring cgraph node local.  */
926   void make_local (void);
927
928   /* Likewise indicate that a node is having address taken.  */
929   void mark_address_taken (void);
930
931   /* Set fialization priority to PRIORITY.  */
932   void set_fini_priority (priority_type priority);
933
934   /* Return the finalization priority.  */
935   priority_type get_fini_priority (void);
936
937   /* Create edge from a given function to CALLEE in the cgraph.  */
938   cgraph_edge *create_edge (cgraph_node *callee,
939                             gimple call_stmt, gcov_type count,
940                             int freq);
941
942   /* Create an indirect edge with a yet-undetermined callee where the call
943      statement destination is a formal parameter of the caller with index
944      PARAM_INDEX. */
945   cgraph_edge *create_indirect_edge (gimple call_stmt, int ecf_flags,
946                                      gcov_type count, int freq,
947                                      bool compute_indirect_info = true);
948
949   /* Like cgraph_create_edge walk the clone tree and update all clones sharing
950    same function body.  If clones already have edge for OLD_STMT; only
951    update the edge same way as cgraph_set_call_stmt_including_clones does.  */
952   void create_edge_including_clones (cgraph_node *callee,
953                                      gimple old_stmt, gimple stmt,
954                                      gcov_type count,
955                                      int freq,
956                                      cgraph_inline_failed_t reason);
957
958   /* Return the callgraph edge representing the GIMPLE_CALL statement
959      CALL_STMT.  */
960   cgraph_edge *get_edge (gimple call_stmt);
961
962   /* Collect all callers of cgraph_node and its aliases that are known to lead
963      to NODE (i.e. are not overwritable).  */
964   vec<cgraph_edge *> collect_callers (void);
965
966   /* Remove all callers from the node.  */
967   void remove_callers (void);
968
969   /* Remove all callees from the node.  */
970   void remove_callees (void);
971
972   /* Return function availability.  See cgraph.h for description of individual
973      return values.  */
974   enum availability get_availability (void);
975
976   /* Set TREE_NOTHROW on cgraph_node's decl and on aliases of the node
977      if any to NOTHROW.  */
978   void set_nothrow_flag (bool nothrow);
979
980   /* Set TREE_READONLY on cgraph_node's decl and on aliases of the node
981      if any to READONLY.  */
982   void set_const_flag (bool readonly, bool looping);
983
984   /* Set DECL_PURE_P on cgraph_node's decl and on aliases of the node
985      if any to PURE.  */
986   void set_pure_flag (bool pure, bool looping);
987
988   /* Call calback on function and aliases associated to the function.
989      When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
990      skipped. */
991
992   bool call_for_symbol_and_aliases (bool (*callback) (cgraph_node *,
993                                                       void *),
994                                     void *data, bool include_overwritable);
995
996   /* Call calback on cgraph_node, thunks and aliases associated to NODE.
997      When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
998      skipped.  */
999   bool call_for_symbol_thunks_and_aliases (bool (*callback) (cgraph_node *node,
1000                                                            void *data),
1001                                          void *data,
1002                                          bool include_overwritable);
1003
1004   /* Likewise indicate that a node is needed, i.e. reachable via some
1005      external means.  */
1006   inline void mark_force_output (void);
1007
1008   /* Return true when function can be marked local.  */
1009   bool local_p (void);
1010
1011   /* Return true if cgraph_node can be made local for API change.
1012      Extern inline functions and C++ COMDAT functions can be made local
1013      at the expense of possible code size growth if function is used in multiple
1014      compilation units.  */
1015   bool can_be_local_p (void);
1016
1017   /* Return true when cgraph_node can not return or throw and thus
1018      it is safe to ignore its side effects for IPA analysis.  */
1019   bool cannot_return_p (void);
1020
1021   /* Return true when function cgraph_node and all its aliases are only called
1022      directly.
1023      i.e. it is not externally visible, address was not taken and
1024      it is not used in any other non-standard way.  */
1025   bool only_called_directly_p (void);
1026
1027   /* Return true when function is only called directly or it has alias.
1028      i.e. it is not externally visible, address was not taken and
1029      it is not used in any other non-standard way.  */
1030   inline bool only_called_directly_or_aliased_p (void);
1031
1032   /* Return true when function cgraph_node can be expected to be removed
1033      from program when direct calls in this compilation unit are removed.
1034
1035      As a special case COMDAT functions are
1036      cgraph_can_remove_if_no_direct_calls_p while the are not
1037      cgraph_only_called_directly_p (it is possible they are called from other
1038      unit)
1039
1040      This function behaves as cgraph_only_called_directly_p because eliminating
1041      all uses of COMDAT function does not make it necessarily disappear from
1042      the program unless we are compiling whole program or we do LTO.  In this
1043      case we know we win since dynamic linking will not really discard the
1044      linkonce section.  */
1045   bool will_be_removed_from_program_if_no_direct_calls_p (void);
1046
1047   /* Return true when function can be removed from callgraph
1048      if all direct calls are eliminated.  */
1049   bool can_remove_if_no_direct_calls_and_refs_p (void);
1050
1051   /* Return true when function cgraph_node and its aliases can be removed from
1052      callgraph if all direct calls are eliminated.  */
1053   bool can_remove_if_no_direct_calls_p (void);
1054
1055   /* Return true when callgraph node is a function with Gimple body defined
1056      in current unit.  Functions can also be define externally or they
1057      can be thunks with no Gimple representation.
1058
1059      Note that at WPA stage, the function body may not be present in memory.  */
1060   inline bool has_gimple_body_p (void);
1061
1062   /* Return true if function should be optimized for size.  */
1063   bool optimize_for_size_p (void);
1064
1065   /* Dump the callgraph to file F.  */
1066   static void dump_cgraph (FILE *f);
1067
1068   /* Dump the call graph to stderr.  */
1069   static inline
1070   void debug_cgraph (void)
1071   {
1072     dump_cgraph (stderr);
1073   }
1074
1075   /* Record that DECL1 and DECL2 are semantically identical function
1076      versions.  */
1077   static void record_function_versions (tree decl1, tree decl2);
1078
1079   /* Remove the cgraph_function_version_info and cgraph_node for DECL.  This
1080      DECL is a duplicate declaration.  */
1081   static void delete_function_version (tree decl);
1082
1083   /* Add the function FNDECL to the call graph.
1084      Unlike finalize_function, this function is intended to be used
1085      by middle end and allows insertion of new function at arbitrary point
1086      of compilation.  The function can be either in high, low or SSA form
1087      GIMPLE.
1088
1089      The function is assumed to be reachable and have address taken (so no
1090      API breaking optimizations are performed on it).
1091
1092      Main work done by this function is to enqueue the function for later
1093      processing to avoid need the passes to be re-entrant.  */
1094   static void add_new_function (tree fndecl, bool lowered);
1095
1096   /* Return callgraph node for given symbol and check it is a function. */
1097   static inline cgraph_node *get (const_tree decl)
1098   {
1099     gcc_checking_assert (TREE_CODE (decl) == FUNCTION_DECL);
1100     return dyn_cast <cgraph_node *> (symtab_node::get (decl));
1101   }
1102
1103   /* DECL has been parsed.  Take it, queue it, compile it at the whim of the
1104      logic in effect.  If NO_COLLECT is true, then our caller cannot stand to
1105      have the garbage collector run at the moment.  We would need to either
1106      create a new GC context, or just not compile right now.  */
1107   static void finalize_function (tree, bool);
1108
1109   /* Return cgraph node assigned to DECL.  Create new one when needed.  */
1110   static cgraph_node * create (tree decl);
1111
1112   /* Try to find a call graph node for declaration DECL and if it does not
1113      exist or if it corresponds to an inline clone, create a new one.  */
1114   static cgraph_node * get_create (tree);
1115
1116   /* Return local info for the compiled function.  */
1117   static cgraph_local_info *local_info (tree decl);
1118
1119   /* Return global info for the compiled function.  */
1120   static cgraph_global_info *global_info (tree);
1121
1122   /* Return local info for the compiled function.  */
1123   static cgraph_rtl_info *rtl_info (tree);
1124
1125   /* Return the cgraph node that has ASMNAME for its DECL_ASSEMBLER_NAME.
1126      Return NULL if there's no such node.  */
1127   static cgraph_node *get_for_asmname (tree asmname);
1128
1129   /* Attempt to mark ALIAS as an alias to DECL.  Return alias node if
1130      successful and NULL otherwise.
1131      Same body aliases are output whenever the body of DECL is output,
1132      and cgraph_node::get (ALIAS) transparently
1133      returns cgraph_node::get (DECL).  */
1134   static cgraph_node * create_same_body_alias (tree alias, tree decl);
1135
1136   /* Worker for cgraph_can_remove_if_no_direct_calls_p.  */
1137   static bool used_from_object_file_p_worker (cgraph_node *node, void *)
1138   {
1139     return node->used_from_object_file_p ();
1140   }
1141
1142   /* Return true when cgraph_node can not be local.
1143      Worker for cgraph_local_node_p.  */
1144   static bool non_local_p (cgraph_node *node, void *);
1145
1146   /* Verify whole cgraph structure.  */
1147   static void DEBUG_FUNCTION verify_cgraph_nodes (void);
1148
1149   /* Worker to bring NODE local.  */
1150   static bool make_local (cgraph_node *node, void *);
1151
1152   /* Mark ALIAS as an alias to DECL.  DECL_NODE is cgraph node representing
1153      the function body is associated
1154      with (not necessarily cgraph_node (DECL).  */
1155   static cgraph_node *create_alias (tree alias, tree target);
1156
1157   cgraph_edge *callees;
1158   cgraph_edge *callers;
1159   /* List of edges representing indirect calls with a yet undetermined
1160      callee.  */
1161   cgraph_edge *indirect_calls;
1162   /* For nested functions points to function the node is nested in.  */
1163   cgraph_node *origin;
1164   /* Points to first nested function, if any.  */
1165   cgraph_node *nested;
1166   /* Pointer to the next function with same origin, if any.  */
1167   cgraph_node *next_nested;
1168   /* Pointer to the next clone.  */
1169   cgraph_node *next_sibling_clone;
1170   cgraph_node *prev_sibling_clone;
1171   cgraph_node *clones;
1172   cgraph_node *clone_of;
1173   /* For functions with many calls sites it holds map from call expression
1174      to the edge to speed up cgraph_edge function.  */
1175   htab_t GTY((param_is (cgraph_edge))) call_site_hash;
1176   /* Declaration node used to be clone of. */
1177   tree former_clone_of;
1178
1179   /* If this is a SIMD clone, this points to the SIMD specific
1180      information for it.  */
1181   cgraph_simd_clone *simdclone;
1182   /* If this function has SIMD clones, this points to the first clone.  */
1183   cgraph_node *simd_clones;
1184
1185   /* Interprocedural passes scheduled to have their transform functions
1186      applied next time we execute local pass on them.  We maintain it
1187      per-function in order to allow IPA passes to introduce new functions.  */
1188   vec<ipa_opt_pass> GTY((skip)) ipa_transforms_to_apply;
1189
1190   cgraph_local_info local;
1191   cgraph_global_info global;
1192   cgraph_rtl_info rtl;
1193   cgraph_clone_info clone;
1194   cgraph_thunk_info thunk;
1195
1196   /* Expected number of executions: calculated in profile.c.  */
1197   gcov_type count;
1198   /* How to scale counts at materialization time; used to merge
1199      LTO units with different number of profile runs.  */
1200   int count_materialization_scale;
1201   /* Unique id of the node.  */
1202   int uid;
1203   /* ID assigned by the profiling.  */
1204   unsigned int profile_id;
1205   /* Time profiler: first run of function.  */
1206   int tp_first_run;
1207
1208   /* Set when decl is an abstract function pointed to by the
1209      ABSTRACT_DECL_ORIGIN of a reachable function.  */
1210   unsigned used_as_abstract_origin : 1;
1211   /* Set once the function is lowered (i.e. its CFG is built).  */
1212   unsigned lowered : 1;
1213   /* Set once the function has been instantiated and its callee
1214      lists created.  */
1215   unsigned process : 1;
1216   /* How commonly executed the node is.  Initialized during branch
1217      probabilities pass.  */
1218   ENUM_BITFIELD (node_frequency) frequency : 2;
1219   /* True when function can only be called at startup (from static ctor).  */
1220   unsigned only_called_at_startup : 1;
1221   /* True when function can only be called at startup (from static dtor).  */
1222   unsigned only_called_at_exit : 1;
1223   /* True when function is the transactional clone of a function which
1224      is called only from inside transactions.  */
1225   /* ?? We should be able to remove this.  We have enough bits in
1226      cgraph to calculate it.  */
1227   unsigned tm_clone : 1;
1228   /* True if this decl is a dispatcher for function versions.  */
1229   unsigned dispatcher_function : 1;
1230   /* True if this decl calls a COMDAT-local function.  This is set up in
1231      compute_inline_parameters and inline_call.  */
1232   unsigned calls_comdat_local : 1;
1233 };
1234
1235 /* A cgraph node set is a collection of cgraph nodes.  A cgraph node
1236    can appear in multiple sets.  */
1237 struct cgraph_node_set_def
1238 {
1239   hash_map<cgraph_node *, size_t> *map;
1240   vec<cgraph_node *> nodes;
1241 };
1242
1243 typedef cgraph_node_set_def *cgraph_node_set;
1244 typedef struct varpool_node_set_def *varpool_node_set;
1245
1246 class varpool_node;
1247
1248 /* A varpool node set is a collection of varpool nodes.  A varpool node
1249    can appear in multiple sets.  */
1250 struct varpool_node_set_def
1251 {
1252   hash_map<varpool_node *, size_t> * map;
1253   vec<varpool_node *> nodes;
1254 };
1255
1256 /* Iterator structure for cgraph node sets.  */
1257 struct cgraph_node_set_iterator
1258 {
1259   cgraph_node_set set;
1260   unsigned index;
1261 };
1262
1263 /* Iterator structure for varpool node sets.  */
1264 struct varpool_node_set_iterator
1265 {
1266   varpool_node_set set;
1267   unsigned index;
1268 };
1269
1270 /* Context of polymorphic call. It represent information about the type of
1271    instance that may reach the call.  This is used by ipa-devirt walkers of the
1272    type inheritance graph.  */
1273
1274 class GTY(()) ipa_polymorphic_call_context {
1275 public:
1276   /* The called object appears in an object of type OUTER_TYPE
1277      at offset OFFSET.  When information is not 100% reliable, we
1278      use SPECULATIVE_OUTER_TYPE and SPECULATIVE_OFFSET. */
1279   HOST_WIDE_INT offset;
1280   HOST_WIDE_INT speculative_offset;
1281   tree outer_type;
1282   tree speculative_outer_type;
1283   /* True if outer object may be in construction or destruction.  */
1284   bool maybe_in_construction;
1285   /* True if outer object may be of derived type.  */
1286   bool maybe_derived_type;
1287   /* True if speculative outer object may be of derived type.  We always
1288      speculate that construction does not happen.  */
1289   bool speculative_maybe_derived_type;
1290   /* True if the context is invalid and all calls should be redirected
1291      to BUILTIN_UNREACHABLE.  */
1292   bool invalid;
1293
1294   /* Build empty "I know nothing" context.  */
1295   ipa_polymorphic_call_context ();
1296   /* Build polymorphic call context for indirect call E.  */
1297   ipa_polymorphic_call_context (cgraph_edge *e);
1298   /* Build polymorphic call context for IP invariant CST.
1299      If specified, OTR_TYPE specify the type of polymorphic call
1300      that takes CST+OFFSET as a prameter.  */
1301   ipa_polymorphic_call_context (tree cst, tree otr_type = NULL,
1302                                 HOST_WIDE_INT offset = 0);
1303   /* Build context for pointer REF contained in FNDECL at statement STMT.
1304      if INSTANCE is non-NULL, return pointer to the object described by
1305      the context.  */
1306   ipa_polymorphic_call_context (tree fndecl, tree ref, gimple stmt,
1307                                 tree *instance = NULL);
1308
1309   /* Look for vtable stores or constructor calls to work out dynamic type
1310      of memory location.  */
1311   bool get_dynamic_type (tree, tree, tree, gimple);
1312
1313   /* Make context non-speculative.  */
1314   void clear_speculation ();
1315
1316   /* Walk container types and modify context to point to actual class
1317      containing OTR_TYPE (if non-NULL) as base class.
1318      Return true if resulting context is valid.
1319
1320      When CONSIDER_PLACEMENT_NEW is false, reject contexts that may be made
1321      valid only via alocation of new polymorphic type inside by means
1322      of placement new.
1323
1324      When CONSIDER_BASES is false, only look for actual fields, not base types
1325      of TYPE.  */
1326   bool restrict_to_inner_class (tree otr_type,
1327                                 bool consider_placement_new = true,
1328                                 bool consider_bases = true);
1329
1330   /* Adjust all offsets in contexts by given number of bits.  */
1331   void offset_by (HOST_WIDE_INT);
1332   /* Take non-speculative info, merge it with speculative and clear speculatoin.
1333      Used when we no longer manage to keep track of actual outer type, but we
1334      think it is still there. 
1335      If OTR_TYPE is set, the transformation can be done more effectively assuming
1336      that context is going to be used only that way.  */
1337   void make_speculative (tree otr_type = NULL);
1338   /* Assume that both THIS and a given context is valid and strenghten THIS
1339      if possible.  Return true if any strenghtening was made.
1340      If actual type the context is being used in is known, OTR_TYPE should be
1341      set accordingly. This improves quality of combined result.  */
1342   bool combine_with (ipa_polymorphic_call_context, tree otr_type = NULL);
1343
1344   /* Return TRUE if context is fully useless.  */
1345   bool useless_p () const;
1346
1347   /* Dump human readable context to F.  */
1348   void dump (FILE *f) const;
1349   void DEBUG_FUNCTION debug () const;
1350
1351   /* LTO streaming.  */
1352   void stream_out (struct output_block *) const;
1353   void stream_in (struct lto_input_block *, struct data_in *data_in);
1354
1355 private:
1356   bool combine_speculation_with (tree, HOST_WIDE_INT, bool, tree);
1357   void set_by_decl (tree, HOST_WIDE_INT);
1358   bool set_by_invariant (tree, tree, HOST_WIDE_INT);
1359   void clear_outer_type (tree otr_type = NULL);
1360   bool speculation_consistent_p (tree, HOST_WIDE_INT, bool, tree);
1361 };
1362
1363 /* Structure containing additional information about an indirect call.  */
1364
1365 struct GTY(()) cgraph_indirect_call_info
1366 {
1367   /* When agg_content is set, an offset where the call pointer is located
1368      within the aggregate.  */
1369   HOST_WIDE_INT offset;
1370   /* Context of the polymorphic call; use only when POLYMORPHIC flag is set.  */
1371   ipa_polymorphic_call_context context;
1372   /* OBJ_TYPE_REF_TOKEN of a polymorphic call (if polymorphic is set).  */
1373   HOST_WIDE_INT otr_token;
1374   /* Type of the object from OBJ_TYPE_REF_OBJECT. */
1375   tree otr_type;
1376   /* Index of the parameter that is called.  */
1377   int param_index;
1378   /* ECF flags determined from the caller.  */
1379   int ecf_flags;
1380   /* Profile_id of common target obtrained from profile.  */
1381   int common_target_id;
1382   /* Probability that call will land in function with COMMON_TARGET_ID.  */
1383   int common_target_probability;
1384
1385   /* Set when the call is a virtual call with the parameter being the
1386      associated object pointer rather than a simple direct call.  */
1387   unsigned polymorphic : 1;
1388   /* Set when the call is a call of a pointer loaded from contents of an
1389      aggregate at offset.  */
1390   unsigned agg_contents : 1;
1391   /* Set when this is a call through a member pointer.  */
1392   unsigned member_ptr : 1;
1393   /* When the previous bit is set, this one determines whether the destination
1394      is loaded from a parameter passed by reference. */
1395   unsigned by_ref : 1;
1396 };
1397
1398 struct GTY((chain_next ("%h.next_caller"), chain_prev ("%h.prev_caller"))) cgraph_edge {
1399   friend class cgraph_node;
1400
1401   /* Remove the edge in the cgraph.  */
1402   void remove (void);
1403
1404   /* Change field call_stmt of edge to NEW_STMT.
1405      If UPDATE_SPECULATIVE and E is any component of speculative
1406      edge, then update all components.  */
1407   void set_call_stmt (gimple new_stmt, bool update_speculative = true);
1408
1409   /* Redirect callee of the edge to N.  The function does not update underlying
1410      call expression.  */
1411   void redirect_callee (cgraph_node *n);
1412
1413   /* Make an indirect edge with an unknown callee an ordinary edge leading to
1414      CALLEE.  DELTA is an integer constant that is to be added to the this
1415      pointer (first parameter) to compensate for skipping
1416      a thunk adjustment.  */
1417   cgraph_edge *make_direct (cgraph_node *callee);
1418
1419   /* Turn edge into speculative call calling N2. Update
1420      the profile so the direct call is taken COUNT times
1421      with FREQUENCY.  */
1422   cgraph_edge *make_speculative (cgraph_node *n2, gcov_type direct_count,
1423                                  int direct_frequency);
1424
1425    /* Given speculative call edge, return all three components.  */
1426   void speculative_call_info (cgraph_edge *&direct, cgraph_edge *&indirect,
1427                               ipa_ref *&reference);
1428
1429   /* Speculative call edge turned out to be direct call to CALLE_DECL.
1430      Remove the speculative call sequence and return edge representing the call.
1431      It is up to caller to redirect the call as appropriate. */
1432   cgraph_edge *resolve_speculation (tree callee_decl = NULL);
1433
1434   /* If necessary, change the function declaration in the call statement
1435      associated with the edge so that it corresponds to the edge callee.  */
1436   gimple redirect_call_stmt_to_callee (void);
1437
1438   /* Create clone of edge in the node N represented
1439      by CALL_EXPR the callgraph.  */
1440   cgraph_edge * clone (cgraph_node *n, gimple call_stmt, unsigned stmt_uid,
1441                        gcov_type count_scale, int freq_scale, bool update_original);
1442
1443   /* Return true when call of edge can not lead to return from caller
1444      and thus it is safe to ignore its side effects for IPA analysis
1445      when computing side effects of the caller.  */
1446   bool cannot_lead_to_return_p (void);
1447
1448   /* Return true when the edge represents a direct recursion.  */
1449   bool recursive_p (void);
1450
1451   /* Return true if the call can be hot.  */
1452   bool maybe_hot_p (void);
1453
1454   /* Rebuild cgraph edges for current function node.  This needs to be run after
1455      passes that don't update the cgraph.  */
1456   static unsigned int rebuild_edges (void);
1457
1458   /* Rebuild cgraph references for current function node.  This needs to be run
1459      after passes that don't update the cgraph.  */
1460   static void rebuild_references (void);
1461
1462   /* Expected number of executions: calculated in profile.c.  */
1463   gcov_type count;
1464   cgraph_node *caller;
1465   cgraph_node *callee;
1466   cgraph_edge *prev_caller;
1467   cgraph_edge *next_caller;
1468   cgraph_edge *prev_callee;
1469   cgraph_edge *next_callee;
1470   gimple call_stmt;
1471   /* Additional information about an indirect call.  Not cleared when an edge
1472      becomes direct.  */
1473   cgraph_indirect_call_info *indirect_info;
1474   PTR GTY ((skip (""))) aux;
1475   /* When equal to CIF_OK, inline this call.  Otherwise, points to the
1476      explanation why function was not inlined.  */
1477   enum cgraph_inline_failed_t inline_failed;
1478   /* The stmt_uid of call_stmt.  This is used by LTO to recover the call_stmt
1479      when the function is serialized in.  */
1480   unsigned int lto_stmt_uid;
1481   /* Expected frequency of executions within the function.
1482      When set to CGRAPH_FREQ_BASE, the edge is expected to be called once
1483      per function call.  The range is 0 to CGRAPH_FREQ_MAX.  */
1484   int frequency;
1485   /* Unique id of the edge.  */
1486   int uid;
1487   /* Whether this edge was made direct by indirect inlining.  */
1488   unsigned int indirect_inlining_edge : 1;
1489   /* Whether this edge describes an indirect call with an undetermined
1490      callee.  */
1491   unsigned int indirect_unknown_callee : 1;
1492   /* Whether this edge is still a dangling  */
1493   /* True if the corresponding CALL stmt cannot be inlined.  */
1494   unsigned int call_stmt_cannot_inline_p : 1;
1495   /* Can this call throw externally?  */
1496   unsigned int can_throw_external : 1;
1497   /* Edges with SPECULATIVE flag represents indirect calls that was
1498      speculatively turned into direct (i.e. by profile feedback).
1499      The final code sequence will have form:
1500
1501      if (call_target == expected_fn)
1502        expected_fn ();
1503      else
1504        call_target ();
1505
1506      Every speculative call is represented by three components attached
1507      to a same call statement:
1508      1) a direct call (to expected_fn)
1509      2) an indirect call (to call_target)
1510      3) a IPA_REF_ADDR refrence to expected_fn.
1511
1512      Optimizers may later redirect direct call to clone, so 1) and 3)
1513      do not need to necesarily agree with destination.  */
1514   unsigned int speculative : 1;
1515
1516 private:
1517   /* Remove the edge from the list of the callers of the callee.  */
1518   void remove_caller (void);
1519
1520   /* Remove the edge from the list of the callees of the caller.  */
1521   void remove_callee (void);
1522 };
1523
1524 #define CGRAPH_FREQ_BASE 1000
1525 #define CGRAPH_FREQ_MAX 100000
1526
1527 /* The varpool data structure.
1528    Each static variable decl has assigned varpool_node.  */
1529
1530 class GTY((tag ("SYMTAB_VARIABLE"))) varpool_node : public symtab_node {
1531 public:
1532   /* Dump given varpool node to F.  */
1533   void dump (FILE *f);
1534
1535   /* Dump given varpool node to stderr.  */
1536   void DEBUG_FUNCTION debug (void);
1537
1538   /* Remove variable from symbol table.  */
1539   void remove (void);
1540
1541   /* Remove node initializer when it is no longer needed.  */
1542   void remove_initializer (void);
1543
1544   void analyze (void);
1545
1546   /* Return variable availability.  */
1547   availability get_availability (void);
1548
1549   /* When doing LTO, read variable's constructor from disk if
1550      it is not already present.  */
1551   tree get_constructor (void);
1552
1553   /* Return true if variable has constructor that can be used for folding.  */
1554   bool ctor_useable_for_folding_p (void);
1555
1556   /* For given variable pool node, walk the alias chain to return the function
1557      the variable is alias of. Do not walk through thunks.
1558      When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
1559   inline varpool_node *ultimate_alias_target
1560     (availability *availability = NULL);
1561
1562   /* Return node that alias is aliasing.  */
1563   inline varpool_node *get_alias_target (void);
1564
1565   /* Output one variable, if necessary.  Return whether we output it.  */
1566   bool assemble_decl (void);
1567
1568   /* For variables in named sections make sure get_variable_section
1569      is called before we switch to those sections.  Then section
1570      conflicts between read-only and read-only requiring relocations
1571      sections can be resolved.  */
1572   void finalize_named_section_flags (void);
1573
1574   /* Call calback on varpool symbol and aliases associated to varpool symbol.
1575      When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
1576      skipped. */
1577   bool call_for_node_and_aliases (bool (*callback) (varpool_node *, void *),
1578                                   void *data,
1579                                    bool include_overwritable);
1580
1581   /* Return true when variable should be considered externally visible.  */
1582   bool externally_visible_p (void);
1583
1584   /* Return true when all references to variable must be visible
1585      in ipa_ref_list.
1586      i.e. if the variable is not externally visible or not used in some magic
1587      way (asm statement or such).
1588      The magic uses are all summarized in force_output flag.  */
1589   inline bool all_refs_explicit_p ();
1590
1591   /* Return true when variable can be removed from variable pool
1592      if all direct calls are eliminated.  */
1593   inline bool can_remove_if_no_refs_p (void);
1594
1595   /* Add the variable DECL to the varpool.
1596      Unlike finalize_decl function is intended to be used
1597      by middle end and allows insertion of new variable at arbitrary point
1598      of compilation.  */
1599   static void add (tree decl);
1600
1601   /* Return varpool node for given symbol and check it is a function. */
1602   static inline varpool_node *get (const_tree decl);
1603
1604   /* Mark DECL as finalized.  By finalizing the declaration, frontend instruct
1605      the middle end to output the variable to asm file, if needed or externally
1606      visible.  */
1607   static void finalize_decl (tree decl);
1608
1609   /* Attempt to mark ALIAS as an alias to DECL.  Return TRUE if successful.
1610      Extra name aliases are output whenever DECL is output.  */
1611   static varpool_node * create_extra_name_alias (tree alias, tree decl);
1612
1613   /* Attempt to mark ALIAS as an alias to DECL.  Return TRUE if successful.
1614      Extra name aliases are output whenever DECL is output.  */
1615   static varpool_node * create_alias (tree, tree);
1616
1617   /* Dump the variable pool to F.  */
1618   static void dump_varpool (FILE *f);
1619
1620   /* Dump the variable pool to stderr.  */
1621   static void DEBUG_FUNCTION debug_varpool (void);
1622
1623   /* Allocate new callgraph node and insert it into basic data structures.  */
1624   static varpool_node *create_empty (void);
1625
1626   /* Return varpool node assigned to DECL.  Create new one when needed.  */
1627   static varpool_node *get_create (tree decl);
1628
1629   /* Given an assembler name, lookup node.  */
1630   static varpool_node *get_for_asmname (tree asmname);
1631
1632   /* Set when variable is scheduled to be assembled.  */
1633   unsigned output : 1;
1634
1635   /* Set if the variable is dynamically initialized, except for
1636      function local statics.   */
1637   unsigned dynamically_initialized : 1;
1638
1639   ENUM_BITFIELD(tls_model) tls_model : 3;
1640
1641   /* Set if the variable is known to be used by single function only.
1642      This is computed by ipa_signle_use pass and used by late optimizations
1643      in places where optimization would be valid for local static variable
1644      if we did not do any inter-procedural code movement.  */
1645   unsigned used_by_single_function : 1;
1646
1647 private:
1648   /* Assemble thunks and aliases associated to varpool node.  */
1649   void assemble_aliases (void);
1650 };
1651
1652 /* Every top level asm statement is put into a asm_node.  */
1653
1654 struct GTY(()) asm_node {
1655
1656
1657   /* Next asm node.  */
1658   asm_node *next;
1659   /* String for this asm node.  */
1660   tree asm_str;
1661   /* Ordering of all cgraph nodes.  */
1662   int order;
1663 };
1664
1665 /* Report whether or not THIS symtab node is a function, aka cgraph_node.  */
1666
1667 template <>
1668 template <>
1669 inline bool
1670 is_a_helper <cgraph_node *>::test (symtab_node *p)
1671 {
1672   return p && p->type == SYMTAB_FUNCTION;
1673 }
1674
1675 /* Report whether or not THIS symtab node is a vriable, aka varpool_node.  */
1676
1677 template <>
1678 template <>
1679 inline bool
1680 is_a_helper <varpool_node *>::test (symtab_node *p)
1681 {
1682   return p && p->type == SYMTAB_VARIABLE;
1683 }
1684
1685 /* Macros to access the next item in the list of free cgraph nodes and
1686    edges. */
1687 #define NEXT_FREE_NODE(NODE) dyn_cast<cgraph_node *> ((NODE)->next)
1688 #define SET_NEXT_FREE_NODE(NODE,NODE2) ((NODE))->next = NODE2
1689 #define NEXT_FREE_EDGE(EDGE) (EDGE)->prev_caller
1690
1691 typedef void (*cgraph_edge_hook)(cgraph_edge *, void *);
1692 typedef void (*cgraph_node_hook)(cgraph_node *, void *);
1693 typedef void (*varpool_node_hook)(varpool_node *, void *);
1694 typedef void (*cgraph_2edge_hook)(cgraph_edge *, cgraph_edge *, void *);
1695 typedef void (*cgraph_2node_hook)(cgraph_node *, cgraph_node *, void *);
1696
1697 struct cgraph_edge_hook_list;
1698 struct cgraph_node_hook_list;
1699 struct varpool_node_hook_list;
1700 struct cgraph_2edge_hook_list;
1701 struct cgraph_2node_hook_list;
1702
1703 /* Map from a symbol to initialization/finalization priorities.  */
1704 struct GTY(()) symbol_priority_map {
1705   priority_type init;
1706   priority_type fini;
1707 };
1708
1709 enum symtab_state
1710 {
1711   /* Frontend is parsing and finalizing functions.  */
1712   PARSING,
1713   /* Callgraph is being constructed.  It is safe to add new functions.  */
1714   CONSTRUCTION,
1715   /* Callgraph is being at LTO time.  */
1716   LTO_STREAMING,
1717   /* Callgraph is built and IPA passes are being run.  */
1718   IPA,
1719   /* Callgraph is built and all functions are transformed to SSA form.  */
1720   IPA_SSA,
1721   /* Functions are now ordered and being passed to RTL expanders.  */
1722   EXPANSION,
1723   /* All cgraph expansion is done.  */
1724   FINISHED
1725 };
1726
1727 class GTY((tag ("SYMTAB"))) symbol_table
1728 {
1729 public:
1730   friend class symtab_node;
1731   friend class cgraph_node;
1732   friend class cgraph_edge;
1733
1734   /* Initialize callgraph dump file.  */
1735   inline void
1736   initialize (void)
1737   {
1738     if (!dump_file)
1739       dump_file = dump_begin (TDI_cgraph, NULL);
1740   }
1741
1742   /* Register a top-level asm statement ASM_STR.  */
1743   inline asm_node *finalize_toplevel_asm (tree asm_str);
1744
1745   /* Analyze the whole compilation unit once it is parsed completely.  */
1746   void finalize_compilation_unit (void);
1747
1748   /* C++ frontend produce same body aliases all over the place, even before PCH
1749      gets streamed out. It relies on us linking the aliases with their function
1750      in order to do the fixups, but ipa-ref is not PCH safe.  Consequentely we
1751      first produce aliases without links, but once C++ FE is sure he won't sream
1752      PCH we build the links via this function.  */
1753   void process_same_body_aliases (void);
1754
1755   /* Perform simple optimizations based on callgraph.  */
1756   void compile (void);
1757
1758   /* Process CGRAPH_NEW_FUNCTIONS and perform actions necessary to add these
1759      functions into callgraph in a way so they look like ordinary reachable
1760      functions inserted into callgraph already at construction time.  */
1761   void process_new_functions (void);
1762
1763   /* Once all functions from compilation unit are in memory, produce all clones
1764      and update all calls.  We might also do this on demand if we don't want to
1765      bring all functions to memory prior compilation, but current WHOPR
1766      implementation does that and it is is bit easier to keep everything right
1767      in this order.  */
1768   void materialize_all_clones (void);
1769
1770   /* Register a symbol NODE.  */
1771   inline void register_symbol (symtab_node *node);
1772
1773   inline void
1774   clear_asm_symbols (void)
1775   {
1776     asmnodes = NULL;
1777     asm_last_node = NULL;
1778   }
1779
1780   /* Perform reachability analysis and reclaim all unreachable nodes.  */
1781   bool remove_unreachable_nodes (bool before_inlining_p, FILE *file);
1782
1783   /* Optimization of function bodies might've rendered some variables as
1784      unnecessary so we want to avoid these from being compiled.  Re-do
1785      reachability starting from variables that are either externally visible
1786      or was referred from the asm output routines.  */
1787   void remove_unreferenced_decls (void);
1788
1789   /* Unregister a symbol NODE.  */
1790   inline void unregister (symtab_node *node);
1791
1792   /* Allocate new callgraph node and insert it into basic data structures.  */
1793   cgraph_node *create_empty (void);
1794
1795   /* Release a callgraph NODE with UID and put in to the list
1796      of free nodes.  */
1797   void release_symbol (cgraph_node *node, int uid);
1798
1799   /* Output all variables enqueued to be assembled.  */
1800   bool output_variables (void);
1801
1802   /* Weakrefs may be associated to external decls and thus not output
1803      at expansion time.  Emit all necessary aliases.  */
1804   void output_weakrefs (void);
1805
1806   /* Return first static symbol with definition.  */
1807   inline symtab_node *first_symbol (void);
1808
1809   /* Return first assembler symbol.  */
1810   inline asm_node *
1811   first_asm_symbol (void)
1812   {
1813     return asmnodes;
1814   }
1815
1816   /* Return first static symbol with definition.  */
1817   inline symtab_node *first_defined_symbol (void);
1818
1819   /* Return first variable.  */
1820   inline varpool_node *first_variable (void);
1821
1822   /* Return next variable after NODE.  */
1823   inline varpool_node *next_variable (varpool_node *node);
1824
1825   /* Return first static variable with initializer.  */
1826   inline varpool_node *first_static_initializer (void);
1827
1828   /* Return next static variable with initializer after NODE.  */
1829   inline varpool_node *next_static_initializer (varpool_node *node);
1830
1831   /* Return first static variable with definition.  */
1832   inline varpool_node *first_defined_variable (void);
1833
1834   /* Return next static variable with definition after NODE.  */
1835   inline varpool_node *next_defined_variable (varpool_node *node);
1836
1837   /* Return first function with body defined.  */
1838   inline cgraph_node *first_defined_function (void);
1839
1840   /* Return next function with body defined after NODE.  */
1841   inline cgraph_node *next_defined_function (cgraph_node *node);
1842
1843   /* Return first function.  */
1844   inline cgraph_node *first_function (void);
1845
1846   /* Return next function.  */
1847   inline cgraph_node *next_function (cgraph_node *node);
1848
1849   /* Return first function with body defined.  */
1850   cgraph_node *first_function_with_gimple_body (void);
1851
1852   /* Return next reachable static variable with initializer after NODE.  */
1853   inline cgraph_node *next_function_with_gimple_body (cgraph_node *node);
1854
1855   /* Register HOOK to be called with DATA on each removed edge.  */
1856   cgraph_edge_hook_list *add_edge_removal_hook (cgraph_edge_hook hook,
1857                                                 void *data);
1858
1859   /* Remove ENTRY from the list of hooks called on removing edges.  */
1860   void remove_edge_removal_hook (cgraph_edge_hook_list *entry);
1861
1862   /* Register HOOK to be called with DATA on each removed node.  */
1863   cgraph_node_hook_list *add_cgraph_removal_hook (cgraph_node_hook hook,
1864                                                   void *data);
1865
1866   /* Remove ENTRY from the list of hooks called on removing nodes.  */
1867   void remove_cgraph_removal_hook (cgraph_node_hook_list *entry);
1868
1869   /* Register HOOK to be called with DATA on each removed node.  */
1870   varpool_node_hook_list *add_varpool_removal_hook (varpool_node_hook hook,
1871                                                     void *data);
1872
1873   /* Remove ENTRY from the list of hooks called on removing nodes.  */
1874   void remove_varpool_removal_hook (varpool_node_hook_list *entry);
1875
1876   /* Register HOOK to be called with DATA on each inserted node.  */
1877   cgraph_node_hook_list *add_cgraph_insertion_hook (cgraph_node_hook hook,
1878                                                     void *data);
1879
1880   /* Remove ENTRY from the list of hooks called on inserted nodes.  */
1881   void remove_cgraph_insertion_hook (cgraph_node_hook_list *entry);
1882
1883   /* Register HOOK to be called with DATA on each inserted node.  */
1884   varpool_node_hook_list *add_varpool_insertion_hook (varpool_node_hook hook,
1885                                                       void *data);
1886
1887   /* Remove ENTRY from the list of hooks called on inserted nodes.  */
1888   void remove_varpool_insertion_hook (varpool_node_hook_list *entry);
1889
1890   /* Register HOOK to be called with DATA on each duplicated edge.  */
1891   cgraph_2edge_hook_list *add_edge_duplication_hook (cgraph_2edge_hook hook,
1892                                                      void *data);
1893   /* Remove ENTRY from the list of hooks called on duplicating edges.  */
1894   void remove_edge_duplication_hook (cgraph_2edge_hook_list *entry);
1895
1896   /* Register HOOK to be called with DATA on each duplicated node.  */
1897   cgraph_2node_hook_list *add_cgraph_duplication_hook (cgraph_2node_hook hook,
1898                                                        void *data);
1899
1900   /* Remove ENTRY from the list of hooks called on duplicating nodes.  */
1901   void remove_cgraph_duplication_hook (cgraph_2node_hook_list *entry);
1902
1903   /* Call all edge removal hooks.  */
1904   void call_edge_removal_hooks (cgraph_edge *e);
1905
1906   /* Call all node insertion hooks.  */
1907   void call_cgraph_insertion_hooks (cgraph_node *node);
1908
1909   /* Call all node removal hooks.  */
1910   void call_cgraph_removal_hooks (cgraph_node *node);
1911
1912   /* Call all node duplication hooks.  */
1913   void call_cgraph_duplication_hooks (cgraph_node *node, cgraph_node *node2);
1914
1915   /* Call all edge duplication hooks.  */
1916   void call_edge_duplication_hooks (cgraph_edge *cs1, cgraph_edge *cs2);
1917
1918   /* Call all node removal hooks.  */
1919   void call_varpool_removal_hooks (varpool_node *node);
1920
1921   /* Call all node insertion hooks.  */
1922   void call_varpool_insertion_hooks (varpool_node *node);
1923
1924   /* Arrange node to be first in its entry of assembler_name_hash.  */
1925   void symtab_prevail_in_asm_name_hash (symtab_node *node);
1926
1927   /* Initalize asm name hash unless.  */
1928   void symtab_initialize_asm_name_hash (void);
1929
1930   /* Set the DECL_ASSEMBLER_NAME and update symtab hashtables.  */
1931   void change_decl_assembler_name (tree decl, tree name);
1932
1933   int cgraph_count;
1934   int cgraph_max_uid;
1935
1936   int edges_count;
1937   int edges_max_uid;
1938
1939   symtab_node* GTY(()) nodes;
1940   asm_node* GTY(()) asmnodes;
1941   asm_node* GTY(()) asm_last_node;
1942   cgraph_node* GTY(()) free_nodes;
1943
1944   /* Head of a linked list of unused (freed) call graph edges.
1945      Do not GTY((delete)) this list so UIDs gets reliably recycled.  */
1946   cgraph_edge * GTY(()) free_edges;
1947
1948   /* The order index of the next symtab node to be created.  This is
1949      used so that we can sort the cgraph nodes in order by when we saw
1950      them, to support -fno-toplevel-reorder.  */
1951   int order;
1952
1953   /* Set when whole unit has been analyzed so we can access global info.  */
1954   bool global_info_ready;
1955   /* What state callgraph is in right now.  */
1956   enum symtab_state state;
1957   /* Set when the cgraph is fully build and the basic flags are computed.  */
1958   bool function_flags_ready;
1959
1960   bool cpp_implicit_aliases_done;
1961
1962   /* Hash table used to hold sectoons.  */
1963   htab_t GTY((param_is (section_hash_entry))) section_hash;
1964
1965   /* Hash table used to convert assembler names into nodes.  */
1966   htab_t GTY((param_is (symtab_node))) assembler_name_hash;
1967
1968   /* Hash table used to hold init priorities.  */
1969   hash_map<symtab_node *, symbol_priority_map> *init_priority_hash;
1970
1971   FILE* GTY ((skip)) dump_file;
1972
1973 private:
1974   /* Allocate new callgraph node.  */
1975   inline cgraph_node * allocate_cgraph_symbol (void);
1976
1977   /* Allocate a cgraph_edge structure and fill it with data according to the
1978      parameters of which only CALLEE can be NULL (when creating an indirect call
1979      edge).  */
1980   cgraph_edge *create_edge (cgraph_node *caller, cgraph_node *callee,
1981                             gimple call_stmt, gcov_type count, int freq,
1982                             bool indir_unknown_callee);
1983
1984   /* Put the edge onto the free list.  */
1985   void free_edge (cgraph_edge *e);
1986
1987   /* Insert NODE to assembler name hash.  */
1988   void insert_to_assembler_name_hash (symtab_node *node, bool with_clones);
1989
1990   /* Remove NODE from assembler name hash.  */
1991   void unlink_from_assembler_name_hash (symtab_node *node, bool with_clones);
1992
1993   /* Hash asmnames ignoring the user specified marks.  */
1994   static hashval_t decl_assembler_name_hash (const_tree asmname);
1995
1996   /* Compare ASMNAME with the DECL_ASSEMBLER_NAME of DECL.  */
1997   static bool decl_assembler_name_equal (tree decl, const_tree asmname);
1998
1999   /* Returns a hash code for P.  */
2000   static hashval_t hash_node_by_assembler_name (const void *p);
2001
2002   /* Returns nonzero if P1 and P2 are equal.  */
2003   static int eq_assembler_name (const void *p1, const void *p2);
2004
2005   /* List of hooks triggered when an edge is removed.  */
2006   cgraph_edge_hook_list * GTY((skip)) m_first_edge_removal_hook;
2007   /* List of hooks triggem_red when a cgraph node is removed.  */
2008   cgraph_node_hook_list * GTY((skip)) m_first_cgraph_removal_hook;
2009   /* List of hooks triggered when an edge is duplicated.  */
2010   cgraph_2edge_hook_list * GTY((skip)) m_first_edge_duplicated_hook;
2011   /* List of hooks triggered when a node is duplicated.  */
2012   cgraph_2node_hook_list * GTY((skip)) m_first_cgraph_duplicated_hook;
2013   /* List of hooks triggered when an function is inserted.  */
2014   cgraph_node_hook_list * GTY((skip)) m_first_cgraph_insertion_hook;
2015   /* List of hooks triggered when an variable is inserted.  */
2016   varpool_node_hook_list * GTY((skip)) m_first_varpool_insertion_hook;
2017   /* List of hooks triggered when a node is removed.  */
2018   varpool_node_hook_list * GTY((skip)) m_first_varpool_removal_hook;
2019 };
2020
2021 extern GTY(()) symbol_table *symtab;
2022
2023 extern vec<cgraph_node *> cgraph_new_nodes;
2024
2025 /* In cgraph.c  */
2026 void release_function_body (tree);
2027 cgraph_indirect_call_info *cgraph_allocate_init_indirect_info (void);
2028
2029 void cgraph_update_edges_for_call_stmt (gimple, tree, gimple);
2030 bool cgraph_function_possibly_inlined_p (tree);
2031
2032 const char* cgraph_inline_failed_string (cgraph_inline_failed_t);
2033 cgraph_inline_failed_type_t cgraph_inline_failed_type (cgraph_inline_failed_t);
2034
2035 bool resolution_used_from_other_file_p (enum ld_plugin_symbol_resolution);
2036 extern bool gimple_check_call_matching_types (gimple, tree, bool);
2037
2038 /* In cgraphunit.c  */
2039 /*  Initialize datastructures so DECL is a function in lowered gimple form.
2040     IN_SSA is true if the gimple is in SSA.  */
2041 basic_block init_lowered_empty_function (tree, bool);
2042
2043 /* In cgraphclones.c  */
2044
2045 tree clone_function_name (tree decl, const char *);
2046
2047 void tree_function_versioning (tree, tree, vec<ipa_replace_map *, va_gc> *,
2048                                bool, bitmap, bool, bitmap, basic_block);
2049
2050 /* In cgraphbuild.c  */
2051 int compute_call_stmt_bb_frequency (tree, basic_block bb);
2052 void record_references_in_initializer (tree, bool);
2053
2054 /* In ipa.c  */
2055 void cgraph_build_static_cdtor (char which, tree body, int priority);
2056 void ipa_discover_readonly_nonaddressable_vars (void);
2057
2058 /* In varpool.c  */
2059 tree ctor_for_folding (tree);
2060
2061 /* Return true when the symbol is real symbol, i.e. it is not inline clone
2062    or abstract function kept for debug info purposes only.  */
2063 inline bool
2064 symtab_node::real_symbol_p (void)
2065 {
2066   cgraph_node *cnode;
2067
2068   if (DECL_ABSTRACT_P (decl))
2069     return false;
2070   if (!is_a <cgraph_node *> (this))
2071     return true;
2072   cnode = dyn_cast <cgraph_node *> (this);
2073   if (cnode->global.inlined_to)
2074     return false;
2075   return true;
2076 }
2077
2078 /* Return true if DECL should have entry in symbol table if used.
2079    Those are functions and static & external veriables*/
2080
2081 static inline bool
2082 decl_in_symtab_p (const_tree decl)
2083 {
2084   return (TREE_CODE (decl) == FUNCTION_DECL
2085           || (TREE_CODE (decl) == VAR_DECL
2086               && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))));
2087 }
2088
2089 inline bool
2090 symtab_node::in_same_comdat_group_p (symtab_node *target)
2091 {
2092   symtab_node *source = this;
2093
2094   if (cgraph_node *cn = dyn_cast <cgraph_node *> (target))
2095     {
2096       if (cn->global.inlined_to)
2097         source = cn->global.inlined_to;
2098     }
2099   if (cgraph_node *cn = dyn_cast <cgraph_node *> (target))
2100     {
2101       if (cn->global.inlined_to)
2102         target = cn->global.inlined_to;
2103     }
2104
2105   return source->get_comdat_group () == target->get_comdat_group ();
2106 }
2107
2108 /* Return node that alias is aliasing.  */
2109
2110 inline symtab_node *
2111 symtab_node::get_alias_target (void)
2112 {
2113   ipa_ref *ref = NULL;
2114   iterate_reference (0, ref);
2115   gcc_checking_assert (ref->use == IPA_REF_ALIAS);
2116   return ref->referred;
2117 }
2118
2119 /* Return next reachable static symbol with initializer after the node.  */
2120 inline symtab_node *
2121 symtab_node::next_defined_symbol (void)
2122 {
2123   symtab_node *node1 = next;
2124
2125   for (; node1; node1 = node1->next)
2126     if (node1->definition)
2127       return node1;
2128
2129   return NULL;
2130 }
2131
2132 /* Return varpool node for given symbol and check it is a function. */
2133
2134 inline varpool_node *
2135 varpool_node::get (const_tree decl)
2136 {
2137   gcc_checking_assert (TREE_CODE (decl) == VAR_DECL);
2138   return dyn_cast<varpool_node *> (symtab_node::get (decl));
2139 }
2140
2141 /* Register a symbol NODE.  */
2142
2143 inline void
2144 symbol_table::register_symbol (symtab_node *node)
2145 {
2146   node->next = nodes;
2147   node->previous = NULL;
2148
2149   if (nodes)
2150     nodes->previous = node;
2151   nodes = node;
2152
2153   node->order = order++;
2154 }
2155
2156 /* Register a top-level asm statement ASM_STR.  */
2157
2158 asm_node *
2159 symbol_table::finalize_toplevel_asm (tree asm_str)
2160 {
2161   asm_node *node;
2162
2163   node = ggc_cleared_alloc<asm_node> ();
2164   node->asm_str = asm_str;
2165   node->order = order++;
2166   node->next = NULL;
2167
2168   if (asmnodes == NULL)
2169     asmnodes = node;
2170   else
2171     asm_last_node->next = node;
2172
2173   asm_last_node = node;
2174   return node;
2175 }
2176
2177 /* Unregister a symbol NODE.  */
2178 inline void
2179 symbol_table::unregister (symtab_node *node)
2180 {
2181   if (node->previous)
2182     node->previous->next = node->next;
2183   else
2184     nodes = node->next;
2185
2186   if (node->next)
2187     node->next->previous = node->previous;
2188
2189   node->next = NULL;
2190   node->previous = NULL;
2191 }
2192
2193 /* Allocate new callgraph node and insert it into basic data structures.  */
2194
2195 inline cgraph_node *
2196 symbol_table::create_empty (void)
2197 {
2198   cgraph_node *node = allocate_cgraph_symbol ();
2199
2200   node->type = SYMTAB_FUNCTION;
2201   node->frequency = NODE_FREQUENCY_NORMAL;
2202   node->count_materialization_scale = REG_BR_PROB_BASE;
2203   cgraph_count++;
2204
2205   return node;
2206 }
2207
2208 /* Release a callgraph NODE with UID and put in to the list of free nodes.  */
2209
2210 inline void
2211 symbol_table::release_symbol (cgraph_node *node, int uid)
2212 {
2213   cgraph_count--;
2214
2215   /* Clear out the node to NULL all pointers and add the node to the free
2216      list.  */
2217   memset (node, 0, sizeof (*node));
2218   node->type = SYMTAB_FUNCTION;
2219   node->uid = uid;
2220   SET_NEXT_FREE_NODE (node, free_nodes);
2221   free_nodes = node;
2222 }
2223
2224 /* Allocate new callgraph node.  */
2225
2226 inline cgraph_node *
2227 symbol_table::allocate_cgraph_symbol (void)
2228 {
2229   cgraph_node *node;
2230
2231   if (free_nodes)
2232     {
2233       node = free_nodes;
2234       free_nodes = NEXT_FREE_NODE (node);
2235     }
2236   else
2237     {
2238       node = ggc_cleared_alloc<cgraph_node> ();
2239       node->uid = cgraph_max_uid++;
2240     }
2241
2242   return node;
2243 }
2244
2245
2246 /* Return first static symbol with definition.  */
2247 inline symtab_node *
2248 symbol_table::first_symbol (void)
2249 {
2250   return nodes;
2251 }
2252
2253 /* Walk all symbols.  */
2254 #define FOR_EACH_SYMBOL(node) \
2255    for ((node) = symtab->first_symbol (); (node); (node) = (node)->next)
2256
2257 /* Return first static symbol with definition.  */
2258 inline symtab_node *
2259 symbol_table::first_defined_symbol (void)
2260 {
2261   symtab_node *node;
2262
2263   for (node = nodes; node; node = node->next)
2264     if (node->definition)
2265       return node;
2266
2267   return NULL;
2268 }
2269
2270 /* Walk all symbols with definitions in current unit.  */
2271 #define FOR_EACH_DEFINED_SYMBOL(node) \
2272    for ((node) = symtab->first_defined_symbol (); (node); \
2273         (node) = node->next_defined_symbol ())
2274
2275 /* Return first variable.  */
2276 inline varpool_node *
2277 symbol_table::first_variable (void)
2278 {
2279   symtab_node *node;
2280   for (node = nodes; node; node = node->next)
2281     if (varpool_node *vnode = dyn_cast <varpool_node *> (node))
2282       return vnode;
2283   return NULL;
2284 }
2285
2286 /* Return next variable after NODE.  */
2287 inline varpool_node *
2288 symbol_table::next_variable (varpool_node *node)
2289 {
2290   symtab_node *node1 = node->next;
2291   for (; node1; node1 = node1->next)
2292     if (varpool_node *vnode1 = dyn_cast <varpool_node *> (node1))
2293       return vnode1;
2294   return NULL;
2295 }
2296 /* Walk all variables.  */
2297 #define FOR_EACH_VARIABLE(node) \
2298    for ((node) = symtab->first_variable (); \
2299         (node); \
2300         (node) = symtab->next_variable ((node)))
2301
2302 /* Return first static variable with initializer.  */
2303 inline varpool_node *
2304 symbol_table::first_static_initializer (void)
2305 {
2306   symtab_node *node;
2307   for (node = nodes; node; node = node->next)
2308     {
2309       varpool_node *vnode = dyn_cast <varpool_node *> (node);
2310       if (vnode && DECL_INITIAL (node->decl))
2311         return vnode;
2312     }
2313   return NULL;
2314 }
2315
2316 /* Return next static variable with initializer after NODE.  */
2317 inline varpool_node *
2318 symbol_table::next_static_initializer (varpool_node *node)
2319 {
2320   symtab_node *node1 = node->next;
2321   for (; node1; node1 = node1->next)
2322     {
2323       varpool_node *vnode1 = dyn_cast <varpool_node *> (node1);
2324       if (vnode1 && DECL_INITIAL (node1->decl))
2325         return vnode1;
2326     }
2327   return NULL;
2328 }
2329
2330 /* Walk all static variables with initializer set.  */
2331 #define FOR_EACH_STATIC_INITIALIZER(node) \
2332    for ((node) = symtab->first_static_initializer (); (node); \
2333         (node) = symtab->next_static_initializer (node))
2334
2335 /* Return first static variable with definition.  */
2336 inline varpool_node *
2337 symbol_table::first_defined_variable (void)
2338 {
2339   symtab_node *node;
2340   for (node = nodes; node; node = node->next)
2341     {
2342       varpool_node *vnode = dyn_cast <varpool_node *> (node);
2343       if (vnode && vnode->definition)
2344         return vnode;
2345     }
2346   return NULL;
2347 }
2348
2349 /* Return next static variable with definition after NODE.  */
2350 inline varpool_node *
2351 symbol_table::next_defined_variable (varpool_node *node)
2352 {
2353   symtab_node *node1 = node->next;
2354   for (; node1; node1 = node1->next)
2355     {
2356       varpool_node *vnode1 = dyn_cast <varpool_node *> (node1);
2357       if (vnode1 && vnode1->definition)
2358         return vnode1;
2359     }
2360   return NULL;
2361 }
2362 /* Walk all variables with definitions in current unit.  */
2363 #define FOR_EACH_DEFINED_VARIABLE(node) \
2364    for ((node) = symtab->first_defined_variable (); (node); \
2365         (node) = symtab->next_defined_variable (node))
2366
2367 /* Return first function with body defined.  */
2368 inline cgraph_node *
2369 symbol_table::first_defined_function (void)
2370 {
2371   symtab_node *node;
2372   for (node = nodes; node; node = node->next)
2373     {
2374       cgraph_node *cn = dyn_cast <cgraph_node *> (node);
2375       if (cn && cn->definition)
2376         return cn;
2377     }
2378   return NULL;
2379 }
2380
2381 /* Return next function with body defined after NODE.  */
2382 inline cgraph_node *
2383 symbol_table::next_defined_function (cgraph_node *node)
2384 {
2385   symtab_node *node1 = node->next;
2386   for (; node1; node1 = node1->next)
2387     {
2388       cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1);
2389       if (cn1 && cn1->definition)
2390         return cn1;
2391     }
2392   return NULL;
2393 }
2394
2395 /* Walk all functions with body defined.  */
2396 #define FOR_EACH_DEFINED_FUNCTION(node) \
2397    for ((node) = symtab->first_defined_function (); (node); \
2398         (node) = symtab->next_defined_function ((node)))
2399
2400 /* Return first function.  */
2401 inline cgraph_node *
2402 symbol_table::first_function (void)
2403 {
2404   symtab_node *node;
2405   for (node = nodes; node; node = node->next)
2406     if (cgraph_node *cn = dyn_cast <cgraph_node *> (node))
2407       return cn;
2408   return NULL;
2409 }
2410
2411 /* Return next function.  */
2412 inline cgraph_node *
2413 symbol_table::next_function (cgraph_node *node)
2414 {
2415   symtab_node *node1 = node->next;
2416   for (; node1; node1 = node1->next)
2417     if (cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1))
2418       return cn1;
2419   return NULL;
2420 }
2421
2422 /* Return first function with body defined.  */
2423 inline cgraph_node *
2424 symbol_table::first_function_with_gimple_body (void)
2425 {
2426   symtab_node *node;
2427   for (node = nodes; node; node = node->next)
2428     {
2429       cgraph_node *cn = dyn_cast <cgraph_node *> (node);
2430       if (cn && cn->has_gimple_body_p ())
2431         return cn;
2432     }
2433   return NULL;
2434 }
2435
2436 /* Return next reachable static variable with initializer after NODE.  */
2437 inline cgraph_node *
2438 symbol_table::next_function_with_gimple_body (cgraph_node *node)
2439 {
2440   symtab_node *node1 = node->next;
2441   for (; node1; node1 = node1->next)
2442     {
2443       cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1);
2444       if (cn1 && cn1->has_gimple_body_p ())
2445         return cn1;
2446     }
2447   return NULL;
2448 }
2449
2450 /* Walk all functions.  */
2451 #define FOR_EACH_FUNCTION(node) \
2452    for ((node) = symtab->first_function (); (node); \
2453         (node) = symtab->next_function ((node)))
2454
2455 /* Return true when callgraph node is a function with Gimple body defined
2456    in current unit.  Functions can also be define externally or they
2457    can be thunks with no Gimple representation.
2458
2459    Note that at WPA stage, the function body may not be present in memory.  */
2460
2461 inline bool
2462 cgraph_node::has_gimple_body_p (void)
2463 {
2464   return definition && !thunk.thunk_p && !alias;
2465 }
2466
2467 /* Walk all functions with body defined.  */
2468 #define FOR_EACH_FUNCTION_WITH_GIMPLE_BODY(node) \
2469    for ((node) = symtab->first_function_with_gimple_body (); (node); \
2470         (node) = symtab->next_function_with_gimple_body (node))
2471
2472 /* Create a new static variable of type TYPE.  */
2473 tree add_new_static_var (tree type);
2474
2475 /* Uniquize all constants that appear in memory.
2476    Each constant in memory thus far output is recorded
2477    in `const_desc_table'.  */
2478
2479 struct GTY(()) constant_descriptor_tree {
2480   /* A MEM for the constant.  */
2481   rtx rtl;
2482
2483   /* The value of the constant.  */
2484   tree value;
2485
2486   /* Hash of value.  Computing the hash from value each time
2487      hashfn is called can't work properly, as that means recursive
2488      use of the hash table during hash table expansion.  */
2489   hashval_t hash;
2490 };
2491
2492 /* Return true when function is only called directly or it has alias.
2493    i.e. it is not externally visible, address was not taken and
2494    it is not used in any other non-standard way.  */
2495
2496 inline bool
2497 cgraph_node::only_called_directly_or_aliased_p (void)
2498 {
2499   gcc_assert (!global.inlined_to);
2500   return (!force_output && !address_taken
2501           && !used_from_other_partition
2502           && !DECL_VIRTUAL_P (decl)
2503           && !DECL_STATIC_CONSTRUCTOR (decl)
2504           && !DECL_STATIC_DESTRUCTOR (decl)
2505           && !externally_visible);
2506 }
2507
2508 /* Return true when variable can be removed from variable pool
2509    if all direct calls are eliminated.  */
2510
2511 inline bool
2512 varpool_node::can_remove_if_no_refs_p (void)
2513 {
2514   if (DECL_EXTERNAL (decl))
2515     return true;
2516   return (!force_output && !used_from_other_partition
2517           && ((DECL_COMDAT (decl)
2518                && !forced_by_abi
2519                && !used_from_object_file_p ())
2520               || !externally_visible
2521               || DECL_HAS_VALUE_EXPR_P (decl)));
2522 }
2523
2524 /* Return true when all references to variable must be visible in ipa_ref_list.
2525    i.e. if the variable is not externally visible or not used in some magic
2526    way (asm statement or such).
2527    The magic uses are all summarized in force_output flag.  */
2528
2529 inline bool
2530 varpool_node::all_refs_explicit_p ()
2531 {
2532   return (definition
2533           && !externally_visible
2534           && !used_from_other_partition
2535           && !force_output);
2536 }
2537
2538 /* Constant pool accessor function.  */
2539 htab_t constant_pool_htab (void);
2540
2541 /* Return node that alias is aliasing.  */
2542
2543 inline cgraph_node *
2544 cgraph_node::get_alias_target (void)
2545 {
2546   return dyn_cast <cgraph_node *> (symtab_node::get_alias_target ());
2547 }
2548
2549 /* Return node that alias is aliasing.  */
2550
2551 inline varpool_node *
2552 varpool_node::get_alias_target (void)
2553 {
2554   return dyn_cast <varpool_node *> (symtab_node::get_alias_target ());
2555 }
2556
2557 /* Given function symbol, walk the alias chain to return the function node
2558    is alias of. Do not walk through thunks.
2559    When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
2560
2561 inline cgraph_node *
2562 cgraph_node::ultimate_alias_target (enum availability *availability)
2563 {
2564   cgraph_node *n = dyn_cast <cgraph_node *> (symtab_node::ultimate_alias_target
2565     (availability));
2566   if (!n && availability)
2567     *availability = AVAIL_NOT_AVAILABLE;
2568   return n;
2569 }
2570
2571 /* For given variable pool node, walk the alias chain to return the function
2572    the variable is alias of. Do not walk through thunks.
2573    When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
2574
2575 inline varpool_node *
2576 varpool_node::ultimate_alias_target (availability *availability)
2577 {
2578   varpool_node *n = dyn_cast <varpool_node *>
2579     (symtab_node::ultimate_alias_target (availability));
2580
2581   if (!n && availability)
2582     *availability = AVAIL_NOT_AVAILABLE;
2583   return n;
2584 }
2585
2586 /* Return true when the edge represents a direct recursion.  */
2587 inline bool
2588 cgraph_edge::recursive_p (void)
2589 {
2590   cgraph_node *c = callee->ultimate_alias_target ();
2591   if (caller->global.inlined_to)
2592     return caller->global.inlined_to->decl == c->decl;
2593   else
2594     return caller->decl == c->decl;
2595 }
2596
2597 /* Return true if the TM_CLONE bit is set for a given FNDECL.  */
2598 static inline bool
2599 decl_is_tm_clone (const_tree fndecl)
2600 {
2601   cgraph_node *n = cgraph_node::get (fndecl);
2602   if (n)
2603     return n->tm_clone;
2604   return false;
2605 }
2606
2607 /* Likewise indicate that a node is needed, i.e. reachable via some
2608    external means.  */
2609
2610 inline void
2611 cgraph_node::mark_force_output (void)
2612 {
2613   force_output = 1;
2614   gcc_checking_assert (!global.inlined_to);
2615 }
2616
2617 inline symtab_node * symtab_node::get_create (tree node)
2618 {
2619   if (TREE_CODE (node) == VAR_DECL)
2620     return varpool_node::get_create (node);
2621   else
2622     return cgraph_node::get_create (node);
2623 }
2624
2625 /* Build polymorphic call context for indirect call E.  */
2626
2627 inline
2628 ipa_polymorphic_call_context::ipa_polymorphic_call_context (cgraph_edge *e)
2629 {
2630   gcc_checking_assert (e->indirect_info->polymorphic);
2631   *this = e->indirect_info->context;
2632 }
2633
2634 /* Build empty "I know nothing" context.  */
2635
2636 inline
2637 ipa_polymorphic_call_context::ipa_polymorphic_call_context ()
2638 {
2639   clear_speculation ();
2640   clear_outer_type ();
2641   invalid = false;
2642 }
2643
2644 /* Make context non-speculative.  */
2645
2646 inline void
2647 ipa_polymorphic_call_context::clear_speculation ()
2648 {
2649   speculative_outer_type = NULL;
2650   speculative_offset = 0;
2651   speculative_maybe_derived_type = false;
2652 }
2653
2654 /* Produce context specifying all derrived types of OTR_TYPE.
2655    If OTR_TYPE is NULL or type of the OBJ_TYPE_REF, the context is set
2656    to dummy "I know nothing" setting.  */
2657
2658 inline void
2659 ipa_polymorphic_call_context::clear_outer_type (tree otr_type)
2660 {
2661   outer_type = otr_type ? TYPE_MAIN_VARIANT (otr_type) : NULL;
2662   offset = 0;
2663   maybe_derived_type = true;
2664   maybe_in_construction = true;
2665 }
2666
2667 /* Adjust all offsets in contexts by OFF bits.  */
2668
2669 inline void
2670 ipa_polymorphic_call_context::offset_by (HOST_WIDE_INT off)
2671 {
2672   if (outer_type)
2673     offset += off;
2674   if (speculative_outer_type)
2675     speculative_offset += off;
2676 }
2677
2678 /* Return TRUE if context is fully useless.  */
2679
2680 inline bool
2681 ipa_polymorphic_call_context::useless_p () const
2682 {
2683   return (!outer_type && !speculative_outer_type);
2684 }
2685 #endif  /* GCC_CGRAPH_H  */