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