OSDN Git Service

In gcc/objc/:
[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,
1562                                               GSI_CONTINUE_LINKING);
1563           gimple_assign_set_rhs1 (stmt, new_rhs);
1564           id->regimplify = false;
1565         }
1566
1567       gsi_insert_after (&seq_gsi, stmt, GSI_NEW_STMT);
1568
1569       if (id->regimplify)
1570         gimple_regimplify_operands (stmt, &seq_gsi);
1571
1572       /* If copy_basic_block has been empty at the start of this iteration,
1573          call gsi_start_bb again to get at the newly added statements.  */
1574       if (gsi_end_p (copy_gsi))
1575         copy_gsi = gsi_start_bb (copy_basic_block);
1576       else
1577         gsi_next (&copy_gsi);
1578
1579       /* Process the new statement.  The call to gimple_regimplify_operands
1580          possibly turned the statement into multiple statements, we
1581          need to process all of them.  */
1582       do
1583         {
1584           tree fn;
1585
1586           stmt = gsi_stmt (copy_gsi);
1587           if (is_gimple_call (stmt)
1588               && gimple_call_va_arg_pack_p (stmt)
1589               && id->gimple_call)
1590             {
1591               /* __builtin_va_arg_pack () should be replaced by
1592                  all arguments corresponding to ... in the caller.  */
1593               tree p;
1594               gimple new_call;
1595               VEC(tree, heap) *argarray;
1596               size_t nargs = gimple_call_num_args (id->gimple_call);
1597               size_t n;
1598
1599               for (p = DECL_ARGUMENTS (id->src_fn); p; p = DECL_CHAIN (p))
1600                 nargs--;
1601
1602               /* Create the new array of arguments.  */
1603               n = nargs + gimple_call_num_args (stmt);
1604               argarray = VEC_alloc (tree, heap, n);
1605               VEC_safe_grow (tree, heap, argarray, n);
1606
1607               /* Copy all the arguments before '...'  */
1608               memcpy (VEC_address (tree, argarray),
1609                       gimple_call_arg_ptr (stmt, 0),
1610                       gimple_call_num_args (stmt) * sizeof (tree));
1611
1612               /* Append the arguments passed in '...'  */
1613               memcpy (VEC_address(tree, argarray) + gimple_call_num_args (stmt),
1614                       gimple_call_arg_ptr (id->gimple_call, 0)
1615                         + (gimple_call_num_args (id->gimple_call) - nargs),
1616                       nargs * sizeof (tree));
1617
1618               new_call = gimple_build_call_vec (gimple_call_fn (stmt),
1619                                                 argarray);
1620
1621               VEC_free (tree, heap, argarray);
1622
1623               /* Copy all GIMPLE_CALL flags, location and block, except
1624                  GF_CALL_VA_ARG_PACK.  */
1625               gimple_call_copy_flags (new_call, stmt);
1626               gimple_call_set_va_arg_pack (new_call, false);
1627               gimple_set_location (new_call, gimple_location (stmt));
1628               gimple_set_block (new_call, gimple_block (stmt));
1629               gimple_call_set_lhs (new_call, gimple_call_lhs (stmt));
1630
1631               gsi_replace (&copy_gsi, new_call, false);
1632               stmt = new_call;
1633             }
1634           else if (is_gimple_call (stmt)
1635                    && id->gimple_call
1636                    && (decl = gimple_call_fndecl (stmt))
1637                    && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
1638                    && DECL_FUNCTION_CODE (decl) == BUILT_IN_VA_ARG_PACK_LEN)
1639             {
1640               /* __builtin_va_arg_pack_len () should be replaced by
1641                  the number of anonymous arguments.  */
1642               size_t nargs = gimple_call_num_args (id->gimple_call);
1643               tree count, p;
1644               gimple new_stmt;
1645
1646               for (p = DECL_ARGUMENTS (id->src_fn); p; p = DECL_CHAIN (p))
1647                 nargs--;
1648
1649               count = build_int_cst (integer_type_node, nargs);
1650               new_stmt = gimple_build_assign (gimple_call_lhs (stmt), count);
1651               gsi_replace (&copy_gsi, new_stmt, false);
1652               stmt = new_stmt;
1653             }
1654
1655           /* Statements produced by inlining can be unfolded, especially
1656              when we constant propagated some operands.  We can't fold
1657              them right now for two reasons:
1658              1) folding require SSA_NAME_DEF_STMTs to be correct
1659              2) we can't change function calls to builtins.
1660              So we just mark statement for later folding.  We mark
1661              all new statements, instead just statements that has changed
1662              by some nontrivial substitution so even statements made
1663              foldable indirectly are updated.  If this turns out to be
1664              expensive, copy_body can be told to watch for nontrivial
1665              changes.  */
1666           if (id->statements_to_fold)
1667             pointer_set_insert (id->statements_to_fold, stmt);
1668
1669           /* We're duplicating a CALL_EXPR.  Find any corresponding
1670              callgraph edges and update or duplicate them.  */
1671           if (is_gimple_call (stmt))
1672             {
1673               struct cgraph_edge *edge;
1674               int flags;
1675
1676               switch (id->transform_call_graph_edges)
1677                 {
1678                 case CB_CGE_DUPLICATE:
1679                   edge = cgraph_edge (id->src_node, orig_stmt);
1680                   if (edge)
1681                     {
1682                       int edge_freq = edge->frequency;
1683                       edge = cgraph_clone_edge (edge, id->dst_node, stmt,
1684                                                 gimple_uid (stmt),
1685                                                 REG_BR_PROB_BASE, CGRAPH_FREQ_BASE,
1686                                                 edge->frequency, true);
1687                       /* We could also just rescale the frequency, but
1688                          doing so would introduce roundoff errors and make
1689                          verifier unhappy.  */
1690                       edge->frequency
1691                         = compute_call_stmt_bb_frequency (id->dst_node->decl,
1692                                                           copy_basic_block);
1693                       if (dump_file
1694                           && profile_status_for_function (cfun) != PROFILE_ABSENT
1695                           && (edge_freq > edge->frequency + 10
1696                               || edge_freq < edge->frequency - 10))
1697                         {
1698                           fprintf (dump_file, "Edge frequency estimated by "
1699                                    "cgraph %i diverge from inliner's estimate %i\n",
1700                                    edge_freq,
1701                                    edge->frequency);
1702                           fprintf (dump_file,
1703                                    "Orig bb: %i, orig bb freq %i, new bb freq %i\n",
1704                                    bb->index,
1705                                    bb->frequency,
1706                                    copy_basic_block->frequency);
1707                         }
1708                       stmt = cgraph_redirect_edge_call_stmt_to_callee (edge);
1709                     }
1710                   break;
1711
1712                 case CB_CGE_MOVE_CLONES:
1713                   cgraph_set_call_stmt_including_clones (id->dst_node,
1714                                                          orig_stmt, stmt);
1715                   edge = cgraph_edge (id->dst_node, stmt);
1716                   break;
1717
1718                 case CB_CGE_MOVE:
1719                   edge = cgraph_edge (id->dst_node, orig_stmt);
1720                   if (edge)
1721                     cgraph_set_call_stmt (edge, stmt);
1722                   break;
1723
1724                 default:
1725                   gcc_unreachable ();
1726                 }
1727
1728               /* Constant propagation on argument done during inlining
1729                  may create new direct call.  Produce an edge for it.  */
1730               if ((!edge
1731                    || (edge->indirect_inlining_edge
1732                        && id->transform_call_graph_edges == CB_CGE_MOVE_CLONES))
1733                   && (fn = gimple_call_fndecl (stmt)) != NULL)
1734                 {
1735                   struct cgraph_node *dest = cgraph_node (fn);
1736
1737                   /* We have missing edge in the callgraph.  This can happen
1738                      when previous inlining turned an indirect call into a
1739                      direct call by constant propagating arguments or we are
1740                      producing dead clone (for further cloning).  In all
1741                      other cases we hit a bug (incorrect node sharing is the
1742                      most common reason for missing edges).  */
1743                   gcc_assert (dest->needed || !dest->analyzed
1744                               || dest->address_taken
1745                               || !id->src_node->analyzed
1746                               || !id->dst_node->analyzed);
1747                   if (id->transform_call_graph_edges == CB_CGE_MOVE_CLONES)
1748                     cgraph_create_edge_including_clones
1749                       (id->dst_node, dest, orig_stmt, stmt, bb->count,
1750                        compute_call_stmt_bb_frequency (id->dst_node->decl,
1751                                                        copy_basic_block),
1752                        bb->loop_depth, CIF_ORIGINALLY_INDIRECT_CALL);
1753                   else
1754                     cgraph_create_edge (id->dst_node, dest, stmt,
1755                                         bb->count,
1756                                         compute_call_stmt_bb_frequency
1757                                           (id->dst_node->decl, copy_basic_block),
1758                                         bb->loop_depth)->inline_failed
1759                       = CIF_ORIGINALLY_INDIRECT_CALL;
1760                   if (dump_file)
1761                     {
1762                       fprintf (dump_file, "Created new direct edge to %s\n",
1763                                cgraph_node_name (dest));
1764                     }
1765                 }
1766
1767               flags = gimple_call_flags (stmt);
1768               if (flags & ECF_MAY_BE_ALLOCA)
1769                 cfun->calls_alloca = true;
1770               if (flags & ECF_RETURNS_TWICE)
1771                 cfun->calls_setjmp = true;
1772             }
1773
1774           maybe_duplicate_eh_stmt_fn (cfun, stmt, id->src_cfun, orig_stmt,
1775                                       id->eh_map, id->eh_lp_nr);
1776
1777           if (gimple_in_ssa_p (cfun) && !is_gimple_debug (stmt))
1778             {
1779               ssa_op_iter i;
1780               tree def;
1781
1782               find_new_referenced_vars (gsi_stmt (copy_gsi));
1783               FOR_EACH_SSA_TREE_OPERAND (def, stmt, i, SSA_OP_DEF)
1784                 if (TREE_CODE (def) == SSA_NAME)
1785                   SSA_NAME_DEF_STMT (def) = stmt;
1786             }
1787
1788           gsi_next (&copy_gsi);
1789         }
1790       while (!gsi_end_p (copy_gsi));
1791
1792       copy_gsi = gsi_last_bb (copy_basic_block);
1793     }
1794
1795   return copy_basic_block;
1796 }
1797
1798 /* Inserting Single Entry Multiple Exit region in SSA form into code in SSA
1799    form is quite easy, since dominator relationship for old basic blocks does
1800    not change.
1801
1802    There is however exception where inlining might change dominator relation
1803    across EH edges from basic block within inlined functions destinating
1804    to landing pads in function we inline into.
1805
1806    The function fills in PHI_RESULTs of such PHI nodes if they refer
1807    to gimple regs.  Otherwise, the function mark PHI_RESULT of such
1808    PHI nodes for renaming.  For non-gimple regs, renaming is safe: the
1809    EH edges are abnormal and SSA_NAME_OCCURS_IN_ABNORMAL_PHI must be
1810    set, and this means that there will be no overlapping live ranges
1811    for the underlying symbol.
1812
1813    This might change in future if we allow redirecting of EH edges and
1814    we might want to change way build CFG pre-inlining to include
1815    all the possible edges then.  */
1816 static void
1817 update_ssa_across_abnormal_edges (basic_block bb, basic_block ret_bb,
1818                                   bool can_throw, bool nonlocal_goto)
1819 {
1820   edge e;
1821   edge_iterator ei;
1822
1823   FOR_EACH_EDGE (e, ei, bb->succs)
1824     if (!e->dest->aux
1825         || ((basic_block)e->dest->aux)->index == ENTRY_BLOCK)
1826       {
1827         gimple phi;
1828         gimple_stmt_iterator si;
1829
1830         if (!nonlocal_goto)
1831           gcc_assert (e->flags & EDGE_EH);
1832
1833         if (!can_throw)
1834           gcc_assert (!(e->flags & EDGE_EH));
1835
1836         for (si = gsi_start_phis (e->dest); !gsi_end_p (si); gsi_next (&si))
1837           {
1838             edge re;
1839
1840             phi = gsi_stmt (si);
1841
1842             /* There shouldn't be any PHI nodes in the ENTRY_BLOCK.  */
1843             gcc_assert (!e->dest->aux);
1844
1845             gcc_assert ((e->flags & EDGE_EH)
1846                         || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (PHI_RESULT (phi)));
1847
1848             if (!is_gimple_reg (PHI_RESULT (phi)))
1849               {
1850                 mark_sym_for_renaming (SSA_NAME_VAR (PHI_RESULT (phi)));
1851                 continue;
1852               }
1853
1854             re = find_edge (ret_bb, e->dest);
1855             gcc_assert (re);
1856             gcc_assert ((re->flags & (EDGE_EH | EDGE_ABNORMAL))
1857                         == (e->flags & (EDGE_EH | EDGE_ABNORMAL)));
1858
1859             SET_USE (PHI_ARG_DEF_PTR_FROM_EDGE (phi, e),
1860                      USE_FROM_PTR (PHI_ARG_DEF_PTR_FROM_EDGE (phi, re)));
1861           }
1862       }
1863 }
1864
1865
1866 /* Copy edges from BB into its copy constructed earlier, scale profile
1867    accordingly.  Edges will be taken care of later.  Assume aux
1868    pointers to point to the copies of each BB.  Return true if any
1869    debug stmts are left after a statement that must end the basic block.  */
1870
1871 static bool
1872 copy_edges_for_bb (basic_block bb, gcov_type count_scale, basic_block ret_bb)
1873 {
1874   basic_block new_bb = (basic_block) bb->aux;
1875   edge_iterator ei;
1876   edge old_edge;
1877   gimple_stmt_iterator si;
1878   int flags;
1879   bool need_debug_cleanup = false;
1880
1881   /* Use the indices from the original blocks to create edges for the
1882      new ones.  */
1883   FOR_EACH_EDGE (old_edge, ei, bb->succs)
1884     if (!(old_edge->flags & EDGE_EH))
1885       {
1886         edge new_edge;
1887
1888         flags = old_edge->flags;
1889
1890         /* Return edges do get a FALLTHRU flag when the get inlined.  */
1891         if (old_edge->dest->index == EXIT_BLOCK && !old_edge->flags
1892             && old_edge->dest->aux != EXIT_BLOCK_PTR)
1893           flags |= EDGE_FALLTHRU;
1894         new_edge = make_edge (new_bb, (basic_block) old_edge->dest->aux, flags);
1895         new_edge->count = old_edge->count * count_scale / REG_BR_PROB_BASE;
1896         new_edge->probability = old_edge->probability;
1897       }
1898
1899   if (bb->index == ENTRY_BLOCK || bb->index == EXIT_BLOCK)
1900     return false;
1901
1902   for (si = gsi_start_bb (new_bb); !gsi_end_p (si);)
1903     {
1904       gimple copy_stmt;
1905       bool can_throw, nonlocal_goto;
1906
1907       copy_stmt = gsi_stmt (si);
1908       if (!is_gimple_debug (copy_stmt))
1909         {
1910           update_stmt (copy_stmt);
1911           if (gimple_in_ssa_p (cfun))
1912             mark_symbols_for_renaming (copy_stmt);
1913         }
1914
1915       /* Do this before the possible split_block.  */
1916       gsi_next (&si);
1917
1918       /* If this tree could throw an exception, there are two
1919          cases where we need to add abnormal edge(s): the
1920          tree wasn't in a region and there is a "current
1921          region" in the caller; or the original tree had
1922          EH edges.  In both cases split the block after the tree,
1923          and add abnormal edge(s) as needed; we need both
1924          those from the callee and the caller.
1925          We check whether the copy can throw, because the const
1926          propagation can change an INDIRECT_REF which throws
1927          into a COMPONENT_REF which doesn't.  If the copy
1928          can throw, the original could also throw.  */
1929       can_throw = stmt_can_throw_internal (copy_stmt);
1930       nonlocal_goto = stmt_can_make_abnormal_goto (copy_stmt);
1931
1932       if (can_throw || nonlocal_goto)
1933         {
1934           if (!gsi_end_p (si))
1935             {
1936               while (!gsi_end_p (si) && is_gimple_debug (gsi_stmt (si)))
1937                 gsi_next (&si);
1938               if (gsi_end_p (si))
1939                 need_debug_cleanup = true;
1940             }
1941           if (!gsi_end_p (si))
1942             /* Note that bb's predecessor edges aren't necessarily
1943                right at this point; split_block doesn't care.  */
1944             {
1945               edge e = split_block (new_bb, copy_stmt);
1946
1947               new_bb = e->dest;
1948               new_bb->aux = e->src->aux;
1949               si = gsi_start_bb (new_bb);
1950             }
1951         }
1952
1953       if (gimple_code (copy_stmt) == GIMPLE_EH_DISPATCH)
1954         make_eh_dispatch_edges (copy_stmt);
1955       else if (can_throw)
1956         make_eh_edges (copy_stmt);
1957
1958       if (nonlocal_goto)
1959         make_abnormal_goto_edges (gimple_bb (copy_stmt), true);
1960
1961       if ((can_throw || nonlocal_goto)
1962           && gimple_in_ssa_p (cfun))
1963         update_ssa_across_abnormal_edges (gimple_bb (copy_stmt), ret_bb,
1964                                           can_throw, nonlocal_goto);
1965     }
1966   return need_debug_cleanup;
1967 }
1968
1969 /* Copy the PHIs.  All blocks and edges are copied, some blocks
1970    was possibly split and new outgoing EH edges inserted.
1971    BB points to the block of original function and AUX pointers links
1972    the original and newly copied blocks.  */
1973
1974 static void
1975 copy_phis_for_bb (basic_block bb, copy_body_data *id)
1976 {
1977   basic_block const new_bb = (basic_block) bb->aux;
1978   edge_iterator ei;
1979   gimple phi;
1980   gimple_stmt_iterator si;
1981   edge new_edge;
1982   bool inserted = false;
1983
1984   for (si = gsi_start (phi_nodes (bb)); !gsi_end_p (si); gsi_next (&si))
1985     {
1986       tree res, new_res;
1987       gimple new_phi;
1988
1989       phi = gsi_stmt (si);
1990       res = PHI_RESULT (phi);
1991       new_res = res;
1992       if (is_gimple_reg (res))
1993         {
1994           walk_tree (&new_res, copy_tree_body_r, id, NULL);
1995           SSA_NAME_DEF_STMT (new_res)
1996             = new_phi = create_phi_node (new_res, new_bb);
1997           FOR_EACH_EDGE (new_edge, ei, new_bb->preds)
1998             {
1999               edge old_edge = find_edge ((basic_block) new_edge->src->aux, bb);
2000               tree arg;
2001               tree new_arg;
2002               tree block = id->block;
2003               edge_iterator ei2;
2004
2005               /* When doing partial cloning, we allow PHIs on the entry block
2006                  as long as all the arguments are the same.  Find any input
2007                  edge to see argument to copy.  */
2008               if (!old_edge)
2009                 FOR_EACH_EDGE (old_edge, ei2, bb->preds)
2010                   if (!old_edge->src->aux)
2011                     break;
2012
2013               arg = PHI_ARG_DEF_FROM_EDGE (phi, old_edge);
2014               new_arg = arg;
2015               id->block = NULL_TREE;
2016               walk_tree (&new_arg, copy_tree_body_r, id, NULL);
2017               id->block = block;
2018               gcc_assert (new_arg);
2019               /* With return slot optimization we can end up with
2020                  non-gimple (foo *)&this->m, fix that here.  */
2021               if (TREE_CODE (new_arg) != SSA_NAME
2022                   && TREE_CODE (new_arg) != FUNCTION_DECL
2023                   && !is_gimple_val (new_arg))
2024                 {
2025                   gimple_seq stmts = NULL;
2026                   new_arg = force_gimple_operand (new_arg, &stmts, true, NULL);
2027                   gsi_insert_seq_on_edge (new_edge, stmts);
2028                   inserted = true;
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   /* Commit the delayed edge insertions.  */
2037   if (inserted)
2038     FOR_EACH_EDGE (new_edge, ei, new_bb->preds)
2039       gsi_commit_one_edge_insert (new_edge, NULL);
2040 }
2041
2042
2043 /* Wrapper for remap_decl so it can be used as a callback.  */
2044
2045 static tree
2046 remap_decl_1 (tree decl, void *data)
2047 {
2048   return remap_decl (decl, (copy_body_data *) data);
2049 }
2050
2051 /* Build struct function and associated datastructures for the new clone
2052    NEW_FNDECL to be build.  CALLEE_FNDECL is the original */
2053
2054 static void
2055 initialize_cfun (tree new_fndecl, tree callee_fndecl, gcov_type count)
2056 {
2057   struct function *src_cfun = DECL_STRUCT_FUNCTION (callee_fndecl);
2058   gcov_type count_scale;
2059
2060   if (ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->count)
2061     count_scale = (REG_BR_PROB_BASE * count
2062                    / ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->count);
2063   else
2064     count_scale = REG_BR_PROB_BASE;
2065
2066   /* Register specific tree functions.  */
2067   gimple_register_cfg_hooks ();
2068
2069   /* Get clean struct function.  */
2070   push_struct_function (new_fndecl);
2071
2072   /* We will rebuild these, so just sanity check that they are empty.  */
2073   gcc_assert (VALUE_HISTOGRAMS (cfun) == NULL);
2074   gcc_assert (cfun->local_decls == NULL);
2075   gcc_assert (cfun->cfg == NULL);
2076   gcc_assert (cfun->decl == new_fndecl);
2077
2078   /* Copy items we preserve during cloning.  */
2079   cfun->static_chain_decl = src_cfun->static_chain_decl;
2080   cfun->nonlocal_goto_save_area = src_cfun->nonlocal_goto_save_area;
2081   cfun->function_end_locus = src_cfun->function_end_locus;
2082   cfun->curr_properties = src_cfun->curr_properties;
2083   cfun->last_verified = src_cfun->last_verified;
2084   cfun->va_list_gpr_size = src_cfun->va_list_gpr_size;
2085   cfun->va_list_fpr_size = src_cfun->va_list_fpr_size;
2086   cfun->has_nonlocal_label = src_cfun->has_nonlocal_label;
2087   cfun->stdarg = src_cfun->stdarg;
2088   cfun->dont_save_pending_sizes_p = src_cfun->dont_save_pending_sizes_p;
2089   cfun->after_inlining = src_cfun->after_inlining;
2090   cfun->can_throw_non_call_exceptions
2091     = src_cfun->can_throw_non_call_exceptions;
2092   cfun->returns_struct = src_cfun->returns_struct;
2093   cfun->returns_pcc_struct = src_cfun->returns_pcc_struct;
2094   cfun->after_tree_profile = src_cfun->after_tree_profile;
2095
2096   init_empty_tree_cfg ();
2097
2098   profile_status_for_function (cfun) = profile_status_for_function (src_cfun);
2099   ENTRY_BLOCK_PTR->count =
2100     (ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->count * count_scale /
2101      REG_BR_PROB_BASE);
2102   ENTRY_BLOCK_PTR->frequency
2103     = ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->frequency;
2104   EXIT_BLOCK_PTR->count =
2105     (EXIT_BLOCK_PTR_FOR_FUNCTION (src_cfun)->count * count_scale /
2106      REG_BR_PROB_BASE);
2107   EXIT_BLOCK_PTR->frequency =
2108     EXIT_BLOCK_PTR_FOR_FUNCTION (src_cfun)->frequency;
2109   if (src_cfun->eh)
2110     init_eh_for_function ();
2111
2112   if (src_cfun->gimple_df)
2113     {
2114       init_tree_ssa (cfun);
2115       cfun->gimple_df->in_ssa_p = true;
2116       init_ssa_operands ();
2117     }
2118   pop_cfun ();
2119 }
2120
2121 /* Helper function for copy_cfg_body.  Move debug stmts from the end
2122    of NEW_BB to the beginning of successor basic blocks when needed.  If the
2123    successor has multiple predecessors, reset them, otherwise keep
2124    their value.  */
2125
2126 static void
2127 maybe_move_debug_stmts_to_successors (copy_body_data *id, basic_block new_bb)
2128 {
2129   edge e;
2130   edge_iterator ei;
2131   gimple_stmt_iterator si = gsi_last_nondebug_bb (new_bb);
2132
2133   if (gsi_end_p (si)
2134       || gsi_one_before_end_p (si)
2135       || !(stmt_can_throw_internal (gsi_stmt (si))
2136            || stmt_can_make_abnormal_goto (gsi_stmt (si))))
2137     return;
2138
2139   FOR_EACH_EDGE (e, ei, new_bb->succs)
2140     {
2141       gimple_stmt_iterator ssi = gsi_last_bb (new_bb);
2142       gimple_stmt_iterator dsi = gsi_after_labels (e->dest);
2143       while (is_gimple_debug (gsi_stmt (ssi)))
2144         {
2145           gimple stmt = gsi_stmt (ssi), new_stmt;
2146           tree var;
2147           tree value;
2148
2149           /* For the last edge move the debug stmts instead of copying
2150              them.  */
2151           if (ei_one_before_end_p (ei))
2152             {
2153               si = ssi;
2154               gsi_prev (&ssi);
2155               if (!single_pred_p (e->dest))
2156                 gimple_debug_bind_reset_value (stmt);
2157               gsi_remove (&si, false);
2158               gsi_insert_before (&dsi, stmt, GSI_SAME_STMT);
2159               continue;
2160             }
2161
2162           var = gimple_debug_bind_get_var (stmt);
2163           if (single_pred_p (e->dest))
2164             {
2165               value = gimple_debug_bind_get_value (stmt);
2166               value = unshare_expr (value);
2167             }
2168           else
2169             value = NULL_TREE;
2170           new_stmt = gimple_build_debug_bind (var, value, stmt);
2171           gsi_insert_before (&dsi, new_stmt, GSI_SAME_STMT);
2172           VEC_safe_push (gimple, heap, id->debug_stmts, new_stmt);
2173           gsi_prev (&ssi);
2174         }
2175     }
2176 }
2177
2178 /* Make a copy of the body of FN so that it can be inserted inline in
2179    another function.  Walks FN via CFG, returns new fndecl.  */
2180
2181 static tree
2182 copy_cfg_body (copy_body_data * id, gcov_type count, int frequency_scale,
2183                basic_block entry_block_map, basic_block exit_block_map,
2184                bitmap blocks_to_copy, basic_block new_entry)
2185 {
2186   tree callee_fndecl = id->src_fn;
2187   /* Original cfun for the callee, doesn't change.  */
2188   struct function *src_cfun = DECL_STRUCT_FUNCTION (callee_fndecl);
2189   struct function *cfun_to_copy;
2190   basic_block bb;
2191   tree new_fndecl = NULL;
2192   bool need_debug_cleanup = false;
2193   gcov_type count_scale;
2194   int last;
2195   int incoming_frequency = 0;
2196   gcov_type incoming_count = 0;
2197
2198   if (ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->count)
2199     count_scale = (REG_BR_PROB_BASE * count
2200                    / ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->count);
2201   else
2202     count_scale = REG_BR_PROB_BASE;
2203
2204   /* Register specific tree functions.  */
2205   gimple_register_cfg_hooks ();
2206
2207   /* If we are inlining just region of the function, make sure to connect new entry
2208      to ENTRY_BLOCK_PTR.  Since new entry can be part of loop, we must compute
2209      frequency and probability of ENTRY_BLOCK_PTR based on the frequencies and
2210      probabilities of edges incoming from nonduplicated region.  */
2211   if (new_entry)
2212     {
2213       edge e;
2214       edge_iterator ei;
2215
2216       FOR_EACH_EDGE (e, ei, new_entry->preds)
2217         if (!e->src->aux)
2218           {
2219             incoming_frequency += EDGE_FREQUENCY (e);
2220             incoming_count += e->count;
2221           }
2222       incoming_count = incoming_count * count_scale / REG_BR_PROB_BASE;
2223       incoming_frequency
2224         = incoming_frequency * frequency_scale / REG_BR_PROB_BASE;
2225       ENTRY_BLOCK_PTR->count = incoming_count;
2226       ENTRY_BLOCK_PTR->frequency = incoming_frequency;
2227     }
2228
2229   /* Must have a CFG here at this point.  */
2230   gcc_assert (ENTRY_BLOCK_PTR_FOR_FUNCTION
2231               (DECL_STRUCT_FUNCTION (callee_fndecl)));
2232
2233   cfun_to_copy = id->src_cfun = DECL_STRUCT_FUNCTION (callee_fndecl);
2234
2235   ENTRY_BLOCK_PTR_FOR_FUNCTION (cfun_to_copy)->aux = entry_block_map;
2236   EXIT_BLOCK_PTR_FOR_FUNCTION (cfun_to_copy)->aux = exit_block_map;
2237   entry_block_map->aux = ENTRY_BLOCK_PTR_FOR_FUNCTION (cfun_to_copy);
2238   exit_block_map->aux = EXIT_BLOCK_PTR_FOR_FUNCTION (cfun_to_copy);
2239
2240   /* Duplicate any exception-handling regions.  */
2241   if (cfun->eh)
2242     id->eh_map = duplicate_eh_regions (cfun_to_copy, NULL, id->eh_lp_nr,
2243                                        remap_decl_1, id);
2244
2245   /* Use aux pointers to map the original blocks to copy.  */
2246   FOR_EACH_BB_FN (bb, cfun_to_copy)
2247     if (!blocks_to_copy || bitmap_bit_p (blocks_to_copy, bb->index))
2248       {
2249         basic_block new_bb = copy_bb (id, bb, frequency_scale, count_scale);
2250         bb->aux = new_bb;
2251         new_bb->aux = bb;
2252       }
2253
2254   last = last_basic_block;
2255
2256   /* Now that we've duplicated the blocks, duplicate their edges.  */
2257   FOR_ALL_BB_FN (bb, cfun_to_copy)
2258     if (!blocks_to_copy
2259         || (bb->index > 0 && bitmap_bit_p (blocks_to_copy, bb->index)))
2260       need_debug_cleanup |= copy_edges_for_bb (bb, count_scale, exit_block_map);
2261
2262   if (new_entry)
2263     {
2264       edge e = make_edge (entry_block_map, (basic_block)new_entry->aux, EDGE_FALLTHRU);
2265       e->probability = REG_BR_PROB_BASE;
2266       e->count = incoming_count;
2267     }
2268
2269   if (gimple_in_ssa_p (cfun))
2270     FOR_ALL_BB_FN (bb, cfun_to_copy)
2271       if (!blocks_to_copy
2272           || (bb->index > 0 && bitmap_bit_p (blocks_to_copy, bb->index)))
2273         copy_phis_for_bb (bb, id);
2274
2275   FOR_ALL_BB_FN (bb, cfun_to_copy)
2276     if (bb->aux)
2277       {
2278         if (need_debug_cleanup
2279             && bb->index != ENTRY_BLOCK
2280             && bb->index != EXIT_BLOCK)
2281           maybe_move_debug_stmts_to_successors (id, (basic_block) bb->aux);
2282         ((basic_block)bb->aux)->aux = NULL;
2283         bb->aux = NULL;
2284       }
2285
2286   /* Zero out AUX fields of newly created block during EH edge
2287      insertion. */
2288   for (; last < last_basic_block; last++)
2289     {
2290       if (need_debug_cleanup)
2291         maybe_move_debug_stmts_to_successors (id, BASIC_BLOCK (last));
2292       BASIC_BLOCK (last)->aux = NULL;
2293     }
2294   entry_block_map->aux = NULL;
2295   exit_block_map->aux = NULL;
2296
2297   if (id->eh_map)
2298     {
2299       pointer_map_destroy (id->eh_map);
2300       id->eh_map = NULL;
2301     }
2302
2303   return new_fndecl;
2304 }
2305
2306 /* Copy the debug STMT using ID.  We deal with these statements in a
2307    special way: if any variable in their VALUE expression wasn't
2308    remapped yet, we won't remap it, because that would get decl uids
2309    out of sync, causing codegen differences between -g and -g0.  If
2310    this arises, we drop the VALUE expression altogether.  */
2311
2312 static void
2313 copy_debug_stmt (gimple stmt, copy_body_data *id)
2314 {
2315   tree t, *n;
2316   struct walk_stmt_info wi;
2317
2318   t = id->block;
2319   if (gimple_block (stmt))
2320     {
2321       tree *n;
2322       n = (tree *) pointer_map_contains (id->decl_map, gimple_block (stmt));
2323       if (n)
2324         t = *n;
2325     }
2326   gimple_set_block (stmt, t);
2327
2328   /* Remap all the operands in COPY.  */
2329   memset (&wi, 0, sizeof (wi));
2330   wi.info = id;
2331
2332   processing_debug_stmt = 1;
2333
2334   t = gimple_debug_bind_get_var (stmt);
2335
2336   if (TREE_CODE (t) == PARM_DECL && id->debug_map
2337       && (n = (tree *) pointer_map_contains (id->debug_map, t)))
2338     {
2339       gcc_assert (TREE_CODE (*n) == VAR_DECL);
2340       t = *n;
2341     }
2342   else if (TREE_CODE (t) == VAR_DECL
2343            && !TREE_STATIC (t)
2344            && gimple_in_ssa_p (cfun)
2345            && !pointer_map_contains (id->decl_map, t)
2346            && !var_ann (t))
2347     /* T is a non-localized variable.  */;
2348   else
2349     walk_tree (&t, remap_gimple_op_r, &wi, NULL);
2350
2351   gimple_debug_bind_set_var (stmt, t);
2352
2353   if (gimple_debug_bind_has_value_p (stmt))
2354     walk_tree (gimple_debug_bind_get_value_ptr (stmt),
2355                remap_gimple_op_r, &wi, NULL);
2356
2357   /* Punt if any decl couldn't be remapped.  */
2358   if (processing_debug_stmt < 0)
2359     gimple_debug_bind_reset_value (stmt);
2360
2361   processing_debug_stmt = 0;
2362
2363   update_stmt (stmt);
2364   if (gimple_in_ssa_p (cfun))
2365     mark_symbols_for_renaming (stmt);
2366 }
2367
2368 /* Process deferred debug stmts.  In order to give values better odds
2369    of being successfully remapped, we delay the processing of debug
2370    stmts until all other stmts that might require remapping are
2371    processed.  */
2372
2373 static void
2374 copy_debug_stmts (copy_body_data *id)
2375 {
2376   size_t i;
2377   gimple stmt;
2378
2379   if (!id->debug_stmts)
2380     return;
2381
2382   FOR_EACH_VEC_ELT (gimple, id->debug_stmts, i, stmt)
2383     copy_debug_stmt (stmt, id);
2384
2385   VEC_free (gimple, heap, id->debug_stmts);
2386 }
2387
2388 /* Make a copy of the body of SRC_FN so that it can be inserted inline in
2389    another function.  */
2390
2391 static tree
2392 copy_tree_body (copy_body_data *id)
2393 {
2394   tree fndecl = id->src_fn;
2395   tree body = DECL_SAVED_TREE (fndecl);
2396
2397   walk_tree (&body, copy_tree_body_r, id, NULL);
2398
2399   return body;
2400 }
2401
2402 /* Make a copy of the body of FN so that it can be inserted inline in
2403    another function.  */
2404
2405 static tree
2406 copy_body (copy_body_data *id, gcov_type count, int frequency_scale,
2407            basic_block entry_block_map, basic_block exit_block_map,
2408            bitmap blocks_to_copy, basic_block new_entry)
2409 {
2410   tree fndecl = id->src_fn;
2411   tree body;
2412
2413   /* If this body has a CFG, walk CFG and copy.  */
2414   gcc_assert (ENTRY_BLOCK_PTR_FOR_FUNCTION (DECL_STRUCT_FUNCTION (fndecl)));
2415   body = copy_cfg_body (id, count, frequency_scale, entry_block_map, exit_block_map,
2416                         blocks_to_copy, new_entry);
2417   copy_debug_stmts (id);
2418
2419   return body;
2420 }
2421
2422 /* Return true if VALUE is an ADDR_EXPR of an automatic variable
2423    defined in function FN, or of a data member thereof.  */
2424
2425 static bool
2426 self_inlining_addr_expr (tree value, tree fn)
2427 {
2428   tree var;
2429
2430   if (TREE_CODE (value) != ADDR_EXPR)
2431     return false;
2432
2433   var = get_base_address (TREE_OPERAND (value, 0));
2434
2435   return var && auto_var_in_fn_p (var, fn);
2436 }
2437
2438 /* Append to BB a debug annotation that binds VAR to VALUE, inheriting
2439    lexical block and line number information from base_stmt, if given,
2440    or from the last stmt of the block otherwise.  */
2441
2442 static gimple
2443 insert_init_debug_bind (copy_body_data *id,
2444                         basic_block bb, tree var, tree value,
2445                         gimple base_stmt)
2446 {
2447   gimple note;
2448   gimple_stmt_iterator gsi;
2449   tree tracked_var;
2450
2451   if (!gimple_in_ssa_p (id->src_cfun))
2452     return NULL;
2453
2454   if (!MAY_HAVE_DEBUG_STMTS)
2455     return NULL;
2456
2457   tracked_var = target_for_debug_bind (var);
2458   if (!tracked_var)
2459     return NULL;
2460
2461   if (bb)
2462     {
2463       gsi = gsi_last_bb (bb);
2464       if (!base_stmt && !gsi_end_p (gsi))
2465         base_stmt = gsi_stmt (gsi);
2466     }
2467
2468   note = gimple_build_debug_bind (tracked_var, value, base_stmt);
2469
2470   if (bb)
2471     {
2472       if (!gsi_end_p (gsi))
2473         gsi_insert_after (&gsi, note, GSI_SAME_STMT);
2474       else
2475         gsi_insert_before (&gsi, note, GSI_SAME_STMT);
2476     }
2477
2478   return note;
2479 }
2480
2481 static void
2482 insert_init_stmt (copy_body_data *id, basic_block bb, gimple init_stmt)
2483 {
2484   /* If VAR represents a zero-sized variable, it's possible that the
2485      assignment statement may result in no gimple statements.  */
2486   if (init_stmt)
2487     {
2488       gimple_stmt_iterator si = gsi_last_bb (bb);
2489
2490       /* We can end up with init statements that store to a non-register
2491          from a rhs with a conversion.  Handle that here by forcing the
2492          rhs into a temporary.  gimple_regimplify_operands is not
2493          prepared to do this for us.  */
2494       if (!is_gimple_debug (init_stmt)
2495           && !is_gimple_reg (gimple_assign_lhs (init_stmt))
2496           && is_gimple_reg_type (TREE_TYPE (gimple_assign_lhs (init_stmt)))
2497           && gimple_assign_rhs_class (init_stmt) == GIMPLE_UNARY_RHS)
2498         {
2499           tree rhs = build1 (gimple_assign_rhs_code (init_stmt),
2500                              gimple_expr_type (init_stmt),
2501                              gimple_assign_rhs1 (init_stmt));
2502           rhs = force_gimple_operand_gsi (&si, rhs, true, NULL_TREE, false,
2503                                           GSI_NEW_STMT);
2504           gimple_assign_set_rhs_code (init_stmt, TREE_CODE (rhs));
2505           gimple_assign_set_rhs1 (init_stmt, rhs);
2506         }
2507       gsi_insert_after (&si, init_stmt, GSI_NEW_STMT);
2508       gimple_regimplify_operands (init_stmt, &si);
2509       mark_symbols_for_renaming (init_stmt);
2510
2511       if (!is_gimple_debug (init_stmt) && MAY_HAVE_DEBUG_STMTS)
2512         {
2513           tree var, def = gimple_assign_lhs (init_stmt);
2514
2515           if (TREE_CODE (def) == SSA_NAME)
2516             var = SSA_NAME_VAR (def);
2517           else
2518             var = def;
2519
2520           insert_init_debug_bind (id, bb, var, def, init_stmt);
2521         }
2522     }
2523 }
2524
2525 /* Initialize parameter P with VALUE.  If needed, produce init statement
2526    at the end of BB.  When BB is NULL, we return init statement to be
2527    output later.  */
2528 static gimple
2529 setup_one_parameter (copy_body_data *id, tree p, tree value, tree fn,
2530                      basic_block bb, tree *vars)
2531 {
2532   gimple init_stmt = NULL;
2533   tree var;
2534   tree rhs = value;
2535   tree def = (gimple_in_ssa_p (cfun)
2536               ? gimple_default_def (id->src_cfun, p) : NULL);
2537
2538   if (value
2539       && value != error_mark_node
2540       && !useless_type_conversion_p (TREE_TYPE (p), TREE_TYPE (value)))
2541     {
2542       if (fold_convertible_p (TREE_TYPE (p), value))
2543         rhs = fold_build1 (NOP_EXPR, TREE_TYPE (p), value);
2544       else
2545         /* ???  For valid (GIMPLE) programs we should not end up here.
2546            Still if something has gone wrong and we end up with truly
2547            mismatched types here, fall back to using a VIEW_CONVERT_EXPR
2548            to not leak invalid GIMPLE to the following passes.  */
2549         rhs = fold_build1 (VIEW_CONVERT_EXPR, TREE_TYPE (p), value);
2550     }
2551
2552   /* Make an equivalent VAR_DECL.  Note that we must NOT remap the type
2553      here since the type of this decl must be visible to the calling
2554      function.  */
2555   var = copy_decl_to_var (p, id);
2556
2557   /* We're actually using the newly-created var.  */
2558   if (gimple_in_ssa_p (cfun) && TREE_CODE (var) == VAR_DECL)
2559     {
2560       get_var_ann (var);
2561       add_referenced_var (var);
2562     }
2563
2564   /* Declare this new variable.  */
2565   DECL_CHAIN (var) = *vars;
2566   *vars = var;
2567
2568   /* Make gimplifier happy about this variable.  */
2569   DECL_SEEN_IN_BIND_EXPR_P (var) = 1;
2570
2571   /* If the parameter is never assigned to, has no SSA_NAMEs created,
2572      we would not need to create a new variable here at all, if it
2573      weren't for debug info.  Still, we can just use the argument
2574      value.  */
2575   if (TREE_READONLY (p)
2576       && !TREE_ADDRESSABLE (p)
2577       && value && !TREE_SIDE_EFFECTS (value)
2578       && !def)
2579     {
2580       /* We may produce non-gimple trees by adding NOPs or introduce
2581          invalid sharing when operand is not really constant.
2582          It is not big deal to prohibit constant propagation here as
2583          we will constant propagate in DOM1 pass anyway.  */
2584       if (is_gimple_min_invariant (value)
2585           && useless_type_conversion_p (TREE_TYPE (p),
2586                                                  TREE_TYPE (value))
2587           /* We have to be very careful about ADDR_EXPR.  Make sure
2588              the base variable isn't a local variable of the inlined
2589              function, e.g., when doing recursive inlining, direct or
2590              mutually-recursive or whatever, which is why we don't
2591              just test whether fn == current_function_decl.  */
2592           && ! self_inlining_addr_expr (value, fn))
2593         {
2594           insert_decl_map (id, p, value);
2595           insert_debug_decl_map (id, p, var);
2596           return insert_init_debug_bind (id, bb, var, value, NULL);
2597         }
2598     }
2599
2600   /* Register the VAR_DECL as the equivalent for the PARM_DECL;
2601      that way, when the PARM_DECL is encountered, it will be
2602      automatically replaced by the VAR_DECL.  */
2603   insert_decl_map (id, p, var);
2604
2605   /* Even if P was TREE_READONLY, the new VAR should not be.
2606      In the original code, we would have constructed a
2607      temporary, and then the function body would have never
2608      changed the value of P.  However, now, we will be
2609      constructing VAR directly.  The constructor body may
2610      change its value multiple times as it is being
2611      constructed.  Therefore, it must not be TREE_READONLY;
2612      the back-end assumes that TREE_READONLY variable is
2613      assigned to only once.  */
2614   if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (p)))
2615     TREE_READONLY (var) = 0;
2616
2617   /* If there is no setup required and we are in SSA, take the easy route
2618      replacing all SSA names representing the function parameter by the
2619      SSA name passed to function.
2620
2621      We need to construct map for the variable anyway as it might be used
2622      in different SSA names when parameter is set in function.
2623
2624      Do replacement at -O0 for const arguments replaced by constant.
2625      This is important for builtin_constant_p and other construct requiring
2626      constant argument to be visible in inlined function body.  */
2627   if (gimple_in_ssa_p (cfun) && rhs && def && is_gimple_reg (p)
2628       && (optimize
2629           || (TREE_READONLY (p)
2630               && is_gimple_min_invariant (rhs)))
2631       && (TREE_CODE (rhs) == SSA_NAME
2632           || is_gimple_min_invariant (rhs))
2633       && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (def))
2634     {
2635       insert_decl_map (id, def, rhs);
2636       return insert_init_debug_bind (id, bb, var, rhs, NULL);
2637     }
2638
2639   /* If the value of argument is never used, don't care about initializing
2640      it.  */
2641   if (optimize && gimple_in_ssa_p (cfun) && !def && is_gimple_reg (p))
2642     {
2643       gcc_assert (!value || !TREE_SIDE_EFFECTS (value));
2644       return insert_init_debug_bind (id, bb, var, rhs, NULL);
2645     }
2646
2647   /* Initialize this VAR_DECL from the equivalent argument.  Convert
2648      the argument to the proper type in case it was promoted.  */
2649   if (value)
2650     {
2651       if (rhs == error_mark_node)
2652         {
2653           insert_decl_map (id, p, var);
2654           return insert_init_debug_bind (id, bb, var, rhs, NULL);
2655         }
2656
2657       STRIP_USELESS_TYPE_CONVERSION (rhs);
2658
2659       /* We want to use MODIFY_EXPR, not INIT_EXPR here so that we
2660          keep our trees in gimple form.  */
2661       if (def && gimple_in_ssa_p (cfun) && is_gimple_reg (p))
2662         {
2663           def = remap_ssa_name (def, id);
2664           init_stmt = gimple_build_assign (def, rhs);
2665           SSA_NAME_IS_DEFAULT_DEF (def) = 0;
2666           set_default_def (var, NULL);
2667         }
2668       else
2669         init_stmt = gimple_build_assign (var, rhs);
2670
2671       if (bb && init_stmt)
2672         insert_init_stmt (id, bb, init_stmt);
2673     }
2674   return init_stmt;
2675 }
2676
2677 /* Generate code to initialize the parameters of the function at the
2678    top of the stack in ID from the GIMPLE_CALL STMT.  */
2679
2680 static void
2681 initialize_inlined_parameters (copy_body_data *id, gimple stmt,
2682                                tree fn, basic_block bb)
2683 {
2684   tree parms;
2685   size_t i;
2686   tree p;
2687   tree vars = NULL_TREE;
2688   tree static_chain = gimple_call_chain (stmt);
2689
2690   /* Figure out what the parameters are.  */
2691   parms = DECL_ARGUMENTS (fn);
2692
2693   /* Loop through the parameter declarations, replacing each with an
2694      equivalent VAR_DECL, appropriately initialized.  */
2695   for (p = parms, i = 0; p; p = DECL_CHAIN (p), i++)
2696     {
2697       tree val;
2698       val = i < gimple_call_num_args (stmt) ? gimple_call_arg (stmt, i) : NULL;
2699       setup_one_parameter (id, p, val, fn, bb, &vars);
2700     }
2701   /* After remapping parameters remap their types.  This has to be done
2702      in a second loop over all parameters to appropriately remap
2703      variable sized arrays when the size is specified in a
2704      parameter following the array.  */
2705   for (p = parms, i = 0; p; p = DECL_CHAIN (p), i++)
2706     {
2707       tree *varp = (tree *) pointer_map_contains (id->decl_map, p);
2708       if (varp
2709           && TREE_CODE (*varp) == VAR_DECL)
2710         {
2711           tree def = (gimple_in_ssa_p (cfun) && is_gimple_reg (p)
2712                       ? gimple_default_def (id->src_cfun, p) : NULL);
2713           tree var = *varp;
2714           TREE_TYPE (var) = remap_type (TREE_TYPE (var), id);
2715           /* Also remap the default definition if it was remapped
2716              to the default definition of the parameter replacement
2717              by the parameter setup.  */
2718           if (def)
2719             {
2720               tree *defp = (tree *) pointer_map_contains (id->decl_map, def);
2721               if (defp
2722                   && TREE_CODE (*defp) == SSA_NAME
2723                   && SSA_NAME_VAR (*defp) == var)
2724                 TREE_TYPE (*defp) = TREE_TYPE (var);
2725             }
2726         }
2727     }
2728
2729   /* Initialize the static chain.  */
2730   p = DECL_STRUCT_FUNCTION (fn)->static_chain_decl;
2731   gcc_assert (fn != current_function_decl);
2732   if (p)
2733     {
2734       /* No static chain?  Seems like a bug in tree-nested.c.  */
2735       gcc_assert (static_chain);
2736
2737       setup_one_parameter (id, p, static_chain, fn, bb, &vars);
2738     }
2739
2740   declare_inline_vars (id->block, vars);
2741 }
2742
2743
2744 /* Declare a return variable to replace the RESULT_DECL for the
2745    function we are calling.  An appropriate DECL_STMT is returned.
2746    The USE_STMT is filled to contain a use of the declaration to
2747    indicate the return value of the function.
2748
2749    RETURN_SLOT, if non-null is place where to store the result.  It
2750    is set only for CALL_EXPR_RETURN_SLOT_OPT.  MODIFY_DEST, if non-null,
2751    was the LHS of the MODIFY_EXPR to which this call is the RHS.
2752
2753    The return value is a (possibly null) value that holds the result
2754    as seen by the caller.  */
2755
2756 static tree
2757 declare_return_variable (copy_body_data *id, tree return_slot, tree modify_dest,
2758                          basic_block entry_bb)
2759 {
2760   tree callee = id->src_fn;
2761   tree caller = id->dst_fn;
2762   tree result = DECL_RESULT (callee);
2763   tree callee_type = TREE_TYPE (result);
2764   tree caller_type;
2765   tree var, use;
2766
2767   /* Handle type-mismatches in the function declaration return type
2768      vs. the call expression.  */
2769   if (modify_dest)
2770     caller_type = TREE_TYPE (modify_dest);
2771   else
2772     caller_type = TREE_TYPE (TREE_TYPE (callee));
2773
2774   /* We don't need to do anything for functions that don't return
2775      anything.  */
2776   if (!result || VOID_TYPE_P (callee_type))
2777     return NULL_TREE;
2778
2779   /* If there was a return slot, then the return value is the
2780      dereferenced address of that object.  */
2781   if (return_slot)
2782     {
2783       /* The front end shouldn't have used both return_slot and
2784          a modify expression.  */
2785       gcc_assert (!modify_dest);
2786       if (DECL_BY_REFERENCE (result))
2787         {
2788           tree return_slot_addr = build_fold_addr_expr (return_slot);
2789           STRIP_USELESS_TYPE_CONVERSION (return_slot_addr);
2790
2791           /* We are going to construct *&return_slot and we can't do that
2792              for variables believed to be not addressable.
2793
2794              FIXME: This check possibly can match, because values returned
2795              via return slot optimization are not believed to have address
2796              taken by alias analysis.  */
2797           gcc_assert (TREE_CODE (return_slot) != SSA_NAME);
2798           var = return_slot_addr;
2799         }
2800       else
2801         {
2802           var = return_slot;
2803           gcc_assert (TREE_CODE (var) != SSA_NAME);
2804           TREE_ADDRESSABLE (var) |= TREE_ADDRESSABLE (result);
2805         }
2806       if ((TREE_CODE (TREE_TYPE (result)) == COMPLEX_TYPE
2807            || TREE_CODE (TREE_TYPE (result)) == VECTOR_TYPE)
2808           && !DECL_GIMPLE_REG_P (result)
2809           && DECL_P (var))
2810         DECL_GIMPLE_REG_P (var) = 0;
2811       use = NULL;
2812       goto done;
2813     }
2814
2815   /* All types requiring non-trivial constructors should have been handled.  */
2816   gcc_assert (!TREE_ADDRESSABLE (callee_type));
2817
2818   /* Attempt to avoid creating a new temporary variable.  */
2819   if (modify_dest
2820       && TREE_CODE (modify_dest) != SSA_NAME)
2821     {
2822       bool use_it = false;
2823
2824       /* We can't use MODIFY_DEST if there's type promotion involved.  */
2825       if (!useless_type_conversion_p (callee_type, caller_type))
2826         use_it = false;
2827
2828       /* ??? If we're assigning to a variable sized type, then we must
2829          reuse the destination variable, because we've no good way to
2830          create variable sized temporaries at this point.  */
2831       else if (TREE_CODE (TYPE_SIZE_UNIT (caller_type)) != INTEGER_CST)
2832         use_it = true;
2833
2834       /* If the callee cannot possibly modify MODIFY_DEST, then we can
2835          reuse it as the result of the call directly.  Don't do this if
2836          it would promote MODIFY_DEST to addressable.  */
2837       else if (TREE_ADDRESSABLE (result))
2838         use_it = false;
2839       else
2840         {
2841           tree base_m = get_base_address (modify_dest);
2842
2843           /* If the base isn't a decl, then it's a pointer, and we don't
2844              know where that's going to go.  */
2845           if (!DECL_P (base_m))
2846             use_it = false;
2847           else if (is_global_var (base_m))
2848             use_it = false;
2849           else if ((TREE_CODE (TREE_TYPE (result)) == COMPLEX_TYPE
2850                     || TREE_CODE (TREE_TYPE (result)) == VECTOR_TYPE)
2851                    && !DECL_GIMPLE_REG_P (result)
2852                    && DECL_GIMPLE_REG_P (base_m))
2853             use_it = false;
2854           else if (!TREE_ADDRESSABLE (base_m))
2855             use_it = true;
2856         }
2857
2858       if (use_it)
2859         {
2860           var = modify_dest;
2861           use = NULL;
2862           goto done;
2863         }
2864     }
2865
2866   gcc_assert (TREE_CODE (TYPE_SIZE_UNIT (callee_type)) == INTEGER_CST);
2867
2868   var = copy_result_decl_to_var (result, id);
2869   if (gimple_in_ssa_p (cfun))
2870     {
2871       get_var_ann (var);
2872       add_referenced_var (var);
2873     }
2874
2875   DECL_SEEN_IN_BIND_EXPR_P (var) = 1;
2876   add_local_decl (DECL_STRUCT_FUNCTION (caller), var);
2877
2878   /* Do not have the rest of GCC warn about this variable as it should
2879      not be visible to the user.  */
2880   TREE_NO_WARNING (var) = 1;
2881
2882   declare_inline_vars (id->block, var);
2883
2884   /* Build the use expr.  If the return type of the function was
2885      promoted, convert it back to the expected type.  */
2886   use = var;
2887   if (!useless_type_conversion_p (caller_type, TREE_TYPE (var)))
2888     use = fold_convert (caller_type, var);
2889
2890   STRIP_USELESS_TYPE_CONVERSION (use);
2891
2892   if (DECL_BY_REFERENCE (result))
2893     {
2894       TREE_ADDRESSABLE (var) = 1;
2895       var = build_fold_addr_expr (var);
2896     }
2897
2898  done:
2899   /* Register the VAR_DECL as the equivalent for the RESULT_DECL; that
2900      way, when the RESULT_DECL is encountered, it will be
2901      automatically replaced by the VAR_DECL.  
2902
2903      When returning by reference, ensure that RESULT_DECL remaps to
2904      gimple_val.  */
2905   if (DECL_BY_REFERENCE (result)
2906       && !is_gimple_val (var))
2907     {
2908       tree temp = create_tmp_var (TREE_TYPE (result), "retvalptr");
2909       if (gimple_in_ssa_p (id->src_cfun))
2910         {
2911           get_var_ann (temp);
2912           add_referenced_var (temp);
2913         }
2914       insert_decl_map (id, result, temp);
2915       /* When RESULT_DECL is in SSA form, we need to use it's default_def
2916          SSA_NAME.  */
2917       if (gimple_in_ssa_p (id->src_cfun) && gimple_default_def (id->src_cfun, result))
2918         temp = remap_ssa_name (gimple_default_def (id->src_cfun, result), id);
2919       insert_init_stmt (id, entry_bb, gimple_build_assign (temp, var));
2920     }
2921   else
2922     insert_decl_map (id, result, var);
2923
2924   /* Remember this so we can ignore it in remap_decls.  */
2925   id->retvar = var;
2926
2927   return use;
2928 }
2929
2930 /* Callback through walk_tree.  Determine if a DECL_INITIAL makes reference
2931    to a local label.  */
2932
2933 static tree
2934 has_label_address_in_static_1 (tree *nodep, int *walk_subtrees, void *fnp)
2935 {
2936   tree node = *nodep;
2937   tree fn = (tree) fnp;
2938
2939   if (TREE_CODE (node) == LABEL_DECL && DECL_CONTEXT (node) == fn)
2940     return node;
2941
2942   if (TYPE_P (node))
2943     *walk_subtrees = 0;
2944
2945   return NULL_TREE;
2946 }
2947
2948 /* Determine if the function can be copied.  If so return NULL.  If
2949    not return a string describng the reason for failure.  */
2950
2951 static const char *
2952 copy_forbidden (struct function *fun, tree fndecl)
2953 {
2954   const char *reason = fun->cannot_be_copied_reason;
2955   tree decl;
2956   unsigned ix;
2957
2958   /* Only examine the function once.  */
2959   if (fun->cannot_be_copied_set)
2960     return reason;
2961
2962   /* We cannot copy a function that receives a non-local goto
2963      because we cannot remap the destination label used in the
2964      function that is performing the non-local goto.  */
2965   /* ??? Actually, this should be possible, if we work at it.
2966      No doubt there's just a handful of places that simply
2967      assume it doesn't happen and don't substitute properly.  */
2968   if (fun->has_nonlocal_label)
2969     {
2970       reason = G_("function %q+F can never be copied "
2971                   "because it receives a non-local goto");
2972       goto fail;
2973     }
2974
2975   FOR_EACH_LOCAL_DECL (fun, ix, decl)
2976     if (TREE_CODE (decl) == VAR_DECL
2977         && TREE_STATIC (decl)
2978         && !DECL_EXTERNAL (decl)
2979         && DECL_INITIAL (decl)
2980         && walk_tree_without_duplicates (&DECL_INITIAL (decl),
2981                                          has_label_address_in_static_1,
2982                                          fndecl))
2983       {
2984         reason = G_("function %q+F can never be copied because it saves "
2985                     "address of local label in a static variable");
2986         goto fail;
2987       }
2988
2989  fail:
2990   fun->cannot_be_copied_reason = reason;
2991   fun->cannot_be_copied_set = true;
2992   return reason;
2993 }
2994
2995
2996 static const char *inline_forbidden_reason;
2997
2998 /* A callback for walk_gimple_seq to handle statements.  Returns non-null
2999    iff a function can not be inlined.  Also sets the reason why. */
3000
3001 static tree
3002 inline_forbidden_p_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p,
3003                          struct walk_stmt_info *wip)
3004 {
3005   tree fn = (tree) wip->info;
3006   tree t;
3007   gimple stmt = gsi_stmt (*gsi);
3008
3009   switch (gimple_code (stmt))
3010     {
3011     case GIMPLE_CALL:
3012       /* Refuse to inline alloca call unless user explicitly forced so as
3013          this may change program's memory overhead drastically when the
3014          function using alloca is called in loop.  In GCC present in
3015          SPEC2000 inlining into schedule_block cause it to require 2GB of
3016          RAM instead of 256MB.  */
3017       if (gimple_alloca_call_p (stmt)
3018           && !lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)))
3019         {
3020           inline_forbidden_reason
3021             = G_("function %q+F can never be inlined because it uses "
3022                  "alloca (override using the always_inline attribute)");
3023           *handled_ops_p = true;
3024           return fn;
3025         }
3026
3027       t = gimple_call_fndecl (stmt);
3028       if (t == NULL_TREE)
3029         break;
3030
3031       /* We cannot inline functions that call setjmp.  */
3032       if (setjmp_call_p (t))
3033         {
3034           inline_forbidden_reason
3035             = G_("function %q+F can never be inlined because it uses setjmp");
3036           *handled_ops_p = true;
3037           return t;
3038         }
3039
3040       if (DECL_BUILT_IN_CLASS (t) == BUILT_IN_NORMAL)
3041         switch (DECL_FUNCTION_CODE (t))
3042           {
3043             /* We cannot inline functions that take a variable number of
3044                arguments.  */
3045           case BUILT_IN_VA_START:
3046           case BUILT_IN_NEXT_ARG:
3047           case BUILT_IN_VA_END:
3048             inline_forbidden_reason
3049               = G_("function %q+F can never be inlined because it "
3050                    "uses variable argument lists");
3051             *handled_ops_p = true;
3052             return t;
3053
3054           case BUILT_IN_LONGJMP:
3055             /* We can't inline functions that call __builtin_longjmp at
3056                all.  The non-local goto machinery really requires the
3057                destination be in a different function.  If we allow the
3058                function calling __builtin_longjmp to be inlined into the
3059                function calling __builtin_setjmp, Things will Go Awry.  */
3060             inline_forbidden_reason
3061               = G_("function %q+F can never be inlined because "
3062                    "it uses setjmp-longjmp exception handling");
3063             *handled_ops_p = true;
3064             return t;
3065
3066           case BUILT_IN_NONLOCAL_GOTO:
3067             /* Similarly.  */
3068             inline_forbidden_reason
3069               = G_("function %q+F can never be inlined because "
3070                    "it uses non-local goto");
3071             *handled_ops_p = true;
3072             return t;
3073
3074           case BUILT_IN_RETURN:
3075           case BUILT_IN_APPLY_ARGS:
3076             /* If a __builtin_apply_args caller would be inlined,
3077                it would be saving arguments of the function it has
3078                been inlined into.  Similarly __builtin_return would
3079                return from the function the inline has been inlined into.  */
3080             inline_forbidden_reason
3081               = G_("function %q+F can never be inlined because "
3082                    "it uses __builtin_return or __builtin_apply_args");
3083             *handled_ops_p = true;
3084             return t;
3085
3086           default:
3087             break;
3088           }
3089       break;
3090
3091     case GIMPLE_GOTO:
3092       t = gimple_goto_dest (stmt);
3093
3094       /* We will not inline a function which uses computed goto.  The
3095          addresses of its local labels, which may be tucked into
3096          global storage, are of course not constant across
3097          instantiations, which causes unexpected behavior.  */
3098       if (TREE_CODE (t) != LABEL_DECL)
3099         {
3100           inline_forbidden_reason
3101             = G_("function %q+F can never be inlined "
3102                  "because it contains a computed goto");
3103           *handled_ops_p = true;
3104           return t;
3105         }
3106       break;
3107
3108     default:
3109       break;
3110     }
3111
3112   *handled_ops_p = false;
3113   return NULL_TREE;
3114 }
3115
3116 /* Return true if FNDECL is a function that cannot be inlined into
3117    another one.  */
3118
3119 static bool
3120 inline_forbidden_p (tree fndecl)
3121 {
3122   struct function *fun = DECL_STRUCT_FUNCTION (fndecl);
3123   struct walk_stmt_info wi;
3124   struct pointer_set_t *visited_nodes;
3125   basic_block bb;
3126   bool forbidden_p = false;
3127
3128   /* First check for shared reasons not to copy the code.  */
3129   inline_forbidden_reason = copy_forbidden (fun, fndecl);
3130   if (inline_forbidden_reason != NULL)
3131     return true;
3132
3133   /* Next, walk the statements of the function looking for
3134      constraucts we can't handle, or are non-optimal for inlining.  */
3135   visited_nodes = pointer_set_create ();
3136   memset (&wi, 0, sizeof (wi));
3137   wi.info = (void *) fndecl;
3138   wi.pset = visited_nodes;
3139
3140   FOR_EACH_BB_FN (bb, fun)
3141     {
3142       gimple ret;
3143       gimple_seq seq = bb_seq (bb);
3144       ret = walk_gimple_seq (seq, inline_forbidden_p_stmt, NULL, &wi);
3145       forbidden_p = (ret != NULL);
3146       if (forbidden_p)
3147         break;
3148     }
3149
3150   pointer_set_destroy (visited_nodes);
3151   return forbidden_p;
3152 }
3153
3154 /* Return true if CALLEE cannot be inlined into CALLER.  */
3155
3156 static bool
3157 inline_forbidden_into_p (tree caller, tree callee)
3158 {
3159   /* Don't inline if the functions have different EH personalities.  */
3160   if (DECL_FUNCTION_PERSONALITY (caller)
3161       && DECL_FUNCTION_PERSONALITY (callee)
3162       && (DECL_FUNCTION_PERSONALITY (caller)
3163           != DECL_FUNCTION_PERSONALITY (callee)))
3164     return true;
3165
3166   /* Don't inline if the callee can throw non-call exceptions but the
3167      caller cannot.  */
3168   if (DECL_STRUCT_FUNCTION (callee)
3169       && DECL_STRUCT_FUNCTION (callee)->can_throw_non_call_exceptions
3170       && !(DECL_STRUCT_FUNCTION (caller)
3171            && DECL_STRUCT_FUNCTION (caller)->can_throw_non_call_exceptions))
3172     return true;
3173
3174   return false;
3175 }
3176
3177 /* Returns nonzero if FN is a function that does not have any
3178    fundamental inline blocking properties.  */
3179
3180 bool
3181 tree_inlinable_function_p (tree fn)
3182 {
3183   bool inlinable = true;
3184   bool do_warning;
3185   tree always_inline;
3186
3187   /* If we've already decided this function shouldn't be inlined,
3188      there's no need to check again.  */
3189   if (DECL_UNINLINABLE (fn))
3190     return false;
3191
3192   /* We only warn for functions declared `inline' by the user.  */
3193   do_warning = (warn_inline
3194                 && DECL_DECLARED_INLINE_P (fn)
3195                 && !DECL_NO_INLINE_WARNING_P (fn)
3196                 && !DECL_IN_SYSTEM_HEADER (fn));
3197
3198   always_inline = lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn));
3199
3200   if (flag_no_inline
3201       && always_inline == NULL)
3202     {
3203       if (do_warning)
3204         warning (OPT_Winline, "function %q+F can never be inlined because it "
3205                  "is suppressed using -fno-inline", fn);
3206       inlinable = false;
3207     }
3208
3209   else if (!function_attribute_inlinable_p (fn))
3210     {
3211       if (do_warning)
3212         warning (OPT_Winline, "function %q+F can never be inlined because it "
3213                  "uses attributes conflicting with inlining", fn);
3214       inlinable = false;
3215     }
3216
3217   else if (inline_forbidden_p (fn))
3218     {
3219       /* See if we should warn about uninlinable functions.  Previously,
3220          some of these warnings would be issued while trying to expand
3221          the function inline, but that would cause multiple warnings
3222          about functions that would for example call alloca.  But since
3223          this a property of the function, just one warning is enough.
3224          As a bonus we can now give more details about the reason why a
3225          function is not inlinable.  */
3226       if (always_inline)
3227         sorry (inline_forbidden_reason, fn);
3228       else if (do_warning)
3229         warning (OPT_Winline, inline_forbidden_reason, fn);
3230
3231       inlinable = false;
3232     }
3233
3234   /* Squirrel away the result so that we don't have to check again.  */
3235   DECL_UNINLINABLE (fn) = !inlinable;
3236
3237   return inlinable;
3238 }
3239
3240 /* Estimate the cost of a memory move.  Use machine dependent
3241    word size and take possible memcpy call into account.  */
3242
3243 int
3244 estimate_move_cost (tree type)
3245 {
3246   HOST_WIDE_INT size;
3247
3248   gcc_assert (!VOID_TYPE_P (type));
3249
3250   size = int_size_in_bytes (type);
3251
3252   if (size < 0 || size > MOVE_MAX_PIECES * MOVE_RATIO (!optimize_size))
3253     /* Cost of a memcpy call, 3 arguments and the call.  */
3254     return 4;
3255   else
3256     return ((size + MOVE_MAX_PIECES - 1) / MOVE_MAX_PIECES);
3257 }
3258
3259 /* Returns cost of operation CODE, according to WEIGHTS  */
3260
3261 static int
3262 estimate_operator_cost (enum tree_code code, eni_weights *weights,
3263                         tree op1 ATTRIBUTE_UNUSED, tree op2)
3264 {
3265   switch (code)
3266     {
3267     /* These are "free" conversions, or their presumed cost
3268        is folded into other operations.  */
3269     case RANGE_EXPR:
3270     CASE_CONVERT:
3271     case COMPLEX_EXPR:
3272     case PAREN_EXPR:
3273       return 0;
3274
3275     /* Assign cost of 1 to usual operations.
3276        ??? We may consider mapping RTL costs to this.  */
3277     case COND_EXPR:
3278     case VEC_COND_EXPR:
3279
3280     case PLUS_EXPR:
3281     case POINTER_PLUS_EXPR:
3282     case MINUS_EXPR:
3283     case MULT_EXPR:
3284
3285     case ADDR_SPACE_CONVERT_EXPR:
3286     case FIXED_CONVERT_EXPR:
3287     case FIX_TRUNC_EXPR:
3288
3289     case NEGATE_EXPR:
3290     case FLOAT_EXPR:
3291     case MIN_EXPR:
3292     case MAX_EXPR:
3293     case ABS_EXPR:
3294
3295     case LSHIFT_EXPR:
3296     case RSHIFT_EXPR:
3297     case LROTATE_EXPR:
3298     case RROTATE_EXPR:
3299     case VEC_LSHIFT_EXPR:
3300     case VEC_RSHIFT_EXPR:
3301
3302     case BIT_IOR_EXPR:
3303     case BIT_XOR_EXPR:
3304     case BIT_AND_EXPR:
3305     case BIT_NOT_EXPR:
3306
3307     case TRUTH_ANDIF_EXPR:
3308     case TRUTH_ORIF_EXPR:
3309     case TRUTH_AND_EXPR:
3310     case TRUTH_OR_EXPR:
3311     case TRUTH_XOR_EXPR:
3312     case TRUTH_NOT_EXPR:
3313
3314     case LT_EXPR:
3315     case LE_EXPR:
3316     case GT_EXPR:
3317     case GE_EXPR:
3318     case EQ_EXPR:
3319     case NE_EXPR:
3320     case ORDERED_EXPR:
3321     case UNORDERED_EXPR:
3322
3323     case UNLT_EXPR:
3324     case UNLE_EXPR:
3325     case UNGT_EXPR:
3326     case UNGE_EXPR:
3327     case UNEQ_EXPR:
3328     case LTGT_EXPR:
3329
3330     case CONJ_EXPR:
3331
3332     case PREDECREMENT_EXPR:
3333     case PREINCREMENT_EXPR:
3334     case POSTDECREMENT_EXPR:
3335     case POSTINCREMENT_EXPR:
3336
3337     case REALIGN_LOAD_EXPR:
3338
3339     case REDUC_MAX_EXPR:
3340     case REDUC_MIN_EXPR:
3341     case REDUC_PLUS_EXPR:
3342     case WIDEN_SUM_EXPR:
3343     case WIDEN_MULT_EXPR:
3344     case DOT_PROD_EXPR:
3345     case WIDEN_MULT_PLUS_EXPR:
3346     case WIDEN_MULT_MINUS_EXPR:
3347
3348     case VEC_WIDEN_MULT_HI_EXPR:
3349     case VEC_WIDEN_MULT_LO_EXPR:
3350     case VEC_UNPACK_HI_EXPR:
3351     case VEC_UNPACK_LO_EXPR:
3352     case VEC_UNPACK_FLOAT_HI_EXPR:
3353     case VEC_UNPACK_FLOAT_LO_EXPR:
3354     case VEC_PACK_TRUNC_EXPR:
3355     case VEC_PACK_SAT_EXPR:
3356     case VEC_PACK_FIX_TRUNC_EXPR:
3357     case VEC_EXTRACT_EVEN_EXPR:
3358     case VEC_EXTRACT_ODD_EXPR:
3359     case VEC_INTERLEAVE_HIGH_EXPR:
3360     case VEC_INTERLEAVE_LOW_EXPR:
3361
3362       return 1;
3363
3364     /* Few special cases of expensive operations.  This is useful
3365        to avoid inlining on functions having too many of these.  */
3366     case TRUNC_DIV_EXPR:
3367     case CEIL_DIV_EXPR:
3368     case FLOOR_DIV_EXPR:
3369     case ROUND_DIV_EXPR:
3370     case EXACT_DIV_EXPR:
3371     case TRUNC_MOD_EXPR:
3372     case CEIL_MOD_EXPR:
3373     case FLOOR_MOD_EXPR:
3374     case ROUND_MOD_EXPR:
3375     case RDIV_EXPR:
3376       if (TREE_CODE (op2) != INTEGER_CST)
3377         return weights->div_mod_cost;
3378       return 1;
3379
3380     default:
3381       /* We expect a copy assignment with no operator.  */
3382       gcc_assert (get_gimple_rhs_class (code) == GIMPLE_SINGLE_RHS);
3383       return 0;
3384     }
3385 }
3386
3387
3388 /* Estimate number of instructions that will be created by expanding
3389    the statements in the statement sequence STMTS.
3390    WEIGHTS contains weights attributed to various constructs.  */
3391
3392 static
3393 int estimate_num_insns_seq (gimple_seq stmts, eni_weights *weights)
3394 {
3395   int cost;
3396   gimple_stmt_iterator gsi;
3397
3398   cost = 0;
3399   for (gsi = gsi_start (stmts); !gsi_end_p (gsi); gsi_next (&gsi))
3400     cost += estimate_num_insns (gsi_stmt (gsi), weights);
3401
3402   return cost;
3403 }
3404
3405
3406 /* Estimate number of instructions that will be created by expanding STMT.
3407    WEIGHTS contains weights attributed to various constructs.  */
3408
3409 int
3410 estimate_num_insns (gimple stmt, eni_weights *weights)
3411 {
3412   unsigned cost, i;
3413   enum gimple_code code = gimple_code (stmt);
3414   tree lhs;
3415   tree rhs;
3416
3417   switch (code)
3418     {
3419     case GIMPLE_ASSIGN:
3420       /* Try to estimate the cost of assignments.  We have three cases to
3421          deal with:
3422          1) Simple assignments to registers;
3423          2) Stores to things that must live in memory.  This includes
3424             "normal" stores to scalars, but also assignments of large
3425             structures, or constructors of big arrays;
3426
3427          Let us look at the first two cases, assuming we have "a = b + C":
3428          <GIMPLE_ASSIGN <var_decl "a">
3429                 <plus_expr <var_decl "b"> <constant C>>
3430          If "a" is a GIMPLE register, the assignment to it is free on almost
3431          any target, because "a" usually ends up in a real register.  Hence
3432          the only cost of this expression comes from the PLUS_EXPR, and we
3433          can ignore the GIMPLE_ASSIGN.
3434          If "a" is not a GIMPLE register, the assignment to "a" will most
3435          likely be a real store, so the cost of the GIMPLE_ASSIGN is the cost
3436          of moving something into "a", which we compute using the function
3437          estimate_move_cost.  */
3438       lhs = gimple_assign_lhs (stmt);
3439       rhs = gimple_assign_rhs1 (stmt);
3440
3441       if (is_gimple_reg (lhs))
3442         cost = 0;
3443       else
3444         cost = estimate_move_cost (TREE_TYPE (lhs));
3445
3446       if (!is_gimple_reg (rhs) && !is_gimple_min_invariant (rhs))
3447         cost += estimate_move_cost (TREE_TYPE (rhs));
3448
3449       cost += estimate_operator_cost (gimple_assign_rhs_code (stmt), weights,
3450                                       gimple_assign_rhs1 (stmt),
3451                                       get_gimple_rhs_class (gimple_assign_rhs_code (stmt))
3452                                       == GIMPLE_BINARY_RHS
3453                                       ? gimple_assign_rhs2 (stmt) : NULL);
3454       break;
3455
3456     case GIMPLE_COND:
3457       cost = 1 + estimate_operator_cost (gimple_cond_code (stmt), weights,
3458                                          gimple_op (stmt, 0),
3459                                          gimple_op (stmt, 1));
3460       break;
3461
3462     case GIMPLE_SWITCH:
3463       /* Take into account cost of the switch + guess 2 conditional jumps for
3464          each case label.
3465
3466          TODO: once the switch expansion logic is sufficiently separated, we can
3467          do better job on estimating cost of the switch.  */
3468       if (weights->time_based)
3469         cost = floor_log2 (gimple_switch_num_labels (stmt)) * 2;
3470       else
3471         cost = gimple_switch_num_labels (stmt) * 2;
3472       break;
3473
3474     case GIMPLE_CALL:
3475       {
3476         tree decl = gimple_call_fndecl (stmt);
3477         tree addr = gimple_call_fn (stmt);
3478         tree funtype = TREE_TYPE (addr);
3479         bool stdarg = false;
3480
3481         if (POINTER_TYPE_P (funtype))
3482           funtype = TREE_TYPE (funtype);
3483
3484         if (is_simple_builtin (decl))
3485           return 0;
3486         else if (is_inexpensive_builtin (decl))
3487           cost = weights->target_builtin_call_cost;
3488         else
3489           cost = weights->call_cost;
3490
3491         if (decl)
3492           funtype = TREE_TYPE (decl);
3493
3494         if (!VOID_TYPE_P (TREE_TYPE (funtype)))
3495           cost += estimate_move_cost (TREE_TYPE (funtype));
3496
3497         if (funtype)
3498           stdarg = stdarg_p (funtype);
3499
3500         /* Our cost must be kept in sync with
3501            cgraph_estimate_size_after_inlining that does use function
3502            declaration to figure out the arguments.
3503
3504            For functions taking variable list of arguments we must
3505            look into call statement intself.  This is safe because
3506            we will get only higher costs and in most cases we will
3507            not inline these anyway.  */
3508         if (decl && DECL_ARGUMENTS (decl) && !stdarg)
3509           {
3510             tree arg;
3511             for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
3512               if (!VOID_TYPE_P (TREE_TYPE (arg)))
3513                 cost += estimate_move_cost (TREE_TYPE (arg));
3514           }
3515         else if (funtype && prototype_p (funtype) && !stdarg)
3516           {
3517             tree t;
3518             for (t = TYPE_ARG_TYPES (funtype); t && t != void_list_node;
3519                  t = TREE_CHAIN (t))
3520               if (!VOID_TYPE_P (TREE_VALUE (t)))
3521                 cost += estimate_move_cost (TREE_VALUE (t));
3522           }
3523         else
3524           {
3525             for (i = 0; i < gimple_call_num_args (stmt); i++)
3526               {
3527                 tree arg = gimple_call_arg (stmt, i);
3528                 if (!VOID_TYPE_P (TREE_TYPE (arg)))
3529                   cost += estimate_move_cost (TREE_TYPE (arg));
3530               }
3531           }
3532
3533         break;
3534       }
3535
3536     case GIMPLE_GOTO:
3537     case GIMPLE_LABEL:
3538     case GIMPLE_NOP:
3539     case GIMPLE_PHI:
3540     case GIMPLE_RETURN:
3541     case GIMPLE_PREDICT:
3542     case GIMPLE_DEBUG:
3543       return 0;
3544
3545     case GIMPLE_ASM:
3546       return asm_str_count (gimple_asm_string (stmt));
3547
3548     case GIMPLE_RESX:
3549       /* This is either going to be an external function call with one
3550          argument, or two register copy statements plus a goto.  */
3551       return 2;
3552
3553     case GIMPLE_EH_DISPATCH:
3554       /* ??? This is going to turn into a switch statement.  Ideally
3555          we'd have a look at the eh region and estimate the number of
3556          edges involved.  */
3557       return 10;
3558
3559     case GIMPLE_BIND:
3560       return estimate_num_insns_seq (gimple_bind_body (stmt), weights);
3561
3562     case GIMPLE_EH_FILTER:
3563       return estimate_num_insns_seq (gimple_eh_filter_failure (stmt), weights);
3564
3565     case GIMPLE_CATCH:
3566       return estimate_num_insns_seq (gimple_catch_handler (stmt), weights);
3567
3568     case GIMPLE_TRY:
3569       return (estimate_num_insns_seq (gimple_try_eval (stmt), weights)
3570               + estimate_num_insns_seq (gimple_try_cleanup (stmt), weights));
3571
3572     /* OpenMP directives are generally very expensive.  */
3573
3574     case GIMPLE_OMP_RETURN:
3575     case GIMPLE_OMP_SECTIONS_SWITCH:
3576     case GIMPLE_OMP_ATOMIC_STORE:
3577     case GIMPLE_OMP_CONTINUE:
3578       /* ...except these, which are cheap.  */
3579       return 0;
3580
3581     case GIMPLE_OMP_ATOMIC_LOAD:
3582       return weights->omp_cost;
3583
3584     case GIMPLE_OMP_FOR:
3585       return (weights->omp_cost
3586               + estimate_num_insns_seq (gimple_omp_body (stmt), weights)
3587               + estimate_num_insns_seq (gimple_omp_for_pre_body (stmt), weights));
3588
3589     case GIMPLE_OMP_PARALLEL:
3590     case GIMPLE_OMP_TASK:
3591     case GIMPLE_OMP_CRITICAL:
3592     case GIMPLE_OMP_MASTER:
3593     case GIMPLE_OMP_ORDERED:
3594     case GIMPLE_OMP_SECTION:
3595     case GIMPLE_OMP_SECTIONS:
3596     case GIMPLE_OMP_SINGLE:
3597       return (weights->omp_cost
3598               + estimate_num_insns_seq (gimple_omp_body (stmt), weights));
3599
3600     default:
3601       gcc_unreachable ();
3602     }
3603
3604   return cost;
3605 }
3606
3607 /* Estimate number of instructions that will be created by expanding
3608    function FNDECL.  WEIGHTS contains weights attributed to various
3609    constructs.  */
3610
3611 int
3612 estimate_num_insns_fn (tree fndecl, eni_weights *weights)
3613 {
3614   struct function *my_function = DECL_STRUCT_FUNCTION (fndecl);
3615   gimple_stmt_iterator bsi;
3616   basic_block bb;
3617   int n = 0;
3618
3619   gcc_assert (my_function && my_function->cfg);
3620   FOR_EACH_BB_FN (bb, my_function)
3621     {
3622       for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi))
3623         n += estimate_num_insns (gsi_stmt (bsi), weights);
3624     }
3625
3626   return n;
3627 }
3628
3629
3630 /* Initializes weights used by estimate_num_insns.  */
3631
3632 void
3633 init_inline_once (void)
3634 {
3635   eni_size_weights.call_cost = 1;
3636   eni_size_weights.target_builtin_call_cost = 1;
3637   eni_size_weights.div_mod_cost = 1;
3638   eni_size_weights.omp_cost = 40;
3639   eni_size_weights.time_based = false;
3640
3641   /* Estimating time for call is difficult, since we have no idea what the
3642      called function does.  In the current uses of eni_time_weights,
3643      underestimating the cost does less harm than overestimating it, so
3644      we choose a rather small value here.  */
3645   eni_time_weights.call_cost = 10;
3646   eni_time_weights.target_builtin_call_cost = 10;
3647   eni_time_weights.div_mod_cost = 10;
3648   eni_time_weights.omp_cost = 40;
3649   eni_time_weights.time_based = true;
3650 }
3651
3652 /* Estimate the number of instructions in a gimple_seq. */
3653
3654 int
3655 count_insns_seq (gimple_seq seq, eni_weights *weights)
3656 {
3657   gimple_stmt_iterator gsi;
3658   int n = 0;
3659   for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&gsi))
3660     n += estimate_num_insns (gsi_stmt (gsi), weights);
3661
3662   return n;
3663 }
3664
3665
3666 /* Install new lexical TREE_BLOCK underneath 'current_block'.  */
3667
3668 static void
3669 prepend_lexical_block (tree current_block, tree new_block)
3670 {
3671   BLOCK_CHAIN (new_block) = BLOCK_SUBBLOCKS (current_block);
3672   BLOCK_SUBBLOCKS (current_block) = new_block;
3673   BLOCK_SUPERCONTEXT (new_block) = current_block;
3674 }
3675
3676 /* Add local variables from CALLEE to CALLER.  */
3677
3678 static inline void
3679 add_local_variables (struct function *callee, struct function *caller,
3680                      copy_body_data *id, bool check_var_ann)
3681 {
3682   tree var;
3683   unsigned ix;
3684
3685   FOR_EACH_LOCAL_DECL (callee, ix, var)
3686     if (TREE_STATIC (var) && !TREE_ASM_WRITTEN (var))
3687       {
3688         if (!check_var_ann
3689             || (var_ann (var) && add_referenced_var (var)))
3690           add_local_decl (caller, var);
3691       }
3692     else if (!can_be_nonlocal (var, id))
3693       {
3694         tree new_var = remap_decl (var, id);
3695
3696         /* Remap debug-expressions.  */
3697         if (TREE_CODE (new_var) == VAR_DECL
3698             && DECL_DEBUG_EXPR_IS_FROM (new_var)
3699             && new_var != var)
3700           {
3701             tree tem = DECL_DEBUG_EXPR (var);
3702             bool old_regimplify = id->regimplify;
3703             id->remapping_type_depth++;
3704             walk_tree (&tem, copy_tree_body_r, id, NULL);
3705             id->remapping_type_depth--;
3706             id->regimplify = old_regimplify;
3707             SET_DECL_DEBUG_EXPR (new_var, tem);
3708           }
3709         add_local_decl (caller, new_var);
3710       }
3711 }
3712
3713 /* If STMT is a GIMPLE_CALL, replace it with its inline expansion.  */
3714
3715 static bool
3716 expand_call_inline (basic_block bb, gimple stmt, copy_body_data *id)
3717 {
3718   tree use_retvar;
3719   tree fn;
3720   struct pointer_map_t *st, *dst;
3721   tree return_slot;
3722   tree modify_dest;
3723   location_t saved_location;
3724   struct cgraph_edge *cg_edge;
3725   cgraph_inline_failed_t reason;
3726   basic_block return_block;
3727   edge e;
3728   gimple_stmt_iterator gsi, stmt_gsi;
3729   bool successfully_inlined = FALSE;
3730   bool purge_dead_abnormal_edges;
3731
3732   /* Set input_location here so we get the right instantiation context
3733      if we call instantiate_decl from inlinable_function_p.  */
3734   saved_location = input_location;
3735   if (gimple_has_location (stmt))
3736     input_location = gimple_location (stmt);
3737
3738   /* From here on, we're only interested in CALL_EXPRs.  */
3739   if (gimple_code (stmt) != GIMPLE_CALL)
3740     goto egress;
3741
3742   /* First, see if we can figure out what function is being called.
3743      If we cannot, then there is no hope of inlining the function.  */
3744   fn = gimple_call_fndecl (stmt);
3745   if (!fn)
3746     goto egress;
3747
3748   /* Turn forward declarations into real ones.  */
3749   fn = cgraph_node (fn)->decl;
3750
3751   /* If FN is a declaration of a function in a nested scope that was
3752      globally declared inline, we don't set its DECL_INITIAL.
3753      However, we can't blindly follow DECL_ABSTRACT_ORIGIN because the
3754      C++ front-end uses it for cdtors to refer to their internal
3755      declarations, that are not real functions.  Fortunately those
3756      don't have trees to be saved, so we can tell by checking their
3757      gimple_body.  */
3758   if (!DECL_INITIAL (fn)
3759       && DECL_ABSTRACT_ORIGIN (fn)
3760       && gimple_has_body_p (DECL_ABSTRACT_ORIGIN (fn)))
3761     fn = DECL_ABSTRACT_ORIGIN (fn);
3762
3763   /* Objective C and fortran still calls tree_rest_of_compilation directly.
3764      Kill this check once this is fixed.  */
3765   if (!id->dst_node->analyzed)
3766     goto egress;
3767
3768   cg_edge = cgraph_edge (id->dst_node, stmt);
3769
3770   /* First check that inlining isn't simply forbidden in this case.  */
3771   if (inline_forbidden_into_p (cg_edge->caller->decl, cg_edge->callee->decl))
3772     goto egress;
3773
3774   /* Don't try to inline functions that are not well-suited to inlining.  */
3775   if (!cgraph_inline_p (cg_edge, &reason))
3776     {
3777       /* If this call was originally indirect, we do not want to emit any
3778          inlining related warnings or sorry messages because there are no
3779          guarantees regarding those.  */
3780       if (cg_edge->indirect_inlining_edge)
3781         goto egress;
3782
3783       if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn))
3784           /* Avoid warnings during early inline pass. */
3785           && cgraph_global_info_ready)
3786         {
3787           sorry ("inlining failed in call to %q+F: %s", fn,
3788                  _(cgraph_inline_failed_string (reason)));
3789           sorry ("called from here");
3790         }
3791       else if (warn_inline && DECL_DECLARED_INLINE_P (fn)
3792                && !DECL_IN_SYSTEM_HEADER (fn)
3793                && reason != CIF_UNSPECIFIED
3794                && !lookup_attribute ("noinline", DECL_ATTRIBUTES (fn))
3795                /* Avoid warnings during early inline pass. */
3796                && cgraph_global_info_ready)
3797         {
3798           warning (OPT_Winline, "inlining failed in call to %q+F: %s",
3799                    fn, _(cgraph_inline_failed_string (reason)));
3800           warning (OPT_Winline, "called from here");
3801         }
3802       goto egress;
3803     }
3804   fn = cg_edge->callee->decl;
3805
3806 #ifdef ENABLE_CHECKING
3807   if (cg_edge->callee->decl != id->dst_node->decl)
3808     verify_cgraph_node (cg_edge->callee);
3809 #endif
3810
3811   /* We will be inlining this callee.  */
3812   id->eh_lp_nr = lookup_stmt_eh_lp (stmt);
3813
3814   /* Update the callers EH personality.  */
3815   if (DECL_FUNCTION_PERSONALITY (cg_edge->callee->decl))
3816     DECL_FUNCTION_PERSONALITY (cg_edge->caller->decl)
3817       = DECL_FUNCTION_PERSONALITY (cg_edge->callee->decl);
3818
3819   /* Split the block holding the GIMPLE_CALL.  */
3820   e = split_block (bb, stmt);
3821   bb = e->src;
3822   return_block = e->dest;
3823   remove_edge (e);
3824
3825   /* split_block splits after the statement; work around this by
3826      moving the call into the second block manually.  Not pretty,
3827      but seems easier than doing the CFG manipulation by hand
3828      when the GIMPLE_CALL is in the last statement of BB.  */
3829   stmt_gsi = gsi_last_bb (bb);
3830   gsi_remove (&stmt_gsi, false);
3831
3832   /* If the GIMPLE_CALL was in the last statement of BB, it may have
3833      been the source of abnormal edges.  In this case, schedule
3834      the removal of dead abnormal edges.  */
3835   gsi = gsi_start_bb (return_block);
3836   if (gsi_end_p (gsi))
3837     {
3838       gsi_insert_after (&gsi, stmt, GSI_NEW_STMT);
3839       purge_dead_abnormal_edges = true;
3840     }
3841   else
3842     {
3843       gsi_insert_before (&gsi, stmt, GSI_NEW_STMT);
3844       purge_dead_abnormal_edges = false;
3845     }
3846
3847   stmt_gsi = gsi_start_bb (return_block);
3848
3849   /* Build a block containing code to initialize the arguments, the
3850      actual inline expansion of the body, and a label for the return
3851      statements within the function to jump to.  The type of the
3852      statement expression is the return type of the function call.  */
3853   id->block = make_node (BLOCK);
3854   BLOCK_ABSTRACT_ORIGIN (id->block) = fn;
3855   BLOCK_SOURCE_LOCATION (id->block) = input_location;
3856   prepend_lexical_block (gimple_block (stmt), id->block);
3857
3858   /* Local declarations will be replaced by their equivalents in this
3859      map.  */
3860   st = id->decl_map;
3861   id->decl_map = pointer_map_create ();
3862   dst = id->debug_map;
3863   id->debug_map = NULL;
3864
3865   /* Record the function we are about to inline.  */
3866   id->src_fn = fn;
3867   id->src_node = cg_edge->callee;
3868   id->src_cfun = DECL_STRUCT_FUNCTION (fn);
3869   id->gimple_call = stmt;
3870
3871   gcc_assert (!id->src_cfun->after_inlining);
3872
3873   id->entry_bb = bb;
3874   if (lookup_attribute ("cold", DECL_ATTRIBUTES (fn)))
3875     {
3876       gimple_stmt_iterator si = gsi_last_bb (bb);
3877       gsi_insert_after (&si, gimple_build_predict (PRED_COLD_FUNCTION,
3878                                                    NOT_TAKEN),
3879                         GSI_NEW_STMT);
3880     }
3881   initialize_inlined_parameters (id, stmt, fn, bb);
3882
3883   if (DECL_INITIAL (fn))
3884     prepend_lexical_block (id->block, remap_blocks (DECL_INITIAL (fn), id));
3885
3886   /* Return statements in the function body will be replaced by jumps
3887      to the RET_LABEL.  */
3888   gcc_assert (DECL_INITIAL (fn));
3889   gcc_assert (TREE_CODE (DECL_INITIAL (fn)) == BLOCK);
3890
3891   /* Find the LHS to which the result of this call is assigned.  */
3892   return_slot = NULL;
3893   if (gimple_call_lhs (stmt))
3894     {
3895       modify_dest = gimple_call_lhs (stmt);
3896
3897       /* The function which we are inlining might not return a value,
3898          in which case we should issue a warning that the function
3899          does not return a value.  In that case the optimizers will
3900          see that the variable to which the value is assigned was not
3901          initialized.  We do not want to issue a warning about that
3902          uninitialized variable.  */
3903       if (DECL_P (modify_dest))
3904         TREE_NO_WARNING (modify_dest) = 1;
3905
3906       if (gimple_call_return_slot_opt_p (stmt))
3907         {
3908           return_slot = modify_dest;
3909           modify_dest = NULL;
3910         }
3911     }
3912   else
3913     modify_dest = NULL;
3914
3915   /* If we are inlining a call to the C++ operator new, we don't want
3916      to use type based alias analysis on the return value.  Otherwise
3917      we may get confused if the compiler sees that the inlined new
3918      function returns a pointer which was just deleted.  See bug
3919      33407.  */
3920   if (DECL_IS_OPERATOR_NEW (fn))
3921     {
3922       return_slot = NULL;
3923       modify_dest = NULL;
3924     }
3925
3926   /* Declare the return variable for the function.  */
3927   use_retvar = declare_return_variable (id, return_slot, modify_dest, bb);
3928
3929   /* Add local vars in this inlined callee to caller.  */
3930   add_local_variables (id->src_cfun, cfun, id, true);
3931
3932   if (dump_file && (dump_flags & TDF_DETAILS))
3933     {
3934       fprintf (dump_file, "Inlining ");
3935       print_generic_expr (dump_file, id->src_fn, 0);
3936       fprintf (dump_file, " to ");
3937       print_generic_expr (dump_file, id->dst_fn, 0);
3938       fprintf (dump_file, " with frequency %i\n", cg_edge->frequency);
3939     }
3940
3941   /* This is it.  Duplicate the callee body.  Assume callee is
3942      pre-gimplified.  Note that we must not alter the caller
3943      function in any way before this point, as this CALL_EXPR may be
3944      a self-referential call; if we're calling ourselves, we need to
3945      duplicate our body before altering anything.  */
3946   copy_body (id, bb->count,
3947              cg_edge->frequency * REG_BR_PROB_BASE / CGRAPH_FREQ_BASE,
3948              bb, return_block, NULL, NULL);
3949
3950   /* Reset the escaped solution.  */
3951   if (cfun->gimple_df)
3952     pt_solution_reset (&cfun->gimple_df->escaped);
3953
3954   /* Clean up.  */
3955   if (id->debug_map)
3956     {
3957       pointer_map_destroy (id->debug_map);
3958       id->debug_map = dst;
3959     }
3960   pointer_map_destroy (id->decl_map);
3961   id->decl_map = st;
3962
3963   /* Unlink the calls virtual operands before replacing it.  */
3964   unlink_stmt_vdef (stmt);
3965
3966   /* If the inlined function returns a result that we care about,
3967      substitute the GIMPLE_CALL with an assignment of the return
3968      variable to the LHS of the call.  That is, if STMT was
3969      'a = foo (...)', substitute the call with 'a = USE_RETVAR'.  */
3970   if (use_retvar && gimple_call_lhs (stmt))
3971     {
3972       gimple old_stmt = stmt;
3973       stmt = gimple_build_assign (gimple_call_lhs (stmt), use_retvar);
3974       gsi_replace (&stmt_gsi, stmt, false);
3975       if (gimple_in_ssa_p (cfun))
3976         mark_symbols_for_renaming (stmt);
3977       maybe_clean_or_replace_eh_stmt (old_stmt, stmt);
3978     }
3979   else
3980     {
3981       /* Handle the case of inlining a function with no return
3982          statement, which causes the return value to become undefined.  */
3983       if (gimple_call_lhs (stmt)
3984           && TREE_CODE (gimple_call_lhs (stmt)) == SSA_NAME)
3985         {
3986           tree name = gimple_call_lhs (stmt);
3987           tree var = SSA_NAME_VAR (name);
3988           tree def = gimple_default_def (cfun, var);
3989
3990           if (def)
3991             {
3992               /* If the variable is used undefined, make this name
3993                  undefined via a move.  */
3994               stmt = gimple_build_assign (gimple_call_lhs (stmt), def);
3995               gsi_replace (&stmt_gsi, stmt, true);
3996             }
3997           else
3998             {
3999               /* Otherwise make this variable undefined.  */
4000               gsi_remove (&stmt_gsi, true);
4001               set_default_def (var, name);
4002               SSA_NAME_DEF_STMT (name) = gimple_build_nop ();
4003             }
4004         }
4005       else
4006         gsi_remove (&stmt_gsi, true);
4007     }
4008
4009   if (purge_dead_abnormal_edges)
4010     gimple_purge_dead_abnormal_call_edges (return_block);
4011
4012   /* If the value of the new expression is ignored, that's OK.  We
4013      don't warn about this for CALL_EXPRs, so we shouldn't warn about
4014      the equivalent inlined version either.  */
4015   if (is_gimple_assign (stmt))
4016     {
4017       gcc_assert (gimple_assign_single_p (stmt)
4018                   || CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (stmt)));
4019       TREE_USED (gimple_assign_rhs1 (stmt)) = 1;
4020     }
4021
4022   /* Output the inlining info for this abstract function, since it has been
4023      inlined.  If we don't do this now, we can lose the information about the
4024      variables in the function when the blocks get blown away as soon as we
4025      remove the cgraph node.  */
4026   (*debug_hooks->outlining_inline_function) (cg_edge->callee->decl);
4027
4028   /* Update callgraph if needed.  */
4029   cgraph_remove_node (cg_edge->callee);
4030
4031   id->block = NULL_TREE;
4032   successfully_inlined = TRUE;
4033
4034  egress:
4035   input_location = saved_location;
4036   return successfully_inlined;
4037 }
4038
4039 /* Expand call statements reachable from STMT_P.
4040    We can only have CALL_EXPRs as the "toplevel" tree code or nested
4041    in a MODIFY_EXPR.  See gimple.c:get_call_expr_in().  We can
4042    unfortunately not use that function here because we need a pointer
4043    to the CALL_EXPR, not the tree itself.  */
4044
4045 static bool
4046 gimple_expand_calls_inline (basic_block bb, copy_body_data *id)
4047 {
4048   gimple_stmt_iterator gsi;
4049
4050   for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
4051     {
4052       gimple stmt = gsi_stmt (gsi);
4053
4054       if (is_gimple_call (stmt)
4055           && expand_call_inline (bb, stmt, id))
4056         return true;
4057     }
4058
4059   return false;
4060 }
4061
4062
4063 /* Walk all basic blocks created after FIRST and try to fold every statement
4064    in the STATEMENTS pointer set.  */
4065
4066 static void
4067 fold_marked_statements (int first, struct pointer_set_t *statements)
4068 {
4069   for (; first < n_basic_blocks; first++)
4070     if (BASIC_BLOCK (first))
4071       {
4072         gimple_stmt_iterator gsi;
4073
4074         for (gsi = gsi_start_bb (BASIC_BLOCK (first));
4075              !gsi_end_p (gsi);
4076              gsi_next (&gsi))
4077           if (pointer_set_contains (statements, gsi_stmt (gsi)))
4078             {
4079               gimple old_stmt = gsi_stmt (gsi);
4080               tree old_decl = is_gimple_call (old_stmt) ? gimple_call_fndecl (old_stmt) : 0;
4081
4082               if (old_decl && DECL_BUILT_IN (old_decl))
4083                 {
4084                   /* Folding builtins can create multiple instructions,
4085                      we need to look at all of them.  */
4086                   gimple_stmt_iterator i2 = gsi;
4087                   gsi_prev (&i2);
4088                   if (fold_stmt (&gsi))
4089                     {
4090                       gimple new_stmt;
4091                       if (gsi_end_p (i2))
4092                         i2 = gsi_start_bb (BASIC_BLOCK (first));
4093                       else
4094                         gsi_next (&i2);
4095                       while (1)
4096                         {
4097                           new_stmt = gsi_stmt (i2);
4098                           update_stmt (new_stmt);
4099                           cgraph_update_edges_for_call_stmt (old_stmt, old_decl,
4100                                                              new_stmt);
4101
4102                           if (new_stmt == gsi_stmt (gsi))
4103                             {
4104                               /* It is okay to check only for the very last
4105                                  of these statements.  If it is a throwing
4106                                  statement nothing will change.  If it isn't
4107                                  this can remove EH edges.  If that weren't
4108                                  correct then because some intermediate stmts
4109                                  throw, but not the last one.  That would mean
4110                                  we'd have to split the block, which we can't
4111                                  here and we'd loose anyway.  And as builtins
4112                                  probably never throw, this all
4113                                  is mood anyway.  */
4114                               if (maybe_clean_or_replace_eh_stmt (old_stmt,
4115                                                                   new_stmt))
4116                                 gimple_purge_dead_eh_edges (BASIC_BLOCK (first));
4117                               break;
4118                             }
4119                           gsi_next (&i2);
4120                         }
4121                     }
4122                 }
4123               else if (fold_stmt (&gsi))
4124                 {
4125                   /* Re-read the statement from GSI as fold_stmt() may
4126                      have changed it.  */
4127                   gimple new_stmt = gsi_stmt (gsi);
4128                   update_stmt (new_stmt);
4129
4130                   if (is_gimple_call (old_stmt)
4131                       || is_gimple_call (new_stmt))
4132                     cgraph_update_edges_for_call_stmt (old_stmt, old_decl,
4133                                                        new_stmt);
4134
4135                   if (maybe_clean_or_replace_eh_stmt (old_stmt, new_stmt))
4136                     gimple_purge_dead_eh_edges (BASIC_BLOCK (first));
4137                 }
4138             }
4139       }
4140 }
4141
4142 /* Return true if BB has at least one abnormal outgoing edge.  */
4143
4144 static inline bool
4145 has_abnormal_outgoing_edge_p (basic_block bb)
4146 {
4147   edge e;
4148   edge_iterator ei;
4149
4150   FOR_EACH_EDGE (e, ei, bb->succs)
4151     if (e->flags & EDGE_ABNORMAL)
4152       return true;
4153
4154   return false;
4155 }
4156
4157 /* Expand calls to inline functions in the body of FN.  */
4158
4159 unsigned int
4160 optimize_inline_calls (tree fn)
4161 {
4162   copy_body_data id;
4163   basic_block bb;
4164   int last = n_basic_blocks;
4165   struct gimplify_ctx gctx;
4166   bool inlined_p = false;
4167
4168   /* There is no point in performing inlining if errors have already
4169      occurred -- and we might crash if we try to inline invalid
4170      code.  */
4171   if (seen_error ())
4172     return 0;
4173
4174   /* Clear out ID.  */
4175   memset (&id, 0, sizeof (id));
4176
4177   id.src_node = id.dst_node = cgraph_node (fn);
4178   id.dst_fn = fn;
4179   /* Or any functions that aren't finished yet.  */
4180   if (current_function_decl)
4181     id.dst_fn = current_function_decl;
4182
4183   id.copy_decl = copy_decl_maybe_to_var;
4184   id.transform_call_graph_edges = CB_CGE_DUPLICATE;
4185   id.transform_new_cfg = false;
4186   id.transform_return_to_modify = true;
4187   id.transform_lang_insert_block = NULL;
4188   id.statements_to_fold = pointer_set_create ();
4189
4190   push_gimplify_context (&gctx);
4191
4192   /* We make no attempts to keep dominance info up-to-date.  */
4193   free_dominance_info (CDI_DOMINATORS);
4194   free_dominance_info (CDI_POST_DOMINATORS);
4195
4196   /* Register specific gimple functions.  */
4197   gimple_register_cfg_hooks ();
4198
4199   /* Reach the trees by walking over the CFG, and note the
4200      enclosing basic-blocks in the call edges.  */
4201   /* We walk the blocks going forward, because inlined function bodies
4202      will split id->current_basic_block, and the new blocks will
4203      follow it; we'll trudge through them, processing their CALL_EXPRs
4204      along the way.  */
4205   FOR_EACH_BB (bb)
4206     inlined_p |= gimple_expand_calls_inline (bb, &id);
4207
4208   pop_gimplify_context (NULL);
4209
4210 #ifdef ENABLE_CHECKING
4211     {
4212       struct cgraph_edge *e;
4213
4214       verify_cgraph_node (id.dst_node);
4215
4216       /* Double check that we inlined everything we are supposed to inline.  */
4217       for (e = id.dst_node->callees; e; e = e->next_callee)
4218         gcc_assert (e->inline_failed);
4219     }
4220 #endif
4221
4222   /* Fold queued statements.  */
4223   fold_marked_statements (last, id.statements_to_fold);
4224   pointer_set_destroy (id.statements_to_fold);
4225
4226   gcc_assert (!id.debug_stmts);
4227
4228   /* If we didn't inline into the function there is nothing to do.  */
4229   if (!inlined_p)
4230     return 0;
4231
4232   /* Renumber the lexical scoping (non-code) blocks consecutively.  */
4233   number_blocks (fn);
4234
4235   delete_unreachable_blocks_update_callgraph (&id);
4236 #ifdef ENABLE_CHECKING
4237   verify_cgraph_node (id.dst_node);
4238 #endif
4239
4240   /* It would be nice to check SSA/CFG/statement consistency here, but it is
4241      not possible yet - the IPA passes might make various functions to not
4242      throw and they don't care to proactively update local EH info.  This is
4243      done later in fixup_cfg pass that also execute the verification.  */
4244   return (TODO_update_ssa
4245           | TODO_cleanup_cfg
4246           | (gimple_in_ssa_p (cfun) ? TODO_remove_unused_locals : 0)
4247           | (gimple_in_ssa_p (cfun) ? TODO_update_address_taken : 0)
4248           | (profile_status != PROFILE_ABSENT ? TODO_rebuild_frequencies : 0));
4249 }
4250
4251 /* Passed to walk_tree.  Copies the node pointed to, if appropriate.  */
4252
4253 tree
4254 copy_tree_r (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
4255 {
4256   enum tree_code code = TREE_CODE (*tp);
4257   enum tree_code_class cl = TREE_CODE_CLASS (code);
4258
4259   /* We make copies of most nodes.  */
4260   if (IS_EXPR_CODE_CLASS (cl)
4261       || code == TREE_LIST
4262       || code == TREE_VEC
4263       || code == TYPE_DECL
4264       || code == OMP_CLAUSE)
4265     {
4266       /* Because the chain gets clobbered when we make a copy, we save it
4267          here.  */
4268       tree chain = NULL_TREE, new_tree;
4269
4270       chain = TREE_CHAIN (*tp);
4271
4272       /* Copy the node.  */
4273       new_tree = copy_node (*tp);
4274
4275       /* Propagate mudflap marked-ness.  */
4276       if (flag_mudflap && mf_marked_p (*tp))
4277         mf_mark (new_tree);
4278
4279       *tp = new_tree;
4280
4281       /* Now, restore the chain, if appropriate.  That will cause
4282          walk_tree to walk into the chain as well.  */
4283       if (code == PARM_DECL
4284           || code == TREE_LIST
4285           || code == OMP_CLAUSE)
4286         TREE_CHAIN (*tp) = chain;
4287
4288       /* For now, we don't update BLOCKs when we make copies.  So, we
4289          have to nullify all BIND_EXPRs.  */
4290       if (TREE_CODE (*tp) == BIND_EXPR)
4291         BIND_EXPR_BLOCK (*tp) = NULL_TREE;
4292     }
4293   else if (code == CONSTRUCTOR)
4294     {
4295       /* CONSTRUCTOR nodes need special handling because
4296          we need to duplicate the vector of elements.  */
4297       tree new_tree;
4298
4299       new_tree = copy_node (*tp);
4300
4301       /* Propagate mudflap marked-ness.  */
4302       if (flag_mudflap && mf_marked_p (*tp))
4303         mf_mark (new_tree);
4304
4305       CONSTRUCTOR_ELTS (new_tree) = VEC_copy (constructor_elt, gc,
4306                                          CONSTRUCTOR_ELTS (*tp));
4307       *tp = new_tree;
4308     }
4309   else if (TREE_CODE_CLASS (code) == tcc_type)
4310     *walk_subtrees = 0;
4311   else if (TREE_CODE_CLASS (code) == tcc_declaration)
4312     *walk_subtrees = 0;
4313   else if (TREE_CODE_CLASS (code) == tcc_constant)
4314     *walk_subtrees = 0;
4315   else
4316     gcc_assert (code != STATEMENT_LIST);
4317   return NULL_TREE;
4318 }
4319
4320 /* The SAVE_EXPR pointed to by TP is being copied.  If ST contains
4321    information indicating to what new SAVE_EXPR this one should be mapped,
4322    use that one.  Otherwise, create a new node and enter it in ST.  FN is
4323    the function into which the copy will be placed.  */
4324
4325 static void
4326 remap_save_expr (tree *tp, void *st_, int *walk_subtrees)
4327 {
4328   struct pointer_map_t *st = (struct pointer_map_t *) st_;
4329   tree *n;
4330   tree t;
4331
4332   /* See if we already encountered this SAVE_EXPR.  */
4333   n = (tree *) pointer_map_contains (st, *tp);
4334
4335   /* If we didn't already remap this SAVE_EXPR, do so now.  */
4336   if (!n)
4337     {
4338       t = copy_node (*tp);
4339
4340       /* Remember this SAVE_EXPR.  */
4341       *pointer_map_insert (st, *tp) = t;
4342       /* Make sure we don't remap an already-remapped SAVE_EXPR.  */
4343       *pointer_map_insert (st, t) = t;
4344     }
4345   else
4346     {
4347       /* We've already walked into this SAVE_EXPR; don't do it again.  */
4348       *walk_subtrees = 0;
4349       t = *n;
4350     }
4351
4352   /* Replace this SAVE_EXPR with the copy.  */
4353   *tp = t;
4354 }
4355
4356 /* Called via walk_tree.  If *TP points to a DECL_STMT for a local label,
4357    copies the declaration and enters it in the splay_tree in DATA (which is
4358    really an `copy_body_data *').  */
4359
4360 static tree
4361 mark_local_for_remap_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
4362                         void *data)
4363 {
4364   copy_body_data *id = (copy_body_data *) data;
4365
4366   /* Don't walk into types.  */
4367   if (TYPE_P (*tp))
4368     *walk_subtrees = 0;
4369
4370   else if (TREE_CODE (*tp) == LABEL_EXPR)
4371     {
4372       tree decl = TREE_OPERAND (*tp, 0);
4373
4374       /* Copy the decl and remember the copy.  */
4375       insert_decl_map (id, decl, id->copy_decl (decl, id));
4376     }
4377
4378   return NULL_TREE;
4379 }
4380
4381 /* Perform any modifications to EXPR required when it is unsaved.  Does
4382    not recurse into EXPR's subtrees.  */
4383
4384 static void
4385 unsave_expr_1 (tree expr)
4386 {
4387   switch (TREE_CODE (expr))
4388     {
4389     case TARGET_EXPR:
4390       /* Don't mess with a TARGET_EXPR that hasn't been expanded.
4391          It's OK for this to happen if it was part of a subtree that
4392          isn't immediately expanded, such as operand 2 of another
4393          TARGET_EXPR.  */
4394       if (TREE_OPERAND (expr, 1))
4395         break;
4396
4397       TREE_OPERAND (expr, 1) = TREE_OPERAND (expr, 3);
4398       TREE_OPERAND (expr, 3) = NULL_TREE;
4399       break;
4400
4401     default:
4402       break;
4403     }
4404 }
4405
4406 /* Called via walk_tree when an expression is unsaved.  Using the
4407    splay_tree pointed to by ST (which is really a `splay_tree'),
4408    remaps all local declarations to appropriate replacements.  */
4409
4410 static tree
4411 unsave_r (tree *tp, int *walk_subtrees, void *data)
4412 {
4413   copy_body_data *id = (copy_body_data *) data;
4414   struct pointer_map_t *st = id->decl_map;
4415   tree *n;
4416
4417   /* Only a local declaration (variable or label).  */
4418   if ((TREE_CODE (*tp) == VAR_DECL && !TREE_STATIC (*tp))
4419       || TREE_CODE (*tp) == LABEL_DECL)
4420     {
4421       /* Lookup the declaration.  */
4422       n = (tree *) pointer_map_contains (st, *tp);
4423
4424       /* If it's there, remap it.  */
4425       if (n)
4426         *tp = *n;
4427     }
4428
4429   else if (TREE_CODE (*tp) == STATEMENT_LIST)
4430     gcc_unreachable ();
4431   else if (TREE_CODE (*tp) == BIND_EXPR)
4432     copy_bind_expr (tp, walk_subtrees, id);
4433   else if (TREE_CODE (*tp) == SAVE_EXPR
4434            || TREE_CODE (*tp) == TARGET_EXPR)
4435     remap_save_expr (tp, st, walk_subtrees);
4436   else
4437     {
4438       copy_tree_r (tp, walk_subtrees, NULL);
4439
4440       /* Do whatever unsaving is required.  */
4441       unsave_expr_1 (*tp);
4442     }
4443
4444   /* Keep iterating.  */
4445   return NULL_TREE;
4446 }
4447
4448 /* Copies everything in EXPR and replaces variables, labels
4449    and SAVE_EXPRs local to EXPR.  */
4450
4451 tree
4452 unsave_expr_now (tree expr)
4453 {
4454   copy_body_data id;
4455
4456   /* There's nothing to do for NULL_TREE.  */
4457   if (expr == 0)
4458     return expr;
4459
4460   /* Set up ID.  */
4461   memset (&id, 0, sizeof (id));
4462   id.src_fn = current_function_decl;
4463   id.dst_fn = current_function_decl;
4464   id.decl_map = pointer_map_create ();
4465   id.debug_map = NULL;
4466
4467   id.copy_decl = copy_decl_no_change;
4468   id.transform_call_graph_edges = CB_CGE_DUPLICATE;
4469   id.transform_new_cfg = false;
4470   id.transform_return_to_modify = false;
4471   id.transform_lang_insert_block = NULL;
4472
4473   /* Walk the tree once to find local labels.  */
4474   walk_tree_without_duplicates (&expr, mark_local_for_remap_r, &id);
4475
4476   /* Walk the tree again, copying, remapping, and unsaving.  */
4477   walk_tree (&expr, unsave_r, &id, NULL);
4478
4479   /* Clean up.  */
4480   pointer_map_destroy (id.decl_map);
4481   if (id.debug_map)
4482     pointer_map_destroy (id.debug_map);
4483
4484   return expr;
4485 }
4486
4487 /* Called via walk_gimple_seq.  If *GSIP points to a GIMPLE_LABEL for a local
4488    label, copies the declaration and enters it in the splay_tree in DATA (which
4489    is really a 'copy_body_data *'.  */
4490
4491 static tree
4492 mark_local_labels_stmt (gimple_stmt_iterator *gsip,
4493                         bool *handled_ops_p ATTRIBUTE_UNUSED,
4494                         struct walk_stmt_info *wi)
4495 {
4496   copy_body_data *id = (copy_body_data *) wi->info;
4497   gimple stmt = gsi_stmt (*gsip);
4498
4499   if (gimple_code (stmt) == GIMPLE_LABEL)
4500     {
4501       tree decl = gimple_label_label (stmt);
4502
4503       /* Copy the decl and remember the copy.  */
4504       insert_decl_map (id, decl, id->copy_decl (decl, id));
4505     }
4506
4507   return NULL_TREE;
4508 }
4509
4510
4511 /* Called via walk_gimple_seq by copy_gimple_seq_and_replace_local.
4512    Using the splay_tree pointed to by ST (which is really a `splay_tree'),
4513    remaps all local declarations to appropriate replacements in gimple
4514    operands. */
4515
4516 static tree
4517 replace_locals_op (tree *tp, int *walk_subtrees, void *data)
4518 {
4519   struct walk_stmt_info *wi = (struct walk_stmt_info*) data;
4520   copy_body_data *id = (copy_body_data *) wi->info;
4521   struct pointer_map_t *st = id->decl_map;
4522   tree *n;
4523   tree expr = *tp;
4524
4525   /* Only a local declaration (variable or label).  */
4526   if ((TREE_CODE (expr) == VAR_DECL
4527        && !TREE_STATIC (expr))
4528       || TREE_CODE (expr) == LABEL_DECL)
4529     {
4530       /* Lookup the declaration.  */
4531       n = (tree *) pointer_map_contains (st, expr);
4532
4533       /* If it's there, remap it.  */
4534       if (n)
4535         *tp = *n;
4536       *walk_subtrees = 0;
4537     }
4538   else if (TREE_CODE (expr) == STATEMENT_LIST
4539            || TREE_CODE (expr) == BIND_EXPR
4540            || TREE_CODE (expr) == SAVE_EXPR)
4541     gcc_unreachable ();
4542   else if (TREE_CODE (expr) == TARGET_EXPR)
4543     {
4544       /* Don't mess with a TARGET_EXPR that hasn't been expanded.
4545          It's OK for this to happen if it was part of a subtree that
4546          isn't immediately expanded, such as operand 2 of another
4547          TARGET_EXPR.  */
4548       if (!TREE_OPERAND (expr, 1))
4549         {
4550           TREE_OPERAND (expr, 1) = TREE_OPERAND (expr, 3);
4551           TREE_OPERAND (expr, 3) = NULL_TREE;
4552         }
4553     }
4554
4555   /* Keep iterating.  */
4556   return NULL_TREE;
4557 }
4558
4559
4560 /* Called via walk_gimple_seq by copy_gimple_seq_and_replace_local.
4561    Using the splay_tree pointed to by ST (which is really a `splay_tree'),
4562    remaps all local declarations to appropriate replacements in gimple
4563    statements. */
4564
4565 static tree
4566 replace_locals_stmt (gimple_stmt_iterator *gsip,
4567                      bool *handled_ops_p ATTRIBUTE_UNUSED,
4568                      struct walk_stmt_info *wi)
4569 {
4570   copy_body_data *id = (copy_body_data *) wi->info;
4571   gimple stmt = gsi_stmt (*gsip);
4572
4573   if (gimple_code (stmt) == GIMPLE_BIND)
4574     {
4575       tree block = gimple_bind_block (stmt);
4576
4577       if (block)
4578         {
4579           remap_block (&block, id);
4580           gimple_bind_set_block (stmt, block);
4581         }
4582
4583       /* This will remap a lot of the same decls again, but this should be
4584          harmless.  */
4585       if (gimple_bind_vars (stmt))
4586         gimple_bind_set_vars (stmt, remap_decls (gimple_bind_vars (stmt), NULL, id));
4587     }
4588
4589   /* Keep iterating.  */
4590   return NULL_TREE;
4591 }
4592
4593
4594 /* Copies everything in SEQ and replaces variables and labels local to
4595    current_function_decl.  */
4596
4597 gimple_seq
4598 copy_gimple_seq_and_replace_locals (gimple_seq seq)
4599 {
4600   copy_body_data id;
4601   struct walk_stmt_info wi;
4602   struct pointer_set_t *visited;
4603   gimple_seq copy;
4604
4605   /* There's nothing to do for NULL_TREE.  */
4606   if (seq == NULL)
4607     return seq;
4608
4609   /* Set up ID.  */
4610   memset (&id, 0, sizeof (id));
4611   id.src_fn = current_function_decl;
4612   id.dst_fn = current_function_decl;
4613   id.decl_map = pointer_map_create ();
4614   id.debug_map = NULL;
4615
4616   id.copy_decl = copy_decl_no_change;
4617   id.transform_call_graph_edges = CB_CGE_DUPLICATE;
4618   id.transform_new_cfg = false;
4619   id.transform_return_to_modify = false;
4620   id.transform_lang_insert_block = NULL;
4621
4622   /* Walk the tree once to find local labels.  */
4623   memset (&wi, 0, sizeof (wi));
4624   visited = pointer_set_create ();
4625   wi.info = &id;
4626   wi.pset = visited;
4627   walk_gimple_seq (seq, mark_local_labels_stmt, NULL, &wi);
4628   pointer_set_destroy (visited);
4629
4630   copy = gimple_seq_copy (seq);
4631
4632   /* Walk the copy, remapping decls.  */
4633   memset (&wi, 0, sizeof (wi));
4634   wi.info = &id;
4635   walk_gimple_seq (copy, replace_locals_stmt, replace_locals_op, &wi);
4636
4637   /* Clean up.  */
4638   pointer_map_destroy (id.decl_map);
4639   if (id.debug_map)
4640     pointer_map_destroy (id.debug_map);
4641
4642   return copy;
4643 }
4644
4645
4646 /* Allow someone to determine if SEARCH is a child of TOP from gdb.  */
4647
4648 static tree
4649 debug_find_tree_1 (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED, void *data)
4650 {
4651   if (*tp == data)
4652     return (tree) data;
4653   else
4654     return NULL;
4655 }
4656
4657 DEBUG_FUNCTION bool
4658 debug_find_tree (tree top, tree search)
4659 {
4660   return walk_tree_without_duplicates (&top, debug_find_tree_1, search) != 0;
4661 }
4662
4663
4664 /* Declare the variables created by the inliner.  Add all the variables in
4665    VARS to BIND_EXPR.  */
4666
4667 static void
4668 declare_inline_vars (tree block, tree vars)
4669 {
4670   tree t;
4671   for (t = vars; t; t = DECL_CHAIN (t))
4672     {
4673       DECL_SEEN_IN_BIND_EXPR_P (t) = 1;
4674       gcc_assert (!TREE_STATIC (t) && !TREE_ASM_WRITTEN (t));
4675       add_local_decl (cfun, t);
4676     }
4677
4678   if (block)
4679     BLOCK_VARS (block) = chainon (BLOCK_VARS (block), vars);
4680 }
4681
4682 /* Copy NODE (which must be a DECL).  The DECL originally was in the FROM_FN,
4683    but now it will be in the TO_FN.  PARM_TO_VAR means enable PARM_DECL to
4684    VAR_DECL translation.  */
4685
4686 static tree
4687 copy_decl_for_dup_finish (copy_body_data *id, tree decl, tree copy)
4688 {
4689   /* Don't generate debug information for the copy if we wouldn't have
4690      generated it for the copy either.  */
4691   DECL_ARTIFICIAL (copy) = DECL_ARTIFICIAL (decl);
4692   DECL_IGNORED_P (copy) = DECL_IGNORED_P (decl);
4693
4694   /* Set the DECL_ABSTRACT_ORIGIN so the debugging routines know what
4695      declaration inspired this copy.  */
4696   DECL_ABSTRACT_ORIGIN (copy) = DECL_ORIGIN (decl);
4697
4698   /* The new variable/label has no RTL, yet.  */
4699   if (CODE_CONTAINS_STRUCT (TREE_CODE (copy), TS_DECL_WRTL)
4700       && !TREE_STATIC (copy) && !DECL_EXTERNAL (copy))
4701     SET_DECL_RTL (copy, 0);
4702
4703   /* These args would always appear unused, if not for this.  */
4704   TREE_USED (copy) = 1;
4705
4706   /* Set the context for the new declaration.  */
4707   if (!DECL_CONTEXT (decl))
4708     /* Globals stay global.  */
4709     ;
4710   else if (DECL_CONTEXT (decl) != id->src_fn)
4711     /* Things that weren't in the scope of the function we're inlining
4712        from aren't in the scope we're inlining to, either.  */
4713     ;
4714   else if (TREE_STATIC (decl))
4715     /* Function-scoped static variables should stay in the original
4716        function.  */
4717     ;
4718   else
4719     /* Ordinary automatic local variables are now in the scope of the
4720        new function.  */
4721     DECL_CONTEXT (copy) = id->dst_fn;
4722
4723   return copy;
4724 }
4725
4726 static tree
4727 copy_decl_to_var (tree decl, copy_body_data *id)
4728 {
4729   tree copy, type;
4730
4731   gcc_assert (TREE_CODE (decl) == PARM_DECL
4732               || TREE_CODE (decl) == RESULT_DECL);
4733
4734   type = TREE_TYPE (decl);
4735
4736   copy = build_decl (DECL_SOURCE_LOCATION (id->dst_fn),
4737                      VAR_DECL, DECL_NAME (decl), type);
4738   if (DECL_PT_UID_SET_P (decl))
4739     SET_DECL_PT_UID (copy, DECL_PT_UID (decl));
4740   TREE_ADDRESSABLE (copy) = TREE_ADDRESSABLE (decl);
4741   TREE_READONLY (copy) = TREE_READONLY (decl);
4742   TREE_THIS_VOLATILE (copy) = TREE_THIS_VOLATILE (decl);
4743   DECL_GIMPLE_REG_P (copy) = DECL_GIMPLE_REG_P (decl);
4744
4745   return copy_decl_for_dup_finish (id, decl, copy);
4746 }
4747
4748 /* Like copy_decl_to_var, but create a return slot object instead of a
4749    pointer variable for return by invisible reference.  */
4750
4751 static tree
4752 copy_result_decl_to_var (tree decl, copy_body_data *id)
4753 {
4754   tree copy, type;
4755
4756   gcc_assert (TREE_CODE (decl) == PARM_DECL
4757               || TREE_CODE (decl) == RESULT_DECL);
4758
4759   type = TREE_TYPE (decl);
4760   if (DECL_BY_REFERENCE (decl))
4761     type = TREE_TYPE (type);
4762
4763   copy = build_decl (DECL_SOURCE_LOCATION (id->dst_fn),
4764                      VAR_DECL, DECL_NAME (decl), type);
4765   if (DECL_PT_UID_SET_P (decl))
4766     SET_DECL_PT_UID (copy, DECL_PT_UID (decl));
4767   TREE_READONLY (copy) = TREE_READONLY (decl);
4768   TREE_THIS_VOLATILE (copy) = TREE_THIS_VOLATILE (decl);
4769   if (!DECL_BY_REFERENCE (decl))
4770     {
4771       TREE_ADDRESSABLE (copy) = TREE_ADDRESSABLE (decl);
4772       DECL_GIMPLE_REG_P (copy) = DECL_GIMPLE_REG_P (decl);
4773     }
4774
4775   return copy_decl_for_dup_finish (id, decl, copy);
4776 }
4777
4778 tree
4779 copy_decl_no_change (tree decl, copy_body_data *id)
4780 {
4781   tree copy;
4782
4783   copy = copy_node (decl);
4784
4785   /* The COPY is not abstract; it will be generated in DST_FN.  */
4786   DECL_ABSTRACT (copy) = 0;
4787   lang_hooks.dup_lang_specific_decl (copy);
4788
4789   /* TREE_ADDRESSABLE isn't used to indicate that a label's address has
4790      been taken; it's for internal bookkeeping in expand_goto_internal.  */
4791   if (TREE_CODE (copy) == LABEL_DECL)
4792     {
4793       TREE_ADDRESSABLE (copy) = 0;
4794       LABEL_DECL_UID (copy) = -1;
4795     }
4796
4797   return copy_decl_for_dup_finish (id, decl, copy);
4798 }
4799
4800 static tree
4801 copy_decl_maybe_to_var (tree decl, copy_body_data *id)
4802 {
4803   if (TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL)
4804     return copy_decl_to_var (decl, id);
4805   else
4806     return copy_decl_no_change (decl, id);
4807 }
4808
4809 /* Return a copy of the function's argument tree.  */
4810 static tree
4811 copy_arguments_for_versioning (tree orig_parm, copy_body_data * id,
4812                                bitmap args_to_skip, tree *vars)
4813 {
4814   tree arg, *parg;
4815   tree new_parm = NULL;
4816   int i = 0;
4817
4818   parg = &new_parm;
4819
4820   for (arg = orig_parm; arg; arg = DECL_CHAIN (arg), i++)
4821     if (!args_to_skip || !bitmap_bit_p (args_to_skip, i))
4822       {
4823         tree new_tree = remap_decl (arg, id);
4824         lang_hooks.dup_lang_specific_decl (new_tree);
4825         *parg = new_tree;
4826         parg = &DECL_CHAIN (new_tree);
4827       }
4828     else if (!pointer_map_contains (id->decl_map, arg))
4829       {
4830         /* Make an equivalent VAR_DECL.  If the argument was used
4831            as temporary variable later in function, the uses will be
4832            replaced by local variable.  */
4833         tree var = copy_decl_to_var (arg, id);
4834         get_var_ann (var);
4835         add_referenced_var (var);
4836         insert_decl_map (id, arg, var);
4837         /* Declare this new variable.  */
4838         DECL_CHAIN (var) = *vars;
4839         *vars = var;
4840       }
4841   return new_parm;
4842 }
4843
4844 /* Return a copy of the function's static chain.  */
4845 static tree
4846 copy_static_chain (tree static_chain, copy_body_data * id)
4847 {
4848   tree *chain_copy, *pvar;
4849
4850   chain_copy = &static_chain;
4851   for (pvar = chain_copy; *pvar; pvar = &DECL_CHAIN (*pvar))
4852     {
4853       tree new_tree = remap_decl (*pvar, id);
4854       lang_hooks.dup_lang_specific_decl (new_tree);
4855       DECL_CHAIN (new_tree) = DECL_CHAIN (*pvar);
4856       *pvar = new_tree;
4857     }
4858   return static_chain;
4859 }
4860
4861 /* Return true if the function is allowed to be versioned.
4862    This is a guard for the versioning functionality.  */
4863
4864 bool
4865 tree_versionable_function_p (tree fndecl)
4866 {
4867   return (!lookup_attribute ("noclone", DECL_ATTRIBUTES (fndecl))
4868           && copy_forbidden (DECL_STRUCT_FUNCTION (fndecl), fndecl) == NULL);
4869 }
4870
4871 /* Delete all unreachable basic blocks and update callgraph.
4872    Doing so is somewhat nontrivial because we need to update all clones and
4873    remove inline function that become unreachable.  */
4874
4875 static bool
4876 delete_unreachable_blocks_update_callgraph (copy_body_data *id)
4877 {
4878   bool changed = false;
4879   basic_block b, next_bb;
4880
4881   find_unreachable_blocks ();
4882
4883   /* Delete all unreachable basic blocks.  */
4884
4885   for (b = ENTRY_BLOCK_PTR->next_bb; b != EXIT_BLOCK_PTR; b = next_bb)
4886     {
4887       next_bb = b->next_bb;
4888
4889       if (!(b->flags & BB_REACHABLE))
4890         {
4891           gimple_stmt_iterator bsi;
4892
4893           for (bsi = gsi_start_bb (b); !gsi_end_p (bsi); gsi_next (&bsi))
4894             if (gimple_code (gsi_stmt (bsi)) == GIMPLE_CALL)
4895               {
4896                 struct cgraph_edge *e;
4897                 struct cgraph_node *node;
4898
4899                 if ((e = cgraph_edge (id->dst_node, gsi_stmt (bsi))) != NULL)
4900                   {
4901                     if (!e->inline_failed)
4902                       cgraph_remove_node_and_inline_clones (e->callee);
4903                     else
4904                       cgraph_remove_edge (e);
4905                   }
4906                 if (id->transform_call_graph_edges == CB_CGE_MOVE_CLONES
4907                     && id->dst_node->clones)
4908                   for (node = id->dst_node->clones; node != id->dst_node;)
4909                     {
4910                       if ((e = cgraph_edge (node, gsi_stmt (bsi))) != NULL)
4911                         {
4912                           if (!e->inline_failed)
4913                             cgraph_remove_node_and_inline_clones (e->callee);
4914                           else
4915                             cgraph_remove_edge (e);
4916                         }
4917
4918                       if (node->clones)
4919                         node = node->clones;
4920                       else if (node->next_sibling_clone)
4921                         node = node->next_sibling_clone;
4922                       else
4923                         {
4924                           while (node != id->dst_node && !node->next_sibling_clone)
4925                             node = node->clone_of;
4926                           if (node != id->dst_node)
4927                             node = node->next_sibling_clone;
4928                         }
4929                     }
4930               }
4931           delete_basic_block (b);
4932           changed = true;
4933         }
4934     }
4935
4936   if (changed)
4937     tidy_fallthru_edges ();
4938   return changed;
4939 }
4940
4941 /* Update clone info after duplication.  */
4942
4943 static void
4944 update_clone_info (copy_body_data * id)
4945 {
4946   struct cgraph_node *node;
4947   if (!id->dst_node->clones)
4948     return;
4949   for (node = id->dst_node->clones; node != id->dst_node;)
4950     {
4951       /* First update replace maps to match the new body.  */
4952       if (node->clone.tree_map)
4953         {
4954           unsigned int i;
4955           for (i = 0; i < VEC_length (ipa_replace_map_p, node->clone.tree_map); i++)
4956             {
4957               struct ipa_replace_map *replace_info;
4958               replace_info = VEC_index (ipa_replace_map_p, node->clone.tree_map, i);
4959               walk_tree (&replace_info->old_tree, copy_tree_body_r, id, NULL);
4960               walk_tree (&replace_info->new_tree, copy_tree_body_r, id, NULL);
4961             }
4962         }
4963       if (node->clones)
4964         node = node->clones;
4965       else if (node->next_sibling_clone)
4966         node = node->next_sibling_clone;
4967       else
4968         {
4969           while (node != id->dst_node && !node->next_sibling_clone)
4970             node = node->clone_of;
4971           if (node != id->dst_node)
4972             node = node->next_sibling_clone;
4973         }
4974     }
4975 }
4976
4977 /* Create a copy of a function's tree.
4978    OLD_DECL and NEW_DECL are FUNCTION_DECL tree nodes
4979    of the original function and the new copied function
4980    respectively.  In case we want to replace a DECL
4981    tree with another tree while duplicating the function's
4982    body, TREE_MAP represents the mapping between these
4983    trees. If UPDATE_CLONES is set, the call_stmt fields
4984    of edges of clones of the function will be updated.  
4985
4986    If non-NULL ARGS_TO_SKIP determine function parameters to remove
4987    from new version.
4988    If non-NULL BLOCK_TO_COPY determine what basic blocks to copy.
4989    If non_NULL NEW_ENTRY determine new entry BB of the clone.
4990 */
4991 void
4992 tree_function_versioning (tree old_decl, tree new_decl,
4993                           VEC(ipa_replace_map_p,gc)* tree_map,
4994                           bool update_clones, bitmap args_to_skip,
4995                           bitmap blocks_to_copy, basic_block new_entry)
4996 {
4997   struct cgraph_node *old_version_node;
4998   struct cgraph_node *new_version_node;
4999   copy_body_data id;
5000   tree p;
5001   unsigned i;
5002   struct ipa_replace_map *replace_info;
5003   basic_block old_entry_block, bb;
5004   VEC (gimple, heap) *init_stmts = VEC_alloc (gimple, heap, 10);
5005
5006   tree old_current_function_decl = current_function_decl;
5007   tree vars = NULL_TREE;
5008
5009   gcc_assert (TREE_CODE (old_decl) == FUNCTION_DECL
5010               && TREE_CODE (new_decl) == FUNCTION_DECL);
5011   DECL_POSSIBLY_INLINED (old_decl) = 1;
5012
5013   old_version_node = cgraph_node (old_decl);
5014   new_version_node = cgraph_node (new_decl);
5015
5016   /* Output the inlining info for this abstract function, since it has been
5017      inlined.  If we don't do this now, we can lose the information about the
5018      variables in the function when the blocks get blown away as soon as we
5019      remove the cgraph node.  */
5020   (*debug_hooks->outlining_inline_function) (old_decl);
5021
5022   DECL_ARTIFICIAL (new_decl) = 1;
5023   DECL_ABSTRACT_ORIGIN (new_decl) = DECL_ORIGIN (old_decl);
5024   DECL_FUNCTION_PERSONALITY (new_decl) = DECL_FUNCTION_PERSONALITY (old_decl);
5025
5026   /* Prepare the data structures for the tree copy.  */
5027   memset (&id, 0, sizeof (id));
5028
5029   /* Generate a new name for the new version. */
5030   id.statements_to_fold = pointer_set_create ();
5031
5032   id.decl_map = pointer_map_create ();
5033   id.debug_map = NULL;
5034   id.src_fn = old_decl;
5035   id.dst_fn = new_decl;
5036   id.src_node = old_version_node;
5037   id.dst_node = new_version_node;
5038   id.src_cfun = DECL_STRUCT_FUNCTION (old_decl);
5039   if (id.src_node->ipa_transforms_to_apply)
5040     {
5041       VEC(ipa_opt_pass,heap) * old_transforms_to_apply = id.dst_node->ipa_transforms_to_apply;
5042       unsigned int i;
5043
5044       id.dst_node->ipa_transforms_to_apply = VEC_copy (ipa_opt_pass, heap,
5045                                                        id.src_node->ipa_transforms_to_apply);
5046       for (i = 0; i < VEC_length (ipa_opt_pass, old_transforms_to_apply); i++)
5047         VEC_safe_push (ipa_opt_pass, heap, id.dst_node->ipa_transforms_to_apply,
5048                        VEC_index (ipa_opt_pass,
5049                                   old_transforms_to_apply,
5050                                   i));
5051     }
5052
5053   id.copy_decl = copy_decl_no_change;
5054   id.transform_call_graph_edges
5055     = update_clones ? CB_CGE_MOVE_CLONES : CB_CGE_MOVE;
5056   id.transform_new_cfg = true;
5057   id.transform_return_to_modify = false;
5058   id.transform_lang_insert_block = NULL;
5059
5060   current_function_decl = new_decl;
5061   old_entry_block = ENTRY_BLOCK_PTR_FOR_FUNCTION
5062     (DECL_STRUCT_FUNCTION (old_decl));
5063   initialize_cfun (new_decl, old_decl,
5064                    old_entry_block->count);
5065   DECL_STRUCT_FUNCTION (new_decl)->gimple_df->ipa_pta
5066     = id.src_cfun->gimple_df->ipa_pta;
5067   push_cfun (DECL_STRUCT_FUNCTION (new_decl));
5068
5069   /* Copy the function's static chain.  */
5070   p = DECL_STRUCT_FUNCTION (old_decl)->static_chain_decl;
5071   if (p)
5072     DECL_STRUCT_FUNCTION (new_decl)->static_chain_decl =
5073       copy_static_chain (DECL_STRUCT_FUNCTION (old_decl)->static_chain_decl,
5074                          &id);
5075
5076   /* If there's a tree_map, prepare for substitution.  */
5077   if (tree_map)
5078     for (i = 0; i < VEC_length (ipa_replace_map_p, tree_map); i++)
5079       {
5080         gimple init;
5081         replace_info = VEC_index (ipa_replace_map_p, tree_map, i);
5082         if (replace_info->replace_p)
5083           {
5084             tree op = replace_info->new_tree;
5085             if (!replace_info->old_tree)
5086               {
5087                 int i = replace_info->parm_num;
5088                 tree parm;
5089                 for (parm = DECL_ARGUMENTS (old_decl); i; parm = DECL_CHAIN (parm))
5090                   i --;
5091                 replace_info->old_tree = parm;
5092               }
5093                 
5094
5095             STRIP_NOPS (op);
5096
5097             if (TREE_CODE (op) == VIEW_CONVERT_EXPR)
5098               op = TREE_OPERAND (op, 0);
5099
5100             if (TREE_CODE (op) == ADDR_EXPR)
5101               {
5102                 op = TREE_OPERAND (op, 0);
5103                 while (handled_component_p (op))
5104                   op = TREE_OPERAND (op, 0);
5105                 if (TREE_CODE (op) == VAR_DECL)
5106                   add_referenced_var (op);
5107               }
5108             gcc_assert (TREE_CODE (replace_info->old_tree) == PARM_DECL);
5109             init = setup_one_parameter (&id, replace_info->old_tree,
5110                                         replace_info->new_tree, id.src_fn,
5111                                         NULL,
5112                                         &vars);
5113             if (init)
5114               VEC_safe_push (gimple, heap, init_stmts, init);
5115           }
5116       }
5117   /* Copy the function's arguments.  */
5118   if (DECL_ARGUMENTS (old_decl) != NULL_TREE)
5119     DECL_ARGUMENTS (new_decl) =
5120       copy_arguments_for_versioning (DECL_ARGUMENTS (old_decl), &id,
5121                                      args_to_skip, &vars);
5122
5123   DECL_INITIAL (new_decl) = remap_blocks (DECL_INITIAL (id.src_fn), &id);
5124
5125   declare_inline_vars (DECL_INITIAL (new_decl), vars);
5126
5127   if (!VEC_empty (tree, DECL_STRUCT_FUNCTION (old_decl)->local_decls))
5128     /* Add local vars.  */
5129     add_local_variables (DECL_STRUCT_FUNCTION (old_decl), cfun, &id, false);
5130
5131   /* Copy the Function's body.  */
5132   copy_body (&id, old_entry_block->count, REG_BR_PROB_BASE,
5133              ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, blocks_to_copy, new_entry);
5134
5135   if (DECL_RESULT (old_decl) != NULL_TREE)
5136     {
5137       tree *res_decl = &DECL_RESULT (old_decl);
5138       DECL_RESULT (new_decl) = remap_decl (*res_decl, &id);
5139       lang_hooks.dup_lang_specific_decl (DECL_RESULT (new_decl));
5140     }
5141
5142   /* Renumber the lexical scoping (non-code) blocks consecutively.  */
5143   number_blocks (new_decl);
5144
5145   /* We want to create the BB unconditionally, so that the addition of
5146      debug stmts doesn't affect BB count, which may in the end cause
5147      codegen differences.  */
5148   bb = split_edge (single_succ_edge (ENTRY_BLOCK_PTR));
5149   while (VEC_length (gimple, init_stmts))
5150     insert_init_stmt (&id, bb, VEC_pop (gimple, init_stmts));
5151   update_clone_info (&id);
5152
5153   /* Remap the nonlocal_goto_save_area, if any.  */
5154   if (cfun->nonlocal_goto_save_area)
5155     {
5156       struct walk_stmt_info wi;
5157
5158       memset (&wi, 0, sizeof (wi));
5159       wi.info = &id;
5160       walk_tree (&cfun->nonlocal_goto_save_area, remap_gimple_op_r, &wi, NULL);
5161     }
5162
5163   /* Clean up.  */
5164   pointer_map_destroy (id.decl_map);
5165   if (id.debug_map)
5166     pointer_map_destroy (id.debug_map);
5167   free_dominance_info (CDI_DOMINATORS);
5168   free_dominance_info (CDI_POST_DOMINATORS);
5169
5170   fold_marked_statements (0, id.statements_to_fold);
5171   pointer_set_destroy (id.statements_to_fold);
5172   fold_cond_expr_cond ();
5173   delete_unreachable_blocks_update_callgraph (&id);
5174   if (id.dst_node->analyzed)
5175     cgraph_rebuild_references ();
5176   update_ssa (TODO_update_ssa);
5177
5178   /* After partial cloning we need to rescale frequencies, so they are
5179      within proper range in the cloned function.  */
5180   if (new_entry)
5181     {
5182       struct cgraph_edge *e;
5183       rebuild_frequencies ();
5184
5185       new_version_node->count = ENTRY_BLOCK_PTR->count;
5186       for (e = new_version_node->callees; e; e = e->next_callee)
5187         {
5188           basic_block bb = gimple_bb (e->call_stmt);
5189           e->frequency = compute_call_stmt_bb_frequency (current_function_decl,
5190                                                          bb);
5191           e->count = bb->count;
5192         }
5193       for (e = new_version_node->indirect_calls; e; e = e->next_callee)
5194         {
5195           basic_block bb = gimple_bb (e->call_stmt);
5196           e->frequency = compute_call_stmt_bb_frequency (current_function_decl,
5197                                                          bb);
5198           e->count = bb->count;
5199         }
5200     }
5201
5202   free_dominance_info (CDI_DOMINATORS);
5203   free_dominance_info (CDI_POST_DOMINATORS);
5204
5205   gcc_assert (!id.debug_stmts);
5206   VEC_free (gimple, heap, init_stmts);
5207   pop_cfun ();
5208   current_function_decl = old_current_function_decl;
5209   gcc_assert (!current_function_decl
5210               || DECL_STRUCT_FUNCTION (current_function_decl) == cfun);
5211   return;
5212 }
5213
5214 /* EXP is CALL_EXPR present in a GENERIC expression tree.  Try to integrate
5215    the callee and return the inlined body on success.  */
5216
5217 tree
5218 maybe_inline_call_in_expr (tree exp)
5219 {
5220   tree fn = get_callee_fndecl (exp);
5221
5222   /* We can only try to inline "const" functions.  */
5223   if (fn && TREE_READONLY (fn) && DECL_SAVED_TREE (fn))
5224     {
5225       struct pointer_map_t *decl_map = pointer_map_create ();
5226       call_expr_arg_iterator iter;
5227       copy_body_data id;
5228       tree param, arg, t;
5229
5230       /* Remap the parameters.  */
5231       for (param = DECL_ARGUMENTS (fn), arg = first_call_expr_arg (exp, &iter);
5232            param;
5233            param = DECL_CHAIN (param), arg = next_call_expr_arg (&iter))
5234         *pointer_map_insert (decl_map, param) = arg;
5235
5236       memset (&id, 0, sizeof (id));
5237       id.src_fn = fn;
5238       id.dst_fn = current_function_decl;
5239       id.src_cfun = DECL_STRUCT_FUNCTION (fn);
5240       id.decl_map = decl_map;
5241
5242       id.copy_decl = copy_decl_no_change;
5243       id.transform_call_graph_edges = CB_CGE_DUPLICATE;
5244       id.transform_new_cfg = false;
5245       id.transform_return_to_modify = true;
5246       id.transform_lang_insert_block = false;
5247
5248       /* Make sure not to unshare trees behind the front-end's back
5249          since front-end specific mechanisms may rely on sharing.  */
5250       id.regimplify = false;
5251       id.do_not_unshare = true;
5252
5253       /* We're not inside any EH region.  */
5254       id.eh_lp_nr = 0;
5255
5256       t = copy_tree_body (&id);
5257       pointer_map_destroy (decl_map);
5258
5259       /* We can only return something suitable for use in a GENERIC
5260          expression tree.  */
5261       if (TREE_CODE (t) == MODIFY_EXPR)
5262         return TREE_OPERAND (t, 1);
5263     }
5264
5265    return NULL_TREE;
5266 }
5267
5268 /* Duplicate a type, fields and all.  */
5269
5270 tree
5271 build_duplicate_type (tree type)
5272 {
5273   struct copy_body_data id;
5274
5275   memset (&id, 0, sizeof (id));
5276   id.src_fn = current_function_decl;
5277   id.dst_fn = current_function_decl;
5278   id.src_cfun = cfun;
5279   id.decl_map = pointer_map_create ();
5280   id.debug_map = NULL;
5281   id.copy_decl = copy_decl_no_change;
5282
5283   type = remap_type_1 (type, &id);
5284
5285   pointer_map_destroy (id.decl_map);
5286   if (id.debug_map)
5287     pointer_map_destroy (id.debug_map);
5288
5289   TYPE_CANONICAL (type) = type;
5290
5291   return type;
5292 }
5293
5294 /* Return whether it is safe to inline a function because it used different
5295    target specific options or call site actual types mismatch parameter types.
5296    E is the call edge to be checked.  */
5297 bool
5298 tree_can_inline_p (struct cgraph_edge *e)
5299 {
5300 #if 0
5301   /* This causes a regression in SPEC in that it prevents a cold function from
5302      inlining a hot function.  Perhaps this should only apply to functions
5303      that the user declares hot/cold/optimize explicitly.  */
5304
5305   /* Don't inline a function with a higher optimization level than the
5306      caller, or with different space constraints (hot/cold functions).  */
5307   tree caller_tree = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (caller);
5308   tree callee_tree = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (callee);
5309
5310   if (caller_tree != callee_tree)
5311     {
5312       struct cl_optimization *caller_opt
5313         = TREE_OPTIMIZATION ((caller_tree)
5314                              ? caller_tree
5315                              : optimization_default_node);
5316
5317       struct cl_optimization *callee_opt
5318         = TREE_OPTIMIZATION ((callee_tree)
5319                              ? callee_tree
5320                              : optimization_default_node);
5321
5322       if ((caller_opt->optimize > callee_opt->optimize)
5323           || (caller_opt->optimize_size != callee_opt->optimize_size))
5324         return false;
5325     }
5326 #endif
5327   tree caller, callee, lhs;
5328
5329   caller = e->caller->decl;
5330   callee = e->callee->decl;
5331
5332   /* First check that inlining isn't simply forbidden in this case.  */
5333   if (inline_forbidden_into_p (caller, callee))
5334     {
5335       e->inline_failed = CIF_UNSPECIFIED;
5336       gimple_call_set_cannot_inline (e->call_stmt, true);
5337       return false;
5338     }
5339
5340   /* Allow the backend to decide if inlining is ok.  */
5341   if (!targetm.target_option.can_inline_p (caller, callee))
5342     {
5343       e->inline_failed = CIF_TARGET_OPTION_MISMATCH;
5344       gimple_call_set_cannot_inline (e->call_stmt, true);
5345       e->call_stmt_cannot_inline_p = true;
5346       return false;
5347     }
5348
5349   /* Do not inline calls where we cannot triviall work around mismatches
5350      in argument or return types.  */
5351   if (e->call_stmt
5352       && ((DECL_RESULT (callee)
5353            && !DECL_BY_REFERENCE (DECL_RESULT (callee))
5354            && (lhs = gimple_call_lhs (e->call_stmt)) != NULL_TREE
5355            && !useless_type_conversion_p (TREE_TYPE (DECL_RESULT (callee)),
5356                                           TREE_TYPE (lhs))
5357            && !fold_convertible_p (TREE_TYPE (DECL_RESULT (callee)), lhs))
5358           || !gimple_check_call_args (e->call_stmt)))
5359     {
5360       e->inline_failed = CIF_MISMATCHED_ARGUMENTS;
5361       gimple_call_set_cannot_inline (e->call_stmt, true);
5362       e->call_stmt_cannot_inline_p = true;
5363       return false;
5364     }
5365
5366   return true;
5367 }