cgraph.c (cgraph_node::release_body): New argument keep_arguments introduced.
[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 EXPECTED_TYPE as base class.  */
1318   bool restrict_to_inner_class (tree expected_type);
1319
1320   /* Dump human readable context to F.  */
1321   void dump (FILE *f) const;
1322   void DEBUG_FUNCTION debug () const;
1323
1324   /* LTO streaming.  */
1325   void stream_out (struct output_block *) const;
1326   void stream_in (struct lto_input_block *, struct data_in *data_in);
1327
1328 private:
1329   void set_by_decl (tree, HOST_WIDE_INT);
1330   bool set_by_invariant (tree, tree, HOST_WIDE_INT);
1331   void clear_outer_type (tree otr_type = NULL);
1332 };
1333
1334 /* Structure containing additional information about an indirect call.  */
1335
1336 struct GTY(()) cgraph_indirect_call_info
1337 {
1338   /* When agg_content is set, an offset where the call pointer is located
1339      within the aggregate.  */
1340   HOST_WIDE_INT offset;
1341   /* Context of the polymorphic call; use only when POLYMORPHIC flag is set.  */
1342   ipa_polymorphic_call_context context;
1343   /* OBJ_TYPE_REF_TOKEN of a polymorphic call (if polymorphic is set).  */
1344   HOST_WIDE_INT otr_token;
1345   /* Type of the object from OBJ_TYPE_REF_OBJECT. */
1346   tree otr_type;
1347   /* Index of the parameter that is called.  */
1348   int param_index;
1349   /* ECF flags determined from the caller.  */
1350   int ecf_flags;
1351   /* Profile_id of common target obtrained from profile.  */
1352   int common_target_id;
1353   /* Probability that call will land in function with COMMON_TARGET_ID.  */
1354   int common_target_probability;
1355
1356   /* Set when the call is a virtual call with the parameter being the
1357      associated object pointer rather than a simple direct call.  */
1358   unsigned polymorphic : 1;
1359   /* Set when the call is a call of a pointer loaded from contents of an
1360      aggregate at offset.  */
1361   unsigned agg_contents : 1;
1362   /* Set when this is a call through a member pointer.  */
1363   unsigned member_ptr : 1;
1364   /* When the previous bit is set, this one determines whether the destination
1365      is loaded from a parameter passed by reference. */
1366   unsigned by_ref : 1;
1367 };
1368
1369 struct GTY((chain_next ("%h.next_caller"), chain_prev ("%h.prev_caller"))) cgraph_edge {
1370   friend class cgraph_node;
1371
1372   /* Remove the edge in the cgraph.  */
1373   void remove (void);
1374
1375   /* Change field call_stmt of edge to NEW_STMT.
1376      If UPDATE_SPECULATIVE and E is any component of speculative
1377      edge, then update all components.  */
1378   void set_call_stmt (gimple new_stmt, bool update_speculative = true);
1379
1380   /* Redirect callee of the edge to N.  The function does not update underlying
1381      call expression.  */
1382   void redirect_callee (cgraph_node *n);
1383
1384   /* Make an indirect edge with an unknown callee an ordinary edge leading to
1385      CALLEE.  DELTA is an integer constant that is to be added to the this
1386      pointer (first parameter) to compensate for skipping
1387      a thunk adjustment.  */
1388   cgraph_edge *make_direct (cgraph_node *callee);
1389
1390   /* Turn edge into speculative call calling N2. Update
1391      the profile so the direct call is taken COUNT times
1392      with FREQUENCY.  */
1393   cgraph_edge *make_speculative (cgraph_node *n2, gcov_type direct_count,
1394                                  int direct_frequency);
1395
1396    /* Given speculative call edge, return all three components.  */
1397   void speculative_call_info (cgraph_edge *&direct, cgraph_edge *&indirect,
1398                               ipa_ref *&reference);
1399
1400   /* Speculative call edge turned out to be direct call to CALLE_DECL.
1401      Remove the speculative call sequence and return edge representing the call.
1402      It is up to caller to redirect the call as appropriate. */
1403   cgraph_edge *resolve_speculation (tree callee_decl = NULL);
1404
1405   /* If necessary, change the function declaration in the call statement
1406      associated with the edge so that it corresponds to the edge callee.  */
1407   gimple redirect_call_stmt_to_callee (void);
1408
1409   /* Create clone of edge in the node N represented
1410      by CALL_EXPR the callgraph.  */
1411   cgraph_edge * clone (cgraph_node *n, gimple call_stmt, unsigned stmt_uid,
1412                        gcov_type count_scale, int freq_scale, bool update_original);
1413
1414   /* Return true when call of edge can not lead to return from caller
1415      and thus it is safe to ignore its side effects for IPA analysis
1416      when computing side effects of the caller.  */
1417   bool cannot_lead_to_return_p (void);
1418
1419   /* Return true when the edge represents a direct recursion.  */
1420   bool recursive_p (void);
1421
1422   /* Return true if the call can be hot.  */
1423   bool maybe_hot_p (void);
1424
1425   /* Rebuild cgraph edges for current function node.  This needs to be run after
1426      passes that don't update the cgraph.  */
1427   static unsigned int rebuild_edges (void);
1428
1429   /* Rebuild cgraph references for current function node.  This needs to be run
1430      after passes that don't update the cgraph.  */
1431   static void rebuild_references (void);
1432
1433   /* Expected number of executions: calculated in profile.c.  */
1434   gcov_type count;
1435   cgraph_node *caller;
1436   cgraph_node *callee;
1437   cgraph_edge *prev_caller;
1438   cgraph_edge *next_caller;
1439   cgraph_edge *prev_callee;
1440   cgraph_edge *next_callee;
1441   gimple call_stmt;
1442   /* Additional information about an indirect call.  Not cleared when an edge
1443      becomes direct.  */
1444   cgraph_indirect_call_info *indirect_info;
1445   PTR GTY ((skip (""))) aux;
1446   /* When equal to CIF_OK, inline this call.  Otherwise, points to the
1447      explanation why function was not inlined.  */
1448   enum cgraph_inline_failed_t inline_failed;
1449   /* The stmt_uid of call_stmt.  This is used by LTO to recover the call_stmt
1450      when the function is serialized in.  */
1451   unsigned int lto_stmt_uid;
1452   /* Expected frequency of executions within the function.
1453      When set to CGRAPH_FREQ_BASE, the edge is expected to be called once
1454      per function call.  The range is 0 to CGRAPH_FREQ_MAX.  */
1455   int frequency;
1456   /* Unique id of the edge.  */
1457   int uid;
1458   /* Whether this edge was made direct by indirect inlining.  */
1459   unsigned int indirect_inlining_edge : 1;
1460   /* Whether this edge describes an indirect call with an undetermined
1461      callee.  */
1462   unsigned int indirect_unknown_callee : 1;
1463   /* Whether this edge is still a dangling  */
1464   /* True if the corresponding CALL stmt cannot be inlined.  */
1465   unsigned int call_stmt_cannot_inline_p : 1;
1466   /* Can this call throw externally?  */
1467   unsigned int can_throw_external : 1;
1468   /* Edges with SPECULATIVE flag represents indirect calls that was
1469      speculatively turned into direct (i.e. by profile feedback).
1470      The final code sequence will have form:
1471
1472      if (call_target == expected_fn)
1473        expected_fn ();
1474      else
1475        call_target ();
1476
1477      Every speculative call is represented by three components attached
1478      to a same call statement:
1479      1) a direct call (to expected_fn)
1480      2) an indirect call (to call_target)
1481      3) a IPA_REF_ADDR refrence to expected_fn.
1482
1483      Optimizers may later redirect direct call to clone, so 1) and 3)
1484      do not need to necesarily agree with destination.  */
1485   unsigned int speculative : 1;
1486
1487 private:
1488   /* Remove the edge from the list of the callers of the callee.  */
1489   void remove_caller (void);
1490
1491   /* Remove the edge from the list of the callees of the caller.  */
1492   void remove_callee (void);
1493 };
1494
1495 #define CGRAPH_FREQ_BASE 1000
1496 #define CGRAPH_FREQ_MAX 100000
1497
1498 /* The varpool data structure.
1499    Each static variable decl has assigned varpool_node.  */
1500
1501 class GTY((tag ("SYMTAB_VARIABLE"))) varpool_node : public symtab_node {
1502 public:
1503   /* Dump given varpool node to F.  */
1504   void dump (FILE *f);
1505
1506   /* Dump given varpool node to stderr.  */
1507   void DEBUG_FUNCTION debug (void);
1508
1509   /* Remove variable from symbol table.  */
1510   void remove (void);
1511
1512   /* Remove node initializer when it is no longer needed.  */
1513   void remove_initializer (void);
1514
1515   void analyze (void);
1516
1517   /* Return variable availability.  */
1518   availability get_availability (void);
1519
1520   /* When doing LTO, read variable's constructor from disk if
1521      it is not already present.  */
1522   tree get_constructor (void);
1523
1524   /* Return true if variable has constructor that can be used for folding.  */
1525   bool ctor_useable_for_folding_p (void);
1526
1527   /* For given variable pool node, walk the alias chain to return the function
1528      the variable is alias of. Do not walk through thunks.
1529      When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
1530   inline varpool_node *ultimate_alias_target
1531     (availability *availability = NULL);
1532
1533   /* Return node that alias is aliasing.  */
1534   inline varpool_node *get_alias_target (void);
1535
1536   /* Output one variable, if necessary.  Return whether we output it.  */
1537   bool assemble_decl (void);
1538
1539   /* For variables in named sections make sure get_variable_section
1540      is called before we switch to those sections.  Then section
1541      conflicts between read-only and read-only requiring relocations
1542      sections can be resolved.  */
1543   void finalize_named_section_flags (void);
1544
1545   /* Call calback on varpool symbol and aliases associated to varpool symbol.
1546      When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
1547      skipped. */
1548   bool call_for_node_and_aliases (bool (*callback) (varpool_node *, void *),
1549                                   void *data,
1550                                    bool include_overwritable);
1551
1552   /* Return true when variable should be considered externally visible.  */
1553   bool externally_visible_p (void);
1554
1555   /* Return true when all references to variable must be visible
1556      in ipa_ref_list.
1557      i.e. if the variable is not externally visible or not used in some magic
1558      way (asm statement or such).
1559      The magic uses are all summarized in force_output flag.  */
1560   inline bool all_refs_explicit_p ();
1561
1562   /* Return true when variable can be removed from variable pool
1563      if all direct calls are eliminated.  */
1564   inline bool can_remove_if_no_refs_p (void);
1565
1566   /* Add the variable DECL to the varpool.
1567      Unlike finalize_decl function is intended to be used
1568      by middle end and allows insertion of new variable at arbitrary point
1569      of compilation.  */
1570   static void add (tree decl);
1571
1572   /* Return varpool node for given symbol and check it is a function. */
1573   static inline varpool_node *get (const_tree decl);
1574
1575   /* Mark DECL as finalized.  By finalizing the declaration, frontend instruct
1576      the middle end to output the variable to asm file, if needed or externally
1577      visible.  */
1578   static void finalize_decl (tree decl);
1579
1580   /* Attempt to mark ALIAS as an alias to DECL.  Return TRUE if successful.
1581      Extra name aliases are output whenever DECL is output.  */
1582   static varpool_node * create_extra_name_alias (tree alias, tree decl);
1583
1584   /* Attempt to mark ALIAS as an alias to DECL.  Return TRUE if successful.
1585      Extra name aliases are output whenever DECL is output.  */
1586   static varpool_node * create_alias (tree, tree);
1587
1588   /* Dump the variable pool to F.  */
1589   static void dump_varpool (FILE *f);
1590
1591   /* Dump the variable pool to stderr.  */
1592   static void DEBUG_FUNCTION debug_varpool (void);
1593
1594   /* Allocate new callgraph node and insert it into basic data structures.  */
1595   static varpool_node *create_empty (void);
1596
1597   /* Return varpool node assigned to DECL.  Create new one when needed.  */
1598   static varpool_node *get_create (tree decl);
1599
1600   /* Given an assembler name, lookup node.  */
1601   static varpool_node *get_for_asmname (tree asmname);
1602
1603   /* Set when variable is scheduled to be assembled.  */
1604   unsigned output : 1;
1605
1606   /* Set if the variable is dynamically initialized, except for
1607      function local statics.   */
1608   unsigned dynamically_initialized : 1;
1609
1610   ENUM_BITFIELD(tls_model) tls_model : 3;
1611
1612   /* Set if the variable is known to be used by single function only.
1613      This is computed by ipa_signle_use pass and used by late optimizations
1614      in places where optimization would be valid for local static variable
1615      if we did not do any inter-procedural code movement.  */
1616   unsigned used_by_single_function : 1;
1617
1618 private:
1619   /* Assemble thunks and aliases associated to varpool node.  */
1620   void assemble_aliases (void);
1621 };
1622
1623 /* Every top level asm statement is put into a asm_node.  */
1624
1625 struct GTY(()) asm_node {
1626
1627
1628   /* Next asm node.  */
1629   asm_node *next;
1630   /* String for this asm node.  */
1631   tree asm_str;
1632   /* Ordering of all cgraph nodes.  */
1633   int order;
1634 };
1635
1636 /* Report whether or not THIS symtab node is a function, aka cgraph_node.  */
1637
1638 template <>
1639 template <>
1640 inline bool
1641 is_a_helper <cgraph_node *>::test (symtab_node *p)
1642 {
1643   return p && p->type == SYMTAB_FUNCTION;
1644 }
1645
1646 /* Report whether or not THIS symtab node is a vriable, aka varpool_node.  */
1647
1648 template <>
1649 template <>
1650 inline bool
1651 is_a_helper <varpool_node *>::test (symtab_node *p)
1652 {
1653   return p && p->type == SYMTAB_VARIABLE;
1654 }
1655
1656 /* Macros to access the next item in the list of free cgraph nodes and
1657    edges. */
1658 #define NEXT_FREE_NODE(NODE) dyn_cast<cgraph_node *> ((NODE)->next)
1659 #define SET_NEXT_FREE_NODE(NODE,NODE2) ((NODE))->next = NODE2
1660 #define NEXT_FREE_EDGE(EDGE) (EDGE)->prev_caller
1661
1662 typedef void (*cgraph_edge_hook)(cgraph_edge *, void *);
1663 typedef void (*cgraph_node_hook)(cgraph_node *, void *);
1664 typedef void (*varpool_node_hook)(varpool_node *, void *);
1665 typedef void (*cgraph_2edge_hook)(cgraph_edge *, cgraph_edge *, void *);
1666 typedef void (*cgraph_2node_hook)(cgraph_node *, cgraph_node *, void *);
1667
1668 struct cgraph_edge_hook_list;
1669 struct cgraph_node_hook_list;
1670 struct varpool_node_hook_list;
1671 struct cgraph_2edge_hook_list;
1672 struct cgraph_2node_hook_list;
1673
1674 /* Map from a symbol to initialization/finalization priorities.  */
1675 struct GTY(()) symbol_priority_map {
1676   priority_type init;
1677   priority_type fini;
1678 };
1679
1680 enum symtab_state
1681 {
1682   /* Frontend is parsing and finalizing functions.  */
1683   PARSING,
1684   /* Callgraph is being constructed.  It is safe to add new functions.  */
1685   CONSTRUCTION,
1686   /* Callgraph is being at LTO time.  */
1687   LTO_STREAMING,
1688   /* Callgraph is built and IPA passes are being run.  */
1689   IPA,
1690   /* Callgraph is built and all functions are transformed to SSA form.  */
1691   IPA_SSA,
1692   /* Functions are now ordered and being passed to RTL expanders.  */
1693   EXPANSION,
1694   /* All cgraph expansion is done.  */
1695   FINISHED
1696 };
1697
1698 class GTY((tag ("SYMTAB"))) symbol_table
1699 {
1700 public:
1701   friend class symtab_node;
1702   friend class cgraph_node;
1703   friend class cgraph_edge;
1704
1705   /* Initialize callgraph dump file.  */
1706   inline void
1707   initialize (void)
1708   {
1709     if (!dump_file)
1710       dump_file = dump_begin (TDI_cgraph, NULL);
1711   }
1712
1713   /* Register a top-level asm statement ASM_STR.  */
1714   inline asm_node *finalize_toplevel_asm (tree asm_str);
1715
1716   /* Analyze the whole compilation unit once it is parsed completely.  */
1717   void finalize_compilation_unit (void);
1718
1719   /* C++ frontend produce same body aliases all over the place, even before PCH
1720      gets streamed out. It relies on us linking the aliases with their function
1721      in order to do the fixups, but ipa-ref is not PCH safe.  Consequentely we
1722      first produce aliases without links, but once C++ FE is sure he won't sream
1723      PCH we build the links via this function.  */
1724   void process_same_body_aliases (void);
1725
1726   /* Perform simple optimizations based on callgraph.  */
1727   void compile (void);
1728
1729   /* Process CGRAPH_NEW_FUNCTIONS and perform actions necessary to add these
1730      functions into callgraph in a way so they look like ordinary reachable
1731      functions inserted into callgraph already at construction time.  */
1732   void process_new_functions (void);
1733
1734   /* Once all functions from compilation unit are in memory, produce all clones
1735      and update all calls.  We might also do this on demand if we don't want to
1736      bring all functions to memory prior compilation, but current WHOPR
1737      implementation does that and it is is bit easier to keep everything right
1738      in this order.  */
1739   void materialize_all_clones (void);
1740
1741   /* Register a symbol NODE.  */
1742   inline void register_symbol (symtab_node *node);
1743
1744   inline void
1745   clear_asm_symbols (void)
1746   {
1747     asmnodes = NULL;
1748     asm_last_node = NULL;
1749   }
1750
1751   /* Perform reachability analysis and reclaim all unreachable nodes.  */
1752   bool remove_unreachable_nodes (bool before_inlining_p, FILE *file);
1753
1754   /* Optimization of function bodies might've rendered some variables as
1755      unnecessary so we want to avoid these from being compiled.  Re-do
1756      reachability starting from variables that are either externally visible
1757      or was referred from the asm output routines.  */
1758   void remove_unreferenced_decls (void);
1759
1760   /* Unregister a symbol NODE.  */
1761   inline void unregister (symtab_node *node);
1762
1763   /* Allocate new callgraph node and insert it into basic data structures.  */
1764   cgraph_node *create_empty (void);
1765
1766   /* Release a callgraph NODE with UID and put in to the list
1767      of free nodes.  */
1768   void release_symbol (cgraph_node *node, int uid);
1769
1770   /* Output all variables enqueued to be assembled.  */
1771   bool output_variables (void);
1772
1773   /* Weakrefs may be associated to external decls and thus not output
1774      at expansion time.  Emit all necessary aliases.  */
1775   void output_weakrefs (void);
1776
1777   /* Return first static symbol with definition.  */
1778   inline symtab_node *first_symbol (void);
1779
1780   /* Return first assembler symbol.  */
1781   inline asm_node *
1782   first_asm_symbol (void)
1783   {
1784     return asmnodes;
1785   }
1786
1787   /* Return first static symbol with definition.  */
1788   inline symtab_node *first_defined_symbol (void);
1789
1790   /* Return first variable.  */
1791   inline varpool_node *first_variable (void);
1792
1793   /* Return next variable after NODE.  */
1794   inline varpool_node *next_variable (varpool_node *node);
1795
1796   /* Return first static variable with initializer.  */
1797   inline varpool_node *first_static_initializer (void);
1798
1799   /* Return next static variable with initializer after NODE.  */
1800   inline varpool_node *next_static_initializer (varpool_node *node);
1801
1802   /* Return first static variable with definition.  */
1803   inline varpool_node *first_defined_variable (void);
1804
1805   /* Return next static variable with definition after NODE.  */
1806   inline varpool_node *next_defined_variable (varpool_node *node);
1807
1808   /* Return first function with body defined.  */
1809   inline cgraph_node *first_defined_function (void);
1810
1811   /* Return next function with body defined after NODE.  */
1812   inline cgraph_node *next_defined_function (cgraph_node *node);
1813
1814   /* Return first function.  */
1815   inline cgraph_node *first_function (void);
1816
1817   /* Return next function.  */
1818   inline cgraph_node *next_function (cgraph_node *node);
1819
1820   /* Return first function with body defined.  */
1821   cgraph_node *first_function_with_gimple_body (void);
1822
1823   /* Return next reachable static variable with initializer after NODE.  */
1824   inline cgraph_node *next_function_with_gimple_body (cgraph_node *node);
1825
1826   /* Register HOOK to be called with DATA on each removed edge.  */
1827   cgraph_edge_hook_list *add_edge_removal_hook (cgraph_edge_hook hook,
1828                                                 void *data);
1829
1830   /* Remove ENTRY from the list of hooks called on removing edges.  */
1831   void remove_edge_removal_hook (cgraph_edge_hook_list *entry);
1832
1833   /* Register HOOK to be called with DATA on each removed node.  */
1834   cgraph_node_hook_list *add_cgraph_removal_hook (cgraph_node_hook hook,
1835                                                   void *data);
1836
1837   /* Remove ENTRY from the list of hooks called on removing nodes.  */
1838   void remove_cgraph_removal_hook (cgraph_node_hook_list *entry);
1839
1840   /* Register HOOK to be called with DATA on each removed node.  */
1841   varpool_node_hook_list *add_varpool_removal_hook (varpool_node_hook hook,
1842                                                     void *data);
1843
1844   /* Remove ENTRY from the list of hooks called on removing nodes.  */
1845   void remove_varpool_removal_hook (varpool_node_hook_list *entry);
1846
1847   /* Register HOOK to be called with DATA on each inserted node.  */
1848   cgraph_node_hook_list *add_cgraph_insertion_hook (cgraph_node_hook hook,
1849                                                     void *data);
1850
1851   /* Remove ENTRY from the list of hooks called on inserted nodes.  */
1852   void remove_cgraph_insertion_hook (cgraph_node_hook_list *entry);
1853
1854   /* Register HOOK to be called with DATA on each inserted node.  */
1855   varpool_node_hook_list *add_varpool_insertion_hook (varpool_node_hook hook,
1856                                                       void *data);
1857
1858   /* Remove ENTRY from the list of hooks called on inserted nodes.  */
1859   void remove_varpool_insertion_hook (varpool_node_hook_list *entry);
1860
1861   /* Register HOOK to be called with DATA on each duplicated edge.  */
1862   cgraph_2edge_hook_list *add_edge_duplication_hook (cgraph_2edge_hook hook,
1863                                                      void *data);
1864   /* Remove ENTRY from the list of hooks called on duplicating edges.  */
1865   void remove_edge_duplication_hook (cgraph_2edge_hook_list *entry);
1866
1867   /* Register HOOK to be called with DATA on each duplicated node.  */
1868   cgraph_2node_hook_list *add_cgraph_duplication_hook (cgraph_2node_hook hook,
1869                                                        void *data);
1870
1871   /* Remove ENTRY from the list of hooks called on duplicating nodes.  */
1872   void remove_cgraph_duplication_hook (cgraph_2node_hook_list *entry);
1873
1874   /* Call all edge removal hooks.  */
1875   void call_edge_removal_hooks (cgraph_edge *e);
1876
1877   /* Call all node insertion hooks.  */
1878   void call_cgraph_insertion_hooks (cgraph_node *node);
1879
1880   /* Call all node removal hooks.  */
1881   void call_cgraph_removal_hooks (cgraph_node *node);
1882
1883   /* Call all node duplication hooks.  */
1884   void call_cgraph_duplication_hooks (cgraph_node *node, cgraph_node *node2);
1885
1886   /* Call all edge duplication hooks.  */
1887   void call_edge_duplication_hooks (cgraph_edge *cs1, cgraph_edge *cs2);
1888
1889   /* Call all node removal hooks.  */
1890   void call_varpool_removal_hooks (varpool_node *node);
1891
1892   /* Call all node insertion hooks.  */
1893   void call_varpool_insertion_hooks (varpool_node *node);
1894
1895   /* Arrange node to be first in its entry of assembler_name_hash.  */
1896   void symtab_prevail_in_asm_name_hash (symtab_node *node);
1897
1898   /* Initalize asm name hash unless.  */
1899   void symtab_initialize_asm_name_hash (void);
1900
1901   /* Set the DECL_ASSEMBLER_NAME and update symtab hashtables.  */
1902   void change_decl_assembler_name (tree decl, tree name);
1903
1904   int cgraph_count;
1905   int cgraph_max_uid;
1906
1907   int edges_count;
1908   int edges_max_uid;
1909
1910   symtab_node* GTY(()) nodes;
1911   asm_node* GTY(()) asmnodes;
1912   asm_node* GTY(()) asm_last_node;
1913   cgraph_node* GTY(()) free_nodes;
1914
1915   /* Head of a linked list of unused (freed) call graph edges.
1916      Do not GTY((delete)) this list so UIDs gets reliably recycled.  */
1917   cgraph_edge * GTY(()) free_edges;
1918
1919   /* The order index of the next symtab node to be created.  This is
1920      used so that we can sort the cgraph nodes in order by when we saw
1921      them, to support -fno-toplevel-reorder.  */
1922   int order;
1923
1924   /* Set when whole unit has been analyzed so we can access global info.  */
1925   bool global_info_ready;
1926   /* What state callgraph is in right now.  */
1927   enum symtab_state state;
1928   /* Set when the cgraph is fully build and the basic flags are computed.  */
1929   bool function_flags_ready;
1930
1931   bool cpp_implicit_aliases_done;
1932
1933   /* Hash table used to hold sectoons.  */
1934   htab_t GTY((param_is (section_hash_entry))) section_hash;
1935
1936   /* Hash table used to convert assembler names into nodes.  */
1937   htab_t GTY((param_is (symtab_node))) assembler_name_hash;
1938
1939   /* Hash table used to hold init priorities.  */
1940   hash_map<symtab_node *, symbol_priority_map> *init_priority_hash;
1941
1942   FILE* GTY ((skip)) dump_file;
1943
1944 private:
1945   /* Allocate new callgraph node.  */
1946   inline cgraph_node * allocate_cgraph_symbol (void);
1947
1948   /* Allocate a cgraph_edge structure and fill it with data according to the
1949      parameters of which only CALLEE can be NULL (when creating an indirect call
1950      edge).  */
1951   cgraph_edge *create_edge (cgraph_node *caller, cgraph_node *callee,
1952                             gimple call_stmt, gcov_type count, int freq,
1953                             bool indir_unknown_callee);
1954
1955   /* Put the edge onto the free list.  */
1956   void free_edge (cgraph_edge *e);
1957
1958   /* Insert NODE to assembler name hash.  */
1959   void insert_to_assembler_name_hash (symtab_node *node, bool with_clones);
1960
1961   /* Remove NODE from assembler name hash.  */
1962   void unlink_from_assembler_name_hash (symtab_node *node, bool with_clones);
1963
1964   /* Hash asmnames ignoring the user specified marks.  */
1965   static hashval_t decl_assembler_name_hash (const_tree asmname);
1966
1967   /* Compare ASMNAME with the DECL_ASSEMBLER_NAME of DECL.  */
1968   static bool decl_assembler_name_equal (tree decl, const_tree asmname);
1969
1970   /* Returns a hash code for P.  */
1971   static hashval_t hash_node_by_assembler_name (const void *p);
1972
1973   /* Returns nonzero if P1 and P2 are equal.  */
1974   static int eq_assembler_name (const void *p1, const void *p2);
1975
1976   /* List of hooks triggered when an edge is removed.  */
1977   cgraph_edge_hook_list * GTY((skip)) m_first_edge_removal_hook;
1978   /* List of hooks triggem_red when a cgraph node is removed.  */
1979   cgraph_node_hook_list * GTY((skip)) m_first_cgraph_removal_hook;
1980   /* List of hooks triggered when an edge is duplicated.  */
1981   cgraph_2edge_hook_list * GTY((skip)) m_first_edge_duplicated_hook;
1982   /* List of hooks triggered when a node is duplicated.  */
1983   cgraph_2node_hook_list * GTY((skip)) m_first_cgraph_duplicated_hook;
1984   /* List of hooks triggered when an function is inserted.  */
1985   cgraph_node_hook_list * GTY((skip)) m_first_cgraph_insertion_hook;
1986   /* List of hooks triggered when an variable is inserted.  */
1987   varpool_node_hook_list * GTY((skip)) m_first_varpool_insertion_hook;
1988   /* List of hooks triggered when a node is removed.  */
1989   varpool_node_hook_list * GTY((skip)) m_first_varpool_removal_hook;
1990 };
1991
1992 extern GTY(()) symbol_table *symtab;
1993
1994 extern vec<cgraph_node *> cgraph_new_nodes;
1995
1996 /* In cgraph.c  */
1997 void release_function_body (tree);
1998 cgraph_indirect_call_info *cgraph_allocate_init_indirect_info (void);
1999
2000 void cgraph_update_edges_for_call_stmt (gimple, tree, gimple);
2001 bool cgraph_function_possibly_inlined_p (tree);
2002
2003 const char* cgraph_inline_failed_string (cgraph_inline_failed_t);
2004 cgraph_inline_failed_type_t cgraph_inline_failed_type (cgraph_inline_failed_t);
2005
2006 bool resolution_used_from_other_file_p (enum ld_plugin_symbol_resolution);
2007 extern bool gimple_check_call_matching_types (gimple, tree, bool);
2008
2009 /* In cgraphunit.c  */
2010 /*  Initialize datastructures so DECL is a function in lowered gimple form.
2011     IN_SSA is true if the gimple is in SSA.  */
2012 basic_block init_lowered_empty_function (tree, bool);
2013
2014 /* In cgraphclones.c  */
2015
2016 tree clone_function_name (tree decl, const char *);
2017
2018 void tree_function_versioning (tree, tree, vec<ipa_replace_map *, va_gc> *,
2019                                bool, bitmap, bool, bitmap, basic_block);
2020
2021 /* In cgraphbuild.c  */
2022 int compute_call_stmt_bb_frequency (tree, basic_block bb);
2023 void record_references_in_initializer (tree, bool);
2024
2025 /* In ipa.c  */
2026 void cgraph_build_static_cdtor (char which, tree body, int priority);
2027 void ipa_discover_readonly_nonaddressable_vars (void);
2028
2029 /* In varpool.c  */
2030 tree ctor_for_folding (tree);
2031
2032 /* Return true when the symbol is real symbol, i.e. it is not inline clone
2033    or abstract function kept for debug info purposes only.  */
2034 inline bool
2035 symtab_node::real_symbol_p (void)
2036 {
2037   cgraph_node *cnode;
2038
2039   if (DECL_ABSTRACT_P (decl))
2040     return false;
2041   if (!is_a <cgraph_node *> (this))
2042     return true;
2043   cnode = dyn_cast <cgraph_node *> (this);
2044   if (cnode->global.inlined_to)
2045     return false;
2046   return true;
2047 }
2048
2049 /* Return true if DECL should have entry in symbol table if used.
2050    Those are functions and static & external veriables*/
2051
2052 static inline bool
2053 decl_in_symtab_p (const_tree decl)
2054 {
2055   return (TREE_CODE (decl) == FUNCTION_DECL
2056           || (TREE_CODE (decl) == VAR_DECL
2057               && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))));
2058 }
2059
2060 inline bool
2061 symtab_node::in_same_comdat_group_p (symtab_node *target)
2062 {
2063   symtab_node *source = this;
2064
2065   if (cgraph_node *cn = dyn_cast <cgraph_node *> (target))
2066     {
2067       if (cn->global.inlined_to)
2068         source = cn->global.inlined_to;
2069     }
2070   if (cgraph_node *cn = dyn_cast <cgraph_node *> (target))
2071     {
2072       if (cn->global.inlined_to)
2073         target = cn->global.inlined_to;
2074     }
2075
2076   return source->get_comdat_group () == target->get_comdat_group ();
2077 }
2078
2079 /* Return node that alias is aliasing.  */
2080
2081 inline symtab_node *
2082 symtab_node::get_alias_target (void)
2083 {
2084   ipa_ref *ref = NULL;
2085   iterate_reference (0, ref);
2086   gcc_checking_assert (ref->use == IPA_REF_ALIAS);
2087   return ref->referred;
2088 }
2089
2090 /* Return next reachable static symbol with initializer after the node.  */
2091 inline symtab_node *
2092 symtab_node::next_defined_symbol (void)
2093 {
2094   symtab_node *node1 = next;
2095
2096   for (; node1; node1 = node1->next)
2097     if (node1->definition)
2098       return node1;
2099
2100   return NULL;
2101 }
2102
2103 /* Return varpool node for given symbol and check it is a function. */
2104
2105 inline varpool_node *
2106 varpool_node::get (const_tree decl)
2107 {
2108   gcc_checking_assert (TREE_CODE (decl) == VAR_DECL);
2109   return dyn_cast<varpool_node *> (symtab_node::get (decl));
2110 }
2111
2112 /* Register a symbol NODE.  */
2113
2114 inline void
2115 symbol_table::register_symbol (symtab_node *node)
2116 {
2117   node->next = nodes;
2118   node->previous = NULL;
2119
2120   if (nodes)
2121     nodes->previous = node;
2122   nodes = node;
2123
2124   node->order = order++;
2125 }
2126
2127 /* Register a top-level asm statement ASM_STR.  */
2128
2129 asm_node *
2130 symbol_table::finalize_toplevel_asm (tree asm_str)
2131 {
2132   asm_node *node;
2133
2134   node = ggc_cleared_alloc<asm_node> ();
2135   node->asm_str = asm_str;
2136   node->order = order++;
2137   node->next = NULL;
2138
2139   if (asmnodes == NULL)
2140     asmnodes = node;
2141   else
2142     asm_last_node->next = node;
2143
2144   asm_last_node = node;
2145   return node;
2146 }
2147
2148 /* Unregister a symbol NODE.  */
2149 inline void
2150 symbol_table::unregister (symtab_node *node)
2151 {
2152   if (node->previous)
2153     node->previous->next = node->next;
2154   else
2155     nodes = node->next;
2156
2157   if (node->next)
2158     node->next->previous = node->previous;
2159
2160   node->next = NULL;
2161   node->previous = NULL;
2162 }
2163
2164 /* Allocate new callgraph node and insert it into basic data structures.  */
2165
2166 inline cgraph_node *
2167 symbol_table::create_empty (void)
2168 {
2169   cgraph_node *node = allocate_cgraph_symbol ();
2170
2171   node->type = SYMTAB_FUNCTION;
2172   node->frequency = NODE_FREQUENCY_NORMAL;
2173   node->count_materialization_scale = REG_BR_PROB_BASE;
2174   cgraph_count++;
2175
2176   return node;
2177 }
2178
2179 /* Release a callgraph NODE with UID and put in to the list of free nodes.  */
2180
2181 inline void
2182 symbol_table::release_symbol (cgraph_node *node, int uid)
2183 {
2184   cgraph_count--;
2185
2186   /* Clear out the node to NULL all pointers and add the node to the free
2187      list.  */
2188   memset (node, 0, sizeof (*node));
2189   node->type = SYMTAB_FUNCTION;
2190   node->uid = uid;
2191   SET_NEXT_FREE_NODE (node, free_nodes);
2192   free_nodes = node;
2193 }
2194
2195 /* Allocate new callgraph node.  */
2196
2197 inline cgraph_node *
2198 symbol_table::allocate_cgraph_symbol (void)
2199 {
2200   cgraph_node *node;
2201
2202   if (free_nodes)
2203     {
2204       node = free_nodes;
2205       free_nodes = NEXT_FREE_NODE (node);
2206     }
2207   else
2208     {
2209       node = ggc_cleared_alloc<cgraph_node> ();
2210       node->uid = cgraph_max_uid++;
2211     }
2212
2213   return node;
2214 }
2215
2216
2217 /* Return first static symbol with definition.  */
2218 inline symtab_node *
2219 symbol_table::first_symbol (void)
2220 {
2221   return nodes;
2222 }
2223
2224 /* Walk all symbols.  */
2225 #define FOR_EACH_SYMBOL(node) \
2226    for ((node) = symtab->first_symbol (); (node); (node) = (node)->next)
2227
2228 /* Return first static symbol with definition.  */
2229 inline symtab_node *
2230 symbol_table::first_defined_symbol (void)
2231 {
2232   symtab_node *node;
2233
2234   for (node = nodes; node; node = node->next)
2235     if (node->definition)
2236       return node;
2237
2238   return NULL;
2239 }
2240
2241 /* Walk all symbols with definitions in current unit.  */
2242 #define FOR_EACH_DEFINED_SYMBOL(node) \
2243    for ((node) = symtab->first_defined_symbol (); (node); \
2244         (node) = node->next_defined_symbol ())
2245
2246 /* Return first variable.  */
2247 inline varpool_node *
2248 symbol_table::first_variable (void)
2249 {
2250   symtab_node *node;
2251   for (node = nodes; node; node = node->next)
2252     if (varpool_node *vnode = dyn_cast <varpool_node *> (node))
2253       return vnode;
2254   return NULL;
2255 }
2256
2257 /* Return next variable after NODE.  */
2258 inline varpool_node *
2259 symbol_table::next_variable (varpool_node *node)
2260 {
2261   symtab_node *node1 = node->next;
2262   for (; node1; node1 = node1->next)
2263     if (varpool_node *vnode1 = dyn_cast <varpool_node *> (node1))
2264       return vnode1;
2265   return NULL;
2266 }
2267 /* Walk all variables.  */
2268 #define FOR_EACH_VARIABLE(node) \
2269    for ((node) = symtab->first_variable (); \
2270         (node); \
2271         (node) = symtab->next_variable ((node)))
2272
2273 /* Return first static variable with initializer.  */
2274 inline varpool_node *
2275 symbol_table::first_static_initializer (void)
2276 {
2277   symtab_node *node;
2278   for (node = nodes; node; node = node->next)
2279     {
2280       varpool_node *vnode = dyn_cast <varpool_node *> (node);
2281       if (vnode && DECL_INITIAL (node->decl))
2282         return vnode;
2283     }
2284   return NULL;
2285 }
2286
2287 /* Return next static variable with initializer after NODE.  */
2288 inline varpool_node *
2289 symbol_table::next_static_initializer (varpool_node *node)
2290 {
2291   symtab_node *node1 = node->next;
2292   for (; node1; node1 = node1->next)
2293     {
2294       varpool_node *vnode1 = dyn_cast <varpool_node *> (node1);
2295       if (vnode1 && DECL_INITIAL (node1->decl))
2296         return vnode1;
2297     }
2298   return NULL;
2299 }
2300
2301 /* Walk all static variables with initializer set.  */
2302 #define FOR_EACH_STATIC_INITIALIZER(node) \
2303    for ((node) = symtab->first_static_initializer (); (node); \
2304         (node) = symtab->next_static_initializer (node))
2305
2306 /* Return first static variable with definition.  */
2307 inline varpool_node *
2308 symbol_table::first_defined_variable (void)
2309 {
2310   symtab_node *node;
2311   for (node = nodes; node; node = node->next)
2312     {
2313       varpool_node *vnode = dyn_cast <varpool_node *> (node);
2314       if (vnode && vnode->definition)
2315         return vnode;
2316     }
2317   return NULL;
2318 }
2319
2320 /* Return next static variable with definition after NODE.  */
2321 inline varpool_node *
2322 symbol_table::next_defined_variable (varpool_node *node)
2323 {
2324   symtab_node *node1 = node->next;
2325   for (; node1; node1 = node1->next)
2326     {
2327       varpool_node *vnode1 = dyn_cast <varpool_node *> (node1);
2328       if (vnode1 && vnode1->definition)
2329         return vnode1;
2330     }
2331   return NULL;
2332 }
2333 /* Walk all variables with definitions in current unit.  */
2334 #define FOR_EACH_DEFINED_VARIABLE(node) \
2335    for ((node) = symtab->first_defined_variable (); (node); \
2336         (node) = symtab->next_defined_variable (node))
2337
2338 /* Return first function with body defined.  */
2339 inline cgraph_node *
2340 symbol_table::first_defined_function (void)
2341 {
2342   symtab_node *node;
2343   for (node = nodes; node; node = node->next)
2344     {
2345       cgraph_node *cn = dyn_cast <cgraph_node *> (node);
2346       if (cn && cn->definition)
2347         return cn;
2348     }
2349   return NULL;
2350 }
2351
2352 /* Return next function with body defined after NODE.  */
2353 inline cgraph_node *
2354 symbol_table::next_defined_function (cgraph_node *node)
2355 {
2356   symtab_node *node1 = node->next;
2357   for (; node1; node1 = node1->next)
2358     {
2359       cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1);
2360       if (cn1 && cn1->definition)
2361         return cn1;
2362     }
2363   return NULL;
2364 }
2365
2366 /* Walk all functions with body defined.  */
2367 #define FOR_EACH_DEFINED_FUNCTION(node) \
2368    for ((node) = symtab->first_defined_function (); (node); \
2369         (node) = symtab->next_defined_function ((node)))
2370
2371 /* Return first function.  */
2372 inline cgraph_node *
2373 symbol_table::first_function (void)
2374 {
2375   symtab_node *node;
2376   for (node = nodes; node; node = node->next)
2377     if (cgraph_node *cn = dyn_cast <cgraph_node *> (node))
2378       return cn;
2379   return NULL;
2380 }
2381
2382 /* Return next function.  */
2383 inline cgraph_node *
2384 symbol_table::next_function (cgraph_node *node)
2385 {
2386   symtab_node *node1 = node->next;
2387   for (; node1; node1 = node1->next)
2388     if (cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1))
2389       return cn1;
2390   return NULL;
2391 }
2392
2393 /* Return first function with body defined.  */
2394 inline cgraph_node *
2395 symbol_table::first_function_with_gimple_body (void)
2396 {
2397   symtab_node *node;
2398   for (node = nodes; node; node = node->next)
2399     {
2400       cgraph_node *cn = dyn_cast <cgraph_node *> (node);
2401       if (cn && cn->has_gimple_body_p ())
2402         return cn;
2403     }
2404   return NULL;
2405 }
2406
2407 /* Return next reachable static variable with initializer after NODE.  */
2408 inline cgraph_node *
2409 symbol_table::next_function_with_gimple_body (cgraph_node *node)
2410 {
2411   symtab_node *node1 = node->next;
2412   for (; node1; node1 = node1->next)
2413     {
2414       cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1);
2415       if (cn1 && cn1->has_gimple_body_p ())
2416         return cn1;
2417     }
2418   return NULL;
2419 }
2420
2421 /* Walk all functions.  */
2422 #define FOR_EACH_FUNCTION(node) \
2423    for ((node) = symtab->first_function (); (node); \
2424         (node) = symtab->next_function ((node)))
2425
2426 /* Return true when callgraph node is a function with Gimple body defined
2427    in current unit.  Functions can also be define externally or they
2428    can be thunks with no Gimple representation.
2429
2430    Note that at WPA stage, the function body may not be present in memory.  */
2431
2432 inline bool
2433 cgraph_node::has_gimple_body_p (void)
2434 {
2435   return definition && !thunk.thunk_p && !alias;
2436 }
2437
2438 /* Walk all functions with body defined.  */
2439 #define FOR_EACH_FUNCTION_WITH_GIMPLE_BODY(node) \
2440    for ((node) = symtab->first_function_with_gimple_body (); (node); \
2441         (node) = symtab->next_function_with_gimple_body (node))
2442
2443 /* Create a new static variable of type TYPE.  */
2444 tree add_new_static_var (tree type);
2445
2446 /* Uniquize all constants that appear in memory.
2447    Each constant in memory thus far output is recorded
2448    in `const_desc_table'.  */
2449
2450 struct GTY(()) constant_descriptor_tree {
2451   /* A MEM for the constant.  */
2452   rtx rtl;
2453
2454   /* The value of the constant.  */
2455   tree value;
2456
2457   /* Hash of value.  Computing the hash from value each time
2458      hashfn is called can't work properly, as that means recursive
2459      use of the hash table during hash table expansion.  */
2460   hashval_t hash;
2461 };
2462
2463 /* Return true when function is only called directly or it has alias.
2464    i.e. it is not externally visible, address was not taken and
2465    it is not used in any other non-standard way.  */
2466
2467 inline bool
2468 cgraph_node::only_called_directly_or_aliased_p (void)
2469 {
2470   gcc_assert (!global.inlined_to);
2471   return (!force_output && !address_taken
2472           && !used_from_other_partition
2473           && !DECL_VIRTUAL_P (decl)
2474           && !DECL_STATIC_CONSTRUCTOR (decl)
2475           && !DECL_STATIC_DESTRUCTOR (decl)
2476           && !externally_visible);
2477 }
2478
2479 /* Return true when variable can be removed from variable pool
2480    if all direct calls are eliminated.  */
2481
2482 inline bool
2483 varpool_node::can_remove_if_no_refs_p (void)
2484 {
2485   if (DECL_EXTERNAL (decl))
2486     return true;
2487   return (!force_output && !used_from_other_partition
2488           && ((DECL_COMDAT (decl)
2489                && !forced_by_abi
2490                && !used_from_object_file_p ())
2491               || !externally_visible
2492               || DECL_HAS_VALUE_EXPR_P (decl)));
2493 }
2494
2495 /* Return true when all references to variable must be visible in ipa_ref_list.
2496    i.e. if the variable is not externally visible or not used in some magic
2497    way (asm statement or such).
2498    The magic uses are all summarized in force_output flag.  */
2499
2500 inline bool
2501 varpool_node::all_refs_explicit_p ()
2502 {
2503   return (definition
2504           && !externally_visible
2505           && !used_from_other_partition
2506           && !force_output);
2507 }
2508
2509 /* Constant pool accessor function.  */
2510 htab_t constant_pool_htab (void);
2511
2512 /* Return node that alias is aliasing.  */
2513
2514 inline cgraph_node *
2515 cgraph_node::get_alias_target (void)
2516 {
2517   return dyn_cast <cgraph_node *> (symtab_node::get_alias_target ());
2518 }
2519
2520 /* Return node that alias is aliasing.  */
2521
2522 inline varpool_node *
2523 varpool_node::get_alias_target (void)
2524 {
2525   return dyn_cast <varpool_node *> (symtab_node::get_alias_target ());
2526 }
2527
2528 /* Given function symbol, walk the alias chain to return the function node
2529    is alias of. Do not walk through thunks.
2530    When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
2531
2532 inline cgraph_node *
2533 cgraph_node::ultimate_alias_target (enum availability *availability)
2534 {
2535   cgraph_node *n = dyn_cast <cgraph_node *> (symtab_node::ultimate_alias_target
2536     (availability));
2537   if (!n && availability)
2538     *availability = AVAIL_NOT_AVAILABLE;
2539   return n;
2540 }
2541
2542 /* For given variable pool node, walk the alias chain to return the function
2543    the variable is alias of. Do not walk through thunks.
2544    When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
2545
2546 inline varpool_node *
2547 varpool_node::ultimate_alias_target (availability *availability)
2548 {
2549   varpool_node *n = dyn_cast <varpool_node *>
2550     (symtab_node::ultimate_alias_target (availability));
2551
2552   if (!n && availability)
2553     *availability = AVAIL_NOT_AVAILABLE;
2554   return n;
2555 }
2556
2557 /* Return true when the edge represents a direct recursion.  */
2558 inline bool
2559 cgraph_edge::recursive_p (void)
2560 {
2561   cgraph_node *c = callee->ultimate_alias_target ();
2562   if (caller->global.inlined_to)
2563     return caller->global.inlined_to->decl == c->decl;
2564   else
2565     return caller->decl == c->decl;
2566 }
2567
2568 /* Return true if the TM_CLONE bit is set for a given FNDECL.  */
2569 static inline bool
2570 decl_is_tm_clone (const_tree fndecl)
2571 {
2572   cgraph_node *n = cgraph_node::get (fndecl);
2573   if (n)
2574     return n->tm_clone;
2575   return false;
2576 }
2577
2578 /* Likewise indicate that a node is needed, i.e. reachable via some
2579    external means.  */
2580
2581 inline void
2582 cgraph_node::mark_force_output (void)
2583 {
2584   force_output = 1;
2585   gcc_checking_assert (!global.inlined_to);
2586 }
2587
2588 inline symtab_node * symtab_node::get_create (tree node)
2589 {
2590   if (TREE_CODE (node) == VAR_DECL)
2591     return varpool_node::get_create (node);
2592   else
2593     return cgraph_node::get_create (node);
2594 }
2595
2596 /* Build polymorphic call context for indirect call E.  */
2597
2598 inline
2599 ipa_polymorphic_call_context::ipa_polymorphic_call_context (cgraph_edge *e)
2600 {
2601   gcc_checking_assert (e->indirect_info->polymorphic);
2602   *this = e->indirect_info->context;
2603 }
2604
2605 /* Build empty "I know nothing" context.  */
2606
2607 inline
2608 ipa_polymorphic_call_context::ipa_polymorphic_call_context ()
2609 {
2610   clear_speculation ();
2611   clear_outer_type ();
2612   invalid = false;
2613 }
2614
2615 /* Make context non-speculative.  */
2616
2617 inline void
2618 ipa_polymorphic_call_context::clear_speculation ()
2619 {
2620   speculative_outer_type = NULL;
2621   speculative_offset = 0;
2622   speculative_maybe_derived_type = false;
2623 }
2624
2625 /* Produce context specifying all derrived types of OTR_TYPE.
2626    If OTR_TYPE is NULL or type of the OBJ_TYPE_REF, the context is set
2627    to dummy "I know nothing" setting.  */
2628
2629 inline void
2630 ipa_polymorphic_call_context::clear_outer_type (tree otr_type)
2631 {
2632   outer_type = otr_type ? TYPE_MAIN_VARIANT (otr_type) : NULL;
2633   offset = 0;
2634   maybe_derived_type = true;
2635   maybe_in_construction = true;
2636 }
2637 #endif  /* GCC_CGRAPH_H  */