OSDN Git Service

gcc/ChangeLog:
[pf3gnuchains/gcc-fork.git] / gcc / tree-inline.c
1 /* Tree inlining.
2    Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007
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 "varray.h"
36 #include "hashtab.h"
37 #include "langhooks.h"
38 #include "basic-block.h"
39 #include "tree-iterator.h"
40 #include "cgraph.h"
41 #include "intl.h"
42 #include "tree-mudflap.h"
43 #include "tree-flow.h"
44 #include "function.h"
45 #include "ggc.h"
46 #include "tree-flow.h"
47 #include "diagnostic.h"
48 #include "except.h"
49 #include "debug.h"
50 #include "pointer-set.h"
51 #include "ipa-prop.h"
52 #include "value-prof.h"
53 #include "tree-pass.h"
54 #include "target.h"
55 #include "integrate.h"
56
57 /* I'm not real happy about this, but we need to handle gimple and
58    non-gimple trees.  */
59 #include "tree-gimple.h"
60
61 /* Inlining, Cloning, Versioning, Parallelization
62
63    Inlining: a function body is duplicated, but the PARM_DECLs are
64    remapped into VAR_DECLs, and non-void RETURN_EXPRs become
65    GIMPLE_MODIFY_STMTs that store to a dedicated returned-value variable.
66    The duplicated eh_region info of the copy will later be appended
67    to the info for the caller; the eh_region info in copied throwing
68    statements and RESX_EXPRs is adjusted accordingly.
69
70    Cloning: (only in C++) We have one body for a con/de/structor, and
71    multiple function decls, each with a unique parameter list.
72    Duplicate the body, using the given splay tree; some parameters
73    will become constants (like 0 or 1).
74
75    Versioning: a function body is duplicated and the result is a new
76    function rather than into blocks of an existing function as with
77    inlining.  Some parameters will become constants.
78
79    Parallelization: a region of a function is duplicated resulting in
80    a new function.  Variables may be replaced with complex expressions
81    to enable shared variable semantics.
82
83    All of these will simultaneously lookup any callgraph edges.  If
84    we're going to inline the duplicated function body, and the given
85    function has some cloned callgraph nodes (one for each place this
86    function will be inlined) those callgraph edges will be duplicated.
87    If we're cloning the body, those callgraph edges will be
88    updated to point into the new body.  (Note that the original
89    callgraph node and edge list will not be altered.)
90
91    See the CALL_EXPR handling case in copy_body_r ().  */
92
93 /* 0 if we should not perform inlining.
94    1 if we should expand functions calls inline at the tree level.
95    2 if we should consider *all* functions to be inline
96    candidates.  */
97
98 int flag_inline_trees = 0;
99
100 /* To Do:
101
102    o In order to make inlining-on-trees work, we pessimized
103      function-local static constants.  In particular, they are now
104      always output, even when not addressed.  Fix this by treating
105      function-local static constants just like global static
106      constants; the back-end already knows not to output them if they
107      are not needed.
108
109    o Provide heuristics to clamp inlining of recursive template
110      calls?  */
111
112
113 /* Weights that estimate_num_insns uses for heuristics in inlining.  */
114
115 eni_weights eni_inlining_weights;
116
117 /* Weights that estimate_num_insns uses to estimate the size of the
118    produced code.  */
119
120 eni_weights eni_size_weights;
121
122 /* Weights that estimate_num_insns uses to estimate the time necessary
123    to execute the produced code.  */
124
125 eni_weights eni_time_weights;
126
127 /* Prototypes.  */
128
129 static tree declare_return_variable (copy_body_data *, tree, tree, tree *);
130 static tree copy_generic_body (copy_body_data *);
131 static bool inlinable_function_p (tree);
132 static void remap_block (tree *, copy_body_data *);
133 static tree remap_decls (tree, copy_body_data *);
134 static void copy_bind_expr (tree *, int *, copy_body_data *);
135 static tree mark_local_for_remap_r (tree *, int *, void *);
136 static void unsave_expr_1 (tree);
137 static tree unsave_r (tree *, int *, void *);
138 static void declare_inline_vars (tree, tree);
139 static void remap_save_expr (tree *, void *, int *);
140 static void add_lexical_block (tree current_block, tree new_block);
141 static tree copy_decl_to_var (tree, copy_body_data *);
142 static tree copy_result_decl_to_var (tree, copy_body_data *);
143 static tree copy_decl_no_change (tree, copy_body_data *);
144 static tree copy_decl_maybe_to_var (tree, copy_body_data *);
145
146 /* Insert a tree->tree mapping for ID.  Despite the name suggests
147    that the trees should be variables, it is used for more than that.  */
148
149 void
150 insert_decl_map (copy_body_data *id, tree key, tree value)
151 {
152   *pointer_map_insert (id->decl_map, key) = value;
153
154   /* Always insert an identity map as well.  If we see this same new
155      node again, we won't want to duplicate it a second time.  */
156   if (key != value)
157     *pointer_map_insert (id->decl_map, value) = value;
158 }
159
160 /* Construct new SSA name for old NAME. ID is the inline context.  */
161
162 static tree
163 remap_ssa_name (tree name, copy_body_data *id)
164 {
165   tree new;
166   tree *n;
167
168   gcc_assert (TREE_CODE (name) == SSA_NAME);
169
170   n = (tree *) pointer_map_contains (id->decl_map, name);
171   if (n)
172     return *n;
173
174   /* Do not set DEF_STMT yet as statement is not copied yet. We do that
175      in copy_bb.  */
176   new = remap_decl (SSA_NAME_VAR (name), id);
177   /* We might've substituted constant or another SSA_NAME for
178      the variable. 
179
180      Replace the SSA name representing RESULT_DECL by variable during
181      inlining:  this saves us from need to introduce PHI node in a case
182      return value is just partly initialized.  */
183   if ((TREE_CODE (new) == VAR_DECL || TREE_CODE (new) == PARM_DECL)
184       && (TREE_CODE (SSA_NAME_VAR (name)) != RESULT_DECL
185           || !id->transform_return_to_modify))
186     {
187       new = make_ssa_name (new, NULL);
188       insert_decl_map (id, name, new);
189       if (IS_EMPTY_STMT (SSA_NAME_DEF_STMT (name)))
190         {
191           SSA_NAME_DEF_STMT (new) = build_empty_stmt ();
192           if (gimple_default_def (id->src_cfun, SSA_NAME_VAR (name)) == name)
193             set_default_def (SSA_NAME_VAR (new), new);
194         }
195       SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new)
196         = SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name);
197       TREE_TYPE (new) = TREE_TYPE (SSA_NAME_VAR (new));
198     }
199   else
200     insert_decl_map (id, name, new);
201   return new;
202 }
203
204 /* Remap DECL during the copying of the BLOCK tree for the function.  */
205
206 tree
207 remap_decl (tree decl, copy_body_data *id)
208 {
209   tree *n;
210   tree fn;
211
212   /* We only remap local variables in the current function.  */
213   fn = id->src_fn;
214
215   /* See if we have remapped this declaration.  */
216
217   n = (tree *) pointer_map_contains (id->decl_map, decl);
218
219   /* If we didn't already have an equivalent for this declaration,
220      create one now.  */
221   if (!n)
222     {
223       /* Make a copy of the variable or label.  */
224       tree t = id->copy_decl (decl, id);
225      
226       /* Remember it, so that if we encounter this local entity again
227          we can reuse this copy.  Do this early because remap_type may
228          need this decl for TYPE_STUB_DECL.  */
229       insert_decl_map (id, decl, t);
230
231       if (!DECL_P (t))
232         return t;
233
234       /* Remap types, if necessary.  */
235       TREE_TYPE (t) = remap_type (TREE_TYPE (t), id);
236       if (TREE_CODE (t) == TYPE_DECL)
237         DECL_ORIGINAL_TYPE (t) = remap_type (DECL_ORIGINAL_TYPE (t), id);
238
239       /* Remap sizes as necessary.  */
240       walk_tree (&DECL_SIZE (t), copy_body_r, id, NULL);
241       walk_tree (&DECL_SIZE_UNIT (t), copy_body_r, id, NULL);
242
243       /* If fields, do likewise for offset and qualifier.  */
244       if (TREE_CODE (t) == FIELD_DECL)
245         {
246           walk_tree (&DECL_FIELD_OFFSET (t), copy_body_r, id, NULL);
247           if (TREE_CODE (DECL_CONTEXT (t)) == QUAL_UNION_TYPE)
248             walk_tree (&DECL_QUALIFIER (t), copy_body_r, id, NULL);
249         }
250
251       if (cfun && gimple_in_ssa_p (cfun)
252           && (TREE_CODE (t) == VAR_DECL
253               || TREE_CODE (t) == RESULT_DECL || TREE_CODE (t) == PARM_DECL))
254         {
255           tree def = gimple_default_def (id->src_cfun, decl);
256           get_var_ann (t);
257           if (TREE_CODE (decl) != PARM_DECL && def)
258             {
259               tree map = remap_ssa_name (def, id);
260               /* Watch out RESULT_DECLs whose SSA names map directly
261                  to them.  */
262               if (TREE_CODE (map) == SSA_NAME)
263                 set_default_def (t, map);
264             }
265           add_referenced_var (t);
266         }
267       return t;
268     }
269
270   return unshare_expr (*n);
271 }
272
273 static tree
274 remap_type_1 (tree type, copy_body_data *id)
275 {
276   tree *node;
277   tree new, t;
278
279   if (type == NULL)
280     return type;
281
282   /* See if we have remapped this type.  */
283   node = (tree *) pointer_map_contains (id->decl_map, type);
284   if (node)
285     return *node;
286
287   /* The type only needs remapping if it's variably modified.  */
288   if (! variably_modified_type_p (type, id->src_fn))
289     {
290       insert_decl_map (id, type, type);
291       return type;
292     }
293
294   /* We do need a copy.  build and register it now.  If this is a pointer or
295      reference type, remap the designated type and make a new pointer or
296      reference type.  */
297   if (TREE_CODE (type) == POINTER_TYPE)
298     {
299       new = build_pointer_type_for_mode (remap_type (TREE_TYPE (type), id),
300                                          TYPE_MODE (type),
301                                          TYPE_REF_CAN_ALIAS_ALL (type));
302       insert_decl_map (id, type, new);
303       return new;
304     }
305   else if (TREE_CODE (type) == REFERENCE_TYPE)
306     {
307       new = build_reference_type_for_mode (remap_type (TREE_TYPE (type), id),
308                                             TYPE_MODE (type),
309                                             TYPE_REF_CAN_ALIAS_ALL (type));
310       insert_decl_map (id, type, new);
311       return new;
312     }
313   else
314     new = copy_node (type);
315
316   insert_decl_map (id, type, new);
317
318   /* This is a new type, not a copy of an old type.  Need to reassociate
319      variants.  We can handle everything except the main variant lazily.  */
320   t = TYPE_MAIN_VARIANT (type);
321   if (type != t)
322     {
323       t = remap_type (t, id);
324       TYPE_MAIN_VARIANT (new) = t;
325       TYPE_NEXT_VARIANT (new) = TYPE_NEXT_VARIANT (t);
326       TYPE_NEXT_VARIANT (t) = new;
327     }
328   else
329     {
330       TYPE_MAIN_VARIANT (new) = new;
331       TYPE_NEXT_VARIANT (new) = NULL;
332     }
333
334   if (TYPE_STUB_DECL (type))
335     TYPE_STUB_DECL (new) = remap_decl (TYPE_STUB_DECL (type), id);
336
337   /* Lazily create pointer and reference types.  */
338   TYPE_POINTER_TO (new) = NULL;
339   TYPE_REFERENCE_TO (new) = NULL;
340
341   switch (TREE_CODE (new))
342     {
343     case INTEGER_TYPE:
344     case REAL_TYPE:
345     case FIXED_POINT_TYPE:
346     case ENUMERAL_TYPE:
347     case BOOLEAN_TYPE:
348       t = TYPE_MIN_VALUE (new);
349       if (t && TREE_CODE (t) != INTEGER_CST)
350         walk_tree (&TYPE_MIN_VALUE (new), copy_body_r, id, NULL);
351
352       t = TYPE_MAX_VALUE (new);
353       if (t && TREE_CODE (t) != INTEGER_CST)
354         walk_tree (&TYPE_MAX_VALUE (new), copy_body_r, id, NULL);
355       return new;
356
357     case FUNCTION_TYPE:
358       TREE_TYPE (new) = remap_type (TREE_TYPE (new), id);
359       walk_tree (&TYPE_ARG_TYPES (new), copy_body_r, id, NULL);
360       return new;
361
362     case ARRAY_TYPE:
363       TREE_TYPE (new) = remap_type (TREE_TYPE (new), id);
364       TYPE_DOMAIN (new) = remap_type (TYPE_DOMAIN (new), id);
365       break;
366
367     case RECORD_TYPE:
368     case UNION_TYPE:
369     case QUAL_UNION_TYPE:
370       {
371         tree f, nf = NULL;
372
373         for (f = TYPE_FIELDS (new); f ; f = TREE_CHAIN (f))
374           {
375             t = remap_decl (f, id);
376             DECL_CONTEXT (t) = new;
377             TREE_CHAIN (t) = nf;
378             nf = t;
379           }
380         TYPE_FIELDS (new) = nreverse (nf);
381       }
382       break;
383
384     case OFFSET_TYPE:
385     default:
386       /* Shouldn't have been thought variable sized.  */
387       gcc_unreachable ();
388     }
389
390   walk_tree (&TYPE_SIZE (new), copy_body_r, id, NULL);
391   walk_tree (&TYPE_SIZE_UNIT (new), copy_body_r, id, NULL);
392
393   return new;
394 }
395
396 tree
397 remap_type (tree type, copy_body_data *id)
398 {
399   tree *node;
400
401   if (type == NULL)
402     return type;
403
404   /* See if we have remapped this type.  */
405   node = (tree *) pointer_map_contains (id->decl_map, type);
406   if (node)
407     return *node;
408
409   /* The type only needs remapping if it's variably modified.  */
410   if (! variably_modified_type_p (type, id->src_fn))
411     {
412       insert_decl_map (id, type, type);
413       return type;
414     }
415
416   return remap_type_1 (type, id);
417 }
418
419 static tree
420 remap_decls (tree decls, copy_body_data *id)
421 {
422   tree old_var;
423   tree new_decls = NULL_TREE;
424
425   /* Remap its variables.  */
426   for (old_var = decls; old_var; old_var = TREE_CHAIN (old_var))
427     {
428       tree new_var;
429
430       /* We can not chain the local static declarations into the unexpanded_var_list
431          as we can't duplicate them or break one decl rule.  Go ahead and link
432          them into unexpanded_var_list.  */
433       if (!auto_var_in_fn_p (old_var, id->src_fn)
434           && !DECL_EXTERNAL (old_var))
435         {
436           cfun->unexpanded_var_list = tree_cons (NULL_TREE, old_var,
437                                                  cfun->unexpanded_var_list);
438           continue;
439         }
440
441       /* Remap the variable.  */
442       new_var = remap_decl (old_var, id);
443
444       /* If we didn't remap this variable, so we can't mess with its
445          TREE_CHAIN.  If we remapped this variable to the return slot, it's
446          already declared somewhere else, so don't declare it here.  */
447       if (!new_var || new_var == id->retvar)
448         ;
449       else
450         {
451           gcc_assert (DECL_P (new_var));
452           TREE_CHAIN (new_var) = new_decls;
453           new_decls = new_var;
454         }
455     }
456
457   return nreverse (new_decls);
458 }
459
460 /* Copy the BLOCK to contain remapped versions of the variables
461    therein.  And hook the new block into the block-tree.  */
462
463 static void
464 remap_block (tree *block, copy_body_data *id)
465 {
466   tree old_block;
467   tree new_block;
468   tree fn;
469
470   /* Make the new block.  */
471   old_block = *block;
472   new_block = make_node (BLOCK);
473   TREE_USED (new_block) = TREE_USED (old_block);
474   BLOCK_ABSTRACT_ORIGIN (new_block) = old_block;
475   BLOCK_SOURCE_LOCATION (new_block) = BLOCK_SOURCE_LOCATION (old_block);
476   *block = new_block;
477
478   /* Remap its variables.  */
479   BLOCK_VARS (new_block) = remap_decls (BLOCK_VARS (old_block), id);
480
481   fn = id->dst_fn;
482
483   if (id->transform_lang_insert_block)
484     lang_hooks.decls.insert_block (new_block);
485
486   /* Remember the remapped block.  */
487   insert_decl_map (id, old_block, new_block);
488 }
489
490 /* Copy the whole block tree and root it in id->block.  */
491 static tree
492 remap_blocks (tree block, copy_body_data *id)
493 {
494   tree t;
495   tree new = block;
496
497   if (!block)
498     return NULL;
499
500   remap_block (&new, id);
501   gcc_assert (new != block);
502   for (t = BLOCK_SUBBLOCKS (block); t ; t = BLOCK_CHAIN (t))
503     add_lexical_block (new, remap_blocks (t, id));
504   return new;
505 }
506
507 static void
508 copy_statement_list (tree *tp)
509 {
510   tree_stmt_iterator oi, ni;
511   tree new;
512
513   new = alloc_stmt_list ();
514   ni = tsi_start (new);
515   oi = tsi_start (*tp);
516   *tp = new;
517
518   for (; !tsi_end_p (oi); tsi_next (&oi))
519     tsi_link_after (&ni, tsi_stmt (oi), TSI_NEW_STMT);
520 }
521
522 static void
523 copy_bind_expr (tree *tp, int *walk_subtrees, copy_body_data *id)
524 {
525   tree block = BIND_EXPR_BLOCK (*tp);
526   /* Copy (and replace) the statement.  */
527   copy_tree_r (tp, walk_subtrees, NULL);
528   if (block)
529     {
530       remap_block (&block, id);
531       BIND_EXPR_BLOCK (*tp) = block;
532     }
533
534   if (BIND_EXPR_VARS (*tp))
535     /* This will remap a lot of the same decls again, but this should be
536        harmless.  */
537     BIND_EXPR_VARS (*tp) = remap_decls (BIND_EXPR_VARS (*tp), id);
538 }
539
540 /* Called from copy_body_id via walk_tree.  DATA is really an
541    `copy_body_data *'.  */
542
543 tree
544 copy_body_r (tree *tp, int *walk_subtrees, void *data)
545 {
546   copy_body_data *id = (copy_body_data *) data;
547   tree fn = id->src_fn;
548   tree new_block;
549
550   /* Begin by recognizing trees that we'll completely rewrite for the
551      inlining context.  Our output for these trees is completely
552      different from out input (e.g. RETURN_EXPR is deleted, and morphs
553      into an edge).  Further down, we'll handle trees that get
554      duplicated and/or tweaked.  */
555
556   /* When requested, RETURN_EXPRs should be transformed to just the
557      contained GIMPLE_MODIFY_STMT.  The branch semantics of the return will
558      be handled elsewhere by manipulating the CFG rather than a statement.  */
559   if (TREE_CODE (*tp) == RETURN_EXPR && id->transform_return_to_modify)
560     {
561       tree assignment = TREE_OPERAND (*tp, 0);
562
563       /* If we're returning something, just turn that into an
564          assignment into the equivalent of the original RESULT_DECL.
565          If the "assignment" is just the result decl, the result
566          decl has already been set (e.g. a recent "foo (&result_decl,
567          ...)"); just toss the entire RETURN_EXPR.  */
568       if (assignment && TREE_CODE (assignment) == GIMPLE_MODIFY_STMT)
569         {
570           /* Replace the RETURN_EXPR with (a copy of) the
571              GIMPLE_MODIFY_STMT hanging underneath.  */
572           *tp = copy_node (assignment);
573         }
574       else /* Else the RETURN_EXPR returns no value.  */
575         {
576           *tp = NULL;
577           return (tree) (void *)1;
578         }
579     }
580   else if (TREE_CODE (*tp) == SSA_NAME)
581     {
582       *tp = remap_ssa_name (*tp, id);
583       *walk_subtrees = 0;
584       return NULL;
585     }
586
587   /* Local variables and labels need to be replaced by equivalent
588      variables.  We don't want to copy static variables; there's only
589      one of those, no matter how many times we inline the containing
590      function.  Similarly for globals from an outer function.  */
591   else if (auto_var_in_fn_p (*tp, fn))
592     {
593       tree new_decl;
594
595       /* Remap the declaration.  */
596       new_decl = remap_decl (*tp, id);
597       gcc_assert (new_decl);
598       /* Replace this variable with the copy.  */
599       STRIP_TYPE_NOPS (new_decl);
600       *tp = new_decl;
601       *walk_subtrees = 0;
602     }
603   else if (TREE_CODE (*tp) == STATEMENT_LIST)
604     copy_statement_list (tp);
605   else if (TREE_CODE (*tp) == SAVE_EXPR)
606     remap_save_expr (tp, id->decl_map, walk_subtrees);
607   else if (TREE_CODE (*tp) == LABEL_DECL
608            && (! DECL_CONTEXT (*tp)
609                || decl_function_context (*tp) == id->src_fn))
610     /* These may need to be remapped for EH handling.  */
611     *tp = remap_decl (*tp, id);
612   else if (TREE_CODE (*tp) == BIND_EXPR)
613     copy_bind_expr (tp, walk_subtrees, id);
614   /* Types may need remapping as well.  */
615   else if (TYPE_P (*tp))
616     *tp = remap_type (*tp, id);
617
618   /* If this is a constant, we have to copy the node iff the type will be
619      remapped.  copy_tree_r will not copy a constant.  */
620   else if (CONSTANT_CLASS_P (*tp))
621     {
622       tree new_type = remap_type (TREE_TYPE (*tp), id);
623
624       if (new_type == TREE_TYPE (*tp))
625         *walk_subtrees = 0;
626
627       else if (TREE_CODE (*tp) == INTEGER_CST)
628         *tp = build_int_cst_wide (new_type, TREE_INT_CST_LOW (*tp),
629                                   TREE_INT_CST_HIGH (*tp));
630       else
631         {
632           *tp = copy_node (*tp);
633           TREE_TYPE (*tp) = new_type;
634         }
635     }
636
637   /* Otherwise, just copy the node.  Note that copy_tree_r already
638      knows not to copy VAR_DECLs, etc., so this is safe.  */
639   else
640     {
641       /* Here we handle trees that are not completely rewritten.
642          First we detect some inlining-induced bogosities for
643          discarding.  */
644       if (TREE_CODE (*tp) == GIMPLE_MODIFY_STMT
645           && GIMPLE_STMT_OPERAND (*tp, 0) == GIMPLE_STMT_OPERAND (*tp, 1)
646           && (auto_var_in_fn_p (GIMPLE_STMT_OPERAND (*tp, 0), fn)))
647         {
648           /* Some assignments VAR = VAR; don't generate any rtl code
649              and thus don't count as variable modification.  Avoid
650              keeping bogosities like 0 = 0.  */
651           tree decl = GIMPLE_STMT_OPERAND (*tp, 0), value;
652           tree *n;
653
654           n = (tree *) pointer_map_contains (id->decl_map, decl);
655           if (n)
656             {
657               value = *n;
658               STRIP_TYPE_NOPS (value);
659               if (TREE_CONSTANT (value) || TREE_READONLY_DECL_P (value))
660                 {
661                   *tp = build_empty_stmt ();
662                   return copy_body_r (tp, walk_subtrees, data);
663                 }
664             }
665         }
666       else if (TREE_CODE (*tp) == INDIRECT_REF)
667         {
668           /* Get rid of *& from inline substitutions that can happen when a
669              pointer argument is an ADDR_EXPR.  */
670           tree decl = TREE_OPERAND (*tp, 0);
671           tree *n;
672
673           n = (tree *) pointer_map_contains (id->decl_map, decl);
674           if (n)
675             {
676               tree new;
677               tree old;
678               /* If we happen to get an ADDR_EXPR in n->value, strip
679                  it manually here as we'll eventually get ADDR_EXPRs
680                  which lie about their types pointed to.  In this case
681                  build_fold_indirect_ref wouldn't strip the INDIRECT_REF,
682                  but we absolutely rely on that.  As fold_indirect_ref
683                  does other useful transformations, try that first, though.  */
684               tree type = TREE_TYPE (TREE_TYPE (*n));
685               new = unshare_expr (*n);
686               old = *tp;
687               *tp = fold_indirect_ref_1 (type, new);
688               if (! *tp)
689                 {
690                   if (TREE_CODE (new) == ADDR_EXPR)
691                     *tp = TREE_OPERAND (new, 0);
692                   else
693                     {
694                       *tp = build1 (INDIRECT_REF, type, new);
695                       TREE_THIS_VOLATILE (*tp) = TREE_THIS_VOLATILE (old);
696                     }
697                 }
698               *walk_subtrees = 0;
699               return NULL;
700             }
701         }
702
703       /* Here is the "usual case".  Copy this tree node, and then
704          tweak some special cases.  */
705       copy_tree_r (tp, walk_subtrees, NULL);
706
707       /* Global variables we didn't seen yet needs to go into referenced
708          vars.  */
709       if (gimple_in_ssa_p (cfun) && TREE_CODE (*tp) == VAR_DECL)
710         add_referenced_var (*tp);
711        
712       /* If EXPR has block defined, map it to newly constructed block.
713          When inlining we want EXPRs without block appear in the block
714          of function call.  */
715       if (EXPR_P (*tp) || GIMPLE_STMT_P (*tp))
716         {
717           new_block = id->block;
718           if (TREE_BLOCK (*tp))
719             {
720               tree *n;
721               n = (tree *) pointer_map_contains (id->decl_map,
722                                                  TREE_BLOCK (*tp));
723               gcc_assert (n);
724               new_block = *n;
725             }
726           TREE_BLOCK (*tp) = new_block;
727         }
728
729       if (TREE_CODE (*tp) == RESX_EXPR && id->eh_region_offset)
730         TREE_OPERAND (*tp, 0) =
731           build_int_cst
732             (NULL_TREE,
733              id->eh_region_offset + TREE_INT_CST_LOW (TREE_OPERAND (*tp, 0)));
734
735       if (!GIMPLE_TUPLE_P (*tp) && TREE_CODE (*tp) != OMP_CLAUSE)
736         TREE_TYPE (*tp) = remap_type (TREE_TYPE (*tp), id);
737
738       /* The copied TARGET_EXPR has never been expanded, even if the
739          original node was expanded already.  */
740       if (TREE_CODE (*tp) == TARGET_EXPR && TREE_OPERAND (*tp, 3))
741         {
742           TREE_OPERAND (*tp, 1) = TREE_OPERAND (*tp, 3);
743           TREE_OPERAND (*tp, 3) = NULL_TREE;
744         }
745
746       /* Variable substitution need not be simple.  In particular, the
747          INDIRECT_REF substitution above.  Make sure that TREE_CONSTANT
748          and friends are up-to-date.  */
749       else if (TREE_CODE (*tp) == ADDR_EXPR)
750         {
751           walk_tree (&TREE_OPERAND (*tp, 0), copy_body_r, id, NULL);
752           /* Handle the case where we substituted an INDIRECT_REF
753              into the operand of the ADDR_EXPR.  */
754           if (TREE_CODE (TREE_OPERAND (*tp, 0)) == INDIRECT_REF)
755             *tp = TREE_OPERAND (TREE_OPERAND (*tp, 0), 0);
756           else
757             recompute_tree_invariant_for_addr_expr (*tp);
758           *walk_subtrees = 0;
759         }
760     }
761
762   /* Keep iterating.  */
763   return NULL_TREE;
764 }
765
766 /* Copy basic block, scale profile accordingly.  Edges will be taken care of
767    later  */
768
769 static basic_block
770 copy_bb (copy_body_data *id, basic_block bb, int frequency_scale, int count_scale)
771 {
772   block_stmt_iterator bsi, copy_bsi;
773   basic_block copy_basic_block;
774
775   /* create_basic_block() will append every new block to
776      basic_block_info automatically.  */
777   copy_basic_block = create_basic_block (NULL, (void *) 0,
778                                          (basic_block) bb->prev_bb->aux);
779   copy_basic_block->count = bb->count * count_scale / REG_BR_PROB_BASE;
780
781   /* We are going to rebuild frequencies from scratch.  These values have just
782      small importance to drive canonicalize_loop_headers.  */
783   copy_basic_block->frequency = ((gcov_type)bb->frequency
784                                      * frequency_scale / REG_BR_PROB_BASE);
785   if (copy_basic_block->frequency > BB_FREQ_MAX)
786     copy_basic_block->frequency = BB_FREQ_MAX;
787   copy_bsi = bsi_start (copy_basic_block);
788
789   for (bsi = bsi_start (bb);
790        !bsi_end_p (bsi); bsi_next (&bsi))
791     {
792       tree stmt = bsi_stmt (bsi);
793       tree orig_stmt = stmt;
794
795       walk_tree (&stmt, copy_body_r, id, NULL);
796
797       /* RETURN_EXPR might be removed,
798          this is signalled by making stmt pointer NULL.  */
799       if (stmt)
800         {
801           tree call, decl;
802
803           gimple_duplicate_stmt_histograms (cfun, stmt, id->src_cfun, orig_stmt);
804
805           /* With return slot optimization we can end up with
806              non-gimple (foo *)&this->m, fix that here.  */
807           if (TREE_CODE (stmt) == GIMPLE_MODIFY_STMT
808               && TREE_CODE (GIMPLE_STMT_OPERAND (stmt, 1)) == NOP_EXPR
809               && !is_gimple_val (TREE_OPERAND (GIMPLE_STMT_OPERAND (stmt, 1), 0)))
810             gimplify_stmt (&stmt);
811
812           bsi_insert_after (&copy_bsi, stmt, BSI_NEW_STMT);
813
814           /* Process new statement.  gimplify_stmt possibly turned statement
815              into multiple statements, we need to process all of them.  */
816           while (!bsi_end_p (copy_bsi))
817             {
818               tree *stmtp = bsi_stmt_ptr (copy_bsi);
819               tree stmt = *stmtp;
820               call = get_call_expr_in (stmt);
821
822               if (call && CALL_EXPR_VA_ARG_PACK (call) && id->call_expr)
823                 {
824                   /* __builtin_va_arg_pack () should be replaced by
825                      all arguments corresponding to ... in the caller.  */
826                   tree p, *argarray, new_call, *call_ptr;
827                   int nargs = call_expr_nargs (id->call_expr);
828
829                   for (p = DECL_ARGUMENTS (id->src_fn); p; p = TREE_CHAIN (p))
830                     nargs--;
831
832                   argarray = (tree *) alloca ((nargs + call_expr_nargs (call))
833                                               * sizeof (tree));
834
835                   memcpy (argarray, CALL_EXPR_ARGP (call),
836                           call_expr_nargs (call) * sizeof (*argarray));
837                   memcpy (argarray + call_expr_nargs (call),
838                           CALL_EXPR_ARGP (id->call_expr)
839                           + (call_expr_nargs (id->call_expr) - nargs),
840                           nargs * sizeof (*argarray));
841
842                   new_call = build_call_array (TREE_TYPE (call),
843                                                CALL_EXPR_FN (call),
844                                                nargs + call_expr_nargs (call),
845                                                argarray);
846                   /* Copy all CALL_EXPR flags, locus and block, except
847                      CALL_EXPR_VA_ARG_PACK flag.  */
848                   CALL_EXPR_STATIC_CHAIN (new_call)
849                     = CALL_EXPR_STATIC_CHAIN (call);
850                   CALL_EXPR_TAILCALL (new_call) = CALL_EXPR_TAILCALL (call);
851                   CALL_EXPR_RETURN_SLOT_OPT (new_call)
852                     = CALL_EXPR_RETURN_SLOT_OPT (call);
853                   CALL_FROM_THUNK_P (new_call) = CALL_FROM_THUNK_P (call);
854                   CALL_CANNOT_INLINE_P (new_call)
855                     = CALL_CANNOT_INLINE_P (call);
856                   TREE_NOTHROW (new_call) = TREE_NOTHROW (call);
857                   SET_EXPR_LOCUS (new_call, EXPR_LOCUS (call));
858                   TREE_BLOCK (new_call) = TREE_BLOCK (call);
859
860                   call_ptr = stmtp;
861                   if (TREE_CODE (*call_ptr) == GIMPLE_MODIFY_STMT)
862                     call_ptr = &GIMPLE_STMT_OPERAND (*call_ptr, 1);
863                   if (TREE_CODE (*call_ptr) == WITH_SIZE_EXPR)
864                     call_ptr = &TREE_OPERAND (*call_ptr, 0);
865                   gcc_assert (*call_ptr == call);
866                   *call_ptr = new_call;
867                   stmt = *stmtp;
868                   update_stmt (stmt);
869                 }
870               else if (call
871                        && id->call_expr
872                        && (decl = get_callee_fndecl (call))
873                        && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
874                        && DECL_FUNCTION_CODE (decl)
875                           == BUILT_IN_VA_ARG_PACK_LEN)
876                 {
877                   /* __builtin_va_arg_pack_len () should be replaced by
878                      the number of anonymous arguments.  */
879                   int nargs = call_expr_nargs (id->call_expr);
880                   tree count, *call_ptr, p;
881
882                   for (p = DECL_ARGUMENTS (id->src_fn); p; p = TREE_CHAIN (p))
883                     nargs--;
884
885                   count = build_int_cst (integer_type_node, nargs);
886                   call_ptr = stmtp;
887                   if (TREE_CODE (*call_ptr) == GIMPLE_MODIFY_STMT)
888                     call_ptr = &GIMPLE_STMT_OPERAND (*call_ptr, 1);
889                   if (TREE_CODE (*call_ptr) == WITH_SIZE_EXPR)
890                     call_ptr = &TREE_OPERAND (*call_ptr, 0);
891                   gcc_assert (*call_ptr == call && call_ptr != stmtp);
892                   *call_ptr = count;
893                   stmt = *stmtp;
894                   update_stmt (stmt);
895                   call = NULL_TREE;
896                 }
897
898               /* Statements produced by inlining can be unfolded, especially
899                  when we constant propagated some operands.  We can't fold
900                  them right now for two reasons:
901                  1) folding require SSA_NAME_DEF_STMTs to be correct
902                  2) we can't change function calls to builtins.
903                  So we just mark statement for later folding.  We mark
904                  all new statements, instead just statements that has changed
905                  by some nontrivial substitution so even statements made
906                  foldable indirectly are updated.  If this turns out to be
907                  expensive, copy_body can be told to watch for nontrivial
908                  changes.  */
909               if (id->statements_to_fold)
910                 pointer_set_insert (id->statements_to_fold, stmt);
911               /* We're duplicating a CALL_EXPR.  Find any corresponding
912                  callgraph edges and update or duplicate them.  */
913               if (call && (decl = get_callee_fndecl (call)))
914                 {
915                   struct cgraph_node *node;
916                   struct cgraph_edge *edge;
917                  
918                   switch (id->transform_call_graph_edges)
919                     {
920                     case CB_CGE_DUPLICATE:
921                       edge = cgraph_edge (id->src_node, orig_stmt);
922                       if (edge)
923                         cgraph_clone_edge (edge, id->dst_node, stmt,
924                                            REG_BR_PROB_BASE, 1, edge->frequency, true);
925                       break;
926
927                     case CB_CGE_MOVE_CLONES:
928                       for (node = id->dst_node->next_clone;
929                            node;
930                            node = node->next_clone)
931                         {
932                           edge = cgraph_edge (node, orig_stmt);
933                           gcc_assert (edge);
934                           cgraph_set_call_stmt (edge, stmt);
935                         }
936                       /* FALLTHRU */
937
938                     case CB_CGE_MOVE:
939                       edge = cgraph_edge (id->dst_node, orig_stmt);
940                       if (edge)
941                         cgraph_set_call_stmt (edge, stmt);
942                       break;
943
944                     default:
945                       gcc_unreachable ();
946                     }
947                 }
948               /* If you think we can abort here, you are wrong.
949                  There is no region 0 in tree land.  */
950               gcc_assert (lookup_stmt_eh_region_fn (id->src_cfun, orig_stmt)
951                           != 0);
952
953               if (tree_could_throw_p (stmt)
954                   /* When we are cloning for inlining, we are supposed to
955                      construct a clone that calls precisely the same functions
956                      as original.  However IPA optimizers might've proved
957                      earlier some function calls as non-trapping that might
958                      render some basic blocks dead that might become
959                      unreachable.
960
961                      We can't update SSA with unreachable blocks in CFG and thus
962                      we prevent the scenario by preserving even the "dead" eh
963                      edges until the point they are later removed by
964                      fixup_cfg pass.  */
965                   || (id->transform_call_graph_edges == CB_CGE_MOVE_CLONES
966                       && lookup_stmt_eh_region_fn (id->src_cfun, orig_stmt) > 0))
967                 {
968                   int region = lookup_stmt_eh_region_fn (id->src_cfun, orig_stmt);
969                   /* Add an entry for the copied tree in the EH hashtable.
970                      When cloning or versioning, use the hashtable in
971                      cfun, and just copy the EH number.  When inlining, use the
972                      hashtable in the caller, and adjust the region number.  */
973                   if (region > 0)
974                     add_stmt_to_eh_region (stmt, region + id->eh_region_offset);
975
976                   /* If this tree doesn't have a region associated with it,
977                      and there is a "current region,"
978                      then associate this tree with the current region
979                      and add edges associated with this region.  */
980                   if ((lookup_stmt_eh_region_fn (id->src_cfun,
981                                                  orig_stmt) <= 0
982                        && id->eh_region > 0)
983                       && tree_could_throw_p (stmt))
984                     add_stmt_to_eh_region (stmt, id->eh_region);
985                 }
986               if (gimple_in_ssa_p (cfun))
987                 {
988                    ssa_op_iter i;
989                    tree def;
990
991                    find_new_referenced_vars (bsi_stmt_ptr (copy_bsi));
992                    FOR_EACH_SSA_TREE_OPERAND (def, stmt, i, SSA_OP_DEF)
993                     if (TREE_CODE (def) == SSA_NAME)
994                       SSA_NAME_DEF_STMT (def) = stmt;
995                 }
996               bsi_next (&copy_bsi);
997             }
998           copy_bsi = bsi_last (copy_basic_block);
999         }
1000     }
1001   return copy_basic_block;
1002 }
1003
1004 /* Inserting Single Entry Multiple Exit region in SSA form into code in SSA
1005    form is quite easy, since dominator relationship for old basic blocks does
1006    not change.
1007
1008    There is however exception where inlining might change dominator relation
1009    across EH edges from basic block within inlined functions destinating
1010    to landing pads in function we inline into.
1011
1012    The function fills in PHI_RESULTs of such PHI nodes if they refer
1013    to gimple regs.  Otherwise, the function mark PHI_RESULT of such
1014    PHI nodes for renaming.  For non-gimple regs, renaming is safe: the
1015    EH edges are abnormal and SSA_NAME_OCCURS_IN_ABNORMAL_PHI must be
1016    set, and this means that there will be no overlapping live ranges
1017    for the underlying symbol.
1018
1019    This might change in future if we allow redirecting of EH edges and
1020    we might want to change way build CFG pre-inlining to include
1021    all the possible edges then.  */
1022 static void
1023 update_ssa_across_abnormal_edges (basic_block bb, basic_block ret_bb,
1024                                   bool can_throw, bool nonlocal_goto)
1025 {
1026   edge e;
1027   edge_iterator ei;
1028
1029   FOR_EACH_EDGE (e, ei, bb->succs)
1030     if (!e->dest->aux
1031         || ((basic_block)e->dest->aux)->index == ENTRY_BLOCK)
1032       {
1033         tree phi;
1034
1035         gcc_assert (e->flags & EDGE_ABNORMAL);
1036         if (!nonlocal_goto)
1037           gcc_assert (e->flags & EDGE_EH);
1038         if (!can_throw)
1039           gcc_assert (!(e->flags & EDGE_EH));
1040         for (phi = phi_nodes (e->dest); phi; phi = PHI_CHAIN (phi))
1041           {
1042             edge re;
1043
1044             /* There shouldn't be any PHI nodes in the ENTRY_BLOCK.  */
1045             gcc_assert (!e->dest->aux);
1046
1047             gcc_assert (SSA_NAME_OCCURS_IN_ABNORMAL_PHI
1048                         (PHI_RESULT (phi)));
1049
1050             if (!is_gimple_reg (PHI_RESULT (phi)))
1051               {
1052                 mark_sym_for_renaming
1053                   (SSA_NAME_VAR (PHI_RESULT (phi)));
1054                 continue;
1055               }
1056
1057             re = find_edge (ret_bb, e->dest);
1058             gcc_assert (re);
1059             gcc_assert ((re->flags & (EDGE_EH | EDGE_ABNORMAL))
1060                         == (e->flags & (EDGE_EH | EDGE_ABNORMAL)));
1061
1062             SET_USE (PHI_ARG_DEF_PTR_FROM_EDGE (phi, e),
1063                      USE_FROM_PTR (PHI_ARG_DEF_PTR_FROM_EDGE (phi, re)));
1064           }
1065       }
1066 }
1067
1068 /* Copy edges from BB into its copy constructed earlier, scale profile
1069    accordingly.  Edges will be taken care of later.  Assume aux
1070    pointers to point to the copies of each BB.  */
1071 static void
1072 copy_edges_for_bb (basic_block bb, int count_scale, basic_block ret_bb)
1073 {
1074   basic_block new_bb = (basic_block) bb->aux;
1075   edge_iterator ei;
1076   edge old_edge;
1077   block_stmt_iterator bsi;
1078   int flags;
1079
1080   /* Use the indices from the original blocks to create edges for the
1081      new ones.  */
1082   FOR_EACH_EDGE (old_edge, ei, bb->succs)
1083     if (!(old_edge->flags & EDGE_EH))
1084       {
1085         edge new;
1086
1087         flags = old_edge->flags;
1088
1089         /* Return edges do get a FALLTHRU flag when the get inlined.  */
1090         if (old_edge->dest->index == EXIT_BLOCK && !old_edge->flags
1091             && old_edge->dest->aux != EXIT_BLOCK_PTR)
1092           flags |= EDGE_FALLTHRU;
1093         new = make_edge (new_bb, (basic_block) old_edge->dest->aux, flags);
1094         new->count = old_edge->count * count_scale / REG_BR_PROB_BASE;
1095         new->probability = old_edge->probability;
1096       }
1097
1098   if (bb->index == ENTRY_BLOCK || bb->index == EXIT_BLOCK)
1099     return;
1100
1101   for (bsi = bsi_start (new_bb); !bsi_end_p (bsi);)
1102     {
1103       tree copy_stmt;
1104       bool can_throw, nonlocal_goto;
1105
1106       copy_stmt = bsi_stmt (bsi);
1107       update_stmt (copy_stmt);
1108       if (gimple_in_ssa_p (cfun))
1109         mark_symbols_for_renaming (copy_stmt);
1110       /* Do this before the possible split_block.  */
1111       bsi_next (&bsi);
1112
1113       /* If this tree could throw an exception, there are two
1114          cases where we need to add abnormal edge(s): the
1115          tree wasn't in a region and there is a "current
1116          region" in the caller; or the original tree had
1117          EH edges.  In both cases split the block after the tree,
1118          and add abnormal edge(s) as needed; we need both
1119          those from the callee and the caller.
1120          We check whether the copy can throw, because the const
1121          propagation can change an INDIRECT_REF which throws
1122          into a COMPONENT_REF which doesn't.  If the copy
1123          can throw, the original could also throw.  */
1124
1125       can_throw = tree_can_throw_internal (copy_stmt);
1126       nonlocal_goto = tree_can_make_abnormal_goto (copy_stmt);
1127
1128       if (can_throw || nonlocal_goto)
1129         {
1130           if (!bsi_end_p (bsi))
1131             /* Note that bb's predecessor edges aren't necessarily
1132                right at this point; split_block doesn't care.  */
1133             {
1134               edge e = split_block (new_bb, copy_stmt);
1135
1136               new_bb = e->dest;
1137               new_bb->aux = e->src->aux;
1138               bsi = bsi_start (new_bb);
1139             }
1140         }
1141
1142       if (can_throw)
1143         make_eh_edges (copy_stmt);
1144
1145       if (nonlocal_goto)
1146         make_abnormal_goto_edges (bb_for_stmt (copy_stmt), true);
1147
1148       if ((can_throw || nonlocal_goto)
1149           && gimple_in_ssa_p (cfun))
1150         update_ssa_across_abnormal_edges (bb_for_stmt (copy_stmt), ret_bb,
1151                                           can_throw, nonlocal_goto);
1152     }
1153 }
1154
1155 /* Copy the PHIs.  All blocks and edges are copied, some blocks
1156    was possibly split and new outgoing EH edges inserted.
1157    BB points to the block of original function and AUX pointers links
1158    the original and newly copied blocks.  */
1159
1160 static void
1161 copy_phis_for_bb (basic_block bb, copy_body_data *id)
1162 {
1163   basic_block new_bb = bb->aux;
1164   edge_iterator ei;
1165   tree phi;
1166
1167   for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
1168     {
1169       tree res = PHI_RESULT (phi);
1170       tree new_res = res;
1171       tree new_phi;
1172       edge new_edge;
1173
1174       if (is_gimple_reg (res))
1175         {
1176           walk_tree (&new_res, copy_body_r, id, NULL);
1177           SSA_NAME_DEF_STMT (new_res)
1178             = new_phi = create_phi_node (new_res, new_bb);
1179           FOR_EACH_EDGE (new_edge, ei, new_bb->preds)
1180             {
1181               edge old_edge = find_edge (new_edge->src->aux, bb);
1182               tree arg = PHI_ARG_DEF_FROM_EDGE (phi, old_edge);
1183               tree new_arg = arg;
1184
1185               walk_tree (&new_arg, copy_body_r, id, NULL);
1186               gcc_assert (new_arg);
1187               add_phi_arg (new_phi, new_arg, new_edge);
1188             }
1189         }
1190     }
1191 }
1192
1193 /* Wrapper for remap_decl so it can be used as a callback.  */
1194 static tree
1195 remap_decl_1 (tree decl, void *data)
1196 {
1197   return remap_decl (decl, (copy_body_data *) data);
1198 }
1199
1200 /* Build struct function and associated datastructures for the new clone
1201    NEW_FNDECL to be build.  CALLEE_FNDECL is the original */
1202
1203 static void
1204 initialize_cfun (tree new_fndecl, tree callee_fndecl, gcov_type count,
1205                  int frequency)
1206 {
1207   struct function *new_cfun
1208      = (struct function *) ggc_alloc_cleared (sizeof (struct function));
1209   struct function *src_cfun = DECL_STRUCT_FUNCTION (callee_fndecl);
1210   int count_scale, frequency_scale;
1211
1212   if (ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->count)
1213     count_scale = (REG_BR_PROB_BASE * count
1214                    / ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->count);
1215   else
1216     count_scale = 1;
1217
1218   if (ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->frequency)
1219     frequency_scale = (REG_BR_PROB_BASE * frequency
1220                        /
1221                        ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->frequency);
1222   else
1223     frequency_scale = count_scale;
1224
1225   /* Register specific tree functions.  */
1226   tree_register_cfg_hooks ();
1227   *new_cfun = *DECL_STRUCT_FUNCTION (callee_fndecl);
1228   new_cfun->funcdef_no = get_next_funcdef_no ();
1229   VALUE_HISTOGRAMS (new_cfun) = NULL;
1230   new_cfun->unexpanded_var_list = NULL;
1231   new_cfun->cfg = NULL;
1232   new_cfun->decl = new_fndecl /*= copy_node (callee_fndecl)*/;
1233   DECL_STRUCT_FUNCTION (new_fndecl) = new_cfun;
1234   push_cfun (new_cfun);
1235   init_empty_tree_cfg ();
1236
1237   ENTRY_BLOCK_PTR->count =
1238     (ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->count * count_scale /
1239      REG_BR_PROB_BASE);
1240   ENTRY_BLOCK_PTR->frequency =
1241     (ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->frequency *
1242      frequency_scale / REG_BR_PROB_BASE);
1243   EXIT_BLOCK_PTR->count =
1244     (EXIT_BLOCK_PTR_FOR_FUNCTION (src_cfun)->count * count_scale /
1245      REG_BR_PROB_BASE);
1246   EXIT_BLOCK_PTR->frequency =
1247     (EXIT_BLOCK_PTR_FOR_FUNCTION (src_cfun)->frequency *
1248      frequency_scale / REG_BR_PROB_BASE);
1249   if (src_cfun->eh)
1250     init_eh_for_function ();
1251
1252   if (src_cfun->gimple_df)
1253     {
1254       init_tree_ssa ();
1255       cfun->gimple_df->in_ssa_p = true;
1256       init_ssa_operands ();
1257     }
1258   pop_cfun ();
1259 }
1260
1261 /* Make a copy of the body of FN so that it can be inserted inline in
1262    another function.  Walks FN via CFG, returns new fndecl.  */
1263
1264 static tree
1265 copy_cfg_body (copy_body_data * id, gcov_type count, int frequency,
1266                basic_block entry_block_map, basic_block exit_block_map)
1267 {
1268   tree callee_fndecl = id->src_fn;
1269   /* Original cfun for the callee, doesn't change.  */
1270   struct function *src_cfun = DECL_STRUCT_FUNCTION (callee_fndecl);
1271   struct function *cfun_to_copy;
1272   basic_block bb;
1273   tree new_fndecl = NULL;
1274   int count_scale, frequency_scale;
1275   int last;
1276
1277   if (ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->count)
1278     count_scale = (REG_BR_PROB_BASE * count
1279                    / ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->count);
1280   else
1281     count_scale = 1;
1282
1283   if (ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->frequency)
1284     frequency_scale = (REG_BR_PROB_BASE * frequency
1285                        /
1286                        ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun)->frequency);
1287   else
1288     frequency_scale = count_scale;
1289
1290   /* Register specific tree functions.  */
1291   tree_register_cfg_hooks ();
1292
1293   /* Must have a CFG here at this point.  */
1294   gcc_assert (ENTRY_BLOCK_PTR_FOR_FUNCTION
1295               (DECL_STRUCT_FUNCTION (callee_fndecl)));
1296
1297   cfun_to_copy = id->src_cfun = DECL_STRUCT_FUNCTION (callee_fndecl);
1298
1299
1300   ENTRY_BLOCK_PTR_FOR_FUNCTION (cfun_to_copy)->aux = entry_block_map;
1301   EXIT_BLOCK_PTR_FOR_FUNCTION (cfun_to_copy)->aux = exit_block_map;
1302   entry_block_map->aux = ENTRY_BLOCK_PTR_FOR_FUNCTION (cfun_to_copy);
1303   exit_block_map->aux = EXIT_BLOCK_PTR_FOR_FUNCTION (cfun_to_copy);
1304
1305   /* Duplicate any exception-handling regions.  */
1306   if (cfun->eh)
1307     {
1308       id->eh_region_offset
1309         = duplicate_eh_regions (cfun_to_copy, remap_decl_1, id,
1310                                 0, id->eh_region);
1311     }
1312   /* Use aux pointers to map the original blocks to copy.  */
1313   FOR_EACH_BB_FN (bb, cfun_to_copy)
1314     {
1315       basic_block new = copy_bb (id, bb, frequency_scale, count_scale);
1316       bb->aux = new;
1317       new->aux = bb;
1318     }
1319
1320   last = last_basic_block;
1321   /* Now that we've duplicated the blocks, duplicate their edges.  */
1322   FOR_ALL_BB_FN (bb, cfun_to_copy)
1323     copy_edges_for_bb (bb, count_scale, exit_block_map);
1324   if (gimple_in_ssa_p (cfun))
1325     FOR_ALL_BB_FN (bb, cfun_to_copy)
1326       copy_phis_for_bb (bb, id);
1327   FOR_ALL_BB_FN (bb, cfun_to_copy)
1328     {
1329       ((basic_block)bb->aux)->aux = NULL;
1330       bb->aux = NULL;
1331     }
1332   /* Zero out AUX fields of newly created block during EH edge
1333      insertion. */
1334   for (; last < last_basic_block; last++)
1335     BASIC_BLOCK (last)->aux = NULL;
1336   entry_block_map->aux = NULL;
1337   exit_block_map->aux = NULL;
1338
1339   return new_fndecl;
1340 }
1341
1342 /* Make a copy of the body of FN so that it can be inserted inline in
1343    another function.  */
1344
1345 static tree
1346 copy_generic_body (copy_body_data *id)
1347 {
1348   tree body;
1349   tree fndecl = id->src_fn;
1350
1351   body = DECL_SAVED_TREE (fndecl);
1352   walk_tree (&body, copy_body_r, id, NULL);
1353
1354   return body;
1355 }
1356
1357 static tree
1358 copy_body (copy_body_data *id, gcov_type count, int frequency,
1359            basic_block entry_block_map, basic_block exit_block_map)
1360 {
1361   tree fndecl = id->src_fn;
1362   tree body;
1363
1364   /* If this body has a CFG, walk CFG and copy.  */
1365   gcc_assert (ENTRY_BLOCK_PTR_FOR_FUNCTION (DECL_STRUCT_FUNCTION (fndecl)));
1366   body = copy_cfg_body (id, count, frequency, entry_block_map, exit_block_map);
1367
1368   return body;
1369 }
1370
1371 /* Return true if VALUE is an ADDR_EXPR of an automatic variable
1372    defined in function FN, or of a data member thereof.  */
1373
1374 static bool
1375 self_inlining_addr_expr (tree value, tree fn)
1376 {
1377   tree var;
1378
1379   if (TREE_CODE (value) != ADDR_EXPR)
1380     return false;
1381
1382   var = get_base_address (TREE_OPERAND (value, 0));
1383
1384   return var && auto_var_in_fn_p (var, fn);
1385 }
1386
1387 static void
1388 setup_one_parameter (copy_body_data *id, tree p, tree value, tree fn,
1389                      basic_block bb, tree *vars)
1390 {
1391   tree init_stmt;
1392   tree var;
1393   tree var_sub;
1394   tree rhs = value;
1395   tree def = (gimple_in_ssa_p (cfun)
1396               ? gimple_default_def (id->src_cfun, p) : NULL);
1397
1398   if (value
1399       && value != error_mark_node
1400       && !useless_type_conversion_p (TREE_TYPE (p), TREE_TYPE (value)))
1401     rhs = fold_build1 (NOP_EXPR, TREE_TYPE (p), value);
1402
1403   /* If the parameter is never assigned to, has no SSA_NAMEs created,
1404      we may not need to create a new variable here at all.  Instead, we may
1405      be able to just use the argument value.  */
1406   if (TREE_READONLY (p)
1407       && !TREE_ADDRESSABLE (p)
1408       && value && !TREE_SIDE_EFFECTS (value)
1409       && !def)
1410     {
1411       /* We may produce non-gimple trees by adding NOPs or introduce
1412          invalid sharing when operand is not really constant.
1413          It is not big deal to prohibit constant propagation here as
1414          we will constant propagate in DOM1 pass anyway.  */
1415       if (is_gimple_min_invariant (value)
1416           && useless_type_conversion_p (TREE_TYPE (p),
1417                                                  TREE_TYPE (value))
1418           /* We have to be very careful about ADDR_EXPR.  Make sure
1419              the base variable isn't a local variable of the inlined
1420              function, e.g., when doing recursive inlining, direct or
1421              mutually-recursive or whatever, which is why we don't
1422              just test whether fn == current_function_decl.  */
1423           && ! self_inlining_addr_expr (value, fn))
1424         {
1425           insert_decl_map (id, p, value);
1426           return;
1427         }
1428     }
1429
1430   /* Make an equivalent VAR_DECL.  Note that we must NOT remap the type
1431      here since the type of this decl must be visible to the calling
1432      function.  */
1433   var = copy_decl_to_var (p, id);
1434   if (gimple_in_ssa_p (cfun) && TREE_CODE (var) == VAR_DECL)
1435     {
1436       get_var_ann (var);
1437       add_referenced_var (var);
1438     }
1439
1440   /* See if the frontend wants to pass this by invisible reference.  If
1441      so, our new VAR_DECL will have REFERENCE_TYPE, and we need to
1442      replace uses of the PARM_DECL with dereferences.  */
1443   if (TREE_TYPE (var) != TREE_TYPE (p)
1444       && POINTER_TYPE_P (TREE_TYPE (var))
1445       && TREE_TYPE (TREE_TYPE (var)) == TREE_TYPE (p))
1446     {
1447       insert_decl_map (id, var, var);
1448       var_sub = build_fold_indirect_ref (var);
1449     }
1450   else
1451     var_sub = var;
1452
1453   /* Register the VAR_DECL as the equivalent for the PARM_DECL;
1454      that way, when the PARM_DECL is encountered, it will be
1455      automatically replaced by the VAR_DECL.  */
1456   insert_decl_map (id, p, var_sub);
1457
1458   /* Declare this new variable.  */
1459   TREE_CHAIN (var) = *vars;
1460   *vars = var;
1461
1462   /* Make gimplifier happy about this variable.  */
1463   DECL_SEEN_IN_BIND_EXPR_P (var) = 1;
1464
1465   /* Even if P was TREE_READONLY, the new VAR should not be.
1466      In the original code, we would have constructed a
1467      temporary, and then the function body would have never
1468      changed the value of P.  However, now, we will be
1469      constructing VAR directly.  The constructor body may
1470      change its value multiple times as it is being
1471      constructed.  Therefore, it must not be TREE_READONLY;
1472      the back-end assumes that TREE_READONLY variable is
1473      assigned to only once.  */
1474   if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (p)))
1475     TREE_READONLY (var) = 0;
1476
1477   /* If there is no setup required and we are in SSA, take the easy route
1478      replacing all SSA names representing the function parameter by the
1479      SSA name passed to function.
1480
1481      We need to construct map for the variable anyway as it might be used
1482      in different SSA names when parameter is set in function.
1483
1484      FIXME: This usually kills the last connection in between inlined
1485      function parameter and the actual value in debug info.  Can we do
1486      better here?  If we just inserted the statement, copy propagation
1487      would kill it anyway as it always did in older versions of GCC.
1488
1489      We might want to introduce a notion that single SSA_NAME might
1490      represent multiple variables for purposes of debugging. */
1491   if (gimple_in_ssa_p (cfun) && rhs && def && is_gimple_reg (p)
1492       && (TREE_CODE (rhs) == SSA_NAME
1493           || is_gimple_min_invariant (rhs))
1494       && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (def))
1495     {
1496       insert_decl_map (id, def, rhs);
1497       return;
1498     }
1499
1500   /* Initialize this VAR_DECL from the equivalent argument.  Convert
1501      the argument to the proper type in case it was promoted.  */
1502   if (value)
1503     {
1504       block_stmt_iterator bsi = bsi_last (bb);
1505
1506       if (rhs == error_mark_node)
1507         {
1508           insert_decl_map (id, p, var_sub);
1509           return;
1510         }
1511
1512       STRIP_USELESS_TYPE_CONVERSION (rhs);
1513
1514       /* We want to use GIMPLE_MODIFY_STMT, not INIT_EXPR here so that we
1515          keep our trees in gimple form.  */
1516       if (def && gimple_in_ssa_p (cfun) && is_gimple_reg (p))
1517         {
1518           def = remap_ssa_name (def, id);
1519           init_stmt = build_gimple_modify_stmt (def, rhs);
1520           SSA_NAME_DEF_STMT (def) = init_stmt;
1521           SSA_NAME_IS_DEFAULT_DEF (def) = 0;
1522           set_default_def (var, NULL);
1523         }
1524       else
1525         init_stmt = build_gimple_modify_stmt (var, rhs);
1526
1527       /* If we did not create a gimple value and we did not create a gimple
1528          cast of a gimple value, then we will need to gimplify INIT_STMTS
1529          at the end.  Note that is_gimple_cast only checks the outer
1530          tree code, not its operand.  Thus the explicit check that its
1531          operand is a gimple value.  */
1532       if ((!is_gimple_val (rhs)
1533           && (!is_gimple_cast (rhs)
1534               || !is_gimple_val (TREE_OPERAND (rhs, 0))))
1535           || !is_gimple_reg (var))
1536         {
1537           tree_stmt_iterator i;
1538
1539           push_gimplify_context ();
1540           gimplify_stmt (&init_stmt);
1541           if (gimple_in_ssa_p (cfun)
1542               && init_stmt && TREE_CODE (init_stmt) == STATEMENT_LIST)
1543             {
1544               /* The replacement can expose previously unreferenced
1545                  variables.  */
1546               for (i = tsi_start (init_stmt); !tsi_end_p (i); tsi_next (&i))
1547                 find_new_referenced_vars (tsi_stmt_ptr (i));
1548              }
1549           pop_gimplify_context (NULL);
1550         }
1551
1552       /* If VAR represents a zero-sized variable, it's possible that the
1553          assignment statment may result in no gimple statements.  */
1554       if (init_stmt)
1555         bsi_insert_after (&bsi, init_stmt, BSI_NEW_STMT);
1556       if (gimple_in_ssa_p (cfun))
1557         for (;!bsi_end_p (bsi); bsi_next (&bsi))
1558           mark_symbols_for_renaming (bsi_stmt (bsi));
1559     }
1560 }
1561
1562 /* Generate code to initialize the parameters of the function at the
1563    top of the stack in ID from the CALL_EXPR EXP.  */
1564
1565 static void
1566 initialize_inlined_parameters (copy_body_data *id, tree exp,
1567                                tree fn, basic_block bb)
1568 {
1569   tree parms;
1570   tree a;
1571   tree p;
1572   tree vars = NULL_TREE;
1573   call_expr_arg_iterator iter;
1574   tree static_chain = CALL_EXPR_STATIC_CHAIN (exp);
1575
1576   /* Figure out what the parameters are.  */
1577   parms = DECL_ARGUMENTS (fn);
1578
1579   /* Loop through the parameter declarations, replacing each with an
1580      equivalent VAR_DECL, appropriately initialized.  */
1581   for (p = parms, a = first_call_expr_arg (exp, &iter); p;
1582        a = next_call_expr_arg (&iter), p = TREE_CHAIN (p))
1583     setup_one_parameter (id, p, a, fn, bb, &vars);
1584
1585   /* Initialize the static chain.  */
1586   p = DECL_STRUCT_FUNCTION (fn)->static_chain_decl;
1587   gcc_assert (fn != current_function_decl);
1588   if (p)
1589     {
1590       /* No static chain?  Seems like a bug in tree-nested.c.  */
1591       gcc_assert (static_chain);
1592
1593       setup_one_parameter (id, p, static_chain, fn, bb, &vars);
1594     }
1595
1596   declare_inline_vars (id->block, vars);
1597 }
1598
1599 /* Declare a return variable to replace the RESULT_DECL for the
1600    function we are calling.  An appropriate DECL_STMT is returned.
1601    The USE_STMT is filled to contain a use of the declaration to
1602    indicate the return value of the function.
1603
1604    RETURN_SLOT, if non-null is place where to store the result.  It
1605    is set only for CALL_EXPR_RETURN_SLOT_OPT.  MODIFY_DEST, if non-null,
1606    was the LHS of the GIMPLE_MODIFY_STMT to which this call is the RHS.
1607
1608    The return value is a (possibly null) value that is the result of the
1609    function as seen by the callee.  *USE_P is a (possibly null) value that
1610    holds the result as seen by the caller.  */
1611
1612 static tree
1613 declare_return_variable (copy_body_data *id, tree return_slot, tree modify_dest,
1614                          tree *use_p)
1615 {
1616   tree callee = id->src_fn;
1617   tree caller = id->dst_fn;
1618   tree result = DECL_RESULT (callee);
1619   tree callee_type = TREE_TYPE (result);
1620   tree caller_type = TREE_TYPE (TREE_TYPE (callee));
1621   tree var, use;
1622
1623   /* We don't need to do anything for functions that don't return
1624      anything.  */
1625   if (!result || VOID_TYPE_P (callee_type))
1626     {
1627       *use_p = NULL_TREE;
1628       return NULL_TREE;
1629     }
1630
1631   /* If there was a return slot, then the return value is the
1632      dereferenced address of that object.  */
1633   if (return_slot)
1634     {
1635       /* The front end shouldn't have used both return_slot and
1636          a modify expression.  */
1637       gcc_assert (!modify_dest);
1638       if (DECL_BY_REFERENCE (result))
1639         {
1640           tree return_slot_addr = build_fold_addr_expr (return_slot);
1641           STRIP_USELESS_TYPE_CONVERSION (return_slot_addr);
1642
1643           /* We are going to construct *&return_slot and we can't do that
1644              for variables believed to be not addressable. 
1645
1646              FIXME: This check possibly can match, because values returned
1647              via return slot optimization are not believed to have address
1648              taken by alias analysis.  */
1649           gcc_assert (TREE_CODE (return_slot) != SSA_NAME);
1650           if (gimple_in_ssa_p (cfun))
1651             {
1652               HOST_WIDE_INT bitsize;
1653               HOST_WIDE_INT bitpos;
1654               tree offset;
1655               enum machine_mode mode;
1656               int unsignedp;
1657               int volatilep;
1658               tree base;
1659               base = get_inner_reference (return_slot, &bitsize, &bitpos,
1660                                           &offset,
1661                                           &mode, &unsignedp, &volatilep,
1662                                           false);
1663               if (TREE_CODE (base) == INDIRECT_REF)
1664                 base = TREE_OPERAND (base, 0);
1665               if (TREE_CODE (base) == SSA_NAME)
1666                 base = SSA_NAME_VAR (base);
1667               mark_sym_for_renaming (base);
1668             }
1669           var = return_slot_addr;
1670         }
1671       else
1672         {
1673           var = return_slot;
1674           gcc_assert (TREE_CODE (var) != SSA_NAME);
1675         }
1676       if ((TREE_CODE (TREE_TYPE (result)) == COMPLEX_TYPE
1677            || TREE_CODE (TREE_TYPE (result)) == VECTOR_TYPE)
1678           && !DECL_GIMPLE_REG_P (result)
1679           && DECL_P (var))
1680         DECL_GIMPLE_REG_P (var) = 0;
1681       use = NULL;
1682       goto done;
1683     }
1684
1685   /* All types requiring non-trivial constructors should have been handled.  */
1686   gcc_assert (!TREE_ADDRESSABLE (callee_type));
1687
1688   /* Attempt to avoid creating a new temporary variable.  */
1689   if (modify_dest
1690       && TREE_CODE (modify_dest) != SSA_NAME)
1691     {
1692       bool use_it = false;
1693
1694       /* We can't use MODIFY_DEST if there's type promotion involved.  */
1695       if (!useless_type_conversion_p (callee_type, caller_type))
1696         use_it = false;
1697
1698       /* ??? If we're assigning to a variable sized type, then we must
1699          reuse the destination variable, because we've no good way to
1700          create variable sized temporaries at this point.  */
1701       else if (TREE_CODE (TYPE_SIZE_UNIT (caller_type)) != INTEGER_CST)
1702         use_it = true;
1703
1704       /* If the callee cannot possibly modify MODIFY_DEST, then we can
1705          reuse it as the result of the call directly.  Don't do this if
1706          it would promote MODIFY_DEST to addressable.  */
1707       else if (TREE_ADDRESSABLE (result))
1708         use_it = false;
1709       else
1710         {
1711           tree base_m = get_base_address (modify_dest);
1712
1713           /* If the base isn't a decl, then it's a pointer, and we don't
1714              know where that's going to go.  */
1715           if (!DECL_P (base_m))
1716             use_it = false;
1717           else if (is_global_var (base_m))
1718             use_it = false;
1719           else if ((TREE_CODE (TREE_TYPE (result)) == COMPLEX_TYPE
1720                     || TREE_CODE (TREE_TYPE (result)) == VECTOR_TYPE)
1721                    && !DECL_GIMPLE_REG_P (result)
1722                    && DECL_GIMPLE_REG_P (base_m))
1723             use_it = false;
1724           else if (!TREE_ADDRESSABLE (base_m))
1725             use_it = true;
1726         }
1727
1728       if (use_it)
1729         {
1730           var = modify_dest;
1731           use = NULL;
1732           goto done;
1733         }
1734     }
1735
1736   gcc_assert (TREE_CODE (TYPE_SIZE_UNIT (callee_type)) == INTEGER_CST);
1737
1738   var = copy_result_decl_to_var (result, id);
1739   if (gimple_in_ssa_p (cfun))
1740     {
1741       get_var_ann (var);
1742       add_referenced_var (var);
1743     }
1744
1745   DECL_SEEN_IN_BIND_EXPR_P (var) = 1;
1746   DECL_STRUCT_FUNCTION (caller)->unexpanded_var_list
1747     = tree_cons (NULL_TREE, var,
1748                  DECL_STRUCT_FUNCTION (caller)->unexpanded_var_list);
1749
1750   /* Do not have the rest of GCC warn about this variable as it should
1751      not be visible to the user.  */
1752   TREE_NO_WARNING (var) = 1;
1753
1754   declare_inline_vars (id->block, var);
1755
1756   /* Build the use expr.  If the return type of the function was
1757      promoted, convert it back to the expected type.  */
1758   use = var;
1759   if (!useless_type_conversion_p (caller_type, TREE_TYPE (var)))
1760     use = fold_convert (caller_type, var);
1761     
1762   STRIP_USELESS_TYPE_CONVERSION (use);
1763
1764   if (DECL_BY_REFERENCE (result))
1765     var = build_fold_addr_expr (var);
1766
1767  done:
1768   /* Register the VAR_DECL as the equivalent for the RESULT_DECL; that
1769      way, when the RESULT_DECL is encountered, it will be
1770      automatically replaced by the VAR_DECL.  */
1771   insert_decl_map (id, result, var);
1772
1773   /* Remember this so we can ignore it in remap_decls.  */
1774   id->retvar = var;
1775
1776   *use_p = use;
1777   return var;
1778 }
1779
1780 /* Returns nonzero if a function can be inlined as a tree.  */
1781
1782 bool
1783 tree_inlinable_function_p (tree fn)
1784 {
1785   return inlinable_function_p (fn);
1786 }
1787
1788 static const char *inline_forbidden_reason;
1789
1790 static tree
1791 inline_forbidden_p_1 (tree *nodep, int *walk_subtrees ATTRIBUTE_UNUSED,
1792                       void *fnp)
1793 {
1794   tree node = *nodep;
1795   tree fn = (tree) fnp;
1796   tree t;
1797
1798   switch (TREE_CODE (node))
1799     {
1800     case CALL_EXPR:
1801       /* Refuse to inline alloca call unless user explicitly forced so as
1802          this may change program's memory overhead drastically when the
1803          function using alloca is called in loop.  In GCC present in
1804          SPEC2000 inlining into schedule_block cause it to require 2GB of
1805          RAM instead of 256MB.  */
1806       if (alloca_call_p (node)
1807           && !lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)))
1808         {
1809           inline_forbidden_reason
1810             = G_("function %q+F can never be inlined because it uses "
1811                  "alloca (override using the always_inline attribute)");
1812           return node;
1813         }
1814       t = get_callee_fndecl (node);
1815       if (! t)
1816         break;
1817
1818       /* We cannot inline functions that call setjmp.  */
1819       if (setjmp_call_p (t))
1820         {
1821           inline_forbidden_reason
1822             = G_("function %q+F can never be inlined because it uses setjmp");
1823           return node;
1824         }
1825
1826       if (DECL_BUILT_IN_CLASS (t) == BUILT_IN_NORMAL)
1827         switch (DECL_FUNCTION_CODE (t))
1828           {
1829             /* We cannot inline functions that take a variable number of
1830                arguments.  */
1831           case BUILT_IN_VA_START:
1832           case BUILT_IN_STDARG_START:
1833           case BUILT_IN_NEXT_ARG:
1834           case BUILT_IN_VA_END:
1835             inline_forbidden_reason
1836               = G_("function %q+F can never be inlined because it "
1837                    "uses variable argument lists");
1838             return node;
1839
1840           case BUILT_IN_LONGJMP:
1841             /* We can't inline functions that call __builtin_longjmp at
1842                all.  The non-local goto machinery really requires the
1843                destination be in a different function.  If we allow the
1844                function calling __builtin_longjmp to be inlined into the
1845                function calling __builtin_setjmp, Things will Go Awry.  */
1846             inline_forbidden_reason
1847               = G_("function %q+F can never be inlined because "
1848                    "it uses setjmp-longjmp exception handling");
1849             return node;
1850
1851           case BUILT_IN_NONLOCAL_GOTO:
1852             /* Similarly.  */
1853             inline_forbidden_reason
1854               = G_("function %q+F can never be inlined because "
1855                    "it uses non-local goto");
1856             return node;
1857
1858           case BUILT_IN_RETURN:
1859           case BUILT_IN_APPLY_ARGS:
1860             /* If a __builtin_apply_args caller would be inlined,
1861                it would be saving arguments of the function it has
1862                been inlined into.  Similarly __builtin_return would
1863                return from the function the inline has been inlined into.  */
1864             inline_forbidden_reason
1865               = G_("function %q+F can never be inlined because "
1866                    "it uses __builtin_return or __builtin_apply_args");
1867             return node;
1868
1869           default:
1870             break;
1871           }
1872       break;
1873
1874     case GOTO_EXPR:
1875       t = TREE_OPERAND (node, 0);
1876
1877       /* We will not inline a function which uses computed goto.  The
1878          addresses of its local labels, which may be tucked into
1879          global storage, are of course not constant across
1880          instantiations, which causes unexpected behavior.  */
1881       if (TREE_CODE (t) != LABEL_DECL)
1882         {
1883           inline_forbidden_reason
1884             = G_("function %q+F can never be inlined "
1885                  "because it contains a computed goto");
1886           return node;
1887         }
1888       break;
1889
1890     case LABEL_EXPR:
1891       t = TREE_OPERAND (node, 0);
1892       if (DECL_NONLOCAL (t))
1893         {
1894           /* We cannot inline a function that receives a non-local goto
1895              because we cannot remap the destination label used in the
1896              function that is performing the non-local goto.  */
1897           inline_forbidden_reason
1898             = G_("function %q+F can never be inlined "
1899                  "because it receives a non-local goto");
1900           return node;
1901         }
1902       break;
1903
1904     case RECORD_TYPE:
1905     case UNION_TYPE:
1906       /* We cannot inline a function of the form
1907
1908            void F (int i) { struct S { int ar[i]; } s; }
1909
1910          Attempting to do so produces a catch-22.
1911          If walk_tree examines the TYPE_FIELDS chain of RECORD_TYPE/
1912          UNION_TYPE nodes, then it goes into infinite recursion on a
1913          structure containing a pointer to its own type.  If it doesn't,
1914          then the type node for S doesn't get adjusted properly when
1915          F is inlined. 
1916
1917          ??? This is likely no longer true, but it's too late in the 4.0
1918          cycle to try to find out.  This should be checked for 4.1.  */
1919       for (t = TYPE_FIELDS (node); t; t = TREE_CHAIN (t))
1920         if (variably_modified_type_p (TREE_TYPE (t), NULL))
1921           {
1922             inline_forbidden_reason
1923               = G_("function %q+F can never be inlined "
1924                    "because it uses variable sized variables");
1925             return node;
1926           }
1927
1928     default:
1929       break;
1930     }
1931
1932   return NULL_TREE;
1933 }
1934
1935 /* Return subexpression representing possible alloca call, if any.  */
1936 static tree
1937 inline_forbidden_p (tree fndecl)
1938 {
1939   location_t saved_loc = input_location;
1940   block_stmt_iterator bsi;
1941   basic_block bb;
1942   tree ret = NULL_TREE;
1943
1944   FOR_EACH_BB_FN (bb, DECL_STRUCT_FUNCTION (fndecl))
1945     for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
1946       {
1947         ret = walk_tree_without_duplicates (bsi_stmt_ptr (bsi),
1948                                     inline_forbidden_p_1, fndecl);
1949         if (ret)
1950           goto egress;
1951       }
1952
1953 egress:
1954   input_location = saved_loc;
1955   return ret;
1956 }
1957
1958 /* Returns nonzero if FN is a function that does not have any
1959    fundamental inline blocking properties.  */
1960
1961 static bool
1962 inlinable_function_p (tree fn)
1963 {
1964   bool inlinable = true;
1965   bool do_warning;
1966   tree always_inline;
1967
1968   /* If we've already decided this function shouldn't be inlined,
1969      there's no need to check again.  */
1970   if (DECL_UNINLINABLE (fn))
1971     return false;
1972
1973   /* We only warn for functions declared `inline' by the user.  */
1974   do_warning = (warn_inline
1975                 && DECL_INLINE (fn)
1976                 && DECL_DECLARED_INLINE_P (fn)
1977                 && !DECL_IN_SYSTEM_HEADER (fn));
1978
1979   always_inline = lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn));
1980
1981   if (flag_really_no_inline
1982       && always_inline == NULL)
1983     {
1984       if (do_warning)
1985         warning (OPT_Winline, "function %q+F can never be inlined because it "
1986                  "is suppressed using -fno-inline", fn);
1987       inlinable = false;
1988     }
1989
1990   /* Don't auto-inline anything that might not be bound within
1991      this unit of translation.  */
1992   else if (!DECL_DECLARED_INLINE_P (fn)
1993            && DECL_REPLACEABLE_P (fn))
1994     inlinable = false;
1995
1996   else if (!function_attribute_inlinable_p (fn))
1997     {
1998       if (do_warning)
1999         warning (OPT_Winline, "function %q+F can never be inlined because it "
2000                  "uses attributes conflicting with inlining", fn);
2001       inlinable = false;
2002     }
2003
2004   /* If we don't have the function body available, we can't inline it.
2005      However, this should not be recorded since we also get here for
2006      forward declared inline functions.  Therefore, return at once.  */
2007   if (!DECL_SAVED_TREE (fn))
2008     return false;
2009
2010   /* If we're not inlining at all, then we cannot inline this function.  */
2011   else if (!flag_inline_trees)
2012     inlinable = false;
2013
2014   /* Only try to inline functions if DECL_INLINE is set.  This should be
2015      true for all functions declared `inline', and for all other functions
2016      as well with -finline-functions.
2017
2018      Don't think of disregarding DECL_INLINE when flag_inline_trees == 2;
2019      it's the front-end that must set DECL_INLINE in this case, because
2020      dwarf2out loses if a function that does not have DECL_INLINE set is
2021      inlined anyway.  That is why we have both DECL_INLINE and
2022      DECL_DECLARED_INLINE_P.  */
2023   /* FIXME: When flag_inline_trees dies, the check for flag_unit_at_a_time
2024             here should be redundant.  */
2025   else if (!DECL_INLINE (fn) && !flag_unit_at_a_time)
2026     inlinable = false;
2027
2028   else if (inline_forbidden_p (fn))
2029     {
2030       /* See if we should warn about uninlinable functions.  Previously,
2031          some of these warnings would be issued while trying to expand
2032          the function inline, but that would cause multiple warnings
2033          about functions that would for example call alloca.  But since
2034          this a property of the function, just one warning is enough.
2035          As a bonus we can now give more details about the reason why a
2036          function is not inlinable.  */
2037       if (always_inline)
2038         sorry (inline_forbidden_reason, fn);
2039       else if (do_warning)
2040         warning (OPT_Winline, inline_forbidden_reason, fn);
2041
2042       inlinable = false;
2043     }
2044
2045   /* Squirrel away the result so that we don't have to check again.  */
2046   DECL_UNINLINABLE (fn) = !inlinable;
2047
2048   return inlinable;
2049 }
2050
2051 /* Estimate the cost of a memory move.  Use machine dependent
2052    word size and take possible memcpy call into account.  */
2053
2054 int
2055 estimate_move_cost (tree type)
2056 {
2057   HOST_WIDE_INT size;
2058
2059   size = int_size_in_bytes (type);
2060
2061   if (size < 0 || size > MOVE_MAX_PIECES * MOVE_RATIO)
2062     /* Cost of a memcpy call, 3 arguments and the call.  */
2063     return 4;
2064   else
2065     return ((size + MOVE_MAX_PIECES - 1) / MOVE_MAX_PIECES);
2066 }
2067
2068 /* Arguments for estimate_num_insns_1.  */
2069
2070 struct eni_data
2071 {
2072   /* Used to return the number of insns.  */
2073   int count;
2074
2075   /* Weights of various constructs.  */
2076   eni_weights *weights;
2077 };
2078
2079 /* Used by estimate_num_insns.  Estimate number of instructions seen
2080    by given statement.  */
2081
2082 static tree
2083 estimate_num_insns_1 (tree *tp, int *walk_subtrees, void *data)
2084 {
2085   struct eni_data *d = data;
2086   tree x = *tp;
2087   unsigned cost;
2088
2089   if (IS_TYPE_OR_DECL_P (x))
2090     {
2091       *walk_subtrees = 0;
2092       return NULL;
2093     }
2094   /* Assume that constants and references counts nothing.  These should
2095      be majorized by amount of operations among them we count later
2096      and are common target of CSE and similar optimizations.  */
2097   else if (CONSTANT_CLASS_P (x) || REFERENCE_CLASS_P (x))
2098     return NULL;
2099
2100   switch (TREE_CODE (x))
2101     {
2102     /* Containers have no cost.  */
2103     case TREE_LIST:
2104     case TREE_VEC:
2105     case BLOCK:
2106     case COMPONENT_REF:
2107     case BIT_FIELD_REF:
2108     case INDIRECT_REF:
2109     case ALIGN_INDIRECT_REF:
2110     case MISALIGNED_INDIRECT_REF:
2111     case ARRAY_REF:
2112     case ARRAY_RANGE_REF:
2113     case OBJ_TYPE_REF:
2114     case EXC_PTR_EXPR: /* ??? */
2115     case FILTER_EXPR: /* ??? */
2116     case COMPOUND_EXPR:
2117     case BIND_EXPR:
2118     case WITH_CLEANUP_EXPR:
2119     case NOP_EXPR:
2120     case CONVERT_EXPR:
2121     case VIEW_CONVERT_EXPR:
2122     case SAVE_EXPR:
2123     case ADDR_EXPR:
2124     case COMPLEX_EXPR:
2125     case RANGE_EXPR:
2126     case CASE_LABEL_EXPR:
2127     case SSA_NAME:
2128     case CATCH_EXPR:
2129     case EH_FILTER_EXPR:
2130     case STATEMENT_LIST:
2131     case ERROR_MARK:
2132     case NON_LVALUE_EXPR:
2133     case FDESC_EXPR:
2134     case VA_ARG_EXPR:
2135     case TRY_CATCH_EXPR:
2136     case TRY_FINALLY_EXPR:
2137     case LABEL_EXPR:
2138     case GOTO_EXPR:
2139     case RETURN_EXPR:
2140     case EXIT_EXPR:
2141     case LOOP_EXPR:
2142     case PHI_NODE:
2143     case WITH_SIZE_EXPR:
2144     case OMP_CLAUSE:
2145     case OMP_RETURN:
2146     case OMP_CONTINUE:
2147     case OMP_SECTIONS_SWITCH:
2148       break;
2149
2150     /* We don't account constants for now.  Assume that the cost is amortized
2151        by operations that do use them.  We may re-consider this decision once
2152        we are able to optimize the tree before estimating its size and break
2153        out static initializers.  */
2154     case IDENTIFIER_NODE:
2155     case INTEGER_CST:
2156     case REAL_CST:
2157     case FIXED_CST:
2158     case COMPLEX_CST:
2159     case VECTOR_CST:
2160     case STRING_CST:
2161       *walk_subtrees = 0;
2162       return NULL;
2163
2164       /* CHANGE_DYNAMIC_TYPE_EXPR explicitly expands to nothing.  */
2165     case CHANGE_DYNAMIC_TYPE_EXPR:
2166       *walk_subtrees = 0;
2167       return NULL;
2168
2169     /* Try to estimate the cost of assignments.  We have three cases to
2170        deal with:
2171         1) Simple assignments to registers;
2172         2) Stores to things that must live in memory.  This includes
2173            "normal" stores to scalars, but also assignments of large
2174            structures, or constructors of big arrays;
2175         3) TARGET_EXPRs.
2176
2177        Let us look at the first two cases, assuming we have "a = b + C":
2178        <GIMPLE_MODIFY_STMT <var_decl "a">
2179                            <plus_expr <var_decl "b"> <constant C>>
2180        If "a" is a GIMPLE register, the assignment to it is free on almost
2181        any target, because "a" usually ends up in a real register.  Hence
2182        the only cost of this expression comes from the PLUS_EXPR, and we
2183        can ignore the GIMPLE_MODIFY_STMT.
2184        If "a" is not a GIMPLE register, the assignment to "a" will most
2185        likely be a real store, so the cost of the GIMPLE_MODIFY_STMT is the cost
2186        of moving something into "a", which we compute using the function
2187        estimate_move_cost.
2188
2189        The third case deals with TARGET_EXPRs, for which the semantics are
2190        that a temporary is assigned, unless the TARGET_EXPR itself is being
2191        assigned to something else.  In the latter case we do not need the
2192        temporary.  E.g. in:
2193                 <GIMPLE_MODIFY_STMT <var_decl "a"> <target_expr>>, the
2194        GIMPLE_MODIFY_STMT is free.  */
2195     case INIT_EXPR:
2196     case GIMPLE_MODIFY_STMT:
2197       /* Is the right and side a TARGET_EXPR?  */
2198       if (TREE_CODE (GENERIC_TREE_OPERAND (x, 1)) == TARGET_EXPR)
2199         break;
2200       /* ... fall through ...  */
2201
2202     case TARGET_EXPR:
2203       x = GENERIC_TREE_OPERAND (x, 0);
2204       /* Is this an assignments to a register?  */
2205       if (is_gimple_reg (x))
2206         break;
2207       /* Otherwise it's a store, so fall through to compute the move cost.  */
2208
2209     case CONSTRUCTOR:
2210       d->count += estimate_move_cost (TREE_TYPE (x));
2211       break;
2212
2213     /* Assign cost of 1 to usual operations.
2214        ??? We may consider mapping RTL costs to this.  */
2215     case COND_EXPR:
2216     case VEC_COND_EXPR:
2217
2218     case PLUS_EXPR:
2219     case POINTER_PLUS_EXPR:
2220     case MINUS_EXPR:
2221     case MULT_EXPR:
2222
2223     case FIXED_CONVERT_EXPR:
2224     case FIX_TRUNC_EXPR:
2225
2226     case NEGATE_EXPR:
2227     case FLOAT_EXPR:
2228     case MIN_EXPR:
2229     case MAX_EXPR:
2230     case ABS_EXPR:
2231
2232     case LSHIFT_EXPR:
2233     case RSHIFT_EXPR:
2234     case LROTATE_EXPR:
2235     case RROTATE_EXPR:
2236     case VEC_LSHIFT_EXPR:
2237     case VEC_RSHIFT_EXPR:
2238
2239     case BIT_IOR_EXPR:
2240     case BIT_XOR_EXPR:
2241     case BIT_AND_EXPR:
2242     case BIT_NOT_EXPR:
2243
2244     case TRUTH_ANDIF_EXPR:
2245     case TRUTH_ORIF_EXPR:
2246     case TRUTH_AND_EXPR:
2247     case TRUTH_OR_EXPR:
2248     case TRUTH_XOR_EXPR:
2249     case TRUTH_NOT_EXPR:
2250
2251     case LT_EXPR:
2252     case LE_EXPR:
2253     case GT_EXPR:
2254     case GE_EXPR:
2255     case EQ_EXPR:
2256     case NE_EXPR:
2257     case ORDERED_EXPR:
2258     case UNORDERED_EXPR:
2259
2260     case UNLT_EXPR:
2261     case UNLE_EXPR:
2262     case UNGT_EXPR:
2263     case UNGE_EXPR:
2264     case UNEQ_EXPR:
2265     case LTGT_EXPR:
2266
2267     case CONJ_EXPR:
2268
2269     case PREDECREMENT_EXPR:
2270     case PREINCREMENT_EXPR:
2271     case POSTDECREMENT_EXPR:
2272     case POSTINCREMENT_EXPR:
2273
2274     case ASM_EXPR:
2275
2276     case REALIGN_LOAD_EXPR:
2277
2278     case REDUC_MAX_EXPR:
2279     case REDUC_MIN_EXPR:
2280     case REDUC_PLUS_EXPR:
2281     case WIDEN_SUM_EXPR:
2282     case DOT_PROD_EXPR: 
2283     case VEC_WIDEN_MULT_HI_EXPR:
2284     case VEC_WIDEN_MULT_LO_EXPR:
2285     case VEC_UNPACK_HI_EXPR:
2286     case VEC_UNPACK_LO_EXPR:
2287     case VEC_UNPACK_FLOAT_HI_EXPR:
2288     case VEC_UNPACK_FLOAT_LO_EXPR:
2289     case VEC_PACK_TRUNC_EXPR:
2290     case VEC_PACK_SAT_EXPR:
2291     case VEC_PACK_FIX_TRUNC_EXPR:
2292
2293     case WIDEN_MULT_EXPR:
2294
2295     case VEC_EXTRACT_EVEN_EXPR:
2296     case VEC_EXTRACT_ODD_EXPR:
2297     case VEC_INTERLEAVE_HIGH_EXPR:
2298     case VEC_INTERLEAVE_LOW_EXPR:
2299
2300     case RESX_EXPR:
2301       d->count += 1;
2302       break;
2303
2304     case SWITCH_EXPR:
2305       /* TODO: Cost of a switch should be derived from the number of
2306          branches.  */
2307       d->count += d->weights->switch_cost;
2308       break;
2309
2310     /* Few special cases of expensive operations.  This is useful
2311        to avoid inlining on functions having too many of these.  */
2312     case TRUNC_DIV_EXPR:
2313     case CEIL_DIV_EXPR:
2314     case FLOOR_DIV_EXPR:
2315     case ROUND_DIV_EXPR:
2316     case EXACT_DIV_EXPR:
2317     case TRUNC_MOD_EXPR:
2318     case CEIL_MOD_EXPR:
2319     case FLOOR_MOD_EXPR:
2320     case ROUND_MOD_EXPR:
2321     case RDIV_EXPR:
2322       d->count += d->weights->div_mod_cost;
2323       break;
2324     case CALL_EXPR:
2325       {
2326         tree decl = get_callee_fndecl (x);
2327
2328         if (decl && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_MD)
2329           cost = d->weights->target_builtin_call_cost;
2330         else
2331           cost = d->weights->call_cost;
2332         
2333         if (decl && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
2334           switch (DECL_FUNCTION_CODE (decl))
2335             {
2336             case BUILT_IN_CONSTANT_P:
2337               *walk_subtrees = 0;
2338               return NULL_TREE;
2339             case BUILT_IN_EXPECT:
2340               return NULL_TREE;
2341             /* Prefetch instruction is not expensive.  */
2342             case BUILT_IN_PREFETCH:
2343               cost = 1;
2344               break;
2345             default:
2346               break;
2347             }
2348
2349         /* Our cost must be kept in sync with cgraph_estimate_size_after_inlining
2350            that does use function declaration to figure out the arguments.  */
2351         if (!decl)
2352           {
2353             tree a;
2354             call_expr_arg_iterator iter;
2355             FOR_EACH_CALL_EXPR_ARG (a, iter, x)
2356               d->count += estimate_move_cost (TREE_TYPE (a));
2357           }
2358         else
2359           {
2360             tree arg;
2361             for (arg = DECL_ARGUMENTS (decl); arg; arg = TREE_CHAIN (arg))
2362               d->count += estimate_move_cost (TREE_TYPE (arg));
2363           }
2364
2365         d->count += cost;
2366         break;
2367       }
2368
2369     case OMP_PARALLEL:
2370     case OMP_FOR:
2371     case OMP_SECTIONS:
2372     case OMP_SINGLE:
2373     case OMP_SECTION:
2374     case OMP_MASTER:
2375     case OMP_ORDERED:
2376     case OMP_CRITICAL:
2377     case OMP_ATOMIC:
2378       /* OpenMP directives are generally very expensive.  */
2379       d->count += d->weights->omp_cost;
2380       break;
2381
2382     default:
2383       gcc_unreachable ();
2384     }
2385   return NULL;
2386 }
2387
2388 /* Estimate number of instructions that will be created by expanding EXPR.
2389    WEIGHTS contains weights attributed to various constructs.  */
2390
2391 int
2392 estimate_num_insns (tree expr, eni_weights *weights)
2393 {
2394   struct pointer_set_t *visited_nodes;
2395   basic_block bb;
2396   block_stmt_iterator bsi;
2397   struct function *my_function;
2398   struct eni_data data;
2399
2400   data.count = 0;
2401   data.weights = weights;
2402
2403   /* If we're given an entire function, walk the CFG.  */
2404   if (TREE_CODE (expr) == FUNCTION_DECL)
2405     {
2406       my_function = DECL_STRUCT_FUNCTION (expr);
2407       gcc_assert (my_function && my_function->cfg);
2408       visited_nodes = pointer_set_create ();
2409       FOR_EACH_BB_FN (bb, my_function)
2410         {
2411           for (bsi = bsi_start (bb);
2412                !bsi_end_p (bsi);
2413                bsi_next (&bsi))
2414             {
2415               walk_tree (bsi_stmt_ptr (bsi), estimate_num_insns_1,
2416                          &data, visited_nodes);
2417             }
2418         }
2419       pointer_set_destroy (visited_nodes);
2420     }
2421   else
2422     walk_tree_without_duplicates (&expr, estimate_num_insns_1, &data);
2423
2424   return data.count;
2425 }
2426
2427 /* Initializes weights used by estimate_num_insns.  */
2428
2429 void
2430 init_inline_once (void)
2431 {
2432   eni_inlining_weights.call_cost = PARAM_VALUE (PARAM_INLINE_CALL_COST);
2433   eni_inlining_weights.target_builtin_call_cost = 1;
2434   eni_inlining_weights.div_mod_cost = 10;
2435   eni_inlining_weights.switch_cost = 1;
2436   eni_inlining_weights.omp_cost = 40;
2437
2438   eni_size_weights.call_cost = 1;
2439   eni_size_weights.target_builtin_call_cost = 1;
2440   eni_size_weights.div_mod_cost = 1;
2441   eni_size_weights.switch_cost = 10;
2442   eni_size_weights.omp_cost = 40;
2443
2444   /* Estimating time for call is difficult, since we have no idea what the
2445      called function does.  In the current uses of eni_time_weights,
2446      underestimating the cost does less harm than overestimating it, so
2447      we choose a rather small value here.  */
2448   eni_time_weights.call_cost = 10;
2449   eni_time_weights.target_builtin_call_cost = 10;
2450   eni_time_weights.div_mod_cost = 10;
2451   eni_time_weights.switch_cost = 4;
2452   eni_time_weights.omp_cost = 40;
2453 }
2454
2455 /* Install new lexical TREE_BLOCK underneath 'current_block'.  */
2456 static void
2457 add_lexical_block (tree current_block, tree new_block)
2458 {
2459   tree *blk_p;
2460
2461   /* Walk to the last sub-block.  */
2462   for (blk_p = &BLOCK_SUBBLOCKS (current_block);
2463        *blk_p;
2464        blk_p = &TREE_CHAIN (*blk_p))
2465     ;
2466   *blk_p = new_block;
2467   BLOCK_SUPERCONTEXT (new_block) = current_block;
2468 }
2469
2470 /* If *TP is a CALL_EXPR, replace it with its inline expansion.  */
2471
2472 static bool
2473 expand_call_inline (basic_block bb, tree stmt, tree *tp, void *data)
2474 {
2475   copy_body_data *id;
2476   tree t;
2477   tree use_retvar;
2478   tree fn;
2479   struct pointer_map_t *st;
2480   tree return_slot;
2481   tree modify_dest;
2482   location_t saved_location;
2483   struct cgraph_edge *cg_edge;
2484   const char *reason;
2485   basic_block return_block;
2486   edge e;
2487   block_stmt_iterator bsi, stmt_bsi;
2488   bool successfully_inlined = FALSE;
2489   bool purge_dead_abnormal_edges;
2490   tree t_step;
2491   tree var;
2492
2493   /* See what we've got.  */
2494   id = (copy_body_data *) data;
2495   t = *tp;
2496
2497   /* Set input_location here so we get the right instantiation context
2498      if we call instantiate_decl from inlinable_function_p.  */
2499   saved_location = input_location;
2500   if (EXPR_HAS_LOCATION (t))
2501     input_location = EXPR_LOCATION (t);
2502
2503   /* From here on, we're only interested in CALL_EXPRs.  */
2504   if (TREE_CODE (t) != CALL_EXPR)
2505     goto egress;
2506
2507   /* First, see if we can figure out what function is being called.
2508      If we cannot, then there is no hope of inlining the function.  */
2509   fn = get_callee_fndecl (t);
2510   if (!fn)
2511     goto egress;
2512
2513   /* Turn forward declarations into real ones.  */
2514   fn = cgraph_node (fn)->decl;
2515
2516   /* If fn is a declaration of a function in a nested scope that was
2517      globally declared inline, we don't set its DECL_INITIAL.
2518      However, we can't blindly follow DECL_ABSTRACT_ORIGIN because the
2519      C++ front-end uses it for cdtors to refer to their internal
2520      declarations, that are not real functions.  Fortunately those
2521      don't have trees to be saved, so we can tell by checking their
2522      DECL_SAVED_TREE.  */
2523   if (! DECL_INITIAL (fn)
2524       && DECL_ABSTRACT_ORIGIN (fn)
2525       && DECL_SAVED_TREE (DECL_ABSTRACT_ORIGIN (fn)))
2526     fn = DECL_ABSTRACT_ORIGIN (fn);
2527
2528   /* Objective C and fortran still calls tree_rest_of_compilation directly.
2529      Kill this check once this is fixed.  */
2530   if (!id->dst_node->analyzed)
2531     goto egress;
2532
2533   cg_edge = cgraph_edge (id->dst_node, stmt);
2534
2535   /* Constant propagation on argument done during previous inlining
2536      may create new direct call.  Produce an edge for it.  */
2537   if (!cg_edge)
2538     {
2539       struct cgraph_node *dest = cgraph_node (fn);
2540
2541       /* We have missing edge in the callgraph.  This can happen in one case
2542          where previous inlining turned indirect call into direct call by
2543          constant propagating arguments.  In all other cases we hit a bug
2544          (incorrect node sharing is most common reason for missing edges.  */
2545       gcc_assert (dest->needed || !flag_unit_at_a_time);
2546       cgraph_create_edge (id->dst_node, dest, stmt,
2547                           bb->count, CGRAPH_FREQ_BASE,
2548                           bb->loop_depth)->inline_failed
2549         = N_("originally indirect function call not considered for inlining");
2550       if (dump_file)
2551         {
2552            fprintf (dump_file, "Created new direct edge to %s",
2553                     cgraph_node_name (dest));
2554         }
2555       goto egress;
2556     }
2557
2558   /* Don't try to inline functions that are not well-suited to
2559      inlining.  */
2560   if (!cgraph_inline_p (cg_edge, &reason))
2561     {
2562       if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn))
2563           /* Avoid warnings during early inline pass. */
2564           && (!flag_unit_at_a_time || cgraph_global_info_ready))
2565         {
2566           sorry ("inlining failed in call to %q+F: %s", fn, reason);
2567           sorry ("called from here");
2568         }
2569       else if (warn_inline && DECL_DECLARED_INLINE_P (fn)
2570                && !DECL_IN_SYSTEM_HEADER (fn)
2571                && strlen (reason)
2572                && !lookup_attribute ("noinline", DECL_ATTRIBUTES (fn))
2573                /* Avoid warnings during early inline pass. */
2574                && (!flag_unit_at_a_time || cgraph_global_info_ready))
2575         {
2576           warning (OPT_Winline, "inlining failed in call to %q+F: %s",
2577                    fn, reason);
2578           warning (OPT_Winline, "called from here");
2579         }
2580       goto egress;
2581     }
2582   fn = cg_edge->callee->decl;
2583
2584 #ifdef ENABLE_CHECKING
2585   if (cg_edge->callee->decl != id->dst_node->decl)
2586     verify_cgraph_node (cg_edge->callee);
2587 #endif
2588
2589   /* We will be inlining this callee.  */
2590   id->eh_region = lookup_stmt_eh_region (stmt);
2591
2592   /* Split the block holding the CALL_EXPR.  */
2593   e = split_block (bb, stmt);
2594   bb = e->src;
2595   return_block = e->dest;
2596   remove_edge (e);
2597
2598   /* split_block splits after the statement; work around this by
2599      moving the call into the second block manually.  Not pretty,
2600      but seems easier than doing the CFG manipulation by hand
2601      when the CALL_EXPR is in the last statement of BB.  */
2602   stmt_bsi = bsi_last (bb);
2603   bsi_remove (&stmt_bsi, false);
2604
2605   /* If the CALL_EXPR was in the last statement of BB, it may have
2606      been the source of abnormal edges.  In this case, schedule
2607      the removal of dead abnormal edges.  */
2608   bsi = bsi_start (return_block);
2609   if (bsi_end_p (bsi))
2610     {
2611       bsi_insert_after (&bsi, stmt, BSI_NEW_STMT);
2612       purge_dead_abnormal_edges = true;
2613     }
2614   else
2615     {
2616       bsi_insert_before (&bsi, stmt, BSI_NEW_STMT);
2617       purge_dead_abnormal_edges = false;
2618     }
2619
2620   stmt_bsi = bsi_start (return_block);
2621
2622   /* Build a block containing code to initialize the arguments, the
2623      actual inline expansion of the body, and a label for the return
2624      statements within the function to jump to.  The type of the
2625      statement expression is the return type of the function call.  */
2626   id->block = make_node (BLOCK);
2627   BLOCK_ABSTRACT_ORIGIN (id->block) = fn;
2628   BLOCK_SOURCE_LOCATION (id->block) = input_location;
2629   add_lexical_block (TREE_BLOCK (stmt), id->block);
2630
2631   /* Local declarations will be replaced by their equivalents in this
2632      map.  */
2633   st = id->decl_map;
2634   id->decl_map = pointer_map_create ();
2635
2636   /* Record the function we are about to inline.  */
2637   id->src_fn = fn;
2638   id->src_node = cg_edge->callee;
2639   id->src_cfun = DECL_STRUCT_FUNCTION (fn);
2640   id->call_expr = t;
2641
2642   initialize_inlined_parameters (id, t, fn, bb);
2643
2644   if (DECL_INITIAL (fn))
2645     add_lexical_block (id->block, remap_blocks (DECL_INITIAL (fn), id));
2646
2647   /* Return statements in the function body will be replaced by jumps
2648      to the RET_LABEL.  */
2649
2650   gcc_assert (DECL_INITIAL (fn));
2651   gcc_assert (TREE_CODE (DECL_INITIAL (fn)) == BLOCK);
2652
2653   /* Find the lhs to which the result of this call is assigned.  */
2654   return_slot = NULL;
2655   if (TREE_CODE (stmt) == GIMPLE_MODIFY_STMT)
2656     {
2657       modify_dest = GIMPLE_STMT_OPERAND (stmt, 0);
2658
2659       /* The function which we are inlining might not return a value,
2660          in which case we should issue a warning that the function
2661          does not return a value.  In that case the optimizers will
2662          see that the variable to which the value is assigned was not
2663          initialized.  We do not want to issue a warning about that
2664          uninitialized variable.  */
2665       if (DECL_P (modify_dest))
2666         TREE_NO_WARNING (modify_dest) = 1;
2667       if (CALL_EXPR_RETURN_SLOT_OPT (t))
2668         {
2669           return_slot = modify_dest;
2670           modify_dest = NULL;
2671         }
2672     }
2673   else
2674     modify_dest = NULL;
2675
2676   /* Declare the return variable for the function.  */
2677   declare_return_variable (id, return_slot,
2678                            modify_dest, &use_retvar);
2679
2680   /* This is it.  Duplicate the callee body.  Assume callee is
2681      pre-gimplified.  Note that we must not alter the caller
2682      function in any way before this point, as this CALL_EXPR may be
2683      a self-referential call; if we're calling ourselves, we need to
2684      duplicate our body before altering anything.  */
2685   copy_body (id, bb->count, bb->frequency, bb, return_block);
2686
2687   /* Add local vars in this inlined callee to caller.  */
2688   t_step = id->src_cfun->unexpanded_var_list;
2689   for (; t_step; t_step = TREE_CHAIN (t_step))
2690     {
2691       var = TREE_VALUE (t_step);
2692       if (TREE_STATIC (var) && !TREE_ASM_WRITTEN (var))
2693         cfun->unexpanded_var_list = tree_cons (NULL_TREE, var,
2694                                                cfun->unexpanded_var_list);
2695       else
2696         cfun->unexpanded_var_list = tree_cons (NULL_TREE, remap_decl (var, id),
2697                                                cfun->unexpanded_var_list);
2698     }
2699
2700   /* Clean up.  */
2701   pointer_map_destroy (id->decl_map);
2702   id->decl_map = st;
2703
2704   /* If the inlined function returns a result that we care about,
2705      clobber the CALL_EXPR with a reference to the return variable.  */
2706   if (use_retvar && (TREE_CODE (bsi_stmt (stmt_bsi)) != CALL_EXPR))
2707     {
2708       *tp = use_retvar;
2709       if (gimple_in_ssa_p (cfun))
2710         {
2711           update_stmt (stmt);
2712           mark_symbols_for_renaming (stmt);
2713         }
2714       maybe_clean_or_replace_eh_stmt (stmt, stmt);
2715     }
2716   else
2717     /* We're modifying a TSI owned by gimple_expand_calls_inline();
2718        tsi_delink() will leave the iterator in a sane state.  */
2719     {
2720       /* Handle case of inlining function that miss return statement so 
2721          return value becomes undefined.  */
2722       if (TREE_CODE (stmt) == GIMPLE_MODIFY_STMT
2723           && TREE_CODE (GIMPLE_STMT_OPERAND (stmt, 0)) == SSA_NAME)
2724         {
2725           tree name = TREE_OPERAND (stmt, 0);
2726           tree var = SSA_NAME_VAR (TREE_OPERAND (stmt, 0));
2727           tree def = gimple_default_def (cfun, var);
2728
2729           /* If the variable is used undefined, make this name undefined via
2730              move.  */
2731           if (def)
2732             {
2733               TREE_OPERAND (stmt, 1) = def;
2734               update_stmt (stmt);
2735             }
2736           /* Otherwise make this variable undefined.  */
2737           else
2738             {
2739               bsi_remove (&stmt_bsi, true);
2740               set_default_def (var, name);
2741               SSA_NAME_DEF_STMT (name) = build_empty_stmt ();
2742             }
2743         }
2744       else
2745         bsi_remove (&stmt_bsi, true);
2746     }
2747
2748   if (purge_dead_abnormal_edges)
2749     tree_purge_dead_abnormal_call_edges (return_block);
2750
2751   /* If the value of the new expression is ignored, that's OK.  We
2752      don't warn about this for CALL_EXPRs, so we shouldn't warn about
2753      the equivalent inlined version either.  */
2754   TREE_USED (*tp) = 1;
2755
2756   /* Output the inlining info for this abstract function, since it has been
2757      inlined.  If we don't do this now, we can lose the information about the
2758      variables in the function when the blocks get blown away as soon as we
2759      remove the cgraph node.  */
2760   (*debug_hooks->outlining_inline_function) (cg_edge->callee->decl);
2761
2762   /* Update callgraph if needed.  */
2763   cgraph_remove_node (cg_edge->callee);
2764
2765   id->block = NULL_TREE;
2766   successfully_inlined = TRUE;
2767
2768  egress:
2769   input_location = saved_location;
2770   return successfully_inlined;
2771 }
2772
2773 /* Expand call statements reachable from STMT_P.
2774    We can only have CALL_EXPRs as the "toplevel" tree code or nested
2775    in a GIMPLE_MODIFY_STMT.  See tree-gimple.c:get_call_expr_in().  We can
2776    unfortunately not use that function here because we need a pointer
2777    to the CALL_EXPR, not the tree itself.  */
2778
2779 static bool
2780 gimple_expand_calls_inline (basic_block bb, copy_body_data *id)
2781 {
2782   block_stmt_iterator bsi;
2783
2784   /* Register specific tree functions.  */
2785   tree_register_cfg_hooks ();
2786   for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
2787     {
2788       tree *expr_p = bsi_stmt_ptr (bsi);
2789       tree stmt = *expr_p;
2790
2791       if (TREE_CODE (*expr_p) == GIMPLE_MODIFY_STMT)
2792         expr_p = &GIMPLE_STMT_OPERAND (*expr_p, 1);
2793       if (TREE_CODE (*expr_p) == WITH_SIZE_EXPR)
2794         expr_p = &TREE_OPERAND (*expr_p, 0);
2795       if (TREE_CODE (*expr_p) == CALL_EXPR)
2796         if (expand_call_inline (bb, stmt, expr_p, id))
2797           return true;
2798     }
2799   return false;
2800 }
2801
2802 /* Walk all basic blocks created after FIRST and try to fold every statement
2803    in the STATEMENTS pointer set.  */
2804 static void
2805 fold_marked_statements (int first, struct pointer_set_t *statements)
2806 {
2807   for (;first < n_basic_blocks;first++)
2808     if (BASIC_BLOCK (first))
2809       {
2810         block_stmt_iterator bsi;
2811         for (bsi = bsi_start (BASIC_BLOCK (first));
2812              !bsi_end_p (bsi); bsi_next (&bsi))
2813           if (pointer_set_contains (statements, bsi_stmt (bsi)))
2814             {
2815               tree old_stmt = bsi_stmt (bsi);
2816               if (fold_stmt (bsi_stmt_ptr (bsi)))
2817                 {
2818                   update_stmt (bsi_stmt (bsi));
2819                   if (maybe_clean_or_replace_eh_stmt (old_stmt, bsi_stmt (bsi)))
2820                      tree_purge_dead_eh_edges (BASIC_BLOCK (first));
2821                 }
2822             }
2823       }
2824 }
2825
2826 /* Return true if BB has at least one abnormal outgoing edge.  */
2827
2828 static inline bool
2829 has_abnormal_outgoing_edge_p (basic_block bb)
2830 {
2831   edge e;
2832   edge_iterator ei;
2833
2834   FOR_EACH_EDGE (e, ei, bb->succs)
2835     if (e->flags & EDGE_ABNORMAL)
2836       return true;
2837
2838   return false;
2839 }
2840
2841 /* Expand calls to inline functions in the body of FN.  */
2842
2843 unsigned int
2844 optimize_inline_calls (tree fn)
2845 {
2846   copy_body_data id;
2847   tree prev_fn;
2848   basic_block bb;
2849   int last = n_basic_blocks;
2850   /* There is no point in performing inlining if errors have already
2851      occurred -- and we might crash if we try to inline invalid
2852      code.  */
2853   if (errorcount || sorrycount)
2854     return 0;
2855
2856   /* Clear out ID.  */
2857   memset (&id, 0, sizeof (id));
2858
2859   id.src_node = id.dst_node = cgraph_node (fn);
2860   id.dst_fn = fn;
2861   /* Or any functions that aren't finished yet.  */
2862   prev_fn = NULL_TREE;
2863   if (current_function_decl)
2864     {
2865       id.dst_fn = current_function_decl;
2866       prev_fn = current_function_decl;
2867     }
2868
2869   id.copy_decl = copy_decl_maybe_to_var;
2870   id.transform_call_graph_edges = CB_CGE_DUPLICATE;
2871   id.transform_new_cfg = false;
2872   id.transform_return_to_modify = true;
2873   id.transform_lang_insert_block = false;
2874   id.statements_to_fold = pointer_set_create ();
2875
2876   push_gimplify_context ();
2877
2878   /* We make no attempts to keep dominance info up-to-date.  */
2879   free_dominance_info (CDI_DOMINATORS);
2880   free_dominance_info (CDI_POST_DOMINATORS);
2881
2882   /* Reach the trees by walking over the CFG, and note the
2883      enclosing basic-blocks in the call edges.  */
2884   /* We walk the blocks going forward, because inlined function bodies
2885      will split id->current_basic_block, and the new blocks will
2886      follow it; we'll trudge through them, processing their CALL_EXPRs
2887      along the way.  */
2888   FOR_EACH_BB (bb)
2889     gimple_expand_calls_inline (bb, &id);
2890
2891   pop_gimplify_context (NULL);
2892
2893 #ifdef ENABLE_CHECKING
2894     {
2895       struct cgraph_edge *e;
2896
2897       verify_cgraph_node (id.dst_node);
2898
2899       /* Double check that we inlined everything we are supposed to inline.  */
2900       for (e = id.dst_node->callees; e; e = e->next_callee)
2901         gcc_assert (e->inline_failed);
2902     }
2903 #endif
2904   
2905   /* Fold the statements before compacting/renumbering the basic blocks.  */
2906   fold_marked_statements (last, id.statements_to_fold);
2907   pointer_set_destroy (id.statements_to_fold);
2908   
2909   /* Renumber the (code) basic_blocks consecutively.  */
2910   compact_blocks ();
2911   /* Renumber the lexical scoping (non-code) blocks consecutively.  */
2912   number_blocks (fn);
2913
2914   /* We are not going to maintain the cgraph edges up to date.
2915      Kill it so it won't confuse us.  */
2916   cgraph_node_remove_callees (id.dst_node);
2917
2918   fold_cond_expr_cond ();
2919   /* It would be nice to check SSA/CFG/statement consistency here, but it is
2920      not possible yet - the IPA passes might make various functions to not
2921      throw and they don't care to proactively update local EH info.  This is
2922      done later in fixup_cfg pass that also execute the verification.  */
2923   return (TODO_update_ssa | TODO_cleanup_cfg
2924           | (gimple_in_ssa_p (cfun) ? TODO_remove_unused_locals : 0)
2925           | (profile_status != PROFILE_ABSENT ? TODO_rebuild_frequencies : 0));
2926 }
2927
2928 /* FN is a function that has a complete body, and CLONE is a function whose
2929    body is to be set to a copy of FN, mapping argument declarations according
2930    to the ARG_MAP splay_tree.  */
2931
2932 void
2933 clone_body (tree clone, tree fn, void *arg_map)
2934 {
2935   copy_body_data id;
2936
2937   /* Clone the body, as if we were making an inline call.  But, remap the
2938      parameters in the callee to the parameters of caller.  */
2939   memset (&id, 0, sizeof (id));
2940   id.src_fn = fn;
2941   id.dst_fn = clone;
2942   id.src_cfun = DECL_STRUCT_FUNCTION (fn);
2943   id.decl_map = (struct pointer_map_t *)arg_map;
2944
2945   id.copy_decl = copy_decl_no_change;
2946   id.transform_call_graph_edges = CB_CGE_DUPLICATE;
2947   id.transform_new_cfg = true;
2948   id.transform_return_to_modify = false;
2949   id.transform_lang_insert_block = true;
2950
2951   /* We're not inside any EH region.  */
2952   id.eh_region = -1;
2953
2954   /* Actually copy the body.  */
2955   append_to_statement_list_force (copy_generic_body (&id), &DECL_SAVED_TREE (clone));
2956 }
2957
2958 /* Passed to walk_tree.  Copies the node pointed to, if appropriate.  */
2959
2960 tree
2961 copy_tree_r (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
2962 {
2963   enum tree_code code = TREE_CODE (*tp);
2964   enum tree_code_class cl = TREE_CODE_CLASS (code);
2965
2966   /* We make copies of most nodes.  */
2967   if (IS_EXPR_CODE_CLASS (cl)
2968       || IS_GIMPLE_STMT_CODE_CLASS (cl)
2969       || code == TREE_LIST
2970       || code == TREE_VEC
2971       || code == TYPE_DECL
2972       || code == OMP_CLAUSE)
2973     {
2974       /* Because the chain gets clobbered when we make a copy, we save it
2975          here.  */
2976       tree chain = NULL_TREE, new;
2977
2978       if (!GIMPLE_TUPLE_P (*tp))
2979         chain = TREE_CHAIN (*tp);
2980
2981       /* Copy the node.  */
2982       new = copy_node (*tp);
2983
2984       /* Propagate mudflap marked-ness.  */
2985       if (flag_mudflap && mf_marked_p (*tp))
2986         mf_mark (new);
2987
2988       *tp = new;
2989
2990       /* Now, restore the chain, if appropriate.  That will cause
2991          walk_tree to walk into the chain as well.  */
2992       if (code == PARM_DECL
2993           || code == TREE_LIST
2994           || code == OMP_CLAUSE)
2995         TREE_CHAIN (*tp) = chain;
2996
2997       /* For now, we don't update BLOCKs when we make copies.  So, we
2998          have to nullify all BIND_EXPRs.  */
2999       if (TREE_CODE (*tp) == BIND_EXPR)
3000         BIND_EXPR_BLOCK (*tp) = NULL_TREE;
3001     }
3002   else if (code == CONSTRUCTOR)
3003     {
3004       /* CONSTRUCTOR nodes need special handling because
3005          we need to duplicate the vector of elements.  */
3006       tree new;
3007
3008       new = copy_node (*tp);
3009
3010       /* Propagate mudflap marked-ness.  */
3011       if (flag_mudflap && mf_marked_p (*tp))
3012         mf_mark (new);
3013
3014       CONSTRUCTOR_ELTS (new) = VEC_copy (constructor_elt, gc,
3015                                          CONSTRUCTOR_ELTS (*tp));
3016       *tp = new;
3017     }
3018   else if (TREE_CODE_CLASS (code) == tcc_type)
3019     *walk_subtrees = 0;
3020   else if (TREE_CODE_CLASS (code) == tcc_declaration)
3021     *walk_subtrees = 0;
3022   else if (TREE_CODE_CLASS (code) == tcc_constant)
3023     *walk_subtrees = 0;
3024   else
3025     gcc_assert (code != STATEMENT_LIST);
3026   return NULL_TREE;
3027 }
3028
3029 /* The SAVE_EXPR pointed to by TP is being copied.  If ST contains
3030    information indicating to what new SAVE_EXPR this one should be mapped,
3031    use that one.  Otherwise, create a new node and enter it in ST.  FN is
3032    the function into which the copy will be placed.  */
3033
3034 static void
3035 remap_save_expr (tree *tp, void *st_, int *walk_subtrees)
3036 {
3037   struct pointer_map_t *st = (struct pointer_map_t *) st_;
3038   tree *n;
3039   tree t;
3040
3041   /* See if we already encountered this SAVE_EXPR.  */
3042   n = (tree *) pointer_map_contains (st, *tp);
3043
3044   /* If we didn't already remap this SAVE_EXPR, do so now.  */
3045   if (!n)
3046     {
3047       t = copy_node (*tp);
3048
3049       /* Remember this SAVE_EXPR.  */
3050       *pointer_map_insert (st, *tp) = t;
3051       /* Make sure we don't remap an already-remapped SAVE_EXPR.  */
3052       *pointer_map_insert (st, t) = t;
3053     }
3054   else
3055     {
3056       /* We've already walked into this SAVE_EXPR; don't do it again.  */
3057       *walk_subtrees = 0;
3058       t = *n;
3059     }
3060
3061   /* Replace this SAVE_EXPR with the copy.  */
3062   *tp = t;
3063 }
3064
3065 /* Called via walk_tree.  If *TP points to a DECL_STMT for a local label,
3066    copies the declaration and enters it in the splay_tree in DATA (which is
3067    really an `copy_body_data *').  */
3068
3069 static tree
3070 mark_local_for_remap_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
3071                         void *data)
3072 {
3073   copy_body_data *id = (copy_body_data *) data;
3074
3075   /* Don't walk into types.  */
3076   if (TYPE_P (*tp))
3077     *walk_subtrees = 0;
3078
3079   else if (TREE_CODE (*tp) == LABEL_EXPR)
3080     {
3081       tree decl = TREE_OPERAND (*tp, 0);
3082
3083       /* Copy the decl and remember the copy.  */
3084       insert_decl_map (id, decl, id->copy_decl (decl, id));
3085     }
3086
3087   return NULL_TREE;
3088 }
3089
3090 /* Perform any modifications to EXPR required when it is unsaved.  Does
3091    not recurse into EXPR's subtrees.  */
3092
3093 static void
3094 unsave_expr_1 (tree expr)
3095 {
3096   switch (TREE_CODE (expr))
3097     {
3098     case TARGET_EXPR:
3099       /* Don't mess with a TARGET_EXPR that hasn't been expanded.
3100          It's OK for this to happen if it was part of a subtree that
3101          isn't immediately expanded, such as operand 2 of another
3102          TARGET_EXPR.  */
3103       if (TREE_OPERAND (expr, 1))
3104         break;
3105
3106       TREE_OPERAND (expr, 1) = TREE_OPERAND (expr, 3);
3107       TREE_OPERAND (expr, 3) = NULL_TREE;
3108       break;
3109
3110     default:
3111       break;
3112     }
3113 }
3114
3115 /* Called via walk_tree when an expression is unsaved.  Using the
3116    splay_tree pointed to by ST (which is really a `splay_tree'),
3117    remaps all local declarations to appropriate replacements.  */
3118
3119 static tree
3120 unsave_r (tree *tp, int *walk_subtrees, void *data)
3121 {
3122   copy_body_data *id = (copy_body_data *) data;
3123   struct pointer_map_t *st = id->decl_map;
3124   tree *n;
3125
3126   /* Only a local declaration (variable or label).  */
3127   if ((TREE_CODE (*tp) == VAR_DECL && !TREE_STATIC (*tp))
3128       || TREE_CODE (*tp) == LABEL_DECL)
3129     {
3130       /* Lookup the declaration.  */
3131       n = (tree *) pointer_map_contains (st, *tp);
3132
3133       /* If it's there, remap it.  */
3134       if (n)
3135         *tp = *n;
3136     }
3137
3138   else if (TREE_CODE (*tp) == STATEMENT_LIST)
3139     copy_statement_list (tp);
3140   else if (TREE_CODE (*tp) == BIND_EXPR)
3141     copy_bind_expr (tp, walk_subtrees, id);
3142   else if (TREE_CODE (*tp) == SAVE_EXPR)
3143     remap_save_expr (tp, st, walk_subtrees);
3144   else
3145     {
3146       copy_tree_r (tp, walk_subtrees, NULL);
3147
3148       /* Do whatever unsaving is required.  */
3149       unsave_expr_1 (*tp);
3150     }
3151
3152   /* Keep iterating.  */
3153   return NULL_TREE;
3154 }
3155
3156 /* Copies everything in EXPR and replaces variables, labels
3157    and SAVE_EXPRs local to EXPR.  */
3158
3159 tree
3160 unsave_expr_now (tree expr)
3161 {
3162   copy_body_data id;
3163
3164   /* There's nothing to do for NULL_TREE.  */
3165   if (expr == 0)
3166     return expr;
3167
3168   /* Set up ID.  */
3169   memset (&id, 0, sizeof (id));
3170   id.src_fn = current_function_decl;
3171   id.dst_fn = current_function_decl;
3172   id.decl_map = pointer_map_create ();
3173
3174   id.copy_decl = copy_decl_no_change;
3175   id.transform_call_graph_edges = CB_CGE_DUPLICATE;
3176   id.transform_new_cfg = false;
3177   id.transform_return_to_modify = false;
3178   id.transform_lang_insert_block = false;
3179
3180   /* Walk the tree once to find local labels.  */
3181   walk_tree_without_duplicates (&expr, mark_local_for_remap_r, &id);
3182
3183   /* Walk the tree again, copying, remapping, and unsaving.  */
3184   walk_tree (&expr, unsave_r, &id, NULL);
3185
3186   /* Clean up.  */
3187   pointer_map_destroy (id.decl_map);
3188
3189   return expr;
3190 }
3191
3192 /* Allow someone to determine if SEARCH is a child of TOP from gdb.  */
3193
3194 static tree
3195 debug_find_tree_1 (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED, void *data)
3196 {
3197   if (*tp == data)
3198     return (tree) data;
3199   else
3200     return NULL;
3201 }
3202
3203 bool
3204 debug_find_tree (tree top, tree search)
3205 {
3206   return walk_tree_without_duplicates (&top, debug_find_tree_1, search) != 0;
3207 }
3208
3209
3210 /* Declare the variables created by the inliner.  Add all the variables in
3211    VARS to BIND_EXPR.  */
3212
3213 static void
3214 declare_inline_vars (tree block, tree vars)
3215 {
3216   tree t;
3217   for (t = vars; t; t = TREE_CHAIN (t))
3218     {
3219       DECL_SEEN_IN_BIND_EXPR_P (t) = 1;
3220       gcc_assert (!TREE_STATIC (t) && !TREE_ASM_WRITTEN (t));
3221       cfun->unexpanded_var_list =
3222         tree_cons (NULL_TREE, t,
3223                    cfun->unexpanded_var_list);
3224     }
3225
3226   if (block)
3227     BLOCK_VARS (block) = chainon (BLOCK_VARS (block), vars);
3228 }
3229
3230
3231 /* Copy NODE (which must be a DECL).  The DECL originally was in the FROM_FN,
3232    but now it will be in the TO_FN.  PARM_TO_VAR means enable PARM_DECL to
3233    VAR_DECL translation.  */
3234
3235 static tree
3236 copy_decl_for_dup_finish (copy_body_data *id, tree decl, tree copy)
3237 {
3238   /* Don't generate debug information for the copy if we wouldn't have
3239      generated it for the copy either.  */
3240   DECL_ARTIFICIAL (copy) = DECL_ARTIFICIAL (decl);
3241   DECL_IGNORED_P (copy) = DECL_IGNORED_P (decl);
3242
3243   /* Set the DECL_ABSTRACT_ORIGIN so the debugging routines know what
3244      declaration inspired this copy.  */ 
3245   DECL_ABSTRACT_ORIGIN (copy) = DECL_ORIGIN (decl);
3246
3247   /* The new variable/label has no RTL, yet.  */
3248   if (CODE_CONTAINS_STRUCT (TREE_CODE (copy), TS_DECL_WRTL)
3249       && !TREE_STATIC (copy) && !DECL_EXTERNAL (copy))
3250     SET_DECL_RTL (copy, NULL_RTX);
3251   
3252   /* These args would always appear unused, if not for this.  */
3253   TREE_USED (copy) = 1;
3254
3255   /* Set the context for the new declaration.  */
3256   if (!DECL_CONTEXT (decl))
3257     /* Globals stay global.  */
3258     ;
3259   else if (DECL_CONTEXT (decl) != id->src_fn)
3260     /* Things that weren't in the scope of the function we're inlining
3261        from aren't in the scope we're inlining to, either.  */
3262     ;
3263   else if (TREE_STATIC (decl))
3264     /* Function-scoped static variables should stay in the original
3265        function.  */
3266     ;
3267   else
3268     /* Ordinary automatic local variables are now in the scope of the
3269        new function.  */
3270     DECL_CONTEXT (copy) = id->dst_fn;
3271
3272   return copy;
3273 }
3274
3275 static tree
3276 copy_decl_to_var (tree decl, copy_body_data *id)
3277 {
3278   tree copy, type;
3279
3280   gcc_assert (TREE_CODE (decl) == PARM_DECL
3281               || TREE_CODE (decl) == RESULT_DECL);
3282
3283   type = TREE_TYPE (decl);
3284
3285   copy = build_decl (VAR_DECL, DECL_NAME (decl), type);
3286   TREE_ADDRESSABLE (copy) = TREE_ADDRESSABLE (decl);
3287   TREE_READONLY (copy) = TREE_READONLY (decl);
3288   TREE_THIS_VOLATILE (copy) = TREE_THIS_VOLATILE (decl);
3289   DECL_GIMPLE_REG_P (copy) = DECL_GIMPLE_REG_P (decl);
3290   DECL_NO_TBAA_P (copy) = DECL_NO_TBAA_P (decl);
3291
3292   return copy_decl_for_dup_finish (id, decl, copy);
3293 }
3294
3295 /* Like copy_decl_to_var, but create a return slot object instead of a
3296    pointer variable for return by invisible reference.  */
3297
3298 static tree
3299 copy_result_decl_to_var (tree decl, copy_body_data *id)
3300 {
3301   tree copy, type;
3302
3303   gcc_assert (TREE_CODE (decl) == PARM_DECL
3304               || TREE_CODE (decl) == RESULT_DECL);
3305
3306   type = TREE_TYPE (decl);
3307   if (DECL_BY_REFERENCE (decl))
3308     type = TREE_TYPE (type);
3309
3310   copy = build_decl (VAR_DECL, DECL_NAME (decl), type);
3311   TREE_READONLY (copy) = TREE_READONLY (decl);
3312   TREE_THIS_VOLATILE (copy) = TREE_THIS_VOLATILE (decl);
3313   if (!DECL_BY_REFERENCE (decl))
3314     {
3315       TREE_ADDRESSABLE (copy) = TREE_ADDRESSABLE (decl);
3316       DECL_GIMPLE_REG_P (copy) = DECL_GIMPLE_REG_P (decl);
3317       DECL_NO_TBAA_P (copy) = DECL_NO_TBAA_P (decl);
3318     }
3319
3320   return copy_decl_for_dup_finish (id, decl, copy);
3321 }
3322
3323
3324 static tree
3325 copy_decl_no_change (tree decl, copy_body_data *id)
3326 {
3327   tree copy;
3328
3329   copy = copy_node (decl);
3330
3331   /* The COPY is not abstract; it will be generated in DST_FN.  */
3332   DECL_ABSTRACT (copy) = 0;
3333   lang_hooks.dup_lang_specific_decl (copy);
3334
3335   /* TREE_ADDRESSABLE isn't used to indicate that a label's address has
3336      been taken; it's for internal bookkeeping in expand_goto_internal.  */
3337   if (TREE_CODE (copy) == LABEL_DECL)
3338     {
3339       TREE_ADDRESSABLE (copy) = 0;
3340       LABEL_DECL_UID (copy) = -1;
3341     }
3342
3343   return copy_decl_for_dup_finish (id, decl, copy);
3344 }
3345
3346 static tree
3347 copy_decl_maybe_to_var (tree decl, copy_body_data *id)
3348 {
3349   if (TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL)
3350     return copy_decl_to_var (decl, id);
3351   else
3352     return copy_decl_no_change (decl, id);
3353 }
3354
3355 /* Return a copy of the function's argument tree.  */
3356 static tree
3357 copy_arguments_for_versioning (tree orig_parm, copy_body_data * id)
3358 {
3359   tree *arg_copy, *parg;
3360
3361   arg_copy = &orig_parm;
3362   for (parg = arg_copy; *parg; parg = &TREE_CHAIN (*parg))
3363     {
3364       tree new = remap_decl (*parg, id);
3365       lang_hooks.dup_lang_specific_decl (new);
3366       TREE_CHAIN (new) = TREE_CHAIN (*parg);
3367       *parg = new;
3368     }
3369   return orig_parm;
3370 }
3371
3372 /* Return a copy of the function's static chain.  */
3373 static tree
3374 copy_static_chain (tree static_chain, copy_body_data * id)
3375 {
3376   tree *chain_copy, *pvar;
3377
3378   chain_copy = &static_chain;
3379   for (pvar = chain_copy; *pvar; pvar = &TREE_CHAIN (*pvar))
3380     {
3381       tree new = remap_decl (*pvar, id);
3382       lang_hooks.dup_lang_specific_decl (new);
3383       TREE_CHAIN (new) = TREE_CHAIN (*pvar);
3384       *pvar = new;
3385     }
3386   return static_chain;
3387 }
3388
3389 /* Return true if the function is allowed to be versioned.
3390    This is a guard for the versioning functionality.  */
3391 bool
3392 tree_versionable_function_p (tree fndecl)
3393 {
3394   if (fndecl == NULL_TREE)
3395     return false;
3396   /* ??? There are cases where a function is
3397      uninlinable but can be versioned.  */
3398   if (!tree_inlinable_function_p (fndecl))
3399     return false;
3400   
3401   return true;
3402 }
3403
3404 /* Create a copy of a function's tree.
3405    OLD_DECL and NEW_DECL are FUNCTION_DECL tree nodes
3406    of the original function and the new copied function
3407    respectively.  In case we want to replace a DECL 
3408    tree with another tree while duplicating the function's 
3409    body, TREE_MAP represents the mapping between these 
3410    trees. If UPDATE_CLONES is set, the call_stmt fields
3411    of edges of clones of the function will be updated.  */
3412 void
3413 tree_function_versioning (tree old_decl, tree new_decl, varray_type tree_map,
3414                           bool update_clones)
3415 {
3416   struct cgraph_node *old_version_node;
3417   struct cgraph_node *new_version_node;
3418   copy_body_data id;
3419   tree p;
3420   unsigned i;
3421   struct ipa_replace_map *replace_info;
3422   basic_block old_entry_block;
3423   tree t_step;
3424   tree old_current_function_decl = current_function_decl;
3425
3426   gcc_assert (TREE_CODE (old_decl) == FUNCTION_DECL
3427               && TREE_CODE (new_decl) == FUNCTION_DECL);
3428   DECL_POSSIBLY_INLINED (old_decl) = 1;
3429
3430   old_version_node = cgraph_node (old_decl);
3431   new_version_node = cgraph_node (new_decl);
3432
3433   DECL_ARTIFICIAL (new_decl) = 1;
3434   DECL_ABSTRACT_ORIGIN (new_decl) = DECL_ORIGIN (old_decl);
3435
3436   /* Prepare the data structures for the tree copy.  */
3437   memset (&id, 0, sizeof (id));
3438
3439   /* Generate a new name for the new version. */
3440   if (!update_clones)
3441     {
3442       DECL_NAME (new_decl) =  create_tmp_var_name (NULL);
3443       SET_DECL_ASSEMBLER_NAME (new_decl, DECL_NAME (new_decl));
3444       SET_DECL_RTL (new_decl, NULL_RTX);
3445       id.statements_to_fold = pointer_set_create ();
3446     }
3447   
3448   id.decl_map = pointer_map_create ();
3449   id.src_fn = old_decl;
3450   id.dst_fn = new_decl;
3451   id.src_node = old_version_node;
3452   id.dst_node = new_version_node;
3453   id.src_cfun = DECL_STRUCT_FUNCTION (old_decl);
3454   
3455   id.copy_decl = copy_decl_no_change;
3456   id.transform_call_graph_edges
3457     = update_clones ? CB_CGE_MOVE_CLONES : CB_CGE_MOVE;
3458   id.transform_new_cfg = true;
3459   id.transform_return_to_modify = false;
3460   id.transform_lang_insert_block = false;
3461
3462   current_function_decl = new_decl;
3463   old_entry_block = ENTRY_BLOCK_PTR_FOR_FUNCTION
3464     (DECL_STRUCT_FUNCTION (old_decl));
3465   initialize_cfun (new_decl, old_decl,
3466                    old_entry_block->count,
3467                    old_entry_block->frequency);
3468   push_cfun (DECL_STRUCT_FUNCTION (new_decl));
3469   
3470   /* Copy the function's static chain.  */
3471   p = DECL_STRUCT_FUNCTION (old_decl)->static_chain_decl;
3472   if (p)
3473     DECL_STRUCT_FUNCTION (new_decl)->static_chain_decl =
3474       copy_static_chain (DECL_STRUCT_FUNCTION (old_decl)->static_chain_decl,
3475                          &id);
3476   /* Copy the function's arguments.  */
3477   if (DECL_ARGUMENTS (old_decl) != NULL_TREE)
3478     DECL_ARGUMENTS (new_decl) =
3479       copy_arguments_for_versioning (DECL_ARGUMENTS (old_decl), &id);
3480   
3481   /* If there's a tree_map, prepare for substitution.  */
3482   if (tree_map)
3483     for (i = 0; i < VARRAY_ACTIVE_SIZE (tree_map); i++)
3484       {
3485         replace_info = VARRAY_GENERIC_PTR (tree_map, i);
3486         if (replace_info->replace_p)
3487           insert_decl_map (&id, replace_info->old_tree,
3488                            replace_info->new_tree);
3489       }
3490   
3491   DECL_INITIAL (new_decl) = remap_blocks (DECL_INITIAL (id.src_fn), &id);
3492   
3493   /* Renumber the lexical scoping (non-code) blocks consecutively.  */
3494   number_blocks (id.dst_fn);
3495   
3496   if (DECL_STRUCT_FUNCTION (old_decl)->unexpanded_var_list != NULL_TREE)
3497     /* Add local vars.  */
3498     for (t_step = DECL_STRUCT_FUNCTION (old_decl)->unexpanded_var_list;
3499          t_step; t_step = TREE_CHAIN (t_step))
3500       {
3501         tree var = TREE_VALUE (t_step);
3502         if (TREE_STATIC (var) && !TREE_ASM_WRITTEN (var))
3503           cfun->unexpanded_var_list = tree_cons (NULL_TREE, var,
3504                                                  cfun->unexpanded_var_list);
3505         else
3506           cfun->unexpanded_var_list =
3507             tree_cons (NULL_TREE, remap_decl (var, &id),
3508                        cfun->unexpanded_var_list);
3509       }
3510   
3511   /* Copy the Function's body.  */
3512   copy_body (&id, old_entry_block->count, old_entry_block->frequency, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR);
3513   
3514   if (DECL_RESULT (old_decl) != NULL_TREE)
3515     {
3516       tree *res_decl = &DECL_RESULT (old_decl);
3517       DECL_RESULT (new_decl) = remap_decl (*res_decl, &id);
3518       lang_hooks.dup_lang_specific_decl (DECL_RESULT (new_decl));
3519     }
3520   
3521   /* Renumber the lexical scoping (non-code) blocks consecutively.  */
3522   number_blocks (new_decl);
3523
3524   /* Clean up.  */
3525   pointer_map_destroy (id.decl_map);
3526   if (!update_clones)
3527     {
3528       fold_marked_statements (0, id.statements_to_fold);
3529       pointer_set_destroy (id.statements_to_fold);
3530       fold_cond_expr_cond ();
3531     }
3532   if (gimple_in_ssa_p (cfun))
3533     {
3534       free_dominance_info (CDI_DOMINATORS);
3535       free_dominance_info (CDI_POST_DOMINATORS);
3536       if (!update_clones)
3537         delete_unreachable_blocks ();
3538       update_ssa (TODO_update_ssa);
3539       if (!update_clones)
3540         {
3541           fold_cond_expr_cond ();
3542           if (need_ssa_update_p ())
3543             update_ssa (TODO_update_ssa);
3544         }
3545     }
3546   free_dominance_info (CDI_DOMINATORS);
3547   free_dominance_info (CDI_POST_DOMINATORS);
3548   pop_cfun ();
3549   current_function_decl = old_current_function_decl;
3550   gcc_assert (!current_function_decl
3551               || DECL_STRUCT_FUNCTION (current_function_decl) == cfun);
3552   return;
3553 }
3554
3555 /* Duplicate a type, fields and all.  */
3556
3557 tree
3558 build_duplicate_type (tree type)
3559 {
3560   struct copy_body_data id;
3561
3562   memset (&id, 0, sizeof (id));
3563   id.src_fn = current_function_decl;
3564   id.dst_fn = current_function_decl;
3565   id.src_cfun = cfun;
3566   id.decl_map = pointer_map_create ();
3567
3568   type = remap_type_1 (type, &id);
3569
3570   pointer_map_destroy (id.decl_map);
3571
3572   return type;
3573 }