OSDN Git Service

PR tree-optimization/33763
[pf3gnuchains/gcc-fork.git] / gcc / tree-inline.c
1 /* Tree inlining.
2    Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
3    Free Software Foundation, Inc.
4    Contributed by Alexandre Oliva <aoliva@redhat.com>
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
12
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26 #include "diagnostic-core.h"
27 #include "tree.h"
28 #include "tree-inline.h"
29 #include "flags.h"
30 #include "params.h"
31 #include "input.h"
32 #include "insn-config.h"
33 #include "hashtab.h"
34 #include "langhooks.h"
35 #include "basic-block.h"
36 #include "tree-iterator.h"
37 #include "cgraph.h"
38 #include "intl.h"
39 #include "tree-mudflap.h"
40 #include "tree-flow.h"
41 #include "function.h"
42 #include "tree-flow.h"
43 #include "tree-pretty-print.h"
44 #include "except.h"
45 #include "debug.h"
46 #include "pointer-set.h"
47 #include "ipa-prop.h"
48 #include "value-prof.h"
49 #include "tree-pass.h"
50 #include "target.h"
51 #include "integrate.h"
52
53 #include "rtl.h"        /* FIXME: For asm_str_count.  */
54
55 /* I'm not real happy about this, but we need to handle gimple and
56    non-gimple trees.  */
57 #include "gimple.h"
58
59 /* Inlining, Cloning, Versioning, Parallelization
60
61    Inlining: a function body is duplicated, but the PARM_DECLs are
62    remapped into VAR_DECLs, and non-void RETURN_EXPRs become
63    MODIFY_EXPRs that store to a dedicated returned-value variable.
64    The duplicated eh_region info of the copy will later be appended
65    to the info for the caller; the eh_region info in copied throwing
66    statements and RESX statements are adjusted accordingly.
67
68    Cloning: (only in C++) We have one body for a con/de/structor, and
69    multiple function decls, each with a unique parameter list.
70    Duplicate the body, using the given splay tree; some parameters
71    will become constants (like 0 or 1).
72
73    Versioning: a function body is duplicated and the result is a new
74    function rather than into blocks of an existing function as with
75    inlining.  Some parameters will become constants.
76
77    Parallelization: a region of a function is duplicated resulting in
78    a new function.  Variables may be replaced with complex expressions
79    to enable shared variable semantics.
80
81    All of these will simultaneously lookup any callgraph edges.  If
82    we're going to inline the duplicated function body, and the given
83    function has some cloned callgraph nodes (one for each place this
84    function will be inlined) those callgraph edges will be duplicated.
85    If we're cloning the body, those callgraph edges will be
86    updated to point into the new body.  (Note that the original
87    callgraph node and edge list will not be altered.)
88
89    See the CALL_EXPR handling case in copy_tree_body_r ().  */
90
91 /* To Do:
92
93    o In order to make inlining-on-trees work, we pessimized
94      function-local static constants.  In particular, they are now
95      always output, even when not addressed.  Fix this by treating
96      function-local static constants just like global static
97      constants; the back-end already knows not to output them if they
98      are not needed.
99
100    o Provide heuristics to clamp inlining of recursive template
101      calls?  */
102
103
104 /* Weights that estimate_num_insns uses to estimate the size of the
105    produced code.  */
106
107 eni_weights eni_size_weights;
108
109 /* Weights that estimate_num_insns uses to estimate the time necessary
110    to execute the produced code.  */
111
112 eni_weights eni_time_weights;
113
114 /* Prototypes.  */
115
116 static tree declare_return_variable (copy_body_data *, tree, tree, basic_block);
117 static void remap_block (tree *, copy_body_data *);
118 static void copy_bind_expr (tree *, int *, copy_body_data *);
119 static tree mark_local_for_remap_r (tree *, int *, void *);
120 static void unsave_expr_1 (tree);
121 static tree unsave_r (tree *, int *, void *);
122 static void declare_inline_vars (tree, tree);
123 static void remap_save_expr (tree *, void *, int *);
124 static void prepend_lexical_block (tree current_block, tree new_block);
125 static tree copy_decl_to_var (tree, copy_body_data *);
126 static tree copy_result_decl_to_var (tree, copy_body_data *);
127 static tree copy_decl_maybe_to_var (tree, copy_body_data *);
128 static gimple remap_gimple_stmt (gimple, copy_body_data *);
129 static bool delete_unreachable_blocks_update_callgraph (copy_body_data *id);
130
131 /* Insert a tree->tree mapping for ID.  Despite the name suggests
132    that the trees should be variables, it is used for more than that.  */
133
134 void
135 insert_decl_map (copy_body_data *id, tree key, tree value)
136 {
137   *pointer_map_insert (id->decl_map, key) = value;
138
139   /* Always insert an identity map as well.  If we see this same new
140      node again, we won't want to duplicate it a second time.  */
141   if (key != value)
142     *pointer_map_insert (id->decl_map, value) = value;
143 }
144
145 /* Insert a tree->tree mapping for ID.  This is only used for
146    variables.  */
147
148 static void
149 insert_debug_decl_map (copy_body_data *id, tree key, tree value)
150 {
151   if (!gimple_in_ssa_p (id->src_cfun))
152     return;
153
154   if (!MAY_HAVE_DEBUG_STMTS)
155     return;
156
157   if (!target_for_debug_bind (key))
158     return;
159
160   gcc_assert (TREE_CODE (key) == PARM_DECL);
161   gcc_assert (TREE_CODE (value) == VAR_DECL);
162
163   if (!id->debug_map)
164     id->debug_map = pointer_map_create ();
165
166   *pointer_map_insert (id->debug_map, key) = value;
167 }
168
169 /* If nonzero, we're remapping the contents of inlined debug
170    statements.  If negative, an error has occurred, such as a
171    reference to a variable that isn't available in the inlined
172    context.  */
173 static int processing_debug_stmt = 0;
174
175 /* Construct new SSA name for old NAME. ID is the inline context.  */
176
177 static tree
178 remap_ssa_name (tree name, copy_body_data *id)
179 {
180   tree new_tree;
181   tree *n;
182
183   gcc_assert (TREE_CODE (name) == SSA_NAME);
184
185   n = (tree *) pointer_map_contains (id->decl_map, name);
186   if (n)
187     return unshare_expr (*n);
188
189   if (processing_debug_stmt)
190     {
191       processing_debug_stmt = -1;
192       return name;
193     }
194
195   /* Do not set DEF_STMT yet as statement is not copied yet. We do that
196      in copy_bb.  */
197   new_tree = remap_decl (SSA_NAME_VAR (name), id);
198
199   /* We might've substituted constant or another SSA_NAME for
200      the variable.
201
202      Replace the SSA name representing RESULT_DECL by variable during
203      inlining:  this saves us from need to introduce PHI node in a case
204      return value is just partly initialized.  */
205   if ((TREE_CODE (new_tree) == VAR_DECL || TREE_CODE (new_tree) == PARM_DECL)
206       && (TREE_CODE (SSA_NAME_VAR (name)) != RESULT_DECL
207           || !id->transform_return_to_modify))
208     {
209       struct ptr_info_def *pi;
210       new_tree = make_ssa_name (new_tree, NULL);
211       insert_decl_map (id, name, new_tree);
212       SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new_tree)
213         = SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name);
214       TREE_TYPE (new_tree) = TREE_TYPE (SSA_NAME_VAR (new_tree));
215       /* At least IPA points-to info can be directly transferred.  */
216       if (id->src_cfun->gimple_df
217           && id->src_cfun->gimple_df->ipa_pta
218           && (pi = SSA_NAME_PTR_INFO (name))
219           && !pi->pt.anything)
220         {
221           struct ptr_info_def *new_pi = get_ptr_info (new_tree);
222           new_pi->pt = pi->pt;
223         }
224       if (gimple_nop_p (SSA_NAME_DEF_STMT (name)))
225         {
226           /* By inlining function having uninitialized variable, we might
227              extend the lifetime (variable might get reused).  This cause
228              ICE in the case we end up extending lifetime of SSA name across
229              abnormal edge, but also increase register pressure.
230
231              We simply initialize all uninitialized vars by 0 except
232              for case we are inlining to very first BB.  We can avoid
233              this for all BBs that are not inside strongly connected
234              regions of the CFG, but this is expensive to test.  */
235           if (id->entry_bb
236               && is_gimple_reg (SSA_NAME_VAR (name))
237               && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name)
238               && TREE_CODE (SSA_NAME_VAR (name)) != PARM_DECL
239               && (id->entry_bb != EDGE_SUCC (ENTRY_BLOCK_PTR, 0)->dest
240                   || EDGE_COUNT (id->entry_bb->preds) != 1))
241             {
242               gimple_stmt_iterator gsi = gsi_last_bb (id->entry_bb);
243               gimple init_stmt;
244               tree zero = build_zero_cst (TREE_TYPE (new_tree));
245
246               init_stmt = gimple_build_assign (new_tree, zero);
247               gsi_insert_after (&gsi, init_stmt, GSI_NEW_STMT);
248               SSA_NAME_IS_DEFAULT_DEF (new_tree) = 0;
249             }
250           else
251             {
252               SSA_NAME_DEF_STMT (new_tree) = gimple_build_nop ();
253               if (gimple_default_def (id->src_cfun, SSA_NAME_VAR (name))
254                   == name)
255                 set_default_def (SSA_NAME_VAR (new_tree), new_tree);
256             }
257         }
258     }
259   else
260     insert_decl_map (id, name, new_tree);
261   return new_tree;
262 }
263
264 /* Remap DECL during the copying of the BLOCK tree for the function.  */
265
266 tree
267 remap_decl (tree decl, copy_body_data *id)
268 {
269   tree *n;
270
271   /* We only remap local variables in the current function.  */
272
273   /* See if we have remapped this declaration.  */
274
275   n = (tree *) pointer_map_contains (id->decl_map, decl);
276
277   if (!n && processing_debug_stmt)
278     {
279       processing_debug_stmt = -1;
280       return decl;
281     }
282
283   /* If we didn't already have an equivalent for this declaration,
284      create one now.  */
285   if (!n)
286     {
287       /* Make a copy of the variable or label.  */
288       tree t = id->copy_decl (decl, id);
289
290       /* Remember it, so that if we encounter this local entity again
291          we can reuse this copy.  Do this early because remap_type may
292          need this decl for TYPE_STUB_DECL.  */
293       insert_decl_map (id, decl, t);
294
295       if (!DECL_P (t))
296         return t;
297
298       /* Remap types, if necessary.  */
299       TREE_TYPE (t) = remap_type (TREE_TYPE (t), id);
300       if (TREE_CODE (t) == TYPE_DECL)
301         DECL_ORIGINAL_TYPE (t) = remap_type (DECL_ORIGINAL_TYPE (t), id);
302
303       /* Remap sizes as necessary.  */
304       walk_tree (&DECL_SIZE (t), copy_tree_body_r, id, NULL);
305       walk_tree (&DECL_SIZE_UNIT (t), copy_tree_body_r, id, NULL);
306
307       /* If fields, do likewise for offset and qualifier.  */
308       if (TREE_CODE (t) == FIELD_DECL)
309         {
310           walk_tree (&DECL_FIELD_OFFSET (t), copy_tree_body_r, id, NULL);
311           if (TREE_CODE (DECL_CONTEXT (t)) == QUAL_UNION_TYPE)
312             walk_tree (&DECL_QUALIFIER (t), copy_tree_body_r, id, NULL);
313         }
314
315       if ((TREE_CODE (t) == VAR_DECL
316            || TREE_CODE (t) == RESULT_DECL
317            || TREE_CODE (t) == PARM_DECL)
318           && id->src_fn && DECL_STRUCT_FUNCTION (id->src_fn)
319           && gimple_referenced_vars (DECL_STRUCT_FUNCTION (id->src_fn))
320           /* We don't want to mark as referenced VAR_DECLs that were
321              not marked as such in the src function.  */
322           && (TREE_CODE (decl) != VAR_DECL
323               || referenced_var_lookup (DECL_STRUCT_FUNCTION (id->src_fn),
324                                         DECL_UID (decl))))
325         add_referenced_var (t);
326       return t;
327     }
328
329   if (id->do_not_unshare)
330     return *n;
331   else
332     return unshare_expr (*n);
333 }
334
335 static tree
336 remap_type_1 (tree type, copy_body_data *id)
337 {
338   tree new_tree, t;
339
340   /* We do need a copy.  build and register it now.  If this is a pointer or
341      reference type, remap the designated type and make a new pointer or
342      reference type.  */
343   if (TREE_CODE (type) == POINTER_TYPE)
344     {
345       new_tree = build_pointer_type_for_mode (remap_type (TREE_TYPE (type), id),
346                                          TYPE_MODE (type),
347                                          TYPE_REF_CAN_ALIAS_ALL (type));
348       if (TYPE_ATTRIBUTES (type) || TYPE_QUALS (type))
349         new_tree = build_type_attribute_qual_variant (new_tree,
350                                                       TYPE_ATTRIBUTES (type),
351                                                       TYPE_QUALS (type));
352       insert_decl_map (id, type, new_tree);
353       return new_tree;
354     }
355   else if (TREE_CODE (type) == REFERENCE_TYPE)
356     {
357       new_tree = build_reference_type_for_mode (remap_type (TREE_TYPE (type), id),
358                                             TYPE_MODE (type),
359                                             TYPE_REF_CAN_ALIAS_ALL (type));
360       if (TYPE_ATTRIBUTES (type) || TYPE_QUALS (type))
361         new_tree = build_type_attribute_qual_variant (new_tree,
362                                                       TYPE_ATTRIBUTES (type),
363                                                       TYPE_QUALS (type));
364       insert_decl_map (id, type, new_tree);
365       return new_tree;
366     }
367   else
368     new_tree = copy_node (type);
369
370   insert_decl_map (id, type, new_tree);
371
372   /* This is a new type, not a copy of an old type.  Need to reassociate
373      variants.  We can handle everything except the main variant lazily.  */
374   t = TYPE_MAIN_VARIANT (type);
375   if (type != t)
376     {
377       t = remap_type (t, id);
378       TYPE_MAIN_VARIANT (new_tree) = t;
379       TYPE_NEXT_VARIANT (new_tree) = TYPE_NEXT_VARIANT (t);
380       TYPE_NEXT_VARIANT (t) = new_tree;
381     }
382   else
383     {
384       TYPE_MAIN_VARIANT (new_tree) = new_tree;
385       TYPE_NEXT_VARIANT (new_tree) = NULL;
386     }
387
388   if (TYPE_STUB_DECL (type))
389     TYPE_STUB_DECL (new_tree) = remap_decl (TYPE_STUB_DECL (type), id);
390
391   /* Lazily create pointer and reference types.  */
392   TYPE_POINTER_TO (new_tree) = NULL;
393   TYPE_REFERENCE_TO (new_tree) = NULL;
394
395   switch (TREE_CODE (new_tree))
396     {
397     case INTEGER_TYPE:
398     case REAL_TYPE:
399     case FIXED_POINT_TYPE:
400     case ENUMERAL_TYPE:
401     case BOOLEAN_TYPE:
402       t = TYPE_MIN_VALUE (new_tree);
403       if (t && TREE_CODE (t) != INTEGER_CST)
404         walk_tree (&TYPE_MIN_VALUE (new_tree), copy_tree_body_r, id, NULL);
405
406       t = TYPE_MAX_VALUE (new_tree);
407       if (t && TREE_CODE (t) != INTEGER_CST)
408         walk_tree (&TYPE_MAX_VALUE (new_tree), copy_tree_body_r, id, NULL);
409       return new_tree;
410
411     case FUNCTION_TYPE:
412       TREE_TYPE (new_tree) = remap_type (TREE_TYPE (new_tree), id);
413       walk_tree (&TYPE_ARG_TYPES (new_tree), copy_tree_body_r, id, NULL);
414       return new_tree;
415
416     case ARRAY_TYPE:
417       TREE_TYPE (new_tree) = remap_type (TREE_TYPE (new_tree), id);
418       TYPE_DOMAIN (new_tree) = remap_type (TYPE_DOMAIN (new_tree), id);
419       break;
420
421     case RECORD_TYPE:
422     case UNION_TYPE:
423     case QUAL_UNION_TYPE:
424       {
425         tree f, nf = NULL;
426
427         for (f = TYPE_FIELDS (new_tree); f ; f = DECL_CHAIN (f))
428           {
429             t = remap_decl (f, id);
430             DECL_CONTEXT (t) = new_tree;
431             DECL_CHAIN (t) = nf;
432             nf = t;
433           }
434         TYPE_FIELDS (new_tree) = nreverse (nf);
435       }
436       break;
437
438     case OFFSET_TYPE:
439     default:
440       /* Shouldn't have been thought variable sized.  */
441       gcc_unreachable ();
442     }
443
444   walk_tree (&TYPE_SIZE (new_tree), copy_tree_body_r, id, NULL);
445   walk_tree (&TYPE_SIZE_UNIT (new_tree), copy_tree_body_r, id, NULL);
446
447   return new_tree;
448 }
449
450 tree
451 remap_type (tree type, copy_body_data *id)
452 {
453   tree *node;
454   tree tmp;
455
456   if (type == NULL)
457     return type;
458
459   /* See if we have remapped this type.  */
460   node = (tree *) pointer_map_contains (id->decl_map, type);
461   if (node)
462     return *node;
463
464   /* The type only needs remapping if it's variably modified.  */
465   if (! variably_modified_type_p (type, id->src_fn))
466     {
467       insert_decl_map (id, type, type);
468       return type;
469     }
470
471   id->remapping_type_depth++;
472   tmp = remap_type_1 (type, id);
473   id->remapping_type_depth--;
474
475   return tmp;
476 }
477
478 /* Return previously remapped type of TYPE in ID.  Return NULL if TYPE
479    is NULL or TYPE has not been remapped before.  */
480
481 static tree
482 remapped_type (tree type, copy_body_data *id)
483 {
484   tree *node;
485
486   if (type == NULL)
487     return type;
488
489   /* See if we have remapped this type.  */
490   node = (tree *) pointer_map_contains (id->decl_map, type);
491   if (node)
492     return *node;
493   else
494     return NULL;
495 }
496
497   /* The type only needs remapping if it's variably modified.  */
498 /* Decide if DECL can be put into BLOCK_NONLOCAL_VARs.  */
499
500 static bool
501 can_be_nonlocal (tree decl, copy_body_data *id)
502 {
503   /* We can not duplicate function decls.  */
504   if (TREE_CODE (decl) == FUNCTION_DECL)
505     return true;
506
507   /* Local static vars must be non-local or we get multiple declaration
508      problems.  */
509   if (TREE_CODE (decl) == VAR_DECL
510       && !auto_var_in_fn_p (decl, id->src_fn))
511     return true;
512
513   /* At the moment dwarf2out can handle only these types of nodes.  We
514      can support more later.  */
515   if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != PARM_DECL)
516     return false;
517
518   /* We must use global type.  We call remapped_type instead of
519      remap_type since we don't want to remap this type here if it
520      hasn't been remapped before.  */
521   if (TREE_TYPE (decl) != remapped_type (TREE_TYPE (decl), id))
522     return false;
523
524   /* Wihtout SSA we can't tell if variable is used.  */
525   if (!gimple_in_ssa_p (cfun))
526     return false;
527
528   /* Live variables must be copied so we can attach DECL_RTL.  */
529   if (var_ann (decl))
530     return false;
531
532   return true;
533 }
534
535 static tree
536 remap_decls (tree decls, VEC(tree,gc) **nonlocalized_list, copy_body_data *id)
537 {
538   tree old_var;
539   tree new_decls = NULL_TREE;
540
541   /* Remap its variables.  */
542   for (old_var = decls; old_var; old_var = DECL_CHAIN (old_var))
543     {
544       tree new_var;
545
546       if (can_be_nonlocal (old_var, id))
547         {
548           if (TREE_CODE (old_var) == VAR_DECL
549               && ! DECL_EXTERNAL (old_var)
550               && (var_ann (old_var) || !gimple_in_ssa_p (cfun)))
551             add_local_decl (cfun, old_var);
552           if ((!optimize || debug_info_level > DINFO_LEVEL_TERSE)
553               && !DECL_IGNORED_P (old_var)
554               && nonlocalized_list)
555             VEC_safe_push (tree, gc, *nonlocalized_list, old_var);
556           continue;
557         }
558
559       /* Remap the variable.  */
560       new_var = remap_decl (old_var, id);
561
562       /* If we didn't remap this variable, we can't mess with its
563          TREE_CHAIN.  If we remapped this variable to the return slot, it's
564          already declared somewhere else, so don't declare it here.  */
565
566       if (new_var == id->retvar)
567         ;
568       else if (!new_var)
569         {
570           if ((!optimize || debug_info_level > DINFO_LEVEL_TERSE)
571               && !DECL_IGNORED_P (old_var)
572               && nonlocalized_list)
573             VEC_safe_push (tree, gc, *nonlocalized_list, old_var);
574         }
575       else
576         {
577           gcc_assert (DECL_P (new_var));
578           DECL_CHAIN (new_var) = new_decls;
579           new_decls = new_var;
580  
581           /* Also copy value-expressions.  */
582           if (TREE_CODE (new_var) == VAR_DECL
583               && DECL_HAS_VALUE_EXPR_P (new_var))
584             {
585               tree tem = DECL_VALUE_EXPR (new_var);
586               bool old_regimplify = id->regimplify;
587               id->remapping_type_depth++;
588               walk_tree (&tem, copy_tree_body_r, id, NULL);
589               id->remapping_type_depth--;
590               id->regimplify = old_regimplify;
591               SET_DECL_VALUE_EXPR (new_var, tem);
592             }
593         }
594     }
595
596   return nreverse (new_decls);
597 }
598
599 /* Copy the BLOCK to contain remapped versions of the variables
600    therein.  And hook the new block into the block-tree.  */
601
602 static void
603 remap_block (tree *block, copy_body_data *id)
604 {
605   tree old_block;
606   tree new_block;
607
608   /* Make the new block.  */
609   old_block = *block;
610   new_block = make_node (BLOCK);
611   TREE_USED (new_block) = TREE_USED (old_block);
612   BLOCK_ABSTRACT_ORIGIN (new_block) = old_block;
613   BLOCK_SOURCE_LOCATION (new_block) = BLOCK_SOURCE_LOCATION (old_block);
614   BLOCK_NONLOCALIZED_VARS (new_block)
615     = VEC_copy (tree, gc, BLOCK_NONLOCALIZED_VARS (old_block));
616   *block = new_block;
617
618   /* Remap its variables.  */
619   BLOCK_VARS (new_block) = remap_decls (BLOCK_VARS (old_block),
620                                         &BLOCK_NONLOCALIZED_VARS (new_block),
621                                         id);
622
623   if (id->transform_lang_insert_block)
624     id->transform_lang_insert_block (new_block);
625
626   /* Remember the remapped block.  */
627   insert_decl_map (id, old_block, new_block);
628 }
629
630 /* Copy the whole block tree and root it in id->block.  */
631 static tree
632 remap_blocks (tree block, copy_body_data *id)
633 {
634   tree t;
635   tree new_tree = block;
636
637   if (!block)
638     return NULL;
639
640   remap_block (&new_tree, id);
641   gcc_assert (new_tree != block);
642   for (t = BLOCK_SUBBLOCKS (block); t ; t = BLOCK_CHAIN (t))
643     prepend_lexical_block (new_tree, remap_blocks (t, id));
644   /* Blocks are in arbitrary order, but make things slightly prettier and do
645      not swap order when producing a copy.  */
646   BLOCK_SUBBLOCKS (new_tree) = blocks_nreverse (BLOCK_SUBBLOCKS (new_tree));
647   return new_tree;
648 }
649
650 static void
651 copy_statement_list (tree *tp)
652 {
653   tree_stmt_iterator oi, ni;
654   tree new_tree;
655
656   new_tree = alloc_stmt_list ();
657   ni = tsi_start (new_tree);
658   oi = tsi_start (*tp);
659   TREE_TYPE (new_tree) = TREE_TYPE (*tp);
660   *tp = new_tree;
661
662   for (; !tsi_end_p (oi); tsi_next (&oi))
663     {
664       tree stmt = tsi_stmt (oi);
665       if (TREE_CODE (stmt) == STATEMENT_LIST)
666         copy_statement_list (&stmt);
667       tsi_link_after (&ni, stmt, TSI_CONTINUE_LINKING);
668     }
669 }
670
671 static void
672 copy_bind_expr (tree *tp, int *walk_subtrees, copy_body_data *id)
673 {
674   tree block = BIND_EXPR_BLOCK (*tp);
675   /* Copy (and replace) the statement.  */
676   copy_tree_r (tp, walk_subtrees, NULL);
677   if (block)
678     {
679       remap_block (&block, id);
680       BIND_EXPR_BLOCK (*tp) = block;
681     }
682
683   if (BIND_EXPR_VARS (*tp))
684     /* This will remap a lot of the same decls again, but this should be
685        harmless.  */
686     BIND_EXPR_VARS (*tp) = remap_decls (BIND_EXPR_VARS (*tp), NULL, id);
687 }
688
689
690 /* Create a new gimple_seq by remapping all the statements in BODY
691    using the inlining information in ID.  */
692
693 static gimple_seq
694 remap_gimple_seq (gimple_seq body, copy_body_data *id)
695 {
696   gimple_stmt_iterator si;
697   gimple_seq new_body = NULL;
698
699   for (si = gsi_start (body); !gsi_end_p (si); gsi_next (&si))
700     {
701       gimple new_stmt = remap_gimple_stmt (gsi_stmt (si), id);
702       gimple_seq_add_stmt (&new_body, new_stmt);
703     }
704
705   return new_body;
706 }
707
708
709 /* Copy a GIMPLE_BIND statement STMT, remapping all the symbols in its
710    block using the mapping information in ID.  */
711
712 static gimple
713 copy_gimple_bind (gimple stmt, copy_body_data *id)
714 {
715   gimple new_bind;
716   tree new_block, new_vars;
717   gimple_seq body, new_body;
718
719   /* Copy the statement.  Note that we purposely don't use copy_stmt
720      here because we need to remap statements as we copy.  */
721   body = gimple_bind_body (stmt);
722   new_body = remap_gimple_seq (body, id);
723
724   new_block = gimple_bind_block (stmt);
725   if (new_block)
726     remap_block (&new_block, id);
727
728   /* This will remap a lot of the same decls again, but this should be
729      harmless.  */
730   new_vars = gimple_bind_vars (stmt);
731   if (new_vars)
732     new_vars = remap_decls (new_vars, NULL, id);
733
734   new_bind = gimple_build_bind (new_vars, new_body, new_block);
735
736   return new_bind;
737 }
738
739
740 /* Remap the GIMPLE operand pointed to by *TP.  DATA is really a
741    'struct walk_stmt_info *'.  DATA->INFO is a 'copy_body_data *'.
742    WALK_SUBTREES is used to indicate walk_gimple_op whether to keep
743    recursing into the children nodes of *TP.  */
744
745 static tree
746 remap_gimple_op_r (tree *tp, int *walk_subtrees, void *data)
747 {
748   struct walk_stmt_info *wi_p = (struct walk_stmt_info *) data;
749   copy_body_data *id = (copy_body_data *) wi_p->info;
750   tree fn = id->src_fn;
751
752   if (TREE_CODE (*tp) == SSA_NAME)
753     {
754       *tp = remap_ssa_name (*tp, id);
755       *walk_subtrees = 0;
756       return NULL;
757     }
758   else if (auto_var_in_fn_p (*tp, fn))
759     {
760       /* Local variables and labels need to be replaced by equivalent
761          variables.  We don't want to copy static variables; there's
762          only one of those, no matter how many times we inline the
763          containing function.  Similarly for globals from an outer
764          function.  */
765       tree new_decl;
766
767       /* Remap the declaration.  */
768       new_decl = remap_decl (*tp, id);
769       gcc_assert (new_decl);
770       /* Replace this variable with the copy.  */
771       STRIP_TYPE_NOPS (new_decl);
772       /* ???  The C++ frontend uses void * pointer zero to initialize
773          any other type.  This confuses the middle-end type verification.
774          As cloned bodies do not go through gimplification again the fixup
775          there doesn't trigger.  */
776       if (TREE_CODE (new_decl) == INTEGER_CST
777           && !useless_type_conversion_p (TREE_TYPE (*tp), TREE_TYPE (new_decl)))
778         new_decl = fold_convert (TREE_TYPE (*tp), new_decl);
779       *tp = new_decl;
780       *walk_subtrees = 0;
781     }
782   else if (TREE_CODE (*tp) == STATEMENT_LIST)
783     gcc_unreachable ();
784   else if (TREE_CODE (*tp) == SAVE_EXPR)
785     gcc_unreachable ();
786   else if (TREE_CODE (*tp) == LABEL_DECL
787            && (!DECL_CONTEXT (*tp)
788                || decl_function_context (*tp) == id->src_fn))
789     /* These may need to be remapped for EH handling.  */
790     *tp = remap_decl (*tp, id);
791   else if (TYPE_P (*tp))
792     /* Types may need remapping as well.  */
793     *tp = remap_type (*tp, id);
794   else if (CONSTANT_CLASS_P (*tp))
795     {
796       /* If this is a constant, we have to copy the node iff the type
797          will be remapped.  copy_tree_r will not copy a constant.  */
798       tree new_type = remap_type (TREE_TYPE (*tp), id);
799
800       if (new_type == TREE_TYPE (*tp))
801         *walk_subtrees = 0;
802
803       else if (TREE_CODE (*tp) == INTEGER_CST)
804         *tp = build_int_cst_wide (new_type, TREE_INT_CST_LOW (*tp),
805                                   TREE_INT_CST_HIGH (*tp));
806       else
807         {
808           *tp = copy_node (*tp);
809           TREE_TYPE (*tp) = new_type;
810         }
811     }
812   else
813     {
814       /* Otherwise, just copy the node.  Note that copy_tree_r already
815          knows not to copy VAR_DECLs, etc., so this is safe.  */
816       if (TREE_CODE (*tp) == MEM_REF)
817         {
818           tree ptr = TREE_OPERAND (*tp, 0);
819           tree type = remap_type (TREE_TYPE (*tp), id);
820           tree old = *tp;
821           tree tem;
822
823           /* We need to re-canonicalize MEM_REFs from inline substitutions
824              that can happen when a pointer argument is an ADDR_EXPR.
825              Recurse here manually to allow that.  */
826           walk_tree (&ptr, remap_gimple_op_r, data, NULL);
827           if ((tem = maybe_fold_offset_to_reference (EXPR_LOCATION (*tp),
828                                                      ptr,
829                                                      TREE_OPERAND (*tp, 1),
830                                                      type))
831               && TREE_THIS_VOLATILE (tem) == TREE_THIS_VOLATILE (old))
832             {
833               tree *tem_basep = &tem;
834               while (handled_component_p (*tem_basep))
835                 tem_basep = &TREE_OPERAND (*tem_basep, 0);
836               if (TREE_CODE (*tem_basep) == MEM_REF)
837                 *tem_basep
838                     = build2 (MEM_REF, TREE_TYPE (*tem_basep),
839                               TREE_OPERAND (*tem_basep, 0),
840                               fold_convert (TREE_TYPE (TREE_OPERAND (*tp, 1)),
841                                             TREE_OPERAND (*tem_basep, 1)));
842               else
843                 *tem_basep
844                     = build2 (MEM_REF, TREE_TYPE (*tem_basep),
845                               build_fold_addr_expr (*tem_basep),
846                               build_int_cst
847                               (TREE_TYPE (TREE_OPERAND (*tp, 1)), 0));
848               *tp = tem;
849               TREE_THIS_VOLATILE (*tem_basep) = TREE_THIS_VOLATILE (old);
850               TREE_THIS_NOTRAP (*tem_basep) = TREE_THIS_NOTRAP (old);
851             }
852           else
853             {
854               *tp = fold_build2 (MEM_REF, type,
855                                  ptr, TREE_OPERAND (*tp, 1));
856               TREE_THIS_NOTRAP (*tp) = TREE_THIS_NOTRAP (old);
857             }
858           TREE_THIS_VOLATILE (*tp) = TREE_THIS_VOLATILE (old);
859           TREE_NO_WARNING (*tp) = TREE_NO_WARNING (old);
860           *walk_subtrees = 0;
861           return NULL;
862         }
863
864       /* Here is the "usual case".  Copy this tree node, and then
865          tweak some special cases.  */
866       copy_tree_r (tp, walk_subtrees, NULL);
867
868       /* Global variables we haven't seen yet need to go into referenced
869          vars.  If not referenced from types only.  */
870       if (gimple_in_ssa_p (cfun)
871           && TREE_CODE (*tp) == VAR_DECL
872           && id->remapping_type_depth == 0
873           && !processing_debug_stmt)
874         add_referenced_var (*tp);
875
876       /* We should never have TREE_BLOCK set on non-statements.  */
877       if (EXPR_P (*tp))
878         gcc_assert (!TREE_BLOCK (*tp));
879
880       if (TREE_CODE (*tp) != OMP_CLAUSE)
881         TREE_TYPE (*tp) = remap_type (TREE_TYPE (*tp), id);
882
883       if (TREE_CODE (*tp) == TARGET_EXPR && TREE_OPERAND (*tp, 3))
884         {
885           /* The copied TARGET_EXPR has never been expanded, even if the
886              original node was expanded already.  */
887           TREE_OPERAND (*tp, 1) = TREE_OPERAND (*tp, 3);
888           TREE_OPERAND (*tp, 3) = NULL_TREE;
889         }
890       else if (TREE_CODE (*tp) == ADDR_EXPR)
891         {
892           /* Variable substitution need not be simple.  In particular,
893              the MEM_REF substitution above.  Make sure that
894              TREE_CONSTANT and friends are up-to-date.  But make sure
895              to not improperly set TREE_BLOCK on some sub-expressions.  */
896           int invariant = is_gimple_min_invariant (*tp);
897           tree block = id->block;
898           id->block = NULL_TREE;
899           walk_tree (&TREE_OPERAND (*tp, 0), remap_gimple_op_r, data, NULL);
900           id->block = block;
901           recompute_tree_invariant_for_addr_expr (*tp);
902
903           /* If this used to be invariant, but is not any longer,
904              then regimplification is probably needed.  */
905           if (invariant && !is_gimple_min_invariant (*tp))
906             id->regimplify = true;
907
908           *walk_subtrees = 0;
909         }
910     }
911
912   /* Keep iterating.  */
913   return NULL_TREE;
914 }
915
916
917 /* Called from copy_body_id via walk_tree.  DATA is really a
918    `copy_body_data *'.  */
919
920 tree
921 copy_tree_body_r (tree *tp, int *walk_subtrees, void *data)
922 {
923   copy_body_data *id = (copy_body_data *) data;
924   tree fn = id->src_fn;
925   tree new_block;
926
927   /* Begin by recognizing trees that we'll completely rewrite for the
928      inlining context.  Our output for these trees is completely
929      different from out input (e.g. RETURN_EXPR is deleted, and morphs
930      into an edge).  Further down, we'll handle trees that get
931      duplicated and/or tweaked.  */
932
933   /* When requested, RETURN_EXPRs should be transformed to just the
934      contained MODIFY_EXPR.  The branch semantics of the return will
935      be handled elsewhere by manipulating the CFG rather than a statement.  */
936   if (TREE_CODE (*tp) == RETURN_EXPR && id->transform_return_to_modify)
937     {
938       tree assignment = TREE_OPERAND (*tp, 0);
939
940       /* If we're returning something, just turn that into an
941          assignment into the equivalent of the original RESULT_DECL.
942          If the "assignment" is just the result decl, the result
943          decl has already been set (e.g. a recent "foo (&result_decl,
944          ...)"); just toss the entire RETURN_EXPR.  */
945       if (assignment && TREE_CODE (assignment) == MODIFY_EXPR)
946         {
947           /* Replace the RETURN_EXPR with (a copy of) the
948              MODIFY_EXPR hanging underneath.  */
949           *tp = copy_node (assignment);
950         }
951       else /* Else the RETURN_EXPR returns no value.  */
952         {
953           *tp = NULL;
954           return (tree) (void *)1;
955         }
956     }
957   else if (TREE_CODE (*tp) == SSA_NAME)
958     {
959       *tp = remap_ssa_name (*tp, id);
960       *walk_subtrees = 0;
961       return NULL;
962     }
963
964   /* Local variables and labels need to be replaced by equivalent
965      variables.  We don't want to copy static variables; there's only
966      one of those, no matter how many times we inline the containing
967      function.  Similarly for globals from an outer function.  */
968   else if (auto_var_in_fn_p (*tp, fn))
969     {
970       tree new_decl;
971
972       /* Remap the declaration.  */
973       new_decl = remap_decl (*tp, id);
974       gcc_assert (new_decl);
975       /* Replace this variable with the copy.  */
976       STRIP_TYPE_NOPS (new_decl);
977       *tp = new_decl;
978       *walk_subtrees = 0;
979     }
980   else if (TREE_CODE (*tp) == STATEMENT_LIST)
981     copy_statement_list (tp);
982   else if (TREE_CODE (*tp) == SAVE_EXPR
983            || TREE_CODE (*tp) == TARGET_EXPR)
984     remap_save_expr (tp, id->decl_map, walk_subtrees);
985   else if (TREE_CODE (*tp) == LABEL_DECL
986            && (! DECL_CONTEXT (*tp)
987                || decl_function_context (*tp) == id->src_fn))
988     /* These may need to be remapped for EH handling.  */
989     *tp = remap_decl (*tp, id);
990   else if (TREE_CODE (*tp) == BIND_EXPR)
991     copy_bind_expr (tp, walk_subtrees, id);
992   /* Types may need remapping as well.  */
993   else if (TYPE_P (*tp))
994     *tp = remap_type (*tp, id);
995
996   /* If this is a constant, we have to copy the node iff the type will be
997      remapped.  copy_tree_r will not copy a constant.  */
998   else if (CONSTANT_CLASS_P (*tp))
999     {
1000       tree new_type = remap_type (TREE_TYPE (*tp), id);
1001
1002       if (new_type == TREE_TYPE (*tp))
1003         *walk_subtrees = 0;
1004
1005       else if (TREE_CODE (*tp) == INTEGER_CST)
1006         *tp = build_int_cst_wide (new_type, TREE_INT_CST_LOW (*tp),
1007                                   TREE_INT_CST_HIGH (*tp));
1008       else
1009         {
1010           *tp = copy_node (*tp);
1011           TREE_TYPE (*tp) = new_type;
1012         }
1013     }
1014
1015   /* Otherwise, just copy the node.  Note that copy_tree_r already
1016      knows not to copy VAR_DECLs, etc., so this is safe.  */
1017   else
1018     {
1019       /* Here we handle trees that are not completely rewritten.
1020          First we detect some inlining-induced bogosities for
1021          discarding.  */
1022       if (TREE_CODE (*tp) == MODIFY_EXPR
1023           && TREE_OPERAND (*tp, 0) == TREE_OPERAND (*tp, 1)
1024           && (auto_var_in_fn_p (TREE_OPERAND (*tp, 0), fn)))
1025         {
1026           /* Some assignments VAR = VAR; don't generate any rtl code
1027              and thus don't count as variable modification.  Avoid
1028              keeping bogosities like 0 = 0.  */
1029           tree decl = TREE_OPERAND (*tp, 0), value;
1030           tree *n;
1031
1032           n = (tree *) pointer_map_contains (id->decl_map, decl);
1033           if (n)
1034             {
1035               value = *n;
1036               STRIP_TYPE_NOPS (value);
1037               if (TREE_CONSTANT (value) || TREE_READONLY (value))
1038                 {
1039                   *tp = build_empty_stmt (EXPR_LOCATION (*tp));
1040                   return copy_tree_body_r (tp, walk_subtrees, data);
1041                 }
1042             }
1043         }
1044       else if (TREE_CODE (*tp) == INDIRECT_REF)
1045         {
1046           /* Get rid of *& from inline substitutions that can happen when a
1047              pointer argument is an ADDR_EXPR.  */
1048           tree decl = TREE_OPERAND (*tp, 0);
1049           tree *n;
1050
1051           n = (tree *) pointer_map_contains (id->decl_map, decl);
1052           if (n)
1053             {
1054               tree new_tree;
1055               tree old;
1056               /* If we happen to get an ADDR_EXPR in n->value, strip
1057                  it manually here as we'll eventually get ADDR_EXPRs
1058                  which lie about their types pointed to.  In this case
1059                  build_fold_indirect_ref wouldn't strip the INDIRECT_REF,
1060                  but we absolutely rely on that.  As fold_indirect_ref
1061                  does other useful transformations, try that first, though.  */
1062               tree type = TREE_TYPE (TREE_TYPE (*n));
1063               if (id->do_not_unshare)
1064                 new_tree = *n;
1065               else
1066                 new_tree = unshare_expr (*n);
1067               old = *tp;
1068               *tp = gimple_fold_indirect_ref (new_tree);
1069               if (! *tp)
1070                 {
1071                   if (TREE_CODE (new_tree) == ADDR_EXPR)
1072                     {
1073                       *tp = fold_indirect_ref_1 (EXPR_LOCATION (new_tree),
1074                                                  type, new_tree);
1075                       /* ???  We should either assert here or build
1076                          a VIEW_CONVERT_EXPR instead of blindly leaking
1077                          incompatible types to our IL.  */
1078                       if (! *tp)
1079                         *tp = TREE_OPERAND (new_tree, 0);
1080                     }
1081                   else
1082                     {
1083                       *tp = build1 (INDIRECT_REF, type, new_tree);
1084                       TREE_THIS_VOLATILE (*tp) = TREE_THIS_VOLATILE (old);
1085                       TREE_SIDE_EFFECTS (*tp) = TREE_SIDE_EFFECTS (old);
1086                       TREE_READONLY (*tp) = TREE_READONLY (old);
1087                       TREE_THIS_NOTRAP (*tp) = TREE_THIS_NOTRAP (old);
1088                     }
1089                 }
1090               *walk_subtrees = 0;
1091               return NULL;
1092             }
1093         }
1094       else if (TREE_CODE (*tp) == MEM_REF)
1095         {
1096           /* We need to re-canonicalize MEM_REFs from inline substitutions
1097              that can happen when a pointer argument is an ADDR_EXPR.  */
1098           tree decl = TREE_OPERAND (*tp, 0);
1099           tree *n;
1100
1101           n = (tree *) pointer_map_contains (id->decl_map, decl);
1102           if (n)
1103             {
1104               tree old = *tp;
1105               *tp = fold_build2 (MEM_REF, TREE_TYPE (*tp),
1106                                  unshare_expr (*n), TREE_OPERAND (*tp, 1));
1107               TREE_THIS_VOLATILE (*tp) = TREE_THIS_VOLATILE (old);
1108               TREE_NO_WARNING (*tp) = TREE_NO_WARNING (old);
1109               *walk_subtrees = 0;
1110               return NULL;
1111             }
1112         }
1113
1114       /* Here is the "usual case".  Copy this tree node, and then
1115          tweak some special cases.  */
1116       copy_tree_r (tp, walk_subtrees, NULL);
1117
1118       /* Global variables we haven't seen yet needs to go into referenced
1119          vars.  If not referenced from types or debug stmts only.  */
1120       if (gimple_in_ssa_p (cfun)
1121           && TREE_CODE (*tp) == VAR_DECL
1122           && id->remapping_type_depth == 0
1123           && !processing_debug_stmt)
1124         add_referenced_var (*tp);
1125
1126       /* If EXPR has block defined, map it to newly constructed block.
1127          When inlining we want EXPRs without block appear in the block
1128          of function call if we are not remapping a type.  */
1129       if (EXPR_P (*tp))
1130         {
1131           new_block = id->remapping_type_depth == 0 ? id->block : NULL;
1132           if (TREE_BLOCK (*tp))
1133             {
1134               tree *n;
1135               n = (tree *) pointer_map_contains (id->decl_map,
1136                                                  TREE_BLOCK (*tp));
1137               gcc_assert (n || id->remapping_type_depth != 0);
1138               if (n)
1139                 new_block = *n;
1140             }
1141           TREE_BLOCK (*tp) = new_block;
1142         }
1143
1144       if (TREE_CODE (*tp) != OMP_CLAUSE)
1145         TREE_TYPE (*tp) = remap_type (TREE_TYPE (*tp), id);
1146
1147       /* The copied TARGET_EXPR has never been expanded, even if the
1148          original node was expanded already.  */
1149       if (TREE_CODE (*tp) == TARGET_EXPR && TREE_OPERAND (*tp, 3))
1150         {
1151           TREE_OPERAND (*tp, 1) = TREE_OPERAND (*tp, 3);
1152           TREE_OPERAND (*tp, 3) = NULL_TREE;
1153         }
1154
1155       /* Variable substitution need not be simple.  In particular, the
1156          INDIRECT_REF substitution above.  Make sure that TREE_CONSTANT
1157          and friends are up-to-date.  */
1158       else if (TREE_CODE (*tp) == ADDR_EXPR)
1159         {
1160           int invariant = is_gimple_min_invariant (*tp);
1161           walk_tree (&TREE_OPERAND (*tp, 0), copy_tree_body_r, id, NULL);
1162
1163           /* Handle the case where we substituted an INDIRECT_REF
1164              into the operand of the ADDR_EXPR.  */
1165           if (TREE_CODE (TREE_OPERAND (*tp, 0)) == INDIRECT_REF)
1166             *tp = TREE_OPERAND (TREE_OPERAND (*tp, 0), 0);
1167           else
1168             recompute_tree_invariant_for_addr_expr (*tp);
1169
1170           /* If this used to be invariant, but is not any longer,
1171              then regimplification is probably needed.  */
1172           if (invariant && !is_gimple_min_invariant (*tp))
1173             id->regimplify = true;
1174
1175           *walk_subtrees = 0;
1176         }
1177     }
1178
1179   /* Keep iterating.  */
1180   return NULL_TREE;
1181 }
1182
1183 /* Helper for remap_gimple_stmt.  Given an EH region number for the
1184    source function, map that to the duplicate EH region number in
1185    the destination function.  */
1186
1187 static int
1188 remap_eh_region_nr (int old_nr, copy_body_data *id)
1189 {
1190   eh_region old_r, new_r;
1191   void **slot;
1192
1193   old_r = get_eh_region_from_number_fn (id->src_cfun, old_nr);
1194   slot = pointer_map_contains (id->eh_map, old_r);
1195   new_r = (eh_region) *slot;
1196
1197   return new_r->index;
1198 }
1199
1200 /* Similar, but operate on INTEGER_CSTs.  */
1201
1202 static tree
1203 remap_eh_region_tree_nr (tree old_t_nr, copy_body_data *id)
1204 {
1205   int old_nr, new_nr;
1206
1207   old_nr = tree_low_cst (old_t_nr, 0);
1208   new_nr = remap_eh_region_nr (old_nr, id);
1209
1210   return build_int_cst (NULL, new_nr);
1211 }
1212
1213 /* Helper for copy_bb.  Remap statement STMT using the inlining
1214    information in ID.  Return the new statement copy.  */
1215
1216 static gimple
1217 remap_gimple_stmt (gimple stmt, copy_body_data *id)
1218 {
1219   gimple copy = NULL;
1220   struct walk_stmt_info wi;
1221   tree new_block;
1222   bool skip_first = false;
1223
1224   /* Begin by recognizing trees that we'll completely rewrite for the
1225      inlining context.  Our output for these trees is completely
1226      different from out input (e.g. RETURN_EXPR is deleted, and morphs
1227      into an edge).  Further down, we'll handle trees that get
1228      duplicated and/or tweaked.  */
1229
1230   /* When requested, GIMPLE_RETURNs should be transformed to just the
1231      contained GIMPLE_ASSIGN.  The branch semantics of the return will
1232      be handled elsewhere by manipulating the CFG rather than the
1233      statement.  */
1234   if (gimple_code (stmt) == GIMPLE_RETURN && id->transform_return_to_modify)
1235     {
1236       tree retval = gimple_return_retval (stmt);
1237
1238       /* If we're returning something, just turn that into an
1239          assignment into the equivalent of the original RESULT_DECL.
1240          If RETVAL is just the result decl, the result decl has
1241          already been set (e.g. a recent "foo (&result_decl, ...)");
1242          just toss the entire GIMPLE_RETURN.  */
1243       if (retval
1244           && (TREE_CODE (retval) != RESULT_DECL
1245               && (TREE_CODE (retval) != SSA_NAME
1246                   || TREE_CODE (SSA_NAME_VAR (retval)) != RESULT_DECL)))
1247         {
1248           copy = gimple_build_assign (id->retvar, retval);
1249           /* id->retvar is already substituted.  Skip it on later remapping.  */
1250           skip_first = true;
1251         }
1252       else
1253         return gimple_build_nop ();
1254     }
1255   else if (gimple_has_substatements (stmt))
1256     {
1257       gimple_seq s1, s2;
1258
1259       /* When cloning bodies from the C++ front end, we will be handed bodies
1260          in High GIMPLE form.  Handle here all the High GIMPLE statements that
1261          have embedded statements.  */
1262       switch (gimple_code (stmt))
1263         {
1264         case GIMPLE_BIND:
1265           copy = copy_gimple_bind (stmt, id);
1266           break;
1267
1268         case GIMPLE_CATCH:
1269           s1 = remap_gimple_seq (gimple_catch_handler (stmt), id);
1270           copy = gimple_build_catch (gimple_catch_types (stmt), s1);
1271           break;
1272
1273         case GIMPLE_EH_FILTER:
1274           s1 = remap_gimple_seq (gimple_eh_filter_failure (stmt), id);
1275           copy = gimple_build_eh_filter (gimple_eh_filter_types (stmt), s1);
1276           break;
1277
1278         case GIMPLE_TRY:
1279           s1 = remap_gimple_seq (gimple_try_eval (stmt), id);
1280           s2 = remap_gimple_seq (gimple_try_cleanup (stmt), id);
1281           copy = gimple_build_try (s1, s2, gimple_try_kind (stmt));
1282           break;
1283
1284         case GIMPLE_WITH_CLEANUP_EXPR:
1285           s1 = remap_gimple_seq (gimple_wce_cleanup (stmt), id);
1286           copy = gimple_build_wce (s1);
1287           break;
1288
1289         case GIMPLE_OMP_PARALLEL:
1290           s1 = remap_gimple_seq (gimple_omp_body (stmt), id);
1291           copy = gimple_build_omp_parallel
1292                    (s1,
1293                     gimple_omp_parallel_clauses (stmt),
1294                     gimple_omp_parallel_child_fn (stmt),
1295                     gimple_omp_parallel_data_arg (stmt));
1296           break;
1297
1298         case GIMPLE_OMP_TASK:
1299           s1 = remap_gimple_seq (gimple_omp_body (stmt), id);
1300           copy = gimple_build_omp_task
1301                    (s1,
1302                     gimple_omp_task_clauses (stmt),
1303                     gimple_omp_task_child_fn (stmt),
1304                     gimple_omp_task_data_arg (stmt),
1305                     gimple_omp_task_copy_fn (stmt),
1306                     gimple_omp_task_arg_size (stmt),
1307                     gimple_omp_task_arg_align (stmt));
1308           break;
1309
1310         case GIMPLE_OMP_FOR:
1311           s1 = remap_gimple_seq (gimple_omp_body (stmt), id);
1312           s2 = remap_gimple_seq (gimple_omp_for_pre_body (stmt), id);
1313           copy = gimple_build_omp_for (s1, gimple_omp_for_clauses (stmt),
1314                                        gimple_omp_for_collapse (stmt), s2);
1315           {
1316             size_t i;
1317             for (i = 0; i < gimple_omp_for_collapse (stmt); i++)
1318               {
1319                 gimple_omp_for_set_index (copy, i,
1320                                           gimple_omp_for_index (stmt, i));
1321                 gimple_omp_for_set_initial (copy, i,
1322                                             gimple_omp_for_initial (stmt, i));
1323                 gimple_omp_for_set_final (copy, i,
1324                                           gimple_omp_for_final (stmt, i));
1325                 gimple_omp_for_set_incr (copy, i,
1326                                          gimple_omp_for_incr (stmt, i));
1327                 gimple_omp_for_set_cond (copy, i,
1328                                          gimple_omp_for_cond (stmt, i));
1329               }
1330           }
1331           break;
1332
1333         case GIMPLE_OMP_MASTER:
1334           s1 = remap_gimple_seq (gimple_omp_body (stmt), id);
1335           copy = gimple_build_omp_master (s1);
1336           break;
1337
1338         case GIMPLE_OMP_ORDERED:
1339           s1 = remap_gimple_seq (gimple_omp_body (stmt), id);
1340           copy = gimple_build_omp_ordered (s1);
1341           break;
1342
1343         case GIMPLE_OMP_SECTION:
1344           s1 = remap_gimple_seq (gimple_omp_body (stmt), id);
1345           copy = gimple_build_omp_section (s1);
1346           break;
1347
1348         case GIMPLE_OMP_SECTIONS:
1349           s1 = remap_gimple_seq (gimple_omp_body (stmt), id);
1350           copy = gimple_build_omp_sections
1351                    (s1, gimple_omp_sections_clauses (stmt));
1352           break;
1353
1354         case GIMPLE_OMP_SINGLE:
1355           s1 = remap_gimple_seq (gimple_omp_body (stmt), id);
1356           copy = gimple_build_omp_single
1357                    (s1, gimple_omp_single_clauses (stmt));
1358           break;
1359
1360         case GIMPLE_OMP_CRITICAL:
1361           s1 = remap_gimple_seq (gimple_omp_body (stmt), id);
1362           copy
1363             = gimple_build_omp_critical (s1, gimple_omp_critical_name (stmt));
1364           break;
1365
1366         default:
1367           gcc_unreachable ();
1368         }
1369     }
1370   else
1371     {
1372       if (gimple_assign_copy_p (stmt)
1373           && gimple_assign_lhs (stmt) == gimple_assign_rhs1 (stmt)
1374           && auto_var_in_fn_p (gimple_assign_lhs (stmt), id->src_fn))
1375         {
1376           /* Here we handle statements that are not completely rewritten.
1377              First we detect some inlining-induced bogosities for
1378              discarding.  */
1379
1380           /* Some assignments VAR = VAR; don't generate any rtl code
1381              and thus don't count as variable modification.  Avoid
1382              keeping bogosities like 0 = 0.  */
1383           tree decl = gimple_assign_lhs (stmt), value;
1384           tree *n;
1385
1386           n = (tree *) pointer_map_contains (id->decl_map, decl);
1387           if (n)
1388             {
1389               value = *n;
1390               STRIP_TYPE_NOPS (value);
1391               if (TREE_CONSTANT (value) || TREE_READONLY (value))
1392                 return gimple_build_nop ();
1393             }
1394         }
1395
1396       if (gimple_debug_bind_p (stmt))
1397         {
1398           copy = gimple_build_debug_bind (gimple_debug_bind_get_var (stmt),
1399                                           gimple_debug_bind_get_value (stmt),
1400                                           stmt);
1401           VEC_safe_push (gimple, heap, id->debug_stmts, copy);
1402           return copy;
1403         }
1404
1405       /* Create a new deep copy of the statement.  */
1406       copy = gimple_copy (stmt);
1407
1408       /* Remap the region numbers for __builtin_eh_{pointer,filter},
1409          RESX and EH_DISPATCH.  */
1410       if (id->eh_map)
1411         switch (gimple_code (copy))
1412           {
1413           case GIMPLE_CALL:
1414             {
1415               tree r, fndecl = gimple_call_fndecl (copy);
1416               if (fndecl && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL)
1417                 switch (DECL_FUNCTION_CODE (fndecl))
1418                   {
1419                   case BUILT_IN_EH_COPY_VALUES:
1420                     r = gimple_call_arg (copy, 1);
1421                     r = remap_eh_region_tree_nr (r, id);
1422                     gimple_call_set_arg (copy, 1, r);
1423                     /* FALLTHRU */
1424
1425                   case BUILT_IN_EH_POINTER:
1426                   case BUILT_IN_EH_FILTER:
1427                     r = gimple_call_arg (copy, 0);
1428                     r = remap_eh_region_tree_nr (r, id);
1429                     gimple_call_set_arg (copy, 0, r);
1430                     break;
1431
1432                   default:
1433                     break;
1434                   }
1435
1436               /* Reset alias info if we didn't apply measures to
1437                  keep it valid over inlining by setting DECL_PT_UID.  */
1438               if (!id->src_cfun->gimple_df
1439                   || !id->src_cfun->gimple_df->ipa_pta)
1440                 gimple_call_reset_alias_info (copy);
1441             }
1442             break;
1443
1444           case GIMPLE_RESX:
1445             {
1446               int r = gimple_resx_region (copy);
1447               r = remap_eh_region_nr (r, id);
1448               gimple_resx_set_region (copy, r);
1449             }
1450             break;
1451
1452           case GIMPLE_EH_DISPATCH:
1453             {
1454               int r = gimple_eh_dispatch_region (copy);
1455               r = remap_eh_region_nr (r, id);
1456               gimple_eh_dispatch_set_region (copy, r);
1457             }
1458             break;
1459
1460           default:
1461             break;
1462           }
1463     }
1464
1465   /* If STMT has a block defined, map it to the newly constructed
1466      block.  When inlining we want statements without a block to
1467      appear in the block of the function call.  */
1468   new_block = id->block;
1469   if (gimple_block (copy))
1470     {
1471       tree *n;
1472       n = (tree *) pointer_map_contains (id->decl_map, gimple_block (copy));
1473       gcc_assert (n);
1474       new_block = *n;
1475     }
1476
1477   gimple_set_block (copy, new_block);
1478
1479   if (gimple_debug_bind_p (copy))
1480     return copy;
1481
1482   /* Remap all the operands in COPY.  */
1483   memset (&wi, 0, sizeof (wi));
1484   wi.info = id;
1485   if (skip_first)
1486     walk_tree (gimple_op_ptr (copy, 1), remap_gimple_op_r, &wi, NULL);
1487   else
1488     walk_gimple_op (copy, remap_gimple_op_r, &wi);
1489
1490   /* Clear the copied virtual operands.  We are not remapping them here
1491      but are going to recreate them from scratch.  */
1492   if (gimple_has_mem_ops (copy))
1493     {
1494       gimple_set_vdef (copy, NULL_TREE);
1495       gimple_set_vuse (copy, NULL_TREE);
1496     }
1497
1498   return copy;
1499 }
1500
1501
1502 /* Copy basic block, scale profile accordingly.  Edges will be taken care of
1503    later  */
1504
1505 static basic_block
1506 copy_bb (copy_body_data *id, basic_block bb, int frequency_scale,
1507          gcov_type count_scale)
1508 {
1509   gimple_stmt_iterator gsi, copy_gsi, seq_gsi;
1510   basic_block copy_basic_block;
1511   tree decl;
1512   gcov_type freq;
1513   basic_block prev;
1514
1515   /* Search for previous copied basic block.  */
1516   prev = bb->prev_bb;
1517   while (!prev->aux)
1518     prev = prev->prev_bb;
1519
1520   /* create_basic_block() will append every new block to
1521      basic_block_info automatically.  */
1522   copy_basic_block = create_basic_block (NULL, (void *) 0,
1523                                          (basic_block) prev->aux);
1524   copy_basic_block->count = bb->count * count_scale / REG_BR_PROB_BASE;
1525
1526   /* We are going to rebuild frequencies from scratch.  These values
1527      have just small importance to drive canonicalize_loop_headers.  */
1528   freq = ((gcov_type)bb->frequency * frequency_scale / REG_BR_PROB_BASE);
1529
1530   /* We recompute frequencies after inlining, so this is quite safe.  */
1531   if (freq > BB_FREQ_MAX)
1532     freq = BB_FREQ_MAX;
1533   copy_basic_block->frequency = freq;
1534
1535   copy_gsi = gsi_start_bb (copy_basic_block);
1536
1537   for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
1538     {
1539       gimple stmt = gsi_stmt (gsi);
1540       gimple orig_stmt = stmt;
1541
1542       id->regimplify = false;
1543       stmt = remap_gimple_stmt (stmt, id);
1544       if (gimple_nop_p (stmt))
1545         continue;
1546
1547       gimple_duplicate_stmt_histograms (cfun, stmt, id->src_cfun, orig_stmt);
1548       seq_gsi = copy_gsi;
1549
1550       /* With return slot optimization we can end up with
1551          non-gimple (foo *)&this->m, fix that here.  */
1552       if (is_gimple_assign (stmt)
1553           && gimple_assign_rhs_code (stmt) == NOP_EXPR
1554           && !is_gimple_val (gimple_assign_rhs1 (stmt)))
1555         {
1556           tree new_rhs;
1557           new_rhs = force_gimple_operand_gsi (&seq_gsi,
1558                                               gimple_assign_rhs1 (stmt),
1559                                               true, NULL, false,
1560                                               GSI_CONTINUE_LINKING);
1561           gimple_assign_set_rhs1 (stmt, new_rhs);
1562           id->regimplify = false;
1563         }
1564
1565       gsi_insert_after (&seq_gsi, stmt, GSI_NEW_STMT);
1566
1567       if (id->regimplify)
1568         gimple_regimplify_operands (stmt, &seq_gsi);
1569
1570       /* If copy_basic_block has been empty at the start of this iteration,
1571          call gsi_start_bb again to get at the newly added statements.  */
1572       if (gsi_end_p (copy_gsi))
1573         copy_gsi = gsi_start_bb (copy_basic_block);
1574       else
1575         gsi_next (&copy_gsi);
1576
1577       /* Process the new statement.  The call to gimple_regimplify_operands
1578          possibly turned the statement into multiple statements, we
1579          need to process all of them.  */
1580       do
1581         {
1582           tree fn;
1583
1584           stmt = gsi_stmt (copy_gsi);
1585           if (is_gimple_call (stmt)
1586               && gimple_call_va_arg_pack_p (stmt)
1587               && id->gimple_call)
1588             {
1589               /* __builtin_va_arg_pack () should be replaced by
1590                  all arguments corresponding to ... in the caller.  */
1591               tree p;
1592               gimple new_call;
1593               VEC(tree, heap) *argarray;
1594               size_t nargs = gimple_call_num_args (id->gimple_call);
1595               size_t n;
1596
1597               for (p = DECL_ARGUMENTS (id->src_fn); p; p = DECL_CHAIN (p))
1598                 nargs--;
1599
1600               /* Create the new array of arguments.  */
1601               n = nargs + gimple_call_num_args (stmt);
1602               argarray = VEC_alloc (tree, heap, n);
1603               VEC_safe_grow (tree, heap, argarray, n);
1604
1605               /* Copy all the arguments before '...'  */
1606               memcpy (VEC_address (tree, argarray),
1607                       gimple_call_arg_ptr (stmt, 0),
1608                       gimple_call_num_args (stmt) * sizeof (tree));
1609
1610               /* Append the arguments passed in '...'  */
1611               memcpy (VEC_address(tree, argarray) + gimple_call_num_args (stmt),
1612                       gimple_call_arg_ptr (id->gimple_call, 0)
1613                         + (gimple_call_num_args (id->gimple_call) - nargs),
1614                       nargs * sizeof (tree));
1615
1616               new_call = gimple_build_call_vec (gimple_call_fn (stmt),
1617                                                 argarray);
1618
1619               VEC_free (tree, heap, argarray);
1620
1621               /* Copy all GIMPLE_CALL flags, location and block, except
1622                  GF_CALL_VA_ARG_PACK.  */
1623               gimple_call_copy_flags (new_call, stmt);
1624               gimple_call_set_va_arg_pack (new_call, false);
1625               gimple_set_location (new_call, gimple_location (stmt));
1626               gimple_set_block (new_call, gimple_block (stmt));
1627               gimple_call_set_lhs (new_call, gimple_call_lhs (stmt));
1628
1629               gsi_replace (&copy_gsi, new_call, false);
1630               stmt = new_call;
1631             }
1632           else if (is_gimple_call (stmt)
1633                    && id->gimple_call
1634                    && (decl = gimple_call_fndecl (stmt))
1635                    && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
1636                    && DECL_FUNCTION_CODE (decl) == BUILT_IN_VA_ARG_PACK_LEN)
1637             {
1638               /* __builtin_va_arg_pack_len () should be replaced by
1639                  the number of anonymous arguments.  */
1640               size_t nargs = gimple_call_num_args (id->gimple_call);
1641               tree count, p;
1642               gimple new_stmt;
1643
1644               for (p = DECL_ARGUMENTS (id->src_fn); p; p = DECL_CHAIN (p))
1645                 nargs--;
1646
1647               count = build_int_cst (integer_type_node, nargs);
1648               new_stmt = gimple_build_assign (gimple_call_lhs (stmt), count);
1649               gsi_replace (&copy_gsi, new_stmt, false);
1650               stmt = new_stmt;
1651             }
1652
1653           /* Statements produced by inlining can be unfolded, especially
1654              when we constant propagated some operands.  We can't fold
1655              them right now for two reasons:
1656              1) folding require SSA_NAME_DEF_STMTs to be correct
1657              2) we can't change function calls to builtins.
1658              So we just mark statement for later folding.  We mark
1659              all new statements, instead just statements that has changed
1660              by some nontrivial substitution so even statements made
1661              foldable indirectly are updated.  If this turns out to be
1662              expensive, copy_body can be told to watch for nontrivial
1663              changes.  */
1664           if (id->statements_to_fold)
1665             pointer_set_insert (id->statements_to_fold, stmt);
1666
1667           /* We're duplicating a CALL_EXPR.  Find any corresponding
1668              callgraph edges and update or duplicate them.  */
1669           if (is_gimple_call (stmt))
1670             {
1671               struct cgraph_edge *edge;
1672               int flags;
1673
1674               switch (id->transform_call_graph_edges)
1675                 {
1676                 case CB_CGE_DUPLICATE:
1677                   edge = cgraph_edge (id->src_node, orig_stmt);
1678                   if (edge)
1679                     {
1680                       int edge_freq = edge->frequency;
1681                       edge = cgraph_clone_edge (edge, id->dst_node, stmt,
1682                                                 gimple_uid (stmt),
1683                                                 REG_BR_PROB_BASE, CGRAPH_FREQ_BASE,
1684                                                 edge->frequency, true);
1685                       /* We could also just rescale the frequency, but
1686                          doing so would introduce roundoff errors and make
1687                          verifier unhappy.  */
1688                       edge->frequency
1689                         = compute_call_stmt_bb_frequency (id->dst_node->decl,
1690                                                           copy_basic_block);
1691                       if (dump_file
1692                           && profile_status_for_function (cfun) != PROFILE_ABSENT
1693                           && (edge_freq > edge->frequency + 10
1694                               || edge_freq < edge->frequency - 10))
1695                         {
1696                           fprintf (dump_file, "Edge frequency estimated by "
1697                                    "cgraph %i diverge from inliner's estimate %i\n",
1698                                    edge_freq,
1699                                    edge->frequency);
1700                           fprintf (dump_file,
1701                                    "Orig bb: %i, orig bb freq %i, new bb freq %i\n",
1702                                    bb->index,
1703                                    bb->frequency,
1704                                    copy_basic_block->frequency);
1705                         }
1706                       stmt = cgraph_redirect_edge_call_stmt_to_callee (edge);
1707                     }
1708                   break;
1709
1710                 case CB_CGE_MOVE_CLONES:
1711                   cgraph_set_call_stmt_including_clones (id->dst_node,
1712                                                          orig_stmt, stmt);
1713                   edge = cgraph_edge (id->dst_node, stmt);
1714                   break;
1715
1716                 case CB_CGE_MOVE:
1717                   edge = cgraph_edge (id->dst_node, orig_stmt);
1718                   if (edge)
1719                     cgraph_set_call_stmt (edge, stmt);
1720                   break;
1721
1722                 default:
1723                   gcc_unreachable ();
1724                 }
1725
1726               /* Constant propagation on argument done during inlining
1727                  may create new direct call.  Produce an edge for it.  */
1728               if ((!edge
1729                    || (edge->indirect_inlining_edge
1730                        && id->transform_call_graph_edges == CB_CGE_MOVE_CLONES))
1731                   && (fn = gimple_call_fndecl (stmt)) != NULL)
1732                 {
1733                   struct cgraph_node *dest = cgraph_node (fn);
1734
1735                   /* We have missing edge in the callgraph.  This can happen
1736                      when previous inlining turned an indirect call into a
1737                      direct call by constant propagating arguments or we are
1738                      producing dead clone (for further cloning).  In all
1739                      other cases we hit a bug (incorrect node sharing is the
1740                      most common reason for missing edges).  */
1741                   gcc_assert (dest->needed || !dest->analyzed
1742                               || dest->address_taken
1743                               || !id->src_node->analyzed
1744                               || !id->dst_node->analyzed);
1745                   if (id->transform_call_graph_edges == CB_CGE_MOVE_CLONES)
1746                     cgraph_create_edge_including_clones
1747                       (id->dst_node, dest, orig_stmt, stmt, bb->count,
1748                        compute_call_stmt_bb_frequency (id->dst_node->decl,
1749                                                        copy_basic_block),
1750                        bb->loop_depth, CIF_ORIGINALLY_INDIRECT_CALL);
1751                   else
1752                     cgraph_create_edge (id->dst_node, dest, stmt,
1753                                         bb->count,
1754                                         compute_call_stmt_bb_frequency
1755                                           (id->dst_node->decl, copy_basic_block),
1756                                         bb->loop_depth)->inline_failed
1757                       = CIF_ORIGINALLY_INDIRECT_CALL;
1758                   if (dump_file)
1759                     {
1760                       fprintf (dump_file, "Created new direct edge to %s\n",
1761                                cgraph_node_name (dest));
1762                     }
1763                 }
1764
1765               flags = gimple_call_flags (stmt);
1766               if (flags & ECF_MAY_BE_ALLOCA)
1767                 cfun->calls_alloca = true;
1768               if (flags & ECF_RETURNS_TWICE)
1769                 cfun->calls_setjmp = true;
1770             }
1771
1772           maybe_duplicate_eh_stmt_fn (cfun, stmt, id->src_cfun, orig_stmt,
1773                                       id->eh_map, id->eh_lp_nr);
1774
1775           if (gimple_in_ssa_p (cfun) && !is_gimple_debug (stmt))
1776             {
1777               ssa_op_iter i;
1778               tree def;
1779
1780               find_new_referenced_vars (gsi_stmt (copy_gsi));
1781               FOR_EACH_SSA_TREE_OPERAND (def, stmt, i, SSA_OP_DEF)
1782                 if (TREE_CODE (def) == SSA_NAME)
1783                   SSA_NAME_DEF_STMT (def) = stmt;
1784             }
1785
1786           gsi_next (&copy_gsi);
1787         }
1788       while (!gsi_end_p (copy_gsi));
1789
1790       copy_gsi = gsi_last_bb (copy_basic_block);
1791     }
1792
1793   return copy_basic_block;
1794 }
1795
1796 /* Inserting Single Entry Multiple Exit region in SSA form into code in SSA
1797    form is quite easy, since dominator relationship for old basic blocks does
1798    not change.
1799
1800    There is however exception where inlining might change dominator relation
1801    across EH edges from basic block within inlined functions destinating
1802    to landing pads in function we inline into.
1803
1804    The function fills in PHI_RESULTs of such PHI nodes if they refer
1805    to gimple regs.  Otherwise, the function mark PHI_RESULT of such
1806    PHI nodes for renaming.  For non-gimple regs, renaming is safe: the
1807    EH edges are abnormal and SSA_NAME_OCCURS_IN_ABNORMAL_PHI must be
1808    set, and this means that there will be no overlapping live ranges
1809    for the underlying symbol.
1810
1811    This might change in future if we allow redirecting of EH edges and
1812    we might want to change way build CFG pre-inlining to include
1813    all the possible edges then.  */
1814 static void
1815 update_ssa_across_abnormal_edges (basic_block bb, basic_block ret_bb,
1816                                   bool can_throw, bool nonlocal_goto)
1817 {
1818   edge e;
1819   edge_iterator ei;
1820
1821   FOR_EACH_EDGE (e, ei, bb->succs)
1822     if (!e->dest->aux
1823         || ((basic_block)e->dest->aux)->index == ENTRY_BLOCK)
1824       {
1825         gimple phi;
1826         gimple_stmt_iterator si;
1827
1828         if (!nonlocal_goto)
1829           gcc_assert (e->flags & EDGE_EH);
1830
1831         if (!can_throw)
1832           gcc_assert (!(e->flags & EDGE_EH));
1833
1834         for (si = gsi_start_phis (e->dest); !gsi_end_p (si); gsi_next (&si))
1835           {
1836             edge re;
1837
1838             phi = gsi_stmt (si);
1839
1840             /* There shouldn't be any PHI nodes in the ENTRY_BLOCK.  */
1841             gcc_assert (!e->dest->aux);
1842
1843             gcc_assert ((e->flags & EDGE_EH)
1844                         || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (PHI_RESULT (phi)));
1845
1846             if (!is_gimple_reg (PHI_RESULT (phi)))
1847               {
1848                 mark_sym_for_renaming (SSA_NAME_VAR (PHI_RESULT (phi)));
1849                 continue;
1850               }
1851
1852             re = find_edge (ret_bb, e->dest);
1853             gcc_assert (re);
1854             gcc_assert ((re->flags & (EDGE_EH | EDGE_ABNORMAL))
1855                         == (e->flags & (EDGE_EH | EDGE_ABNORMAL)));
1856
1857             SET_USE (PHI_ARG_DEF_PTR_FROM_EDGE (phi, e),
1858                      USE_FROM_PTR (PHI_ARG_DEF_PTR_FROM_EDGE (phi, re)));
1859           }
1860       }
1861 }
1862
1863
1864 /* Copy edges from BB into its copy constructed earlier, scale profile
1865    accordingly.  Edges will be taken care of later.  Assume aux
1866    pointers to point to the copies of each BB.  Return true if any
1867    debug stmts are left after a statement that must end the basic block.  */
1868
1869 static bool
1870 copy_edges_for_bb (basic_block bb, gcov_type count_scale, basic_block ret_bb)
1871 {
1872   basic_block new_bb = (basic_block) bb->aux;
1873   edge_iterator ei;
1874   edge old_edge;
1875   gimple_stmt_iterator si;
1876   int flags;
1877   bool need_debug_cleanup = false;
1878
1879   /* Use the indices from the original blocks to create edges for the
1880      new ones.  */
1881   FOR_EACH_EDGE (old_edge, ei, bb->succs)
1882     if (!(old_edge->flags & EDGE_EH))
1883       {
1884         edge new_edge;
1885
1886         flags = old_edge->flags;
1887
1888         /* Return edges do get a FALLTHRU flag when the get inlined.  */
1889         if (old_edge->dest->index == EXIT_BLOCK && !old_edge->flags
1890             && old_edge->dest->aux != EXIT_BLOCK_PTR)
1891           flags |= EDGE_FALLTHRU;
1892         new_edge = make_edge (new_bb, (basic_block) old_edge->dest->aux, flags);
1893         new_edge->count = old_edge->count * count_scale / REG_BR_PROB_BASE;
1894         new_edge->probability = old_edge->probability;
1895       }
1896
1897   if (bb->index == ENTRY_BLOCK || bb->index == EXIT_BLOCK)
1898     return false;
1899
1900   for (si = gsi_start_bb (new_bb); !gsi_end_p (si);)
1901     {
1902       gimple copy_stmt;
1903       bool can_throw, nonlocal_goto;
1904
1905       copy_stmt = gsi_stmt (si);
1906       if (!is_gimple_debug (copy_stmt))
1907         {
1908           update_stmt (copy_stmt);
1909           if (gimple_in_ssa_p (cfun))
1910             mark_symbols_for_renaming (copy_stmt);
1911         }
1912
1913       /* Do this before the possible split_block.  */
1914       gsi_next (&si);
1915
1916       /* If this tree could throw an exception, there are two
1917          cases where we need to add abnormal edge(s): the
1918          tree wasn't in a region and there is a "current
1919          region" in the caller; or the original tree had
1920          EH edges.  In both cases split the block after the tree,
1921          and add abnormal edge(s) as needed; we need both
1922          those from the callee and the caller.
1923          We check whether the copy can throw, because the const
1924          propagation can change an INDIRECT_REF which throws
1925          into a COMPONENT_REF which doesn't.  If the copy
1926          can throw, the original could also throw.  */
1927       can_throw = stmt_can_throw_internal (copy_stmt);
1928       nonlocal_goto = stmt_can_make_abnormal_goto (copy_stmt);
1929
1930       if (can_throw || nonlocal_goto)
1931         {
1932           if (!gsi_end_p (si))
1933             {
1934               while (!gsi_end_p (si) && is_gimple_debug (gsi_stmt (si)))
1935                 gsi_next (&si);
1936               if (gsi_end_p (si))
1937                 need_debug_cleanup = true;
1938             }
1939           if (!gsi_end_p (si))
1940             /* Note that bb's predecessor edges aren't necessarily
1941                right at this point; split_block doesn't care.  */
1942             {
1943               edge e = split_block (new_bb, copy_stmt);
1944
1945               new_bb = e->dest;
1946               new_bb->aux = e->src->aux;
1947               si = gsi_start_bb (new_bb);
1948             }
1949         }
1950
1951       if (gimple_code (copy_stmt) == GIMPLE_EH_DISPATCH)
1952         make_eh_dispatch_edges (copy_stmt);
1953       else if (can_throw)
1954         make_eh_edges (copy_stmt);
1955
1956       if (nonlocal_goto)
1957         make_abnormal_goto_edges (gimple_bb (copy_stmt), true);
1958
1959       if ((can_throw || nonlocal_goto)
1960           && gimple_in_ssa_p (cfun))
1961         update_ssa_across_abnormal_edges (gimple_bb (copy_stmt), ret_bb,
1962                                           can_throw, nonlocal_goto);
1963     }
1964   return need_debug_cleanup;
1965 }
1966
1967 /* Copy the PHIs.  All blocks and edges are copied, some blocks
1968    was possibly split and new outgoing EH edges inserted.
1969    BB points to the block of original function and AUX pointers links
1970    the original and newly copied blocks.  */
1971
1972 static void
1973 copy_phis_for_bb (basic_block bb, copy_body_data *id)
1974 {
1975   basic_block const new_bb = (basic_block) bb->aux;
1976   edge_iterator ei;
1977   gimple phi;
1978   gimple_stmt_iterator si;
1979   edge new_edge;
1980   bool inserted = false;
1981
1982   for (si = gsi_start (phi_nodes (bb)); !gsi_end_p (si); gsi_next (&si))
1983     {
1984       tree res, new_res;
1985       gimple new_phi;
1986
1987       phi = gsi_stmt (si);
1988       res = PHI_RESULT (phi);
1989       new_res = res;
1990       if (is_gimple_reg (res))
1991         {
1992           walk_tree (&new_res, copy_tree_body_r, id, NULL);
1993           SSA_NAME_DEF_STMT (new_res)
1994             = new_phi = create_phi_node (new_res, new_bb);
1995           FOR_EACH_EDGE (new_edge, ei, new_bb->preds)
1996             {
1997               edge old_edge = find_edge ((basic_block) new_edge->src->aux, bb);
1998               tree arg;
1999               tree new_arg;
2000               tree block = id->block;
2001               edge_iterator ei2;
2002
2003               /* When doing partial cloning, we allow PHIs on the entry block
2004                  as long as all the arguments are the same.  Find any input
2005                  edge to see argument to copy.  */
2006               if (!old_edge)
2007                 FOR_EACH_EDGE (old_edge, ei2, bb->preds)
2008                   if (!old_edge->src->aux)
2009                     break;
2010
2011               arg = PHI_ARG_DEF_FROM_EDGE (phi, old_edge);
2012               new_arg = arg;
2013               id->block = NULL_TREE;
2014               walk_tree (&new_arg, copy_tree_body_r, id, NULL);
2015               id->block = block;
2016               gcc_assert (new_arg);
2017               /* With return slot optimization we can end up with
2018                  non-gimple (foo *)&this->m, fix that here.  */
2019               if (TREE_CODE (new_arg) != SSA_NAME
2020                   && TREE_CODE (new_arg) != FUNCTION_DECL
2021                   && !is_gimple_val (new_arg))
2022                 {
2023                   gimple_seq stmts = NULL;
2024                   new_arg = force_gimple_operand (new_arg, &stmts, true, NULL);
2025                   gsi_insert_seq_on_edge (new_edge, stmts);
2026                   inserted = true;
2027                 }
2028               add_phi_arg (new_phi, new_arg, new_edge,
2029                            gimple_phi_arg_location_from_edge (phi, old_edge));
2030             }
2031         }
2032     }
2033
2034   /* Commit the delayed edge insertions.  */
2035   if (inserted)
2036     FOR_EACH_EDGE (new_edge, ei, new_bb->preds)
2037       gsi_commit_one_edge_insert (new_edge, NULL);
2038 }
2039
2040
2041 /* Wrapper for remap_decl so it can be used as a callback.  */
2042
2043 static tree
2044 remap_decl_1 (tree decl, void *data)
2045 {
2046   return remap_decl (decl, (copy_body_data *) data);
2047 }
2048
2049 /* Build struct function and associated datastructures for the new clone
2050    NEW_FNDECL to be build.  CALLEE_FNDECL is the original */
2051
2052 static void
2053 initialize_cfun (tree new_fndecl, tree callee_fndecl, gcov_type count)
2054 {
2055   struct function *src_cfun = DECL_STRUCT_FUNCTION (callee_fndecl);
2056   gcov_type count_scale;
2057
2058   if (ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->count)
2059     count_scale = (REG_BR_PROB_BASE * count
2060                    / ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->count);
2061   else
2062     count_scale = REG_BR_PROB_BASE;
2063
2064   /* Register specific tree functions.  */
2065   gimple_register_cfg_hooks ();
2066
2067   /* Get clean struct function.  */
2068   push_struct_function (new_fndecl);
2069
2070   /* We will rebuild these, so just sanity check that they are empty.  */
2071   gcc_assert (VALUE_HISTOGRAMS (cfun) == NULL);
2072   gcc_assert (cfun->local_decls == NULL);
2073   gcc_assert (cfun->cfg == NULL);
2074   gcc_assert (cfun->decl == new_fndecl);
2075
2076   /* Copy items we preserve during cloning.  */
2077   cfun->static_chain_decl = src_cfun->static_chain_decl;
2078   cfun->nonlocal_goto_save_area = src_cfun->nonlocal_goto_save_area;
2079   cfun->function_end_locus = src_cfun->function_end_locus;
2080   cfun->curr_properties = src_cfun->curr_properties;
2081   cfun->last_verified = src_cfun->last_verified;
2082   cfun->va_list_gpr_size = src_cfun->va_list_gpr_size;
2083   cfun->va_list_fpr_size = src_cfun->va_list_fpr_size;
2084   cfun->has_nonlocal_label = src_cfun->has_nonlocal_label;
2085   cfun->stdarg = src_cfun->stdarg;
2086   cfun->dont_save_pending_sizes_p = src_cfun->dont_save_pending_sizes_p;
2087   cfun->after_inlining = src_cfun->after_inlining;
2088   cfun->can_throw_non_call_exceptions
2089     = src_cfun->can_throw_non_call_exceptions;
2090   cfun->returns_struct = src_cfun->returns_struct;
2091   cfun->returns_pcc_struct = src_cfun->returns_pcc_struct;
2092   cfun->after_tree_profile = src_cfun->after_tree_profile;
2093
2094   init_empty_tree_cfg ();
2095
2096   profile_status_for_function (cfun) = profile_status_for_function (src_cfun);
2097   ENTRY_BLOCK_PTR->count =
2098     (ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->count * count_scale /
2099      REG_BR_PROB_BASE);
2100   ENTRY_BLOCK_PTR->frequency
2101     = ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->frequency;
2102   EXIT_BLOCK_PTR->count =
2103     (EXIT_BLOCK_PTR_FOR_FUNCTION (src_cfun)->count * count_scale /
2104      REG_BR_PROB_BASE);
2105   EXIT_BLOCK_PTR->frequency =
2106     EXIT_BLOCK_PTR_FOR_FUNCTION (src_cfun)->frequency;
2107   if (src_cfun->eh)
2108     init_eh_for_function ();
2109
2110   if (src_cfun->gimple_df)
2111     {
2112       init_tree_ssa (cfun);
2113       cfun->gimple_df->in_ssa_p = true;
2114       init_ssa_operands ();
2115     }
2116   pop_cfun ();
2117 }
2118
2119 /* Helper function for copy_cfg_body.  Move debug stmts from the end
2120    of NEW_BB to the beginning of successor basic blocks when needed.  If the
2121    successor has multiple predecessors, reset them, otherwise keep
2122    their value.  */
2123
2124 static void
2125 maybe_move_debug_stmts_to_successors (copy_body_data *id, basic_block new_bb)
2126 {
2127   edge e;
2128   edge_iterator ei;
2129   gimple_stmt_iterator si = gsi_last_nondebug_bb (new_bb);
2130
2131   if (gsi_end_p (si)
2132       || gsi_one_before_end_p (si)
2133       || !(stmt_can_throw_internal (gsi_stmt (si))
2134            || stmt_can_make_abnormal_goto (gsi_stmt (si))))
2135     return;
2136
2137   FOR_EACH_EDGE (e, ei, new_bb->succs)
2138     {
2139       gimple_stmt_iterator ssi = gsi_last_bb (new_bb);
2140       gimple_stmt_iterator dsi = gsi_after_labels (e->dest);
2141       while (is_gimple_debug (gsi_stmt (ssi)))
2142         {
2143           gimple stmt = gsi_stmt (ssi), new_stmt;
2144           tree var;
2145           tree value;
2146
2147           /* For the last edge move the debug stmts instead of copying
2148              them.  */
2149           if (ei_one_before_end_p (ei))
2150             {
2151               si = ssi;
2152               gsi_prev (&ssi);
2153               if (!single_pred_p (e->dest))
2154                 gimple_debug_bind_reset_value (stmt);
2155               gsi_remove (&si, false);
2156               gsi_insert_before (&dsi, stmt, GSI_SAME_STMT);
2157               continue;
2158             }
2159
2160           var = gimple_debug_bind_get_var (stmt);
2161           if (single_pred_p (e->dest))
2162             {
2163               value = gimple_debug_bind_get_value (stmt);
2164               value = unshare_expr (value);
2165             }
2166           else
2167             value = NULL_TREE;
2168           new_stmt = gimple_build_debug_bind (var, value, stmt);
2169           gsi_insert_before (&dsi, new_stmt, GSI_SAME_STMT);
2170           VEC_safe_push (gimple, heap, id->debug_stmts, new_stmt);
2171           gsi_prev (&ssi);
2172         }
2173     }
2174 }
2175
2176 /* Make a copy of the body of FN so that it can be inserted inline in
2177    another function.  Walks FN via CFG, returns new fndecl.  */
2178
2179 static tree
2180 copy_cfg_body (copy_body_data * id, gcov_type count, int frequency_scale,
2181                basic_block entry_block_map, basic_block exit_block_map,
2182                bitmap blocks_to_copy, basic_block new_entry)
2183 {
2184   tree callee_fndecl = id->src_fn;
2185   /* Original cfun for the callee, doesn't change.  */
2186   struct function *src_cfun = DECL_STRUCT_FUNCTION (callee_fndecl);
2187   struct function *cfun_to_copy;
2188   basic_block bb;
2189   tree new_fndecl = NULL;
2190   bool need_debug_cleanup = false;
2191   gcov_type count_scale;
2192   int last;
2193   int incoming_frequency = 0;
2194   gcov_type incoming_count = 0;
2195
2196   if (ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->count)
2197     count_scale = (REG_BR_PROB_BASE * count
2198                    / ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->count);
2199   else
2200     count_scale = REG_BR_PROB_BASE;
2201
2202   /* Register specific tree functions.  */
2203   gimple_register_cfg_hooks ();
2204
2205   /* If we are inlining just region of the function, make sure to connect new entry
2206      to ENTRY_BLOCK_PTR.  Since new entry can be part of loop, we must compute
2207      frequency and probability of ENTRY_BLOCK_PTR based on the frequencies and
2208      probabilities of edges incoming from nonduplicated region.  */
2209   if (new_entry)
2210     {
2211       edge e;
2212       edge_iterator ei;
2213
2214       FOR_EACH_EDGE (e, ei, new_entry->preds)
2215         if (!e->src->aux)
2216           {
2217             incoming_frequency += EDGE_FREQUENCY (e);
2218             incoming_count += e->count;
2219           }
2220       incoming_count = incoming_count * count_scale / REG_BR_PROB_BASE;
2221       incoming_frequency
2222         = incoming_frequency * frequency_scale / REG_BR_PROB_BASE;
2223       ENTRY_BLOCK_PTR->count = incoming_count;
2224       ENTRY_BLOCK_PTR->frequency = incoming_frequency;
2225     }
2226
2227   /* Must have a CFG here at this point.  */
2228   gcc_assert (ENTRY_BLOCK_PTR_FOR_FUNCTION
2229               (DECL_STRUCT_FUNCTION (callee_fndecl)));
2230
2231   cfun_to_copy = id->src_cfun = DECL_STRUCT_FUNCTION (callee_fndecl);
2232
2233   ENTRY_BLOCK_PTR_FOR_FUNCTION (cfun_to_copy)->aux = entry_block_map;
2234   EXIT_BLOCK_PTR_FOR_FUNCTION (cfun_to_copy)->aux = exit_block_map;
2235   entry_block_map->aux = ENTRY_BLOCK_PTR_FOR_FUNCTION (cfun_to_copy);
2236   exit_block_map->aux = EXIT_BLOCK_PTR_FOR_FUNCTION (cfun_to_copy);
2237
2238   /* Duplicate any exception-handling regions.  */
2239   if (cfun->eh)
2240     id->eh_map = duplicate_eh_regions (cfun_to_copy, NULL, id->eh_lp_nr,
2241                                        remap_decl_1, id);
2242
2243   /* Use aux pointers to map the original blocks to copy.  */
2244   FOR_EACH_BB_FN (bb, cfun_to_copy)
2245     if (!blocks_to_copy || bitmap_bit_p (blocks_to_copy, bb->index))
2246       {
2247         basic_block new_bb = copy_bb (id, bb, frequency_scale, count_scale);
2248         bb->aux = new_bb;
2249         new_bb->aux = bb;
2250       }
2251
2252   last = last_basic_block;
2253
2254   /* Now that we've duplicated the blocks, duplicate their edges.  */
2255   FOR_ALL_BB_FN (bb, cfun_to_copy)
2256     if (!blocks_to_copy
2257         || (bb->index > 0 && bitmap_bit_p (blocks_to_copy, bb->index)))
2258       need_debug_cleanup |= copy_edges_for_bb (bb, count_scale, exit_block_map);
2259
2260   if (new_entry)
2261     {
2262       edge e = make_edge (entry_block_map, (basic_block)new_entry->aux, EDGE_FALLTHRU);
2263       e->probability = REG_BR_PROB_BASE;
2264       e->count = incoming_count;
2265     }
2266
2267   if (gimple_in_ssa_p (cfun))
2268     FOR_ALL_BB_FN (bb, cfun_to_copy)
2269       if (!blocks_to_copy
2270           || (bb->index > 0 && bitmap_bit_p (blocks_to_copy, bb->index)))
2271         copy_phis_for_bb (bb, id);
2272
2273   FOR_ALL_BB_FN (bb, cfun_to_copy)
2274     if (bb->aux)
2275       {
2276         if (need_debug_cleanup
2277             && bb->index != ENTRY_BLOCK
2278             && bb->index != EXIT_BLOCK)
2279           maybe_move_debug_stmts_to_successors (id, (basic_block) bb->aux);
2280         ((basic_block)bb->aux)->aux = NULL;
2281         bb->aux = NULL;
2282       }
2283
2284   /* Zero out AUX fields of newly created block during EH edge
2285      insertion. */
2286   for (; last < last_basic_block; last++)
2287     {
2288       if (need_debug_cleanup)
2289         maybe_move_debug_stmts_to_successors (id, BASIC_BLOCK (last));
2290       BASIC_BLOCK (last)->aux = NULL;
2291     }
2292   entry_block_map->aux = NULL;
2293   exit_block_map->aux = NULL;
2294
2295   if (id->eh_map)
2296     {
2297       pointer_map_destroy (id->eh_map);
2298       id->eh_map = NULL;
2299     }
2300
2301   return new_fndecl;
2302 }
2303
2304 /* Copy the debug STMT using ID.  We deal with these statements in a
2305    special way: if any variable in their VALUE expression wasn't
2306    remapped yet, we won't remap it, because that would get decl uids
2307    out of sync, causing codegen differences between -g and -g0.  If
2308    this arises, we drop the VALUE expression altogether.  */
2309
2310 static void
2311 copy_debug_stmt (gimple stmt, copy_body_data *id)
2312 {
2313   tree t, *n;
2314   struct walk_stmt_info wi;
2315
2316   t = id->block;
2317   if (gimple_block (stmt))
2318     {
2319       tree *n;
2320       n = (tree *) pointer_map_contains (id->decl_map, gimple_block (stmt));
2321       if (n)
2322         t = *n;
2323     }
2324   gimple_set_block (stmt, t);
2325
2326   /* Remap all the operands in COPY.  */
2327   memset (&wi, 0, sizeof (wi));
2328   wi.info = id;
2329
2330   processing_debug_stmt = 1;
2331
2332   t = gimple_debug_bind_get_var (stmt);
2333
2334   if (TREE_CODE (t) == PARM_DECL && id->debug_map
2335       && (n = (tree *) pointer_map_contains (id->debug_map, t)))
2336     {
2337       gcc_assert (TREE_CODE (*n) == VAR_DECL);
2338       t = *n;
2339     }
2340   else if (TREE_CODE (t) == VAR_DECL
2341            && !TREE_STATIC (t)
2342            && gimple_in_ssa_p (cfun)
2343            && !pointer_map_contains (id->decl_map, t)
2344            && !var_ann (t))
2345     /* T is a non-localized variable.  */;
2346   else
2347     walk_tree (&t, remap_gimple_op_r, &wi, NULL);
2348
2349   gimple_debug_bind_set_var (stmt, t);
2350
2351   if (gimple_debug_bind_has_value_p (stmt))
2352     walk_tree (gimple_debug_bind_get_value_ptr (stmt),
2353                remap_gimple_op_r, &wi, NULL);
2354
2355   /* Punt if any decl couldn't be remapped.  */
2356   if (processing_debug_stmt < 0)
2357     gimple_debug_bind_reset_value (stmt);
2358
2359   processing_debug_stmt = 0;
2360
2361   update_stmt (stmt);
2362   if (gimple_in_ssa_p (cfun))
2363     mark_symbols_for_renaming (stmt);
2364 }
2365
2366 /* Process deferred debug stmts.  In order to give values better odds
2367    of being successfully remapped, we delay the processing of debug
2368    stmts until all other stmts that might require remapping are
2369    processed.  */
2370
2371 static void
2372 copy_debug_stmts (copy_body_data *id)
2373 {
2374   size_t i;
2375   gimple stmt;
2376
2377   if (!id->debug_stmts)
2378     return;
2379
2380   FOR_EACH_VEC_ELT (gimple, id->debug_stmts, i, stmt)
2381     copy_debug_stmt (stmt, id);
2382
2383   VEC_free (gimple, heap, id->debug_stmts);
2384 }
2385
2386 /* Make a copy of the body of SRC_FN so that it can be inserted inline in
2387    another function.  */
2388
2389 static tree
2390 copy_tree_body (copy_body_data *id)
2391 {
2392   tree fndecl = id->src_fn;
2393   tree body = DECL_SAVED_TREE (fndecl);
2394
2395   walk_tree (&body, copy_tree_body_r, id, NULL);
2396
2397   return body;
2398 }
2399
2400 /* Make a copy of the body of FN so that it can be inserted inline in
2401    another function.  */
2402
2403 static tree
2404 copy_body (copy_body_data *id, gcov_type count, int frequency_scale,
2405            basic_block entry_block_map, basic_block exit_block_map,
2406            bitmap blocks_to_copy, basic_block new_entry)
2407 {
2408   tree fndecl = id->src_fn;
2409   tree body;
2410
2411   /* If this body has a CFG, walk CFG and copy.  */
2412   gcc_assert (ENTRY_BLOCK_PTR_FOR_FUNCTION (DECL_STRUCT_FUNCTION (fndecl)));
2413   body = copy_cfg_body (id, count, frequency_scale, entry_block_map, exit_block_map,
2414                         blocks_to_copy, new_entry);
2415   copy_debug_stmts (id);
2416
2417   return body;
2418 }
2419
2420 /* Return true if VALUE is an ADDR_EXPR of an automatic variable
2421    defined in function FN, or of a data member thereof.  */
2422
2423 static bool
2424 self_inlining_addr_expr (tree value, tree fn)
2425 {
2426   tree var;
2427
2428   if (TREE_CODE (value) != ADDR_EXPR)
2429     return false;
2430
2431   var = get_base_address (TREE_OPERAND (value, 0));
2432
2433   return var && auto_var_in_fn_p (var, fn);
2434 }
2435
2436 /* Append to BB a debug annotation that binds VAR to VALUE, inheriting
2437    lexical block and line number information from base_stmt, if given,
2438    or from the last stmt of the block otherwise.  */
2439
2440 static gimple
2441 insert_init_debug_bind (copy_body_data *id,
2442                         basic_block bb, tree var, tree value,
2443                         gimple base_stmt)
2444 {
2445   gimple note;
2446   gimple_stmt_iterator gsi;
2447   tree tracked_var;
2448
2449   if (!gimple_in_ssa_p (id->src_cfun))
2450     return NULL;
2451
2452   if (!MAY_HAVE_DEBUG_STMTS)
2453     return NULL;
2454
2455   tracked_var = target_for_debug_bind (var);
2456   if (!tracked_var)
2457     return NULL;
2458
2459   if (bb)
2460     {
2461       gsi = gsi_last_bb (bb);
2462       if (!base_stmt && !gsi_end_p (gsi))
2463         base_stmt = gsi_stmt (gsi);
2464     }
2465
2466   note = gimple_build_debug_bind (tracked_var, value, base_stmt);
2467
2468   if (bb)
2469     {
2470       if (!gsi_end_p (gsi))
2471         gsi_insert_after (&gsi, note, GSI_SAME_STMT);
2472       else
2473         gsi_insert_before (&gsi, note, GSI_SAME_STMT);
2474     }
2475
2476   return note;
2477 }
2478
2479 static void
2480 insert_init_stmt (copy_body_data *id, basic_block bb, gimple init_stmt)
2481 {
2482   /* If VAR represents a zero-sized variable, it's possible that the
2483      assignment statement may result in no gimple statements.  */
2484   if (init_stmt)
2485     {
2486       gimple_stmt_iterator si = gsi_last_bb (bb);
2487
2488       /* We can end up with init statements that store to a non-register
2489          from a rhs with a conversion.  Handle that here by forcing the
2490          rhs into a temporary.  gimple_regimplify_operands is not
2491          prepared to do this for us.  */
2492       if (!is_gimple_debug (init_stmt)
2493           && !is_gimple_reg (gimple_assign_lhs (init_stmt))
2494           && is_gimple_reg_type (TREE_TYPE (gimple_assign_lhs (init_stmt)))
2495           && gimple_assign_rhs_class (init_stmt) == GIMPLE_UNARY_RHS)
2496         {
2497           tree rhs = build1 (gimple_assign_rhs_code (init_stmt),
2498                              gimple_expr_type (init_stmt),
2499                              gimple_assign_rhs1 (init_stmt));
2500           rhs = force_gimple_operand_gsi (&si, rhs, true, NULL_TREE, false,
2501                                           GSI_NEW_STMT);
2502           gimple_assign_set_rhs_code (init_stmt, TREE_CODE (rhs));
2503           gimple_assign_set_rhs1 (init_stmt, rhs);
2504         }
2505       gsi_insert_after (&si, init_stmt, GSI_NEW_STMT);
2506       gimple_regimplify_operands (init_stmt, &si);
2507       mark_symbols_for_renaming (init_stmt);
2508
2509       if (!is_gimple_debug (init_stmt) && MAY_HAVE_DEBUG_STMTS)
2510         {
2511           tree var, def = gimple_assign_lhs (init_stmt);
2512
2513           if (TREE_CODE (def) == SSA_NAME)
2514             var = SSA_NAME_VAR (def);
2515           else
2516             var = def;
2517
2518           insert_init_debug_bind (id, bb, var, def, init_stmt);
2519         }
2520     }
2521 }
2522
2523 /* Initialize parameter P with VALUE.  If needed, produce init statement
2524    at the end of BB.  When BB is NULL, we return init statement to be
2525    output later.  */
2526 static gimple
2527 setup_one_parameter (copy_body_data *id, tree p, tree value, tree fn,
2528                      basic_block bb, tree *vars)
2529 {
2530   gimple init_stmt = NULL;
2531   tree var;
2532   tree rhs = value;
2533   tree def = (gimple_in_ssa_p (cfun)
2534               ? gimple_default_def (id->src_cfun, p) : NULL);
2535
2536   if (value
2537       && value != error_mark_node
2538       && !useless_type_conversion_p (TREE_TYPE (p), TREE_TYPE (value)))
2539     {
2540       if (fold_convertible_p (TREE_TYPE (p), value))
2541         rhs = fold_build1 (NOP_EXPR, TREE_TYPE (p), value);
2542       else
2543         /* ???  For valid (GIMPLE) programs we should not end up here.
2544            Still if something has gone wrong and we end up with truly
2545            mismatched types here, fall back to using a VIEW_CONVERT_EXPR
2546            to not leak invalid GIMPLE to the following passes.  */
2547         rhs = fold_build1 (VIEW_CONVERT_EXPR, TREE_TYPE (p), value);
2548     }
2549
2550   /* Make an equivalent VAR_DECL.  Note that we must NOT remap the type
2551      here since the type of this decl must be visible to the calling
2552      function.  */
2553   var = copy_decl_to_var (p, id);
2554
2555   /* We're actually using the newly-created var.  */
2556   if (gimple_in_ssa_p (cfun) && TREE_CODE (var) == VAR_DECL)
2557     add_referenced_var (var);
2558
2559   /* Declare this new variable.  */
2560   DECL_CHAIN (var) = *vars;
2561   *vars = var;
2562
2563   /* Make gimplifier happy about this variable.  */
2564   DECL_SEEN_IN_BIND_EXPR_P (var) = 1;
2565
2566   /* If the parameter is never assigned to, has no SSA_NAMEs created,
2567      we would not need to create a new variable here at all, if it
2568      weren't for debug info.  Still, we can just use the argument
2569      value.  */
2570   if (TREE_READONLY (p)
2571       && !TREE_ADDRESSABLE (p)
2572       && value && !TREE_SIDE_EFFECTS (value)
2573       && !def)
2574     {
2575       /* We may produce non-gimple trees by adding NOPs or introduce
2576          invalid sharing when operand is not really constant.
2577          It is not big deal to prohibit constant propagation here as
2578          we will constant propagate in DOM1 pass anyway.  */
2579       if (is_gimple_min_invariant (value)
2580           && useless_type_conversion_p (TREE_TYPE (p),
2581                                                  TREE_TYPE (value))
2582           /* We have to be very careful about ADDR_EXPR.  Make sure
2583              the base variable isn't a local variable of the inlined
2584              function, e.g., when doing recursive inlining, direct or
2585              mutually-recursive or whatever, which is why we don't
2586              just test whether fn == current_function_decl.  */
2587           && ! self_inlining_addr_expr (value, fn))
2588         {
2589           insert_decl_map (id, p, value);
2590           insert_debug_decl_map (id, p, var);
2591           return insert_init_debug_bind (id, bb, var, value, NULL);
2592         }
2593     }
2594
2595   /* Register the VAR_DECL as the equivalent for the PARM_DECL;
2596      that way, when the PARM_DECL is encountered, it will be
2597      automatically replaced by the VAR_DECL.  */
2598   insert_decl_map (id, p, var);
2599
2600   /* Even if P was TREE_READONLY, the new VAR should not be.
2601      In the original code, we would have constructed a
2602      temporary, and then the function body would have never
2603      changed the value of P.  However, now, we will be
2604      constructing VAR directly.  The constructor body may
2605      change its value multiple times as it is being
2606      constructed.  Therefore, it must not be TREE_READONLY;
2607      the back-end assumes that TREE_READONLY variable is
2608      assigned to only once.  */
2609   if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (p)))
2610     TREE_READONLY (var) = 0;
2611
2612   /* If there is no setup required and we are in SSA, take the easy route
2613      replacing all SSA names representing the function parameter by the
2614      SSA name passed to function.
2615
2616      We need to construct map for the variable anyway as it might be used
2617      in different SSA names when parameter is set in function.
2618
2619      Do replacement at -O0 for const arguments replaced by constant.
2620      This is important for builtin_constant_p and other construct requiring
2621      constant argument to be visible in inlined function body.  */
2622   if (gimple_in_ssa_p (cfun) && rhs && def && is_gimple_reg (p)
2623       && (optimize
2624           || (TREE_READONLY (p)
2625               && is_gimple_min_invariant (rhs)))
2626       && (TREE_CODE (rhs) == SSA_NAME
2627           || is_gimple_min_invariant (rhs))
2628       && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (def))
2629     {
2630       insert_decl_map (id, def, rhs);
2631       return insert_init_debug_bind (id, bb, var, rhs, NULL);
2632     }
2633
2634   /* If the value of argument is never used, don't care about initializing
2635      it.  */
2636   if (optimize && gimple_in_ssa_p (cfun) && !def && is_gimple_reg (p))
2637     {
2638       gcc_assert (!value || !TREE_SIDE_EFFECTS (value));
2639       return insert_init_debug_bind (id, bb, var, rhs, NULL);
2640     }
2641
2642   /* Initialize this VAR_DECL from the equivalent argument.  Convert
2643      the argument to the proper type in case it was promoted.  */
2644   if (value)
2645     {
2646       if (rhs == error_mark_node)
2647         {
2648           insert_decl_map (id, p, var);
2649           return insert_init_debug_bind (id, bb, var, rhs, NULL);
2650         }
2651
2652       STRIP_USELESS_TYPE_CONVERSION (rhs);
2653
2654       /* We want to use MODIFY_EXPR, not INIT_EXPR here so that we
2655          keep our trees in gimple form.  */
2656       if (def && gimple_in_ssa_p (cfun) && is_gimple_reg (p))
2657         {
2658           def = remap_ssa_name (def, id);
2659           init_stmt = gimple_build_assign (def, rhs);
2660           SSA_NAME_IS_DEFAULT_DEF (def) = 0;
2661           set_default_def (var, NULL);
2662         }
2663       else
2664         init_stmt = gimple_build_assign (var, rhs);
2665
2666       if (bb && init_stmt)
2667         insert_init_stmt (id, bb, init_stmt);
2668     }
2669   return init_stmt;
2670 }
2671
2672 /* Generate code to initialize the parameters of the function at the
2673    top of the stack in ID from the GIMPLE_CALL STMT.  */
2674
2675 static void
2676 initialize_inlined_parameters (copy_body_data *id, gimple stmt,
2677                                tree fn, basic_block bb)
2678 {
2679   tree parms;
2680   size_t i;
2681   tree p;
2682   tree vars = NULL_TREE;
2683   tree static_chain = gimple_call_chain (stmt);
2684
2685   /* Figure out what the parameters are.  */
2686   parms = DECL_ARGUMENTS (fn);
2687
2688   /* Loop through the parameter declarations, replacing each with an
2689      equivalent VAR_DECL, appropriately initialized.  */
2690   for (p = parms, i = 0; p; p = DECL_CHAIN (p), i++)
2691     {
2692       tree val;
2693       val = i < gimple_call_num_args (stmt) ? gimple_call_arg (stmt, i) : NULL;
2694       setup_one_parameter (id, p, val, fn, bb, &vars);
2695     }
2696   /* After remapping parameters remap their types.  This has to be done
2697      in a second loop over all parameters to appropriately remap
2698      variable sized arrays when the size is specified in a
2699      parameter following the array.  */
2700   for (p = parms, i = 0; p; p = DECL_CHAIN (p), i++)
2701     {
2702       tree *varp = (tree *) pointer_map_contains (id->decl_map, p);
2703       if (varp
2704           && TREE_CODE (*varp) == VAR_DECL)
2705         {
2706           tree def = (gimple_in_ssa_p (cfun) && is_gimple_reg (p)
2707                       ? gimple_default_def (id->src_cfun, p) : NULL);
2708           tree var = *varp;
2709           TREE_TYPE (var) = remap_type (TREE_TYPE (var), id);
2710           /* Also remap the default definition if it was remapped
2711              to the default definition of the parameter replacement
2712              by the parameter setup.  */
2713           if (def)
2714             {
2715               tree *defp = (tree *) pointer_map_contains (id->decl_map, def);
2716               if (defp
2717                   && TREE_CODE (*defp) == SSA_NAME
2718                   && SSA_NAME_VAR (*defp) == var)
2719                 TREE_TYPE (*defp) = TREE_TYPE (var);
2720             }
2721         }
2722     }
2723
2724   /* Initialize the static chain.  */
2725   p = DECL_STRUCT_FUNCTION (fn)->static_chain_decl;
2726   gcc_assert (fn != current_function_decl);
2727   if (p)
2728     {
2729       /* No static chain?  Seems like a bug in tree-nested.c.  */
2730       gcc_assert (static_chain);
2731
2732       setup_one_parameter (id, p, static_chain, fn, bb, &vars);
2733     }
2734
2735   declare_inline_vars (id->block, vars);
2736 }
2737
2738
2739 /* Declare a return variable to replace the RESULT_DECL for the
2740    function we are calling.  An appropriate DECL_STMT is returned.
2741    The USE_STMT is filled to contain a use of the declaration to
2742    indicate the return value of the function.
2743
2744    RETURN_SLOT, if non-null is place where to store the result.  It
2745    is set only for CALL_EXPR_RETURN_SLOT_OPT.  MODIFY_DEST, if non-null,
2746    was the LHS of the MODIFY_EXPR to which this call is the RHS.
2747
2748    The return value is a (possibly null) value that holds the result
2749    as seen by the caller.  */
2750
2751 static tree
2752 declare_return_variable (copy_body_data *id, tree return_slot, tree modify_dest,
2753                          basic_block entry_bb)
2754 {
2755   tree callee = id->src_fn;
2756   tree result = DECL_RESULT (callee);
2757   tree callee_type = TREE_TYPE (result);
2758   tree caller_type;
2759   tree var, use;
2760
2761   /* Handle type-mismatches in the function declaration return type
2762      vs. the call expression.  */
2763   if (modify_dest)
2764     caller_type = TREE_TYPE (modify_dest);
2765   else
2766     caller_type = TREE_TYPE (TREE_TYPE (callee));
2767
2768   /* We don't need to do anything for functions that don't return
2769      anything.  */
2770   if (!result || VOID_TYPE_P (callee_type))
2771     return NULL_TREE;
2772
2773   /* If there was a return slot, then the return value is the
2774      dereferenced address of that object.  */
2775   if (return_slot)
2776     {
2777       /* The front end shouldn't have used both return_slot and
2778          a modify expression.  */
2779       gcc_assert (!modify_dest);
2780       if (DECL_BY_REFERENCE (result))
2781         {
2782           tree return_slot_addr = build_fold_addr_expr (return_slot);
2783           STRIP_USELESS_TYPE_CONVERSION (return_slot_addr);
2784
2785           /* We are going to construct *&return_slot and we can't do that
2786              for variables believed to be not addressable.
2787
2788              FIXME: This check possibly can match, because values returned
2789              via return slot optimization are not believed to have address
2790              taken by alias analysis.  */
2791           gcc_assert (TREE_CODE (return_slot) != SSA_NAME);
2792           var = return_slot_addr;
2793         }
2794       else
2795         {
2796           var = return_slot;
2797           gcc_assert (TREE_CODE (var) != SSA_NAME);
2798           TREE_ADDRESSABLE (var) |= TREE_ADDRESSABLE (result);
2799         }
2800       if ((TREE_CODE (TREE_TYPE (result)) == COMPLEX_TYPE
2801            || TREE_CODE (TREE_TYPE (result)) == VECTOR_TYPE)
2802           && !DECL_GIMPLE_REG_P (result)
2803           && DECL_P (var))
2804         DECL_GIMPLE_REG_P (var) = 0;
2805       use = NULL;
2806       goto done;
2807     }
2808
2809   /* All types requiring non-trivial constructors should have been handled.  */
2810   gcc_assert (!TREE_ADDRESSABLE (callee_type));
2811
2812   /* Attempt to avoid creating a new temporary variable.  */
2813   if (modify_dest
2814       && TREE_CODE (modify_dest) != SSA_NAME)
2815     {
2816       bool use_it = false;
2817
2818       /* We can't use MODIFY_DEST if there's type promotion involved.  */
2819       if (!useless_type_conversion_p (callee_type, caller_type))
2820         use_it = false;
2821
2822       /* ??? If we're assigning to a variable sized type, then we must
2823          reuse the destination variable, because we've no good way to
2824          create variable sized temporaries at this point.  */
2825       else if (TREE_CODE (TYPE_SIZE_UNIT (caller_type)) != INTEGER_CST)
2826         use_it = true;
2827
2828       /* If the callee cannot possibly modify MODIFY_DEST, then we can
2829          reuse it as the result of the call directly.  Don't do this if
2830          it would promote MODIFY_DEST to addressable.  */
2831       else if (TREE_ADDRESSABLE (result))
2832         use_it = false;
2833       else
2834         {
2835           tree base_m = get_base_address (modify_dest);
2836
2837           /* If the base isn't a decl, then it's a pointer, and we don't
2838              know where that's going to go.  */
2839           if (!DECL_P (base_m))
2840             use_it = false;
2841           else if (is_global_var (base_m))
2842             use_it = false;
2843           else if ((TREE_CODE (TREE_TYPE (result)) == COMPLEX_TYPE
2844                     || TREE_CODE (TREE_TYPE (result)) == VECTOR_TYPE)
2845                    && !DECL_GIMPLE_REG_P (result)
2846                    && DECL_GIMPLE_REG_P (base_m))
2847             use_it = false;
2848           else if (!TREE_ADDRESSABLE (base_m))
2849             use_it = true;
2850         }
2851
2852       if (use_it)
2853         {
2854           var = modify_dest;
2855           use = NULL;
2856           goto done;
2857         }
2858     }
2859
2860   gcc_assert (TREE_CODE (TYPE_SIZE_UNIT (callee_type)) == INTEGER_CST);
2861
2862   var = copy_result_decl_to_var (result, id);
2863   if (gimple_in_ssa_p (cfun))
2864     add_referenced_var (var);
2865
2866   DECL_SEEN_IN_BIND_EXPR_P (var) = 1;
2867
2868   /* Do not have the rest of GCC warn about this variable as it should
2869      not be visible to the user.  */
2870   TREE_NO_WARNING (var) = 1;
2871
2872   declare_inline_vars (id->block, var);
2873
2874   /* Build the use expr.  If the return type of the function was
2875      promoted, convert it back to the expected type.  */
2876   use = var;
2877   if (!useless_type_conversion_p (caller_type, TREE_TYPE (var)))
2878     use = fold_convert (caller_type, var);
2879
2880   STRIP_USELESS_TYPE_CONVERSION (use);
2881
2882   if (DECL_BY_REFERENCE (result))
2883     {
2884       TREE_ADDRESSABLE (var) = 1;
2885       var = build_fold_addr_expr (var);
2886     }
2887
2888  done:
2889   /* Register the VAR_DECL as the equivalent for the RESULT_DECL; that
2890      way, when the RESULT_DECL is encountered, it will be
2891      automatically replaced by the VAR_DECL.  
2892
2893      When returning by reference, ensure that RESULT_DECL remaps to
2894      gimple_val.  */
2895   if (DECL_BY_REFERENCE (result)
2896       && !is_gimple_val (var))
2897     {
2898       tree temp = create_tmp_var (TREE_TYPE (result), "retvalptr");
2899       if (gimple_in_ssa_p (id->src_cfun))
2900         add_referenced_var (temp);
2901       insert_decl_map (id, result, temp);
2902       /* When RESULT_DECL is in SSA form, we need to use it's default_def
2903          SSA_NAME.  */
2904       if (gimple_in_ssa_p (id->src_cfun) && gimple_default_def (id->src_cfun, result))
2905         temp = remap_ssa_name (gimple_default_def (id->src_cfun, result), id);
2906       insert_init_stmt (id, entry_bb, gimple_build_assign (temp, var));
2907     }
2908   else
2909     insert_decl_map (id, result, var);
2910
2911   /* Remember this so we can ignore it in remap_decls.  */
2912   id->retvar = var;
2913
2914   return use;
2915 }
2916
2917 /* Callback through walk_tree.  Determine if a DECL_INITIAL makes reference
2918    to a local label.  */
2919
2920 static tree
2921 has_label_address_in_static_1 (tree *nodep, int *walk_subtrees, void *fnp)
2922 {
2923   tree node = *nodep;
2924   tree fn = (tree) fnp;
2925
2926   if (TREE_CODE (node) == LABEL_DECL && DECL_CONTEXT (node) == fn)
2927     return node;
2928
2929   if (TYPE_P (node))
2930     *walk_subtrees = 0;
2931
2932   return NULL_TREE;
2933 }
2934
2935 /* Determine if the function can be copied.  If so return NULL.  If
2936    not return a string describng the reason for failure.  */
2937
2938 static const char *
2939 copy_forbidden (struct function *fun, tree fndecl)
2940 {
2941   const char *reason = fun->cannot_be_copied_reason;
2942   tree decl;
2943   unsigned ix;
2944
2945   /* Only examine the function once.  */
2946   if (fun->cannot_be_copied_set)
2947     return reason;
2948
2949   /* We cannot copy a function that receives a non-local goto
2950      because we cannot remap the destination label used in the
2951      function that is performing the non-local goto.  */
2952   /* ??? Actually, this should be possible, if we work at it.
2953      No doubt there's just a handful of places that simply
2954      assume it doesn't happen and don't substitute properly.  */
2955   if (fun->has_nonlocal_label)
2956     {
2957       reason = G_("function %q+F can never be copied "
2958                   "because it receives a non-local goto");
2959       goto fail;
2960     }
2961
2962   FOR_EACH_LOCAL_DECL (fun, ix, decl)
2963     if (TREE_CODE (decl) == VAR_DECL
2964         && TREE_STATIC (decl)
2965         && !DECL_EXTERNAL (decl)
2966         && DECL_INITIAL (decl)
2967         && walk_tree_without_duplicates (&DECL_INITIAL (decl),
2968                                          has_label_address_in_static_1,
2969                                          fndecl))
2970       {
2971         reason = G_("function %q+F can never be copied because it saves "
2972                     "address of local label in a static variable");
2973         goto fail;
2974       }
2975
2976  fail:
2977   fun->cannot_be_copied_reason = reason;
2978   fun->cannot_be_copied_set = true;
2979   return reason;
2980 }
2981
2982
2983 static const char *inline_forbidden_reason;
2984
2985 /* A callback for walk_gimple_seq to handle statements.  Returns non-null
2986    iff a function can not be inlined.  Also sets the reason why. */
2987
2988 static tree
2989 inline_forbidden_p_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p,
2990                          struct walk_stmt_info *wip)
2991 {
2992   tree fn = (tree) wip->info;
2993   tree t;
2994   gimple stmt = gsi_stmt (*gsi);
2995
2996   switch (gimple_code (stmt))
2997     {
2998     case GIMPLE_CALL:
2999       /* Refuse to inline alloca call unless user explicitly forced so as
3000          this may change program's memory overhead drastically when the
3001          function using alloca is called in loop.  In GCC present in
3002          SPEC2000 inlining into schedule_block cause it to require 2GB of
3003          RAM instead of 256MB.  */
3004       if (gimple_alloca_call_p (stmt)
3005           && !lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)))
3006         {
3007           inline_forbidden_reason
3008             = G_("function %q+F can never be inlined because it uses "
3009                  "alloca (override using the always_inline attribute)");
3010           *handled_ops_p = true;
3011           return fn;
3012         }
3013
3014       t = gimple_call_fndecl (stmt);
3015       if (t == NULL_TREE)
3016         break;
3017
3018       /* We cannot inline functions that call setjmp.  */
3019       if (setjmp_call_p (t))
3020         {
3021           inline_forbidden_reason
3022             = G_("function %q+F can never be inlined because it uses setjmp");
3023           *handled_ops_p = true;
3024           return t;
3025         }
3026
3027       if (DECL_BUILT_IN_CLASS (t) == BUILT_IN_NORMAL)
3028         switch (DECL_FUNCTION_CODE (t))
3029           {
3030             /* We cannot inline functions that take a variable number of
3031                arguments.  */
3032           case BUILT_IN_VA_START:
3033           case BUILT_IN_NEXT_ARG:
3034           case BUILT_IN_VA_END:
3035             inline_forbidden_reason
3036               = G_("function %q+F can never be inlined because it "
3037                    "uses variable argument lists");
3038             *handled_ops_p = true;
3039             return t;
3040
3041           case BUILT_IN_LONGJMP:
3042             /* We can't inline functions that call __builtin_longjmp at
3043                all.  The non-local goto machinery really requires the
3044                destination be in a different function.  If we allow the
3045                function calling __builtin_longjmp to be inlined into the
3046                function calling __builtin_setjmp, Things will Go Awry.  */
3047             inline_forbidden_reason
3048               = G_("function %q+F can never be inlined because "
3049                    "it uses setjmp-longjmp exception handling");
3050             *handled_ops_p = true;
3051             return t;
3052
3053           case BUILT_IN_NONLOCAL_GOTO:
3054             /* Similarly.  */
3055             inline_forbidden_reason
3056               = G_("function %q+F can never be inlined because "
3057                    "it uses non-local goto");
3058             *handled_ops_p = true;
3059             return t;
3060
3061           case BUILT_IN_RETURN:
3062           case BUILT_IN_APPLY_ARGS:
3063             /* If a __builtin_apply_args caller would be inlined,
3064                it would be saving arguments of the function it has
3065                been inlined into.  Similarly __builtin_return would
3066                return from the function the inline has been inlined into.  */
3067             inline_forbidden_reason
3068               = G_("function %q+F can never be inlined because "
3069                    "it uses __builtin_return or __builtin_apply_args");
3070             *handled_ops_p = true;
3071             return t;
3072
3073           default:
3074             break;
3075           }
3076       break;
3077
3078     case GIMPLE_GOTO:
3079       t = gimple_goto_dest (stmt);
3080
3081       /* We will not inline a function which uses computed goto.  The
3082          addresses of its local labels, which may be tucked into
3083          global storage, are of course not constant across
3084          instantiations, which causes unexpected behavior.  */
3085       if (TREE_CODE (t) != LABEL_DECL)
3086         {
3087           inline_forbidden_reason
3088             = G_("function %q+F can never be inlined "
3089                  "because it contains a computed goto");
3090           *handled_ops_p = true;
3091           return t;
3092         }
3093       break;
3094
3095     default:
3096       break;
3097     }
3098
3099   *handled_ops_p = false;
3100   return NULL_TREE;
3101 }
3102
3103 /* Return true if FNDECL is a function that cannot be inlined into
3104    another one.  */
3105
3106 static bool
3107 inline_forbidden_p (tree fndecl)
3108 {
3109   struct function *fun = DECL_STRUCT_FUNCTION (fndecl);
3110   struct walk_stmt_info wi;
3111   struct pointer_set_t *visited_nodes;
3112   basic_block bb;
3113   bool forbidden_p = false;
3114
3115   /* First check for shared reasons not to copy the code.  */
3116   inline_forbidden_reason = copy_forbidden (fun, fndecl);
3117   if (inline_forbidden_reason != NULL)
3118     return true;
3119
3120   /* Next, walk the statements of the function looking for
3121      constraucts we can't handle, or are non-optimal for inlining.  */
3122   visited_nodes = pointer_set_create ();
3123   memset (&wi, 0, sizeof (wi));
3124   wi.info = (void *) fndecl;
3125   wi.pset = visited_nodes;
3126
3127   FOR_EACH_BB_FN (bb, fun)
3128     {
3129       gimple ret;
3130       gimple_seq seq = bb_seq (bb);
3131       ret = walk_gimple_seq (seq, inline_forbidden_p_stmt, NULL, &wi);
3132       forbidden_p = (ret != NULL);
3133       if (forbidden_p)
3134         break;
3135     }
3136
3137   pointer_set_destroy (visited_nodes);
3138   return forbidden_p;
3139 }
3140
3141 /* Return true if CALLEE cannot be inlined into CALLER.  */
3142
3143 static bool
3144 inline_forbidden_into_p (tree caller, tree callee)
3145 {
3146   /* Don't inline if the functions have different EH personalities.  */
3147   if (DECL_FUNCTION_PERSONALITY (caller)
3148       && DECL_FUNCTION_PERSONALITY (callee)
3149       && (DECL_FUNCTION_PERSONALITY (caller)
3150           != DECL_FUNCTION_PERSONALITY (callee)))
3151     return true;
3152
3153   /* Don't inline if the callee can throw non-call exceptions but the
3154      caller cannot.  */
3155   if (DECL_STRUCT_FUNCTION (callee)
3156       && DECL_STRUCT_FUNCTION (callee)->can_throw_non_call_exceptions
3157       && !(DECL_STRUCT_FUNCTION (caller)
3158            && DECL_STRUCT_FUNCTION (caller)->can_throw_non_call_exceptions))
3159     return true;
3160
3161   return false;
3162 }
3163
3164 /* Returns nonzero if FN is a function that does not have any
3165    fundamental inline blocking properties.  */
3166
3167 bool
3168 tree_inlinable_function_p (tree fn)
3169 {
3170   bool inlinable = true;
3171   bool do_warning;
3172   tree always_inline;
3173
3174   /* If we've already decided this function shouldn't be inlined,
3175      there's no need to check again.  */
3176   if (DECL_UNINLINABLE (fn))
3177     return false;
3178
3179   /* We only warn for functions declared `inline' by the user.  */
3180   do_warning = (warn_inline
3181                 && DECL_DECLARED_INLINE_P (fn)
3182                 && !DECL_NO_INLINE_WARNING_P (fn)
3183                 && !DECL_IN_SYSTEM_HEADER (fn));
3184
3185   always_inline = lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn));
3186
3187   if (flag_no_inline
3188       && always_inline == NULL)
3189     {
3190       if (do_warning)
3191         warning (OPT_Winline, "function %q+F can never be inlined because it "
3192                  "is suppressed using -fno-inline", fn);
3193       inlinable = false;
3194     }
3195
3196   else if (!function_attribute_inlinable_p (fn))
3197     {
3198       if (do_warning)
3199         warning (OPT_Winline, "function %q+F can never be inlined because it "
3200                  "uses attributes conflicting with inlining", fn);
3201       inlinable = false;
3202     }
3203
3204   else if (inline_forbidden_p (fn))
3205     {
3206       /* See if we should warn about uninlinable functions.  Previously,
3207          some of these warnings would be issued while trying to expand
3208          the function inline, but that would cause multiple warnings
3209          about functions that would for example call alloca.  But since
3210          this a property of the function, just one warning is enough.
3211          As a bonus we can now give more details about the reason why a
3212          function is not inlinable.  */
3213       if (always_inline)
3214         sorry (inline_forbidden_reason, fn);
3215       else if (do_warning)
3216         warning (OPT_Winline, inline_forbidden_reason, fn);
3217
3218       inlinable = false;
3219     }
3220
3221   /* Squirrel away the result so that we don't have to check again.  */
3222   DECL_UNINLINABLE (fn) = !inlinable;
3223
3224   return inlinable;
3225 }
3226
3227 /* Estimate the cost of a memory move.  Use machine dependent
3228    word size and take possible memcpy call into account.  */
3229
3230 int
3231 estimate_move_cost (tree type)
3232 {
3233   HOST_WIDE_INT size;
3234
3235   gcc_assert (!VOID_TYPE_P (type));
3236
3237   if (TREE_CODE (type) == VECTOR_TYPE)
3238     {
3239       enum machine_mode inner = TYPE_MODE (TREE_TYPE (type));
3240       enum machine_mode simd
3241         = targetm.vectorize.preferred_simd_mode (inner);
3242       int simd_mode_size = GET_MODE_SIZE (simd);
3243       return ((GET_MODE_SIZE (TYPE_MODE (type)) + simd_mode_size - 1)
3244               / simd_mode_size);
3245     }
3246
3247   size = int_size_in_bytes (type);
3248
3249   if (size < 0 || size > MOVE_MAX_PIECES * MOVE_RATIO (!optimize_size))
3250     /* Cost of a memcpy call, 3 arguments and the call.  */
3251     return 4;
3252   else
3253     return ((size + MOVE_MAX_PIECES - 1) / MOVE_MAX_PIECES);
3254 }
3255
3256 /* Returns cost of operation CODE, according to WEIGHTS  */
3257
3258 static int
3259 estimate_operator_cost (enum tree_code code, eni_weights *weights,
3260                         tree op1 ATTRIBUTE_UNUSED, tree op2)
3261 {
3262   switch (code)
3263     {
3264     /* These are "free" conversions, or their presumed cost
3265        is folded into other operations.  */
3266     case RANGE_EXPR:
3267     CASE_CONVERT:
3268     case COMPLEX_EXPR:
3269     case PAREN_EXPR:
3270     case VIEW_CONVERT_EXPR:
3271       return 0;
3272
3273     /* Assign cost of 1 to usual operations.
3274        ??? We may consider mapping RTL costs to this.  */
3275     case COND_EXPR:
3276     case VEC_COND_EXPR:
3277
3278     case PLUS_EXPR:
3279     case POINTER_PLUS_EXPR:
3280     case MINUS_EXPR:
3281     case MULT_EXPR:
3282     case FMA_EXPR:
3283
3284     case ADDR_SPACE_CONVERT_EXPR:
3285     case FIXED_CONVERT_EXPR:
3286     case FIX_TRUNC_EXPR:
3287
3288     case NEGATE_EXPR:
3289     case FLOAT_EXPR:
3290     case MIN_EXPR:
3291     case MAX_EXPR:
3292     case ABS_EXPR:
3293
3294     case LSHIFT_EXPR:
3295     case RSHIFT_EXPR:
3296     case LROTATE_EXPR:
3297     case RROTATE_EXPR:
3298     case VEC_LSHIFT_EXPR:
3299     case VEC_RSHIFT_EXPR:
3300
3301     case BIT_IOR_EXPR:
3302     case BIT_XOR_EXPR:
3303     case BIT_AND_EXPR:
3304     case BIT_NOT_EXPR:
3305
3306     case TRUTH_ANDIF_EXPR:
3307     case TRUTH_ORIF_EXPR:
3308     case TRUTH_AND_EXPR:
3309     case TRUTH_OR_EXPR:
3310     case TRUTH_XOR_EXPR:
3311     case TRUTH_NOT_EXPR:
3312
3313     case LT_EXPR:
3314     case LE_EXPR:
3315     case GT_EXPR:
3316     case GE_EXPR:
3317     case EQ_EXPR:
3318     case NE_EXPR:
3319     case ORDERED_EXPR:
3320     case UNORDERED_EXPR:
3321
3322     case UNLT_EXPR:
3323     case UNLE_EXPR:
3324     case UNGT_EXPR:
3325     case UNGE_EXPR:
3326     case UNEQ_EXPR:
3327     case LTGT_EXPR:
3328
3329     case CONJ_EXPR:
3330
3331     case PREDECREMENT_EXPR:
3332     case PREINCREMENT_EXPR:
3333     case POSTDECREMENT_EXPR:
3334     case POSTINCREMENT_EXPR:
3335
3336     case REALIGN_LOAD_EXPR:
3337
3338     case REDUC_MAX_EXPR:
3339     case REDUC_MIN_EXPR:
3340     case REDUC_PLUS_EXPR:
3341     case WIDEN_SUM_EXPR:
3342     case WIDEN_MULT_EXPR:
3343     case DOT_PROD_EXPR:
3344     case WIDEN_MULT_PLUS_EXPR:
3345     case WIDEN_MULT_MINUS_EXPR:
3346
3347     case VEC_WIDEN_MULT_HI_EXPR:
3348     case VEC_WIDEN_MULT_LO_EXPR:
3349     case VEC_UNPACK_HI_EXPR:
3350     case VEC_UNPACK_LO_EXPR:
3351     case VEC_UNPACK_FLOAT_HI_EXPR:
3352     case VEC_UNPACK_FLOAT_LO_EXPR:
3353     case VEC_PACK_TRUNC_EXPR:
3354     case VEC_PACK_SAT_EXPR:
3355     case VEC_PACK_FIX_TRUNC_EXPR:
3356     case VEC_EXTRACT_EVEN_EXPR:
3357     case VEC_EXTRACT_ODD_EXPR:
3358     case VEC_INTERLEAVE_HIGH_EXPR:
3359     case VEC_INTERLEAVE_LOW_EXPR:
3360
3361       return 1;
3362
3363     /* Few special cases of expensive operations.  This is useful
3364        to avoid inlining on functions having too many of these.  */
3365     case TRUNC_DIV_EXPR:
3366     case CEIL_DIV_EXPR:
3367     case FLOOR_DIV_EXPR:
3368     case ROUND_DIV_EXPR:
3369     case EXACT_DIV_EXPR:
3370     case TRUNC_MOD_EXPR:
3371     case CEIL_MOD_EXPR:
3372     case FLOOR_MOD_EXPR:
3373     case ROUND_MOD_EXPR:
3374     case RDIV_EXPR:
3375       if (TREE_CODE (op2) != INTEGER_CST)
3376         return weights->div_mod_cost;
3377       return 1;
3378
3379     default:
3380       /* We expect a copy assignment with no operator.  */
3381       gcc_assert (get_gimple_rhs_class (code) == GIMPLE_SINGLE_RHS);
3382       return 0;
3383     }
3384 }
3385
3386
3387 /* Estimate number of instructions that will be created by expanding
3388    the statements in the statement sequence STMTS.
3389    WEIGHTS contains weights attributed to various constructs.  */
3390
3391 static
3392 int estimate_num_insns_seq (gimple_seq stmts, eni_weights *weights)
3393 {
3394   int cost;
3395   gimple_stmt_iterator gsi;
3396
3397   cost = 0;
3398   for (gsi = gsi_start (stmts); !gsi_end_p (gsi); gsi_next (&gsi))
3399     cost += estimate_num_insns (gsi_stmt (gsi), weights);
3400
3401   return cost;
3402 }
3403
3404
3405 /* Estimate number of instructions that will be created by expanding STMT.
3406    WEIGHTS contains weights attributed to various constructs.  */
3407
3408 int
3409 estimate_num_insns (gimple stmt, eni_weights *weights)
3410 {
3411   unsigned cost, i;
3412   enum gimple_code code = gimple_code (stmt);
3413   tree lhs;
3414   tree rhs;
3415
3416   switch (code)
3417     {
3418     case GIMPLE_ASSIGN:
3419       /* Try to estimate the cost of assignments.  We have three cases to
3420          deal with:
3421          1) Simple assignments to registers;
3422          2) Stores to things that must live in memory.  This includes
3423             "normal" stores to scalars, but also assignments of large
3424             structures, or constructors of big arrays;
3425
3426          Let us look at the first two cases, assuming we have "a = b + C":
3427          <GIMPLE_ASSIGN <var_decl "a">
3428                 <plus_expr <var_decl "b"> <constant C>>
3429          If "a" is a GIMPLE register, the assignment to it is free on almost
3430          any target, because "a" usually ends up in a real register.  Hence
3431          the only cost of this expression comes from the PLUS_EXPR, and we
3432          can ignore the GIMPLE_ASSIGN.
3433          If "a" is not a GIMPLE register, the assignment to "a" will most
3434          likely be a real store, so the cost of the GIMPLE_ASSIGN is the cost
3435          of moving something into "a", which we compute using the function
3436          estimate_move_cost.  */
3437       lhs = gimple_assign_lhs (stmt);
3438       rhs = gimple_assign_rhs1 (stmt);
3439
3440       if (is_gimple_reg (lhs))
3441         cost = 0;
3442       else
3443         cost = estimate_move_cost (TREE_TYPE (lhs));
3444
3445       if (!is_gimple_reg (rhs) && !is_gimple_min_invariant (rhs))
3446         cost += estimate_move_cost (TREE_TYPE (rhs));
3447
3448       cost += estimate_operator_cost (gimple_assign_rhs_code (stmt), weights,
3449                                       gimple_assign_rhs1 (stmt),
3450                                       get_gimple_rhs_class (gimple_assign_rhs_code (stmt))
3451                                       == GIMPLE_BINARY_RHS
3452                                       ? gimple_assign_rhs2 (stmt) : NULL);
3453       break;
3454
3455     case GIMPLE_COND:
3456       cost = 1 + estimate_operator_cost (gimple_cond_code (stmt), weights,
3457                                          gimple_op (stmt, 0),
3458                                          gimple_op (stmt, 1));
3459       break;
3460
3461     case GIMPLE_SWITCH:
3462       /* Take into account cost of the switch + guess 2 conditional jumps for
3463          each case label.
3464
3465          TODO: once the switch expansion logic is sufficiently separated, we can
3466          do better job on estimating cost of the switch.  */
3467       if (weights->time_based)
3468         cost = floor_log2 (gimple_switch_num_labels (stmt)) * 2;
3469       else
3470         cost = gimple_switch_num_labels (stmt) * 2;
3471       break;
3472
3473     case GIMPLE_CALL:
3474       {
3475         tree decl = gimple_call_fndecl (stmt);
3476         tree addr = gimple_call_fn (stmt);
3477         tree funtype = TREE_TYPE (addr);
3478         bool stdarg = false;
3479
3480         if (POINTER_TYPE_P (funtype))
3481           funtype = TREE_TYPE (funtype);
3482
3483         /* Do not special case builtins where we see the body.
3484            This just confuse inliner.  */
3485         if (!decl || cgraph_node (decl)->analyzed)
3486           ;
3487         /* For buitins that are likely expanded to nothing or
3488            inlined do not account operand costs.  */
3489         else if (is_simple_builtin (decl))
3490           return 0;
3491         else if (is_inexpensive_builtin (decl))
3492           return weights->target_builtin_call_cost;
3493         else if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
3494           {
3495             /* We canonicalize x * x to pow (x, 2.0) with -ffast-math, so
3496                specialize the cheap expansion we do here.
3497                ???  This asks for a more general solution.  */
3498             switch (DECL_FUNCTION_CODE (decl))
3499               {
3500                 case BUILT_IN_POW:
3501                 case BUILT_IN_POWF:
3502                 case BUILT_IN_POWL:
3503                   if (TREE_CODE (gimple_call_arg (stmt, 1)) == REAL_CST
3504                       && REAL_VALUES_EQUAL
3505                            (TREE_REAL_CST (gimple_call_arg (stmt, 1)), dconst2))
3506                     return estimate_operator_cost (MULT_EXPR, weights,
3507                                                    gimple_call_arg (stmt, 0),
3508                                                    gimple_call_arg (stmt, 0));
3509                   break;
3510
3511                 default:
3512                   break;
3513               }
3514           }
3515
3516         cost = weights->call_cost;
3517         if (decl)
3518           funtype = TREE_TYPE (decl);
3519
3520         if (!VOID_TYPE_P (TREE_TYPE (funtype)))
3521           cost += estimate_move_cost (TREE_TYPE (funtype));
3522
3523         if (funtype)
3524           stdarg = stdarg_p (funtype);
3525
3526         /* Our cost must be kept in sync with
3527            cgraph_estimate_size_after_inlining that does use function
3528            declaration to figure out the arguments.
3529
3530            For functions taking variable list of arguments we must
3531            look into call statement intself.  This is safe because
3532            we will get only higher costs and in most cases we will
3533            not inline these anyway.  */
3534         if (decl && DECL_ARGUMENTS (decl) && !stdarg)
3535           {
3536             tree arg;
3537             for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
3538               if (!VOID_TYPE_P (TREE_TYPE (arg)))
3539                 cost += estimate_move_cost (TREE_TYPE (arg));
3540           }
3541         else if (funtype && prototype_p (funtype) && !stdarg)
3542           {
3543             tree t;
3544             for (t = TYPE_ARG_TYPES (funtype); t && t != void_list_node;
3545                  t = TREE_CHAIN (t))
3546               if (!VOID_TYPE_P (TREE_VALUE (t)))
3547                 cost += estimate_move_cost (TREE_VALUE (t));
3548           }
3549         else
3550           {
3551             for (i = 0; i < gimple_call_num_args (stmt); i++)
3552               {
3553                 tree arg = gimple_call_arg (stmt, i);
3554                 if (!VOID_TYPE_P (TREE_TYPE (arg)))
3555                   cost += estimate_move_cost (TREE_TYPE (arg));
3556               }
3557           }
3558
3559         break;
3560       }
3561
3562     case GIMPLE_RETURN:
3563       return weights->return_cost;
3564
3565     case GIMPLE_GOTO:
3566     case GIMPLE_LABEL:
3567     case GIMPLE_NOP:
3568     case GIMPLE_PHI:
3569     case GIMPLE_PREDICT:
3570     case GIMPLE_DEBUG:
3571       return 0;
3572
3573     case GIMPLE_ASM:
3574       return asm_str_count (gimple_asm_string (stmt));
3575
3576     case GIMPLE_RESX:
3577       /* This is either going to be an external function call with one
3578          argument, or two register copy statements plus a goto.  */
3579       return 2;
3580
3581     case GIMPLE_EH_DISPATCH:
3582       /* ??? This is going to turn into a switch statement.  Ideally
3583          we'd have a look at the eh region and estimate the number of
3584          edges involved.  */
3585       return 10;
3586
3587     case GIMPLE_BIND:
3588       return estimate_num_insns_seq (gimple_bind_body (stmt), weights);
3589
3590     case GIMPLE_EH_FILTER:
3591       return estimate_num_insns_seq (gimple_eh_filter_failure (stmt), weights);
3592
3593     case GIMPLE_CATCH:
3594       return estimate_num_insns_seq (gimple_catch_handler (stmt), weights);
3595
3596     case GIMPLE_TRY:
3597       return (estimate_num_insns_seq (gimple_try_eval (stmt), weights)
3598               + estimate_num_insns_seq (gimple_try_cleanup (stmt), weights));
3599
3600     /* OpenMP directives are generally very expensive.  */
3601
3602     case GIMPLE_OMP_RETURN:
3603     case GIMPLE_OMP_SECTIONS_SWITCH:
3604     case GIMPLE_OMP_ATOMIC_STORE:
3605     case GIMPLE_OMP_CONTINUE:
3606       /* ...except these, which are cheap.  */
3607       return 0;
3608
3609     case GIMPLE_OMP_ATOMIC_LOAD:
3610       return weights->omp_cost;
3611
3612     case GIMPLE_OMP_FOR:
3613       return (weights->omp_cost
3614               + estimate_num_insns_seq (gimple_omp_body (stmt), weights)
3615               + estimate_num_insns_seq (gimple_omp_for_pre_body (stmt), weights));
3616
3617     case GIMPLE_OMP_PARALLEL:
3618     case GIMPLE_OMP_TASK:
3619     case GIMPLE_OMP_CRITICAL:
3620     case GIMPLE_OMP_MASTER:
3621     case GIMPLE_OMP_ORDERED:
3622     case GIMPLE_OMP_SECTION:
3623     case GIMPLE_OMP_SECTIONS:
3624     case GIMPLE_OMP_SINGLE:
3625       return (weights->omp_cost
3626               + estimate_num_insns_seq (gimple_omp_body (stmt), weights));
3627
3628     default:
3629       gcc_unreachable ();
3630     }
3631
3632   return cost;
3633 }
3634
3635 /* Estimate number of instructions that will be created by expanding
3636    function FNDECL.  WEIGHTS contains weights attributed to various
3637    constructs.  */
3638
3639 int
3640 estimate_num_insns_fn (tree fndecl, eni_weights *weights)
3641 {
3642   struct function *my_function = DECL_STRUCT_FUNCTION (fndecl);
3643   gimple_stmt_iterator bsi;
3644   basic_block bb;
3645   int n = 0;
3646
3647   gcc_assert (my_function && my_function->cfg);
3648   FOR_EACH_BB_FN (bb, my_function)
3649     {
3650       for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi))
3651         n += estimate_num_insns (gsi_stmt (bsi), weights);
3652     }
3653
3654   return n;
3655 }
3656
3657
3658 /* Initializes weights used by estimate_num_insns.  */
3659
3660 void
3661 init_inline_once (void)
3662 {
3663   eni_size_weights.call_cost = 1;
3664   eni_size_weights.target_builtin_call_cost = 1;
3665   eni_size_weights.div_mod_cost = 1;
3666   eni_size_weights.omp_cost = 40;
3667   eni_size_weights.time_based = false;
3668   eni_size_weights.return_cost = 1;
3669
3670   /* Estimating time for call is difficult, since we have no idea what the
3671      called function does.  In the current uses of eni_time_weights,
3672      underestimating the cost does less harm than overestimating it, so
3673      we choose a rather small value here.  */
3674   eni_time_weights.call_cost = 10;
3675   eni_time_weights.target_builtin_call_cost = 1;
3676   eni_time_weights.div_mod_cost = 10;
3677   eni_time_weights.omp_cost = 40;
3678   eni_time_weights.time_based = true;
3679   eni_time_weights.return_cost = 2;
3680 }
3681
3682 /* Estimate the number of instructions in a gimple_seq. */
3683
3684 int
3685 count_insns_seq (gimple_seq seq, eni_weights *weights)
3686 {
3687   gimple_stmt_iterator gsi;
3688   int n = 0;
3689   for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&gsi))
3690     n += estimate_num_insns (gsi_stmt (gsi), weights);
3691
3692   return n;
3693 }
3694
3695
3696 /* Install new lexical TREE_BLOCK underneath 'current_block'.  */
3697
3698 static void
3699 prepend_lexical_block (tree current_block, tree new_block)
3700 {
3701   BLOCK_CHAIN (new_block) = BLOCK_SUBBLOCKS (current_block);
3702   BLOCK_SUBBLOCKS (current_block) = new_block;
3703   BLOCK_SUPERCONTEXT (new_block) = current_block;
3704 }
3705
3706 /* Add local variables from CALLEE to CALLER.  */
3707
3708 static inline void
3709 add_local_variables (struct function *callee, struct function *caller,
3710                      copy_body_data *id, bool check_var_ann)
3711 {
3712   tree var;
3713   unsigned ix;
3714
3715   FOR_EACH_LOCAL_DECL (callee, ix, var)
3716     if (TREE_STATIC (var) && !TREE_ASM_WRITTEN (var))
3717       {
3718         if (!check_var_ann
3719             || (var_ann (var) && add_referenced_var (var)))
3720           add_local_decl (caller, var);
3721       }
3722     else if (!can_be_nonlocal (var, id))
3723       {
3724         tree new_var = remap_decl (var, id);
3725
3726         /* Remap debug-expressions.  */
3727         if (TREE_CODE (new_var) == VAR_DECL
3728             && DECL_DEBUG_EXPR_IS_FROM (new_var)
3729             && new_var != var)
3730           {
3731             tree tem = DECL_DEBUG_EXPR (var);
3732             bool old_regimplify = id->regimplify;
3733             id->remapping_type_depth++;
3734             walk_tree (&tem, copy_tree_body_r, id, NULL);
3735             id->remapping_type_depth--;
3736             id->regimplify = old_regimplify;
3737             SET_DECL_DEBUG_EXPR (new_var, tem);
3738           }
3739         add_local_decl (caller, new_var);
3740       }
3741 }
3742
3743 /* If STMT is a GIMPLE_CALL, replace it with its inline expansion.  */
3744
3745 static bool
3746 expand_call_inline (basic_block bb, gimple stmt, copy_body_data *id)
3747 {
3748   tree use_retvar;
3749   tree fn;
3750   struct pointer_map_t *st, *dst;
3751   tree return_slot;
3752   tree modify_dest;
3753   location_t saved_location;
3754   struct cgraph_edge *cg_edge;
3755   cgraph_inline_failed_t reason;
3756   basic_block return_block;
3757   edge e;
3758   gimple_stmt_iterator gsi, stmt_gsi;
3759   bool successfully_inlined = FALSE;
3760   bool purge_dead_abnormal_edges;
3761
3762   /* Set input_location here so we get the right instantiation context
3763      if we call instantiate_decl from inlinable_function_p.  */
3764   saved_location = input_location;
3765   if (gimple_has_location (stmt))
3766     input_location = gimple_location (stmt);
3767
3768   /* From here on, we're only interested in CALL_EXPRs.  */
3769   if (gimple_code (stmt) != GIMPLE_CALL)
3770     goto egress;
3771
3772   /* Objective C and fortran still calls tree_rest_of_compilation directly.
3773      Kill this check once this is fixed.  */
3774   if (!id->dst_node->analyzed)
3775     goto egress;
3776
3777   cg_edge = cgraph_edge (id->dst_node, stmt);
3778   gcc_checking_assert (cg_edge);
3779   /* First, see if we can figure out what function is being called.
3780      If we cannot, then there is no hope of inlining the function.  */
3781   if (cg_edge->indirect_unknown_callee)
3782     goto egress;
3783   fn = cg_edge->callee->decl;
3784   gcc_checking_assert (fn);
3785
3786   /* If FN is a declaration of a function in a nested scope that was
3787      globally declared inline, we don't set its DECL_INITIAL.
3788      However, we can't blindly follow DECL_ABSTRACT_ORIGIN because the
3789      C++ front-end uses it for cdtors to refer to their internal
3790      declarations, that are not real functions.  Fortunately those
3791      don't have trees to be saved, so we can tell by checking their
3792      gimple_body.  */
3793   if (!DECL_INITIAL (fn)
3794       && DECL_ABSTRACT_ORIGIN (fn)
3795       && gimple_has_body_p (DECL_ABSTRACT_ORIGIN (fn)))
3796     fn = DECL_ABSTRACT_ORIGIN (fn);
3797
3798   /* First check that inlining isn't simply forbidden in this case.  */
3799   if (inline_forbidden_into_p (cg_edge->caller->decl, cg_edge->callee->decl))
3800     goto egress;
3801
3802   /* Don't try to inline functions that are not well-suited to inlining.  */
3803   if (!cgraph_inline_p (cg_edge, &reason))
3804     {
3805       /* If this call was originally indirect, we do not want to emit any
3806          inlining related warnings or sorry messages because there are no
3807          guarantees regarding those.  */
3808       if (cg_edge->indirect_inlining_edge)
3809         goto egress;
3810
3811       if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn))
3812           /* For extern inline functions that get redefined we always
3813              silently ignored always_inline flag. Better behaviour would
3814              be to be able to keep both bodies and use extern inline body
3815              for inlining, but we can't do that because frontends overwrite
3816              the body.  */
3817           && !cg_edge->callee->local.redefined_extern_inline
3818           /* Avoid warnings during early inline pass. */
3819           && cgraph_global_info_ready)
3820         {
3821           sorry ("inlining failed in call to %q+F: %s", fn,
3822                  _(cgraph_inline_failed_string (reason)));
3823           sorry ("called from here");
3824         }
3825       else if (warn_inline && DECL_DECLARED_INLINE_P (fn)
3826                && !DECL_IN_SYSTEM_HEADER (fn)
3827                && reason != CIF_UNSPECIFIED
3828                && !lookup_attribute ("noinline", DECL_ATTRIBUTES (fn))
3829                /* Avoid warnings during early inline pass. */
3830                && cgraph_global_info_ready)
3831         {
3832           warning (OPT_Winline, "inlining failed in call to %q+F: %s",
3833                    fn, _(cgraph_inline_failed_string (reason)));
3834           warning (OPT_Winline, "called from here");
3835         }
3836       goto egress;
3837     }
3838   fn = cg_edge->callee->decl;
3839
3840 #ifdef ENABLE_CHECKING
3841   if (cg_edge->callee->decl != id->dst_node->decl)
3842     verify_cgraph_node (cg_edge->callee);
3843 #endif
3844
3845   /* We will be inlining this callee.  */
3846   id->eh_lp_nr = lookup_stmt_eh_lp (stmt);
3847
3848   /* Update the callers EH personality.  */
3849   if (DECL_FUNCTION_PERSONALITY (cg_edge->callee->decl))
3850     DECL_FUNCTION_PERSONALITY (cg_edge->caller->decl)
3851       = DECL_FUNCTION_PERSONALITY (cg_edge->callee->decl);
3852
3853   /* Split the block holding the GIMPLE_CALL.  */
3854   e = split_block (bb, stmt);
3855   bb = e->src;
3856   return_block = e->dest;
3857   remove_edge (e);
3858
3859   /* split_block splits after the statement; work around this by
3860      moving the call into the second block manually.  Not pretty,
3861      but seems easier than doing the CFG manipulation by hand
3862      when the GIMPLE_CALL is in the last statement of BB.  */
3863   stmt_gsi = gsi_last_bb (bb);
3864   gsi_remove (&stmt_gsi, false);
3865
3866   /* If the GIMPLE_CALL was in the last statement of BB, it may have
3867      been the source of abnormal edges.  In this case, schedule
3868      the removal of dead abnormal edges.  */
3869   gsi = gsi_start_bb (return_block);
3870   if (gsi_end_p (gsi))
3871     {
3872       gsi_insert_after (&gsi, stmt, GSI_NEW_STMT);
3873       purge_dead_abnormal_edges = true;
3874     }
3875   else
3876     {
3877       gsi_insert_before (&gsi, stmt, GSI_NEW_STMT);
3878       purge_dead_abnormal_edges = false;
3879     }
3880
3881   stmt_gsi = gsi_start_bb (return_block);
3882
3883   /* Build a block containing code to initialize the arguments, the
3884      actual inline expansion of the body, and a label for the return
3885      statements within the function to jump to.  The type of the
3886      statement expression is the return type of the function call.  */
3887   id->block = make_node (BLOCK);
3888   BLOCK_ABSTRACT_ORIGIN (id->block) = fn;
3889   BLOCK_SOURCE_LOCATION (id->block) = input_location;
3890   prepend_lexical_block (gimple_block (stmt), id->block);
3891
3892   /* Local declarations will be replaced by their equivalents in this
3893      map.  */
3894   st = id->decl_map;
3895   id->decl_map = pointer_map_create ();
3896   dst = id->debug_map;
3897   id->debug_map = NULL;
3898
3899   /* Record the function we are about to inline.  */
3900   id->src_fn = fn;
3901   id->src_node = cg_edge->callee;
3902   id->src_cfun = DECL_STRUCT_FUNCTION (fn);
3903   id->gimple_call = stmt;
3904
3905   gcc_assert (!id->src_cfun->after_inlining);
3906
3907   id->entry_bb = bb;
3908   if (lookup_attribute ("cold", DECL_ATTRIBUTES (fn)))
3909     {
3910       gimple_stmt_iterator si = gsi_last_bb (bb);
3911       gsi_insert_after (&si, gimple_build_predict (PRED_COLD_FUNCTION,
3912                                                    NOT_TAKEN),
3913                         GSI_NEW_STMT);
3914     }
3915   initialize_inlined_parameters (id, stmt, fn, bb);
3916
3917   if (DECL_INITIAL (fn))
3918     prepend_lexical_block (id->block, remap_blocks (DECL_INITIAL (fn), id));
3919
3920   /* Return statements in the function body will be replaced by jumps
3921      to the RET_LABEL.  */
3922   gcc_assert (DECL_INITIAL (fn));
3923   gcc_assert (TREE_CODE (DECL_INITIAL (fn)) == BLOCK);
3924
3925   /* Find the LHS to which the result of this call is assigned.  */
3926   return_slot = NULL;
3927   if (gimple_call_lhs (stmt))
3928     {
3929       modify_dest = gimple_call_lhs (stmt);
3930
3931       /* The function which we are inlining might not return a value,
3932          in which case we should issue a warning that the function
3933          does not return a value.  In that case the optimizers will
3934          see that the variable to which the value is assigned was not
3935          initialized.  We do not want to issue a warning about that
3936          uninitialized variable.  */
3937       if (DECL_P (modify_dest))
3938         TREE_NO_WARNING (modify_dest) = 1;
3939
3940       if (gimple_call_return_slot_opt_p (stmt))
3941         {
3942           return_slot = modify_dest;
3943           modify_dest = NULL;
3944         }
3945     }
3946   else
3947     modify_dest = NULL;
3948
3949   /* If we are inlining a call to the C++ operator new, we don't want
3950      to use type based alias analysis on the return value.  Otherwise
3951      we may get confused if the compiler sees that the inlined new
3952      function returns a pointer which was just deleted.  See bug
3953      33407.  */
3954   if (DECL_IS_OPERATOR_NEW (fn))
3955     {
3956       return_slot = NULL;
3957       modify_dest = NULL;
3958     }
3959
3960   /* Declare the return variable for the function.  */
3961   use_retvar = declare_return_variable (id, return_slot, modify_dest, bb);
3962
3963   /* Add local vars in this inlined callee to caller.  */
3964   add_local_variables (id->src_cfun, cfun, id, true);
3965
3966   if (dump_file && (dump_flags & TDF_DETAILS))
3967     {
3968       fprintf (dump_file, "Inlining ");
3969       print_generic_expr (dump_file, id->src_fn, 0);
3970       fprintf (dump_file, " to ");
3971       print_generic_expr (dump_file, id->dst_fn, 0);
3972       fprintf (dump_file, " with frequency %i\n", cg_edge->frequency);
3973     }
3974
3975   /* This is it.  Duplicate the callee body.  Assume callee is
3976      pre-gimplified.  Note that we must not alter the caller
3977      function in any way before this point, as this CALL_EXPR may be
3978      a self-referential call; if we're calling ourselves, we need to
3979      duplicate our body before altering anything.  */
3980   copy_body (id, bb->count,
3981              cg_edge->frequency * REG_BR_PROB_BASE / CGRAPH_FREQ_BASE,
3982              bb, return_block, NULL, NULL);
3983
3984   /* Reset the escaped solution.  */
3985   if (cfun->gimple_df)
3986     pt_solution_reset (&cfun->gimple_df->escaped);
3987
3988   /* Clean up.  */
3989   if (id->debug_map)
3990     {
3991       pointer_map_destroy (id->debug_map);
3992       id->debug_map = dst;
3993     }
3994   pointer_map_destroy (id->decl_map);
3995   id->decl_map = st;
3996
3997   /* Unlink the calls virtual operands before replacing it.  */
3998   unlink_stmt_vdef (stmt);
3999
4000   /* If the inlined function returns a result that we care about,
4001      substitute the GIMPLE_CALL with an assignment of the return
4002      variable to the LHS of the call.  That is, if STMT was
4003      'a = foo (...)', substitute the call with 'a = USE_RETVAR'.  */
4004   if (use_retvar && gimple_call_lhs (stmt))
4005     {
4006       gimple old_stmt = stmt;
4007       stmt = gimple_build_assign (gimple_call_lhs (stmt), use_retvar);
4008       gsi_replace (&stmt_gsi, stmt, false);
4009       if (gimple_in_ssa_p (cfun))
4010         mark_symbols_for_renaming (stmt);
4011       maybe_clean_or_replace_eh_stmt (old_stmt, stmt);
4012     }
4013   else
4014     {
4015       /* Handle the case of inlining a function with no return
4016          statement, which causes the return value to become undefined.  */
4017       if (gimple_call_lhs (stmt)
4018           && TREE_CODE (gimple_call_lhs (stmt)) == SSA_NAME)
4019         {
4020           tree name = gimple_call_lhs (stmt);
4021           tree var = SSA_NAME_VAR (name);
4022           tree def = gimple_default_def (cfun, var);
4023
4024           if (def)
4025             {
4026               /* If the variable is used undefined, make this name
4027                  undefined via a move.  */
4028               stmt = gimple_build_assign (gimple_call_lhs (stmt), def);
4029               gsi_replace (&stmt_gsi, stmt, true);
4030             }
4031           else
4032             {
4033               /* Otherwise make this variable undefined.  */
4034               gsi_remove (&stmt_gsi, true);
4035               set_default_def (var, name);
4036               SSA_NAME_DEF_STMT (name) = gimple_build_nop ();
4037             }
4038         }
4039       else
4040         gsi_remove (&stmt_gsi, true);
4041     }
4042
4043   if (purge_dead_abnormal_edges)
4044     {
4045       gimple_purge_dead_eh_edges (return_block);
4046       gimple_purge_dead_abnormal_call_edges (return_block);
4047     }
4048
4049   /* If the value of the new expression is ignored, that's OK.  We
4050      don't warn about this for CALL_EXPRs, so we shouldn't warn about
4051      the equivalent inlined version either.  */
4052   if (is_gimple_assign (stmt))
4053     {
4054       gcc_assert (gimple_assign_single_p (stmt)
4055                   || CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (stmt)));
4056       TREE_USED (gimple_assign_rhs1 (stmt)) = 1;
4057     }
4058
4059   /* Output the inlining info for this abstract function, since it has been
4060      inlined.  If we don't do this now, we can lose the information about the
4061      variables in the function when the blocks get blown away as soon as we
4062      remove the cgraph node.  */
4063   (*debug_hooks->outlining_inline_function) (cg_edge->callee->decl);
4064
4065   /* Update callgraph if needed.  */
4066   cgraph_remove_node (cg_edge->callee);
4067
4068   id->block = NULL_TREE;
4069   successfully_inlined = TRUE;
4070
4071  egress:
4072   input_location = saved_location;
4073   return successfully_inlined;
4074 }
4075
4076 /* Expand call statements reachable from STMT_P.
4077    We can only have CALL_EXPRs as the "toplevel" tree code or nested
4078    in a MODIFY_EXPR.  See gimple.c:get_call_expr_in().  We can
4079    unfortunately not use that function here because we need a pointer
4080    to the CALL_EXPR, not the tree itself.  */
4081
4082 static bool
4083 gimple_expand_calls_inline (basic_block bb, copy_body_data *id)
4084 {
4085   gimple_stmt_iterator gsi;
4086
4087   for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
4088     {
4089       gimple stmt = gsi_stmt (gsi);
4090
4091       if (is_gimple_call (stmt)
4092           && expand_call_inline (bb, stmt, id))
4093         return true;
4094     }
4095
4096   return false;
4097 }
4098
4099
4100 /* Walk all basic blocks created after FIRST and try to fold every statement
4101    in the STATEMENTS pointer set.  */
4102
4103 static void
4104 fold_marked_statements (int first, struct pointer_set_t *statements)
4105 {
4106   for (; first < n_basic_blocks; first++)
4107     if (BASIC_BLOCK (first))
4108       {
4109         gimple_stmt_iterator gsi;
4110
4111         for (gsi = gsi_start_bb (BASIC_BLOCK (first));
4112              !gsi_end_p (gsi);
4113              gsi_next (&gsi))
4114           if (pointer_set_contains (statements, gsi_stmt (gsi)))
4115             {
4116               gimple old_stmt = gsi_stmt (gsi);
4117               tree old_decl = is_gimple_call (old_stmt) ? gimple_call_fndecl (old_stmt) : 0;
4118
4119               if (old_decl && DECL_BUILT_IN (old_decl))
4120                 {
4121                   /* Folding builtins can create multiple instructions,
4122                      we need to look at all of them.  */
4123                   gimple_stmt_iterator i2 = gsi;
4124                   gsi_prev (&i2);
4125                   if (fold_stmt (&gsi))
4126                     {
4127                       gimple new_stmt;
4128                       /* If a builtin at the end of a bb folded into nothing,
4129                          the following loop won't work.  */
4130                       if (gsi_end_p (gsi))
4131                         {
4132                           cgraph_update_edges_for_call_stmt (old_stmt,
4133                                                              old_decl, NULL);
4134                           break;
4135                         }
4136                       if (gsi_end_p (i2))
4137                         i2 = gsi_start_bb (BASIC_BLOCK (first));
4138                       else
4139                         gsi_next (&i2);
4140                       while (1)
4141                         {
4142                           new_stmt = gsi_stmt (i2);
4143                           update_stmt (new_stmt);
4144                           cgraph_update_edges_for_call_stmt (old_stmt, old_decl,
4145                                                              new_stmt);
4146
4147                           if (new_stmt == gsi_stmt (gsi))
4148                             {
4149                               /* It is okay to check only for the very last
4150                                  of these statements.  If it is a throwing
4151                                  statement nothing will change.  If it isn't
4152                                  this can remove EH edges.  If that weren't
4153                                  correct then because some intermediate stmts
4154                                  throw, but not the last one.  That would mean
4155                                  we'd have to split the block, which we can't
4156                                  here and we'd loose anyway.  And as builtins
4157                                  probably never throw, this all
4158                                  is mood anyway.  */
4159                               if (maybe_clean_or_replace_eh_stmt (old_stmt,
4160                                                                   new_stmt))
4161                                 gimple_purge_dead_eh_edges (BASIC_BLOCK (first));
4162                               break;
4163                             }
4164                           gsi_next (&i2);
4165                         }
4166                     }
4167                 }
4168               else if (fold_stmt (&gsi))
4169                 {
4170                   /* Re-read the statement from GSI as fold_stmt() may
4171                      have changed it.  */
4172                   gimple new_stmt = gsi_stmt (gsi);
4173                   update_stmt (new_stmt);
4174
4175                   if (is_gimple_call (old_stmt)
4176                       || is_gimple_call (new_stmt))
4177                     cgraph_update_edges_for_call_stmt (old_stmt, old_decl,
4178                                                        new_stmt);
4179
4180                   if (maybe_clean_or_replace_eh_stmt (old_stmt, new_stmt))
4181                     gimple_purge_dead_eh_edges (BASIC_BLOCK (first));
4182                 }
4183             }
4184       }
4185 }
4186
4187 /* Return true if BB has at least one abnormal outgoing edge.  */
4188
4189 static inline bool
4190 has_abnormal_outgoing_edge_p (basic_block bb)
4191 {
4192   edge e;
4193   edge_iterator ei;
4194
4195   FOR_EACH_EDGE (e, ei, bb->succs)
4196     if (e->flags & EDGE_ABNORMAL)
4197       return true;
4198
4199   return false;
4200 }
4201
4202 /* Expand calls to inline functions in the body of FN.  */
4203
4204 unsigned int
4205 optimize_inline_calls (tree fn)
4206 {
4207   copy_body_data id;
4208   basic_block bb;
4209   int last = n_basic_blocks;
4210   struct gimplify_ctx gctx;
4211   bool inlined_p = false;
4212
4213   /* There is no point in performing inlining if errors have already
4214      occurred -- and we might crash if we try to inline invalid
4215      code.  */
4216   if (seen_error ())
4217     return 0;
4218
4219   /* Clear out ID.  */
4220   memset (&id, 0, sizeof (id));
4221
4222   id.src_node = id.dst_node = cgraph_node (fn);
4223   id.dst_fn = fn;
4224   /* Or any functions that aren't finished yet.  */
4225   if (current_function_decl)
4226     id.dst_fn = current_function_decl;
4227
4228   id.copy_decl = copy_decl_maybe_to_var;
4229   id.transform_call_graph_edges = CB_CGE_DUPLICATE;
4230   id.transform_new_cfg = false;
4231   id.transform_return_to_modify = true;
4232   id.transform_lang_insert_block = NULL;
4233   id.statements_to_fold = pointer_set_create ();
4234
4235   push_gimplify_context (&gctx);
4236
4237   /* We make no attempts to keep dominance info up-to-date.  */
4238   free_dominance_info (CDI_DOMINATORS);
4239   free_dominance_info (CDI_POST_DOMINATORS);
4240
4241   /* Register specific gimple functions.  */
4242   gimple_register_cfg_hooks ();
4243
4244   /* Reach the trees by walking over the CFG, and note the
4245      enclosing basic-blocks in the call edges.  */
4246   /* We walk the blocks going forward, because inlined function bodies
4247      will split id->current_basic_block, and the new blocks will
4248      follow it; we'll trudge through them, processing their CALL_EXPRs
4249      along the way.  */
4250   FOR_EACH_BB (bb)
4251     inlined_p |= gimple_expand_calls_inline (bb, &id);
4252
4253   pop_gimplify_context (NULL);
4254
4255 #ifdef ENABLE_CHECKING
4256     {
4257       struct cgraph_edge *e;
4258
4259       verify_cgraph_node (id.dst_node);
4260
4261       /* Double check that we inlined everything we are supposed to inline.  */
4262       for (e = id.dst_node->callees; e; e = e->next_callee)
4263         gcc_assert (e->inline_failed);
4264     }
4265 #endif
4266
4267   /* Fold queued statements.  */
4268   fold_marked_statements (last, id.statements_to_fold);
4269   pointer_set_destroy (id.statements_to_fold);
4270
4271   gcc_assert (!id.debug_stmts);
4272
4273   /* If we didn't inline into the function there is nothing to do.  */
4274   if (!inlined_p)
4275     return 0;
4276
4277   /* Renumber the lexical scoping (non-code) blocks consecutively.  */
4278   number_blocks (fn);
4279
4280   delete_unreachable_blocks_update_callgraph (&id);
4281 #ifdef ENABLE_CHECKING
4282   verify_cgraph_node (id.dst_node);
4283 #endif
4284
4285   /* It would be nice to check SSA/CFG/statement consistency here, but it is
4286      not possible yet - the IPA passes might make various functions to not
4287      throw and they don't care to proactively update local EH info.  This is
4288      done later in fixup_cfg pass that also execute the verification.  */
4289   return (TODO_update_ssa
4290           | TODO_cleanup_cfg
4291           | (gimple_in_ssa_p (cfun) ? TODO_remove_unused_locals : 0)
4292           | (gimple_in_ssa_p (cfun) ? TODO_update_address_taken : 0)
4293           | (profile_status != PROFILE_ABSENT ? TODO_rebuild_frequencies : 0));
4294 }
4295
4296 /* Passed to walk_tree.  Copies the node pointed to, if appropriate.  */
4297
4298 tree
4299 copy_tree_r (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
4300 {
4301   enum tree_code code = TREE_CODE (*tp);
4302   enum tree_code_class cl = TREE_CODE_CLASS (code);
4303
4304   /* We make copies of most nodes.  */
4305   if (IS_EXPR_CODE_CLASS (cl)
4306       || code == TREE_LIST
4307       || code == TREE_VEC
4308       || code == TYPE_DECL
4309       || code == OMP_CLAUSE)
4310     {
4311       /* Because the chain gets clobbered when we make a copy, we save it
4312          here.  */
4313       tree chain = NULL_TREE, new_tree;
4314
4315       chain = TREE_CHAIN (*tp);
4316
4317       /* Copy the node.  */
4318       new_tree = copy_node (*tp);
4319
4320       /* Propagate mudflap marked-ness.  */
4321       if (flag_mudflap && mf_marked_p (*tp))
4322         mf_mark (new_tree);
4323
4324       *tp = new_tree;
4325
4326       /* Now, restore the chain, if appropriate.  That will cause
4327          walk_tree to walk into the chain as well.  */
4328       if (code == PARM_DECL
4329           || code == TREE_LIST
4330           || code == OMP_CLAUSE)
4331         TREE_CHAIN (*tp) = chain;
4332
4333       /* For now, we don't update BLOCKs when we make copies.  So, we
4334          have to nullify all BIND_EXPRs.  */
4335       if (TREE_CODE (*tp) == BIND_EXPR)
4336         BIND_EXPR_BLOCK (*tp) = NULL_TREE;
4337     }
4338   else if (code == CONSTRUCTOR)
4339     {
4340       /* CONSTRUCTOR nodes need special handling because
4341          we need to duplicate the vector of elements.  */
4342       tree new_tree;
4343
4344       new_tree = copy_node (*tp);
4345
4346       /* Propagate mudflap marked-ness.  */
4347       if (flag_mudflap && mf_marked_p (*tp))
4348         mf_mark (new_tree);
4349
4350       CONSTRUCTOR_ELTS (new_tree) = VEC_copy (constructor_elt, gc,
4351                                          CONSTRUCTOR_ELTS (*tp));
4352       *tp = new_tree;
4353     }
4354   else if (code == STATEMENT_LIST)
4355     /* We used to just abort on STATEMENT_LIST, but we can run into them
4356        with statement-expressions (c++/40975).  */
4357     copy_statement_list (tp);
4358   else if (TREE_CODE_CLASS (code) == tcc_type)
4359     *walk_subtrees = 0;
4360   else if (TREE_CODE_CLASS (code) == tcc_declaration)
4361     *walk_subtrees = 0;
4362   else if (TREE_CODE_CLASS (code) == tcc_constant)
4363     *walk_subtrees = 0;
4364   return NULL_TREE;
4365 }
4366
4367 /* The SAVE_EXPR pointed to by TP is being copied.  If ST contains
4368    information indicating to what new SAVE_EXPR this one should be mapped,
4369    use that one.  Otherwise, create a new node and enter it in ST.  FN is
4370    the function into which the copy will be placed.  */
4371
4372 static void
4373 remap_save_expr (tree *tp, void *st_, int *walk_subtrees)
4374 {
4375   struct pointer_map_t *st = (struct pointer_map_t *) st_;
4376   tree *n;
4377   tree t;
4378
4379   /* See if we already encountered this SAVE_EXPR.  */
4380   n = (tree *) pointer_map_contains (st, *tp);
4381
4382   /* If we didn't already remap this SAVE_EXPR, do so now.  */
4383   if (!n)
4384     {
4385       t = copy_node (*tp);
4386
4387       /* Remember this SAVE_EXPR.  */
4388       *pointer_map_insert (st, *tp) = t;
4389       /* Make sure we don't remap an already-remapped SAVE_EXPR.  */
4390       *pointer_map_insert (st, t) = t;
4391     }
4392   else
4393     {
4394       /* We've already walked into this SAVE_EXPR; don't do it again.  */
4395       *walk_subtrees = 0;
4396       t = *n;
4397     }
4398
4399   /* Replace this SAVE_EXPR with the copy.  */
4400   *tp = t;
4401 }
4402
4403 /* Called via walk_tree.  If *TP points to a DECL_STMT for a local label,
4404    copies the declaration and enters it in the splay_tree in DATA (which is
4405    really an `copy_body_data *').  */
4406
4407 static tree
4408 mark_local_for_remap_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
4409                         void *data)
4410 {
4411   copy_body_data *id = (copy_body_data *) data;
4412
4413   /* Don't walk into types.  */
4414   if (TYPE_P (*tp))
4415     *walk_subtrees = 0;
4416
4417   else if (TREE_CODE (*tp) == LABEL_EXPR)
4418     {
4419       tree decl = TREE_OPERAND (*tp, 0);
4420
4421       /* Copy the decl and remember the copy.  */
4422       insert_decl_map (id, decl, id->copy_decl (decl, id));
4423     }
4424
4425   return NULL_TREE;
4426 }
4427
4428 /* Perform any modifications to EXPR required when it is unsaved.  Does
4429    not recurse into EXPR's subtrees.  */
4430
4431 static void
4432 unsave_expr_1 (tree expr)
4433 {
4434   switch (TREE_CODE (expr))
4435     {
4436     case TARGET_EXPR:
4437       /* Don't mess with a TARGET_EXPR that hasn't been expanded.
4438          It's OK for this to happen if it was part of a subtree that
4439          isn't immediately expanded, such as operand 2 of another
4440          TARGET_EXPR.  */
4441       if (TREE_OPERAND (expr, 1))
4442         break;
4443
4444       TREE_OPERAND (expr, 1) = TREE_OPERAND (expr, 3);
4445       TREE_OPERAND (expr, 3) = NULL_TREE;
4446       break;
4447
4448     default:
4449       break;
4450     }
4451 }
4452
4453 /* Called via walk_tree when an expression is unsaved.  Using the
4454    splay_tree pointed to by ST (which is really a `splay_tree'),
4455    remaps all local declarations to appropriate replacements.  */
4456
4457 static tree
4458 unsave_r (tree *tp, int *walk_subtrees, void *data)
4459 {
4460   copy_body_data *id = (copy_body_data *) data;
4461   struct pointer_map_t *st = id->decl_map;
4462   tree *n;
4463
4464   /* Only a local declaration (variable or label).  */
4465   if ((TREE_CODE (*tp) == VAR_DECL && !TREE_STATIC (*tp))
4466       || TREE_CODE (*tp) == LABEL_DECL)
4467     {
4468       /* Lookup the declaration.  */
4469       n = (tree *) pointer_map_contains (st, *tp);
4470
4471       /* If it's there, remap it.  */
4472       if (n)
4473         *tp = *n;
4474     }
4475
4476   else if (TREE_CODE (*tp) == STATEMENT_LIST)
4477     gcc_unreachable ();
4478   else if (TREE_CODE (*tp) == BIND_EXPR)
4479     copy_bind_expr (tp, walk_subtrees, id);
4480   else if (TREE_CODE (*tp) == SAVE_EXPR
4481            || TREE_CODE (*tp) == TARGET_EXPR)
4482     remap_save_expr (tp, st, walk_subtrees);
4483   else
4484     {
4485       copy_tree_r (tp, walk_subtrees, NULL);
4486
4487       /* Do whatever unsaving is required.  */
4488       unsave_expr_1 (*tp);
4489     }
4490
4491   /* Keep iterating.  */
4492   return NULL_TREE;
4493 }
4494
4495 /* Copies everything in EXPR and replaces variables, labels
4496    and SAVE_EXPRs local to EXPR.  */
4497
4498 tree
4499 unsave_expr_now (tree expr)
4500 {
4501   copy_body_data id;
4502
4503   /* There's nothing to do for NULL_TREE.  */
4504   if (expr == 0)
4505     return expr;
4506
4507   /* Set up ID.  */
4508   memset (&id, 0, sizeof (id));
4509   id.src_fn = current_function_decl;
4510   id.dst_fn = current_function_decl;
4511   id.decl_map = pointer_map_create ();
4512   id.debug_map = NULL;
4513
4514   id.copy_decl = copy_decl_no_change;
4515   id.transform_call_graph_edges = CB_CGE_DUPLICATE;
4516   id.transform_new_cfg = false;
4517   id.transform_return_to_modify = false;
4518   id.transform_lang_insert_block = NULL;
4519
4520   /* Walk the tree once to find local labels.  */
4521   walk_tree_without_duplicates (&expr, mark_local_for_remap_r, &id);
4522
4523   /* Walk the tree again, copying, remapping, and unsaving.  */
4524   walk_tree (&expr, unsave_r, &id, NULL);
4525
4526   /* Clean up.  */
4527   pointer_map_destroy (id.decl_map);
4528   if (id.debug_map)
4529     pointer_map_destroy (id.debug_map);
4530
4531   return expr;
4532 }
4533
4534 /* Called via walk_gimple_seq.  If *GSIP points to a GIMPLE_LABEL for a local
4535    label, copies the declaration and enters it in the splay_tree in DATA (which
4536    is really a 'copy_body_data *'.  */
4537
4538 static tree
4539 mark_local_labels_stmt (gimple_stmt_iterator *gsip,
4540                         bool *handled_ops_p ATTRIBUTE_UNUSED,
4541                         struct walk_stmt_info *wi)
4542 {
4543   copy_body_data *id = (copy_body_data *) wi->info;
4544   gimple stmt = gsi_stmt (*gsip);
4545
4546   if (gimple_code (stmt) == GIMPLE_LABEL)
4547     {
4548       tree decl = gimple_label_label (stmt);
4549
4550       /* Copy the decl and remember the copy.  */
4551       insert_decl_map (id, decl, id->copy_decl (decl, id));
4552     }
4553
4554   return NULL_TREE;
4555 }
4556
4557
4558 /* Called via walk_gimple_seq by copy_gimple_seq_and_replace_local.
4559    Using the splay_tree pointed to by ST (which is really a `splay_tree'),
4560    remaps all local declarations to appropriate replacements in gimple
4561    operands. */
4562
4563 static tree
4564 replace_locals_op (tree *tp, int *walk_subtrees, void *data)
4565 {
4566   struct walk_stmt_info *wi = (struct walk_stmt_info*) data;
4567   copy_body_data *id = (copy_body_data *) wi->info;
4568   struct pointer_map_t *st = id->decl_map;
4569   tree *n;
4570   tree expr = *tp;
4571
4572   /* Only a local declaration (variable or label).  */
4573   if ((TREE_CODE (expr) == VAR_DECL
4574        && !TREE_STATIC (expr))
4575       || TREE_CODE (expr) == LABEL_DECL)
4576     {
4577       /* Lookup the declaration.  */
4578       n = (tree *) pointer_map_contains (st, expr);
4579
4580       /* If it's there, remap it.  */
4581       if (n)
4582         *tp = *n;
4583       *walk_subtrees = 0;
4584     }
4585   else if (TREE_CODE (expr) == STATEMENT_LIST
4586            || TREE_CODE (expr) == BIND_EXPR
4587            || TREE_CODE (expr) == SAVE_EXPR)
4588     gcc_unreachable ();
4589   else if (TREE_CODE (expr) == TARGET_EXPR)
4590     {
4591       /* Don't mess with a TARGET_EXPR that hasn't been expanded.
4592          It's OK for this to happen if it was part of a subtree that
4593          isn't immediately expanded, such as operand 2 of another
4594          TARGET_EXPR.  */
4595       if (!TREE_OPERAND (expr, 1))
4596         {
4597           TREE_OPERAND (expr, 1) = TREE_OPERAND (expr, 3);
4598           TREE_OPERAND (expr, 3) = NULL_TREE;
4599         }
4600     }
4601
4602   /* Keep iterating.  */
4603   return NULL_TREE;
4604 }
4605
4606
4607 /* Called via walk_gimple_seq by copy_gimple_seq_and_replace_local.
4608    Using the splay_tree pointed to by ST (which is really a `splay_tree'),
4609    remaps all local declarations to appropriate replacements in gimple
4610    statements. */
4611
4612 static tree
4613 replace_locals_stmt (gimple_stmt_iterator *gsip,
4614                      bool *handled_ops_p ATTRIBUTE_UNUSED,
4615                      struct walk_stmt_info *wi)
4616 {
4617   copy_body_data *id = (copy_body_data *) wi->info;
4618   gimple stmt = gsi_stmt (*gsip);
4619
4620   if (gimple_code (stmt) == GIMPLE_BIND)
4621     {
4622       tree block = gimple_bind_block (stmt);
4623
4624       if (block)
4625         {
4626           remap_block (&block, id);
4627           gimple_bind_set_block (stmt, block);
4628         }
4629
4630       /* This will remap a lot of the same decls again, but this should be
4631          harmless.  */
4632       if (gimple_bind_vars (stmt))
4633         gimple_bind_set_vars (stmt, remap_decls (gimple_bind_vars (stmt), NULL, id));
4634     }
4635
4636   /* Keep iterating.  */
4637   return NULL_TREE;
4638 }
4639
4640
4641 /* Copies everything in SEQ and replaces variables and labels local to
4642    current_function_decl.  */
4643
4644 gimple_seq
4645 copy_gimple_seq_and_replace_locals (gimple_seq seq)
4646 {
4647   copy_body_data id;
4648   struct walk_stmt_info wi;
4649   struct pointer_set_t *visited;
4650   gimple_seq copy;
4651
4652   /* There's nothing to do for NULL_TREE.  */
4653   if (seq == NULL)
4654     return seq;
4655
4656   /* Set up ID.  */
4657   memset (&id, 0, sizeof (id));
4658   id.src_fn = current_function_decl;
4659   id.dst_fn = current_function_decl;
4660   id.decl_map = pointer_map_create ();
4661   id.debug_map = NULL;
4662
4663   id.copy_decl = copy_decl_no_change;
4664   id.transform_call_graph_edges = CB_CGE_DUPLICATE;
4665   id.transform_new_cfg = false;
4666   id.transform_return_to_modify = false;
4667   id.transform_lang_insert_block = NULL;
4668
4669   /* Walk the tree once to find local labels.  */
4670   memset (&wi, 0, sizeof (wi));
4671   visited = pointer_set_create ();
4672   wi.info = &id;
4673   wi.pset = visited;
4674   walk_gimple_seq (seq, mark_local_labels_stmt, NULL, &wi);
4675   pointer_set_destroy (visited);
4676
4677   copy = gimple_seq_copy (seq);
4678
4679   /* Walk the copy, remapping decls.  */
4680   memset (&wi, 0, sizeof (wi));
4681   wi.info = &id;
4682   walk_gimple_seq (copy, replace_locals_stmt, replace_locals_op, &wi);
4683
4684   /* Clean up.  */
4685   pointer_map_destroy (id.decl_map);
4686   if (id.debug_map)
4687     pointer_map_destroy (id.debug_map);
4688
4689   return copy;
4690 }
4691
4692
4693 /* Allow someone to determine if SEARCH is a child of TOP from gdb.  */
4694
4695 static tree
4696 debug_find_tree_1 (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED, void *data)
4697 {
4698   if (*tp == data)
4699     return (tree) data;
4700   else
4701     return NULL;
4702 }
4703
4704 DEBUG_FUNCTION bool
4705 debug_find_tree (tree top, tree search)
4706 {
4707   return walk_tree_without_duplicates (&top, debug_find_tree_1, search) != 0;
4708 }
4709
4710
4711 /* Declare the variables created by the inliner.  Add all the variables in
4712    VARS to BIND_EXPR.  */
4713
4714 static void
4715 declare_inline_vars (tree block, tree vars)
4716 {
4717   tree t;
4718   for (t = vars; t; t = DECL_CHAIN (t))
4719     {
4720       DECL_SEEN_IN_BIND_EXPR_P (t) = 1;
4721       gcc_assert (!TREE_STATIC (t) && !TREE_ASM_WRITTEN (t));
4722       add_local_decl (cfun, t);
4723     }
4724
4725   if (block)
4726     BLOCK_VARS (block) = chainon (BLOCK_VARS (block), vars);
4727 }
4728
4729 /* Copy NODE (which must be a DECL).  The DECL originally was in the FROM_FN,
4730    but now it will be in the TO_FN.  PARM_TO_VAR means enable PARM_DECL to
4731    VAR_DECL translation.  */
4732
4733 static tree
4734 copy_decl_for_dup_finish (copy_body_data *id, tree decl, tree copy)
4735 {
4736   /* Don't generate debug information for the copy if we wouldn't have
4737      generated it for the copy either.  */
4738   DECL_ARTIFICIAL (copy) = DECL_ARTIFICIAL (decl);
4739   DECL_IGNORED_P (copy) = DECL_IGNORED_P (decl);
4740
4741   /* Set the DECL_ABSTRACT_ORIGIN so the debugging routines know what
4742      declaration inspired this copy.  */
4743   DECL_ABSTRACT_ORIGIN (copy) = DECL_ORIGIN (decl);
4744
4745   /* The new variable/label has no RTL, yet.  */
4746   if (CODE_CONTAINS_STRUCT (TREE_CODE (copy), TS_DECL_WRTL)
4747       && !TREE_STATIC (copy) && !DECL_EXTERNAL (copy))
4748     SET_DECL_RTL (copy, 0);
4749
4750   /* These args would always appear unused, if not for this.  */
4751   TREE_USED (copy) = 1;
4752
4753   /* Set the context for the new declaration.  */
4754   if (!DECL_CONTEXT (decl))
4755     /* Globals stay global.  */
4756     ;
4757   else if (DECL_CONTEXT (decl) != id->src_fn)
4758     /* Things that weren't in the scope of the function we're inlining
4759        from aren't in the scope we're inlining to, either.  */
4760     ;
4761   else if (TREE_STATIC (decl))
4762     /* Function-scoped static variables should stay in the original
4763        function.  */
4764     ;
4765   else
4766     /* Ordinary automatic local variables are now in the scope of the
4767        new function.  */
4768     DECL_CONTEXT (copy) = id->dst_fn;
4769
4770   if (TREE_CODE (decl) == VAR_DECL
4771       /* C++ clones functions during parsing, before
4772          referenced_vars.  */
4773       && gimple_referenced_vars (DECL_STRUCT_FUNCTION (id->src_fn))
4774       && referenced_var_lookup (DECL_STRUCT_FUNCTION (id->src_fn),
4775                                 DECL_UID (decl)))
4776     add_referenced_var (copy);
4777
4778   return copy;
4779 }
4780
4781 static tree
4782 copy_decl_to_var (tree decl, copy_body_data *id)
4783 {
4784   tree copy, type;
4785
4786   gcc_assert (TREE_CODE (decl) == PARM_DECL
4787               || TREE_CODE (decl) == RESULT_DECL);
4788
4789   type = TREE_TYPE (decl);
4790
4791   copy = build_decl (DECL_SOURCE_LOCATION (id->dst_fn),
4792                      VAR_DECL, DECL_NAME (decl), type);
4793   if (DECL_PT_UID_SET_P (decl))
4794     SET_DECL_PT_UID (copy, DECL_PT_UID (decl));
4795   TREE_ADDRESSABLE (copy) = TREE_ADDRESSABLE (decl);
4796   TREE_READONLY (copy) = TREE_READONLY (decl);
4797   TREE_THIS_VOLATILE (copy) = TREE_THIS_VOLATILE (decl);
4798   DECL_GIMPLE_REG_P (copy) = DECL_GIMPLE_REG_P (decl);
4799
4800   return copy_decl_for_dup_finish (id, decl, copy);
4801 }
4802
4803 /* Like copy_decl_to_var, but create a return slot object instead of a
4804    pointer variable for return by invisible reference.  */
4805
4806 static tree
4807 copy_result_decl_to_var (tree decl, copy_body_data *id)
4808 {
4809   tree copy, type;
4810
4811   gcc_assert (TREE_CODE (decl) == PARM_DECL
4812               || TREE_CODE (decl) == RESULT_DECL);
4813
4814   type = TREE_TYPE (decl);
4815   if (DECL_BY_REFERENCE (decl))
4816     type = TREE_TYPE (type);
4817
4818   copy = build_decl (DECL_SOURCE_LOCATION (id->dst_fn),
4819                      VAR_DECL, DECL_NAME (decl), type);
4820   if (DECL_PT_UID_SET_P (decl))
4821     SET_DECL_PT_UID (copy, DECL_PT_UID (decl));
4822   TREE_READONLY (copy) = TREE_READONLY (decl);
4823   TREE_THIS_VOLATILE (copy) = TREE_THIS_VOLATILE (decl);
4824   if (!DECL_BY_REFERENCE (decl))
4825     {
4826       TREE_ADDRESSABLE (copy) = TREE_ADDRESSABLE (decl);
4827       DECL_GIMPLE_REG_P (copy) = DECL_GIMPLE_REG_P (decl);
4828     }
4829
4830   return copy_decl_for_dup_finish (id, decl, copy);
4831 }
4832
4833 tree
4834 copy_decl_no_change (tree decl, copy_body_data *id)
4835 {
4836   tree copy;
4837
4838   copy = copy_node (decl);
4839
4840   /* The COPY is not abstract; it will be generated in DST_FN.  */
4841   DECL_ABSTRACT (copy) = 0;
4842   lang_hooks.dup_lang_specific_decl (copy);
4843
4844   /* TREE_ADDRESSABLE isn't used to indicate that a label's address has
4845      been taken; it's for internal bookkeeping in expand_goto_internal.  */
4846   if (TREE_CODE (copy) == LABEL_DECL)
4847     {
4848       TREE_ADDRESSABLE (copy) = 0;
4849       LABEL_DECL_UID (copy) = -1;
4850     }
4851
4852   return copy_decl_for_dup_finish (id, decl, copy);
4853 }
4854
4855 static tree
4856 copy_decl_maybe_to_var (tree decl, copy_body_data *id)
4857 {
4858   if (TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL)
4859     return copy_decl_to_var (decl, id);
4860   else
4861     return copy_decl_no_change (decl, id);
4862 }
4863
4864 /* Return a copy of the function's argument tree.  */
4865 static tree
4866 copy_arguments_for_versioning (tree orig_parm, copy_body_data * id,
4867                                bitmap args_to_skip, tree *vars)
4868 {
4869   tree arg, *parg;
4870   tree new_parm = NULL;
4871   int i = 0;
4872
4873   parg = &new_parm;
4874
4875   for (arg = orig_parm; arg; arg = DECL_CHAIN (arg), i++)
4876     if (!args_to_skip || !bitmap_bit_p (args_to_skip, i))
4877       {
4878         tree new_tree = remap_decl (arg, id);
4879         lang_hooks.dup_lang_specific_decl (new_tree);
4880         *parg = new_tree;
4881         parg = &DECL_CHAIN (new_tree);
4882       }
4883     else if (!pointer_map_contains (id->decl_map, arg))
4884       {
4885         /* Make an equivalent VAR_DECL.  If the argument was used
4886            as temporary variable later in function, the uses will be
4887            replaced by local variable.  */
4888         tree var = copy_decl_to_var (arg, id);
4889         add_referenced_var (var);
4890         insert_decl_map (id, arg, var);
4891         /* Declare this new variable.  */
4892         DECL_CHAIN (var) = *vars;
4893         *vars = var;
4894       }
4895   return new_parm;
4896 }
4897
4898 /* Return a copy of the function's static chain.  */
4899 static tree
4900 copy_static_chain (tree static_chain, copy_body_data * id)
4901 {
4902   tree *chain_copy, *pvar;
4903
4904   chain_copy = &static_chain;
4905   for (pvar = chain_copy; *pvar; pvar = &DECL_CHAIN (*pvar))
4906     {
4907       tree new_tree = remap_decl (*pvar, id);
4908       lang_hooks.dup_lang_specific_decl (new_tree);
4909       DECL_CHAIN (new_tree) = DECL_CHAIN (*pvar);
4910       *pvar = new_tree;
4911     }
4912   return static_chain;
4913 }
4914
4915 /* Return true if the function is allowed to be versioned.
4916    This is a guard for the versioning functionality.  */
4917
4918 bool
4919 tree_versionable_function_p (tree fndecl)
4920 {
4921   return (!lookup_attribute ("noclone", DECL_ATTRIBUTES (fndecl))
4922           && copy_forbidden (DECL_STRUCT_FUNCTION (fndecl), fndecl) == NULL);
4923 }
4924
4925 /* Delete all unreachable basic blocks and update callgraph.
4926    Doing so is somewhat nontrivial because we need to update all clones and
4927    remove inline function that become unreachable.  */
4928
4929 static bool
4930 delete_unreachable_blocks_update_callgraph (copy_body_data *id)
4931 {
4932   bool changed = false;
4933   basic_block b, next_bb;
4934
4935   find_unreachable_blocks ();
4936
4937   /* Delete all unreachable basic blocks.  */
4938
4939   for (b = ENTRY_BLOCK_PTR->next_bb; b != EXIT_BLOCK_PTR; b = next_bb)
4940     {
4941       next_bb = b->next_bb;
4942
4943       if (!(b->flags & BB_REACHABLE))
4944         {
4945           gimple_stmt_iterator bsi;
4946
4947           for (bsi = gsi_start_bb (b); !gsi_end_p (bsi); gsi_next (&bsi))
4948             if (gimple_code (gsi_stmt (bsi)) == GIMPLE_CALL)
4949               {
4950                 struct cgraph_edge *e;
4951                 struct cgraph_node *node;
4952
4953                 if ((e = cgraph_edge (id->dst_node, gsi_stmt (bsi))) != NULL)
4954                   {
4955                     if (!e->inline_failed)
4956                       cgraph_remove_node_and_inline_clones (e->callee, id->dst_node);
4957                     else
4958                       cgraph_remove_edge (e);
4959                   }
4960                 if (id->transform_call_graph_edges == CB_CGE_MOVE_CLONES
4961                     && id->dst_node->clones)
4962                   for (node = id->dst_node->clones; node != id->dst_node;)
4963                     {
4964                       if ((e = cgraph_edge (node, gsi_stmt (bsi))) != NULL)
4965                         {
4966                           if (!e->inline_failed && e->callee != id->src_node)
4967                             cgraph_remove_node_and_inline_clones (e->callee, id->dst_node);
4968                           else
4969                             cgraph_remove_edge (e);
4970                         }
4971
4972                       if (node->clones)
4973                         node = node->clones;
4974                       else if (node->next_sibling_clone)
4975                         node = node->next_sibling_clone;
4976                       else
4977                         {
4978                           while (node != id->dst_node && !node->next_sibling_clone)
4979                             node = node->clone_of;
4980                           if (node != id->dst_node)
4981                             node = node->next_sibling_clone;
4982                         }
4983                     }
4984               }
4985           delete_basic_block (b);
4986           changed = true;
4987         }
4988     }
4989
4990   if (changed)
4991     tidy_fallthru_edges ();
4992   return changed;
4993 }
4994
4995 /* Update clone info after duplication.  */
4996
4997 static void
4998 update_clone_info (copy_body_data * id)
4999 {
5000   struct cgraph_node *node;
5001   if (!id->dst_node->clones)
5002     return;
5003   for (node = id->dst_node->clones; node != id->dst_node;)
5004     {
5005       /* First update replace maps to match the new body.  */
5006       if (node->clone.tree_map)
5007         {
5008           unsigned int i;
5009           for (i = 0; i < VEC_length (ipa_replace_map_p, node->clone.tree_map); i++)
5010             {
5011               struct ipa_replace_map *replace_info;
5012               replace_info = VEC_index (ipa_replace_map_p, node->clone.tree_map, i);
5013               walk_tree (&replace_info->old_tree, copy_tree_body_r, id, NULL);
5014               walk_tree (&replace_info->new_tree, copy_tree_body_r, id, NULL);
5015             }
5016         }
5017       if (node->clones)
5018         node = node->clones;
5019       else if (node->next_sibling_clone)
5020         node = node->next_sibling_clone;
5021       else
5022         {
5023           while (node != id->dst_node && !node->next_sibling_clone)
5024             node = node->clone_of;
5025           if (node != id->dst_node)
5026             node = node->next_sibling_clone;
5027         }
5028     }
5029 }
5030
5031 /* Create a copy of a function's tree.
5032    OLD_DECL and NEW_DECL are FUNCTION_DECL tree nodes
5033    of the original function and the new copied function
5034    respectively.  In case we want to replace a DECL
5035    tree with another tree while duplicating the function's
5036    body, TREE_MAP represents the mapping between these
5037    trees. If UPDATE_CLONES is set, the call_stmt fields
5038    of edges of clones of the function will be updated.  
5039
5040    If non-NULL ARGS_TO_SKIP determine function parameters to remove
5041    from new version.
5042    If non-NULL BLOCK_TO_COPY determine what basic blocks to copy.
5043    If non_NULL NEW_ENTRY determine new entry BB of the clone.
5044 */
5045 void
5046 tree_function_versioning (tree old_decl, tree new_decl,
5047                           VEC(ipa_replace_map_p,gc)* tree_map,
5048                           bool update_clones, bitmap args_to_skip,
5049                           bitmap blocks_to_copy, basic_block new_entry)
5050 {
5051   struct cgraph_node *old_version_node;
5052   struct cgraph_node *new_version_node;
5053   copy_body_data id;
5054   tree p;
5055   unsigned i;
5056   struct ipa_replace_map *replace_info;
5057   basic_block old_entry_block, bb;
5058   VEC (gimple, heap) *init_stmts = VEC_alloc (gimple, heap, 10);
5059
5060   tree old_current_function_decl = current_function_decl;
5061   tree vars = NULL_TREE;
5062
5063   gcc_assert (TREE_CODE (old_decl) == FUNCTION_DECL
5064               && TREE_CODE (new_decl) == FUNCTION_DECL);
5065   DECL_POSSIBLY_INLINED (old_decl) = 1;
5066
5067   old_version_node = cgraph_node (old_decl);
5068   new_version_node = cgraph_node (new_decl);
5069
5070   /* Output the inlining info for this abstract function, since it has been
5071      inlined.  If we don't do this now, we can lose the information about the
5072      variables in the function when the blocks get blown away as soon as we
5073      remove the cgraph node.  */
5074   (*debug_hooks->outlining_inline_function) (old_decl);
5075
5076   DECL_ARTIFICIAL (new_decl) = 1;
5077   DECL_ABSTRACT_ORIGIN (new_decl) = DECL_ORIGIN (old_decl);
5078   DECL_FUNCTION_PERSONALITY (new_decl) = DECL_FUNCTION_PERSONALITY (old_decl);
5079
5080   /* Prepare the data structures for the tree copy.  */
5081   memset (&id, 0, sizeof (id));
5082
5083   /* Generate a new name for the new version. */
5084   id.statements_to_fold = pointer_set_create ();
5085
5086   id.decl_map = pointer_map_create ();
5087   id.debug_map = NULL;
5088   id.src_fn = old_decl;
5089   id.dst_fn = new_decl;
5090   id.src_node = old_version_node;
5091   id.dst_node = new_version_node;
5092   id.src_cfun = DECL_STRUCT_FUNCTION (old_decl);
5093   if (id.src_node->ipa_transforms_to_apply)
5094     {
5095       VEC(ipa_opt_pass,heap) * old_transforms_to_apply = id.dst_node->ipa_transforms_to_apply;
5096       unsigned int i;
5097
5098       id.dst_node->ipa_transforms_to_apply = VEC_copy (ipa_opt_pass, heap,
5099                                                        id.src_node->ipa_transforms_to_apply);
5100       for (i = 0; i < VEC_length (ipa_opt_pass, old_transforms_to_apply); i++)
5101         VEC_safe_push (ipa_opt_pass, heap, id.dst_node->ipa_transforms_to_apply,
5102                        VEC_index (ipa_opt_pass,
5103                                   old_transforms_to_apply,
5104                                   i));
5105     }
5106
5107   id.copy_decl = copy_decl_no_change;
5108   id.transform_call_graph_edges
5109     = update_clones ? CB_CGE_MOVE_CLONES : CB_CGE_MOVE;
5110   id.transform_new_cfg = true;
5111   id.transform_return_to_modify = false;
5112   id.transform_lang_insert_block = NULL;
5113
5114   current_function_decl = new_decl;
5115   old_entry_block = ENTRY_BLOCK_PTR_FOR_FUNCTION
5116     (DECL_STRUCT_FUNCTION (old_decl));
5117   initialize_cfun (new_decl, old_decl,
5118                    old_entry_block->count);
5119   DECL_STRUCT_FUNCTION (new_decl)->gimple_df->ipa_pta
5120     = id.src_cfun->gimple_df->ipa_pta;
5121   push_cfun (DECL_STRUCT_FUNCTION (new_decl));
5122
5123   /* Copy the function's static chain.  */
5124   p = DECL_STRUCT_FUNCTION (old_decl)->static_chain_decl;
5125   if (p)
5126     DECL_STRUCT_FUNCTION (new_decl)->static_chain_decl =
5127       copy_static_chain (DECL_STRUCT_FUNCTION (old_decl)->static_chain_decl,
5128                          &id);
5129
5130   /* If there's a tree_map, prepare for substitution.  */
5131   if (tree_map)
5132     for (i = 0; i < VEC_length (ipa_replace_map_p, tree_map); i++)
5133       {
5134         gimple init;
5135         replace_info = VEC_index (ipa_replace_map_p, tree_map, i);
5136         if (replace_info->replace_p)
5137           {
5138             tree op = replace_info->new_tree;
5139             if (!replace_info->old_tree)
5140               {
5141                 int i = replace_info->parm_num;
5142                 tree parm;
5143                 for (parm = DECL_ARGUMENTS (old_decl); i; parm = DECL_CHAIN (parm))
5144                   i --;
5145                 replace_info->old_tree = parm;
5146               }
5147                 
5148
5149             STRIP_NOPS (op);
5150
5151             if (TREE_CODE (op) == VIEW_CONVERT_EXPR)
5152               op = TREE_OPERAND (op, 0);
5153
5154             if (TREE_CODE (op) == ADDR_EXPR)
5155               {
5156                 op = TREE_OPERAND (op, 0);
5157                 while (handled_component_p (op))
5158                   op = TREE_OPERAND (op, 0);
5159                 if (TREE_CODE (op) == VAR_DECL)
5160                   add_referenced_var (op);
5161               }
5162             gcc_assert (TREE_CODE (replace_info->old_tree) == PARM_DECL);
5163             init = setup_one_parameter (&id, replace_info->old_tree,
5164                                         replace_info->new_tree, id.src_fn,
5165                                         NULL,
5166                                         &vars);
5167             if (init)
5168               VEC_safe_push (gimple, heap, init_stmts, init);
5169           }
5170       }
5171   /* Copy the function's arguments.  */
5172   if (DECL_ARGUMENTS (old_decl) != NULL_TREE)
5173     DECL_ARGUMENTS (new_decl) =
5174       copy_arguments_for_versioning (DECL_ARGUMENTS (old_decl), &id,
5175                                      args_to_skip, &vars);
5176
5177   DECL_INITIAL (new_decl) = remap_blocks (DECL_INITIAL (id.src_fn), &id);
5178   BLOCK_SUPERCONTEXT (DECL_INITIAL (new_decl)) = new_decl;
5179
5180   declare_inline_vars (DECL_INITIAL (new_decl), vars);
5181
5182   if (!VEC_empty (tree, DECL_STRUCT_FUNCTION (old_decl)->local_decls))
5183     /* Add local vars.  */
5184     add_local_variables (DECL_STRUCT_FUNCTION (old_decl), cfun, &id, false);
5185
5186   if (DECL_RESULT (old_decl) != NULL_TREE)
5187     {
5188       tree old_name;
5189       DECL_RESULT (new_decl) = remap_decl (DECL_RESULT (old_decl), &id);
5190       lang_hooks.dup_lang_specific_decl (DECL_RESULT (new_decl));
5191       if (gimple_in_ssa_p (id.src_cfun)
5192           && DECL_BY_REFERENCE (DECL_RESULT (old_decl))
5193           && (old_name
5194               = gimple_default_def (id.src_cfun, DECL_RESULT (old_decl))))
5195         {
5196           tree new_name = make_ssa_name (DECL_RESULT (new_decl), NULL);
5197           insert_decl_map (&id, old_name, new_name);
5198           SSA_NAME_DEF_STMT (new_name) = gimple_build_nop ();
5199           set_default_def (DECL_RESULT (new_decl), new_name);
5200         }
5201     }
5202
5203   /* Copy the Function's body.  */
5204   copy_body (&id, old_entry_block->count, REG_BR_PROB_BASE,
5205              ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, blocks_to_copy, new_entry);
5206
5207   /* Renumber the lexical scoping (non-code) blocks consecutively.  */
5208   number_blocks (new_decl);
5209
5210   /* We want to create the BB unconditionally, so that the addition of
5211      debug stmts doesn't affect BB count, which may in the end cause
5212      codegen differences.  */
5213   bb = split_edge (single_succ_edge (ENTRY_BLOCK_PTR));
5214   while (VEC_length (gimple, init_stmts))
5215     insert_init_stmt (&id, bb, VEC_pop (gimple, init_stmts));
5216   update_clone_info (&id);
5217
5218   /* Remap the nonlocal_goto_save_area, if any.  */
5219   if (cfun->nonlocal_goto_save_area)
5220     {
5221       struct walk_stmt_info wi;
5222
5223       memset (&wi, 0, sizeof (wi));
5224       wi.info = &id;
5225       walk_tree (&cfun->nonlocal_goto_save_area, remap_gimple_op_r, &wi, NULL);
5226     }
5227
5228   /* Clean up.  */
5229   pointer_map_destroy (id.decl_map);
5230   if (id.debug_map)
5231     pointer_map_destroy (id.debug_map);
5232   free_dominance_info (CDI_DOMINATORS);
5233   free_dominance_info (CDI_POST_DOMINATORS);
5234
5235   fold_marked_statements (0, id.statements_to_fold);
5236   pointer_set_destroy (id.statements_to_fold);
5237   fold_cond_expr_cond ();
5238   delete_unreachable_blocks_update_callgraph (&id);
5239   if (id.dst_node->analyzed)
5240     cgraph_rebuild_references ();
5241   update_ssa (TODO_update_ssa);
5242
5243   /* After partial cloning we need to rescale frequencies, so they are
5244      within proper range in the cloned function.  */
5245   if (new_entry)
5246     {
5247       struct cgraph_edge *e;
5248       rebuild_frequencies ();
5249
5250       new_version_node->count = ENTRY_BLOCK_PTR->count;
5251       for (e = new_version_node->callees; e; e = e->next_callee)
5252         {
5253           basic_block bb = gimple_bb (e->call_stmt);
5254           e->frequency = compute_call_stmt_bb_frequency (current_function_decl,
5255                                                          bb);
5256           e->count = bb->count;
5257         }
5258       for (e = new_version_node->indirect_calls; e; e = e->next_callee)
5259         {
5260           basic_block bb = gimple_bb (e->call_stmt);
5261           e->frequency = compute_call_stmt_bb_frequency (current_function_decl,
5262                                                          bb);
5263           e->count = bb->count;
5264         }
5265     }
5266
5267   free_dominance_info (CDI_DOMINATORS);
5268   free_dominance_info (CDI_POST_DOMINATORS);
5269
5270   gcc_assert (!id.debug_stmts);
5271   VEC_free (gimple, heap, init_stmts);
5272   pop_cfun ();
5273   current_function_decl = old_current_function_decl;
5274   gcc_assert (!current_function_decl
5275               || DECL_STRUCT_FUNCTION (current_function_decl) == cfun);
5276   return;
5277 }
5278
5279 /* EXP is CALL_EXPR present in a GENERIC expression tree.  Try to integrate
5280    the callee and return the inlined body on success.  */
5281
5282 tree
5283 maybe_inline_call_in_expr (tree exp)
5284 {
5285   tree fn = get_callee_fndecl (exp);
5286
5287   /* We can only try to inline "const" functions.  */
5288   if (fn && TREE_READONLY (fn) && DECL_SAVED_TREE (fn))
5289     {
5290       struct pointer_map_t *decl_map = pointer_map_create ();
5291       call_expr_arg_iterator iter;
5292       copy_body_data id;
5293       tree param, arg, t;
5294
5295       /* Remap the parameters.  */
5296       for (param = DECL_ARGUMENTS (fn), arg = first_call_expr_arg (exp, &iter);
5297            param;
5298            param = DECL_CHAIN (param), arg = next_call_expr_arg (&iter))
5299         *pointer_map_insert (decl_map, param) = arg;
5300
5301       memset (&id, 0, sizeof (id));
5302       id.src_fn = fn;
5303       id.dst_fn = current_function_decl;
5304       id.src_cfun = DECL_STRUCT_FUNCTION (fn);
5305       id.decl_map = decl_map;
5306
5307       id.copy_decl = copy_decl_no_change;
5308       id.transform_call_graph_edges = CB_CGE_DUPLICATE;
5309       id.transform_new_cfg = false;
5310       id.transform_return_to_modify = true;
5311       id.transform_lang_insert_block = false;
5312
5313       /* Make sure not to unshare trees behind the front-end's back
5314          since front-end specific mechanisms may rely on sharing.  */
5315       id.regimplify = false;
5316       id.do_not_unshare = true;
5317
5318       /* We're not inside any EH region.  */
5319       id.eh_lp_nr = 0;
5320
5321       t = copy_tree_body (&id);
5322       pointer_map_destroy (decl_map);
5323
5324       /* We can only return something suitable for use in a GENERIC
5325          expression tree.  */
5326       if (TREE_CODE (t) == MODIFY_EXPR)
5327         return TREE_OPERAND (t, 1);
5328     }
5329
5330    return NULL_TREE;
5331 }
5332
5333 /* Duplicate a type, fields and all.  */
5334
5335 tree
5336 build_duplicate_type (tree type)
5337 {
5338   struct copy_body_data id;
5339
5340   memset (&id, 0, sizeof (id));
5341   id.src_fn = current_function_decl;
5342   id.dst_fn = current_function_decl;
5343   id.src_cfun = cfun;
5344   id.decl_map = pointer_map_create ();
5345   id.debug_map = NULL;
5346   id.copy_decl = copy_decl_no_change;
5347
5348   type = remap_type_1 (type, &id);
5349
5350   pointer_map_destroy (id.decl_map);
5351   if (id.debug_map)
5352     pointer_map_destroy (id.debug_map);
5353
5354   TYPE_CANONICAL (type) = type;
5355
5356   return type;
5357 }
5358
5359 /* Return whether it is safe to inline a function because it used different
5360    target specific options or call site actual types mismatch parameter types.
5361    E is the call edge to be checked.  */
5362 bool
5363 tree_can_inline_p (struct cgraph_edge *e)
5364 {
5365 #if 0
5366   /* This causes a regression in SPEC in that it prevents a cold function from
5367      inlining a hot function.  Perhaps this should only apply to functions
5368      that the user declares hot/cold/optimize explicitly.  */
5369
5370   /* Don't inline a function with a higher optimization level than the
5371      caller, or with different space constraints (hot/cold functions).  */
5372   tree caller_tree = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (caller);
5373   tree callee_tree = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (callee);
5374
5375   if (caller_tree != callee_tree)
5376     {
5377       struct cl_optimization *caller_opt
5378         = TREE_OPTIMIZATION ((caller_tree)
5379                              ? caller_tree
5380                              : optimization_default_node);
5381
5382       struct cl_optimization *callee_opt
5383         = TREE_OPTIMIZATION ((callee_tree)
5384                              ? callee_tree
5385                              : optimization_default_node);
5386
5387       if ((caller_opt->optimize > callee_opt->optimize)
5388           || (caller_opt->optimize_size != callee_opt->optimize_size))
5389         return false;
5390     }
5391 #endif
5392   tree caller, callee, lhs;
5393
5394   caller = e->caller->decl;
5395   callee = e->callee->decl;
5396
5397   /* First check that inlining isn't simply forbidden in this case.  */
5398   if (inline_forbidden_into_p (caller, callee))
5399     {
5400       e->inline_failed = CIF_UNSPECIFIED;
5401       if (e->call_stmt)
5402         gimple_call_set_cannot_inline (e->call_stmt, true);
5403       return false;
5404     }
5405
5406   /* Allow the backend to decide if inlining is ok.  */
5407   if (!targetm.target_option.can_inline_p (caller, callee))
5408     {
5409       e->inline_failed = CIF_TARGET_OPTION_MISMATCH;
5410       if (e->call_stmt)
5411         gimple_call_set_cannot_inline (e->call_stmt, true);
5412       e->call_stmt_cannot_inline_p = true;
5413       return false;
5414     }
5415
5416   /* Do not inline calls where we cannot triviall work around mismatches
5417      in argument or return types.  */
5418   if (e->call_stmt
5419       && ((DECL_RESULT (callee)
5420            && !DECL_BY_REFERENCE (DECL_RESULT (callee))
5421            && (lhs = gimple_call_lhs (e->call_stmt)) != NULL_TREE
5422            && !useless_type_conversion_p (TREE_TYPE (DECL_RESULT (callee)),
5423                                           TREE_TYPE (lhs))
5424            && !fold_convertible_p (TREE_TYPE (DECL_RESULT (callee)), lhs))
5425           || !gimple_check_call_args (e->call_stmt)))
5426     {
5427       e->inline_failed = CIF_MISMATCHED_ARGUMENTS;
5428       if (e->call_stmt)
5429         gimple_call_set_cannot_inline (e->call_stmt, true);
5430       e->call_stmt_cannot_inline_p = true;
5431       return false;
5432     }
5433
5434   return true;
5435 }