OSDN Git Service

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