OSDN Git Service

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