OSDN Git Service

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