2 Copyright (C) 2001-2013 Free Software Foundation, Inc.
3 Contributed by Alexandre Oliva <aoliva@redhat.com>
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
23 #include "coretypes.h"
25 #include "diagnostic-core.h"
27 #include "tree-inline.h"
31 #include "insn-config.h"
33 #include "langhooks.h"
34 #include "basic-block.h"
35 #include "tree-iterator.h"
38 #include "tree-mudflap.h"
42 #include "tree-pretty-print.h"
45 #include "pointer-set.h"
47 #include "value-prof.h"
48 #include "tree-pass.h"
52 #include "rtl.h" /* FIXME: For asm_str_count. */
54 /* I'm not real happy about this, but we need to handle gimple and
58 /* Inlining, Cloning, Versioning, Parallelization
60 Inlining: a function body is duplicated, but the PARM_DECLs are
61 remapped into VAR_DECLs, and non-void RETURN_EXPRs become
62 MODIFY_EXPRs that store to a dedicated returned-value variable.
63 The duplicated eh_region info of the copy will later be appended
64 to the info for the caller; the eh_region info in copied throwing
65 statements and RESX statements are adjusted accordingly.
67 Cloning: (only in C++) We have one body for a con/de/structor, and
68 multiple function decls, each with a unique parameter list.
69 Duplicate the body, using the given splay tree; some parameters
70 will become constants (like 0 or 1).
72 Versioning: a function body is duplicated and the result is a new
73 function rather than into blocks of an existing function as with
74 inlining. Some parameters will become constants.
76 Parallelization: a region of a function is duplicated resulting in
77 a new function. Variables may be replaced with complex expressions
78 to enable shared variable semantics.
80 All of these will simultaneously lookup any callgraph edges. If
81 we're going to inline the duplicated function body, and the given
82 function has some cloned callgraph nodes (one for each place this
83 function will be inlined) those callgraph edges will be duplicated.
84 If we're cloning the body, those callgraph edges will be
85 updated to point into the new body. (Note that the original
86 callgraph node and edge list will not be altered.)
88 See the CALL_EXPR handling case in copy_tree_body_r (). */
92 o In order to make inlining-on-trees work, we pessimized
93 function-local static constants. In particular, they are now
94 always output, even when not addressed. Fix this by treating
95 function-local static constants just like global static
96 constants; the back-end already knows not to output them if they
99 o Provide heuristics to clamp inlining of recursive template
103 /* Weights that estimate_num_insns uses to estimate the size of the
106 eni_weights eni_size_weights
;
108 /* Weights that estimate_num_insns uses to estimate the time necessary
109 to execute the produced code. */
111 eni_weights eni_time_weights
;
115 static tree
declare_return_variable (copy_body_data
*, tree
, tree
, basic_block
);
116 static void remap_block (tree
*, copy_body_data
*);
117 static void copy_bind_expr (tree
*, int *, copy_body_data
*);
118 static void declare_inline_vars (tree
, tree
);
119 static void remap_save_expr (tree
*, void *, int *);
120 static void prepend_lexical_block (tree current_block
, tree new_block
);
121 static tree
copy_decl_to_var (tree
, copy_body_data
*);
122 static tree
copy_result_decl_to_var (tree
, copy_body_data
*);
123 static tree
copy_decl_maybe_to_var (tree
, copy_body_data
*);
124 static gimple
remap_gimple_stmt (gimple
, copy_body_data
*);
125 static bool delete_unreachable_blocks_update_callgraph (copy_body_data
*id
);
127 /* Insert a tree->tree mapping for ID. Despite the name suggests
128 that the trees should be variables, it is used for more than that. */
131 insert_decl_map (copy_body_data
*id
, tree key
, tree value
)
133 *pointer_map_insert (id
->decl_map
, key
) = value
;
135 /* Always insert an identity map as well. If we see this same new
136 node again, we won't want to duplicate it a second time. */
138 *pointer_map_insert (id
->decl_map
, value
) = value
;
141 /* Insert a tree->tree mapping for ID. This is only used for
145 insert_debug_decl_map (copy_body_data
*id
, tree key
, tree value
)
147 if (!gimple_in_ssa_p (id
->src_cfun
))
150 if (!MAY_HAVE_DEBUG_STMTS
)
153 if (!target_for_debug_bind (key
))
156 gcc_assert (TREE_CODE (key
) == PARM_DECL
);
157 gcc_assert (TREE_CODE (value
) == VAR_DECL
);
160 id
->debug_map
= pointer_map_create ();
162 *pointer_map_insert (id
->debug_map
, key
) = value
;
165 /* If nonzero, we're remapping the contents of inlined debug
166 statements. If negative, an error has occurred, such as a
167 reference to a variable that isn't available in the inlined
169 static int processing_debug_stmt
= 0;
171 /* Construct new SSA name for old NAME. ID is the inline context. */
174 remap_ssa_name (tree name
, copy_body_data
*id
)
179 gcc_assert (TREE_CODE (name
) == SSA_NAME
);
181 n
= (tree
*) pointer_map_contains (id
->decl_map
, name
);
183 return unshare_expr (*n
);
185 if (processing_debug_stmt
)
187 if (SSA_NAME_IS_DEFAULT_DEF (name
)
188 && TREE_CODE (SSA_NAME_VAR (name
)) == PARM_DECL
189 && id
->entry_bb
== NULL
190 && single_succ_p (ENTRY_BLOCK_PTR
))
192 tree vexpr
= make_node (DEBUG_EXPR_DECL
);
194 gimple_stmt_iterator gsi
;
195 tree val
= SSA_NAME_VAR (name
);
197 n
= (tree
*) pointer_map_contains (id
->decl_map
, val
);
200 if (TREE_CODE (val
) != PARM_DECL
)
202 processing_debug_stmt
= -1;
205 def_temp
= gimple_build_debug_source_bind (vexpr
, val
, NULL
);
206 DECL_ARTIFICIAL (vexpr
) = 1;
207 TREE_TYPE (vexpr
) = TREE_TYPE (name
);
208 DECL_MODE (vexpr
) = DECL_MODE (SSA_NAME_VAR (name
));
209 gsi
= gsi_after_labels (single_succ (ENTRY_BLOCK_PTR
));
210 gsi_insert_before (&gsi
, def_temp
, GSI_SAME_STMT
);
214 processing_debug_stmt
= -1;
218 /* Remap anonymous SSA names or SSA names of anonymous decls. */
219 var
= SSA_NAME_VAR (name
);
221 || (!SSA_NAME_IS_DEFAULT_DEF (name
)
222 && TREE_CODE (var
) == VAR_DECL
223 && !VAR_DECL_IS_VIRTUAL_OPERAND (var
)
224 && DECL_ARTIFICIAL (var
)
225 && DECL_IGNORED_P (var
)
226 && !DECL_NAME (var
)))
228 struct ptr_info_def
*pi
;
229 new_tree
= make_ssa_name (remap_type (TREE_TYPE (name
), id
), NULL
);
230 if (!var
&& SSA_NAME_IDENTIFIER (name
))
231 SET_SSA_NAME_VAR_OR_IDENTIFIER (new_tree
, SSA_NAME_IDENTIFIER (name
));
232 insert_decl_map (id
, name
, new_tree
);
233 SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new_tree
)
234 = SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name
);
235 /* At least IPA points-to info can be directly transferred. */
236 if (id
->src_cfun
->gimple_df
237 && id
->src_cfun
->gimple_df
->ipa_pta
238 && (pi
= SSA_NAME_PTR_INFO (name
))
241 struct ptr_info_def
*new_pi
= get_ptr_info (new_tree
);
247 /* Do not set DEF_STMT yet as statement is not copied yet. We do that
249 new_tree
= remap_decl (var
, id
);
251 /* We might've substituted constant or another SSA_NAME for
254 Replace the SSA name representing RESULT_DECL by variable during
255 inlining: this saves us from need to introduce PHI node in a case
256 return value is just partly initialized. */
257 if ((TREE_CODE (new_tree
) == VAR_DECL
|| TREE_CODE (new_tree
) == PARM_DECL
)
258 && (!SSA_NAME_VAR (name
)
259 || TREE_CODE (SSA_NAME_VAR (name
)) != RESULT_DECL
260 || !id
->transform_return_to_modify
))
262 struct ptr_info_def
*pi
;
263 new_tree
= make_ssa_name (new_tree
, NULL
);
264 insert_decl_map (id
, name
, new_tree
);
265 SSA_NAME_OCCURS_IN_ABNORMAL_PHI (new_tree
)
266 = SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name
);
267 /* At least IPA points-to info can be directly transferred. */
268 if (id
->src_cfun
->gimple_df
269 && id
->src_cfun
->gimple_df
->ipa_pta
270 && (pi
= SSA_NAME_PTR_INFO (name
))
273 struct ptr_info_def
*new_pi
= get_ptr_info (new_tree
);
276 if (SSA_NAME_IS_DEFAULT_DEF (name
))
278 /* By inlining function having uninitialized variable, we might
279 extend the lifetime (variable might get reused). This cause
280 ICE in the case we end up extending lifetime of SSA name across
281 abnormal edge, but also increase register pressure.
283 We simply initialize all uninitialized vars by 0 except
284 for case we are inlining to very first BB. We can avoid
285 this for all BBs that are not inside strongly connected
286 regions of the CFG, but this is expensive to test. */
288 && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name
)
289 && (!SSA_NAME_VAR (name
)
290 || TREE_CODE (SSA_NAME_VAR (name
)) != PARM_DECL
)
291 && (id
->entry_bb
!= EDGE_SUCC (ENTRY_BLOCK_PTR
, 0)->dest
292 || EDGE_COUNT (id
->entry_bb
->preds
) != 1))
294 gimple_stmt_iterator gsi
= gsi_last_bb (id
->entry_bb
);
296 tree zero
= build_zero_cst (TREE_TYPE (new_tree
));
298 init_stmt
= gimple_build_assign (new_tree
, zero
);
299 gsi_insert_after (&gsi
, init_stmt
, GSI_NEW_STMT
);
300 SSA_NAME_IS_DEFAULT_DEF (new_tree
) = 0;
304 SSA_NAME_DEF_STMT (new_tree
) = gimple_build_nop ();
305 set_ssa_default_def (cfun
, SSA_NAME_VAR (new_tree
), new_tree
);
310 insert_decl_map (id
, name
, new_tree
);
314 /* Remap DECL during the copying of the BLOCK tree for the function. */
317 remap_decl (tree decl
, copy_body_data
*id
)
321 /* We only remap local variables in the current function. */
323 /* See if we have remapped this declaration. */
325 n
= (tree
*) pointer_map_contains (id
->decl_map
, decl
);
327 if (!n
&& processing_debug_stmt
)
329 processing_debug_stmt
= -1;
333 /* If we didn't already have an equivalent for this declaration,
337 /* Make a copy of the variable or label. */
338 tree t
= id
->copy_decl (decl
, id
);
340 /* Remember it, so that if we encounter this local entity again
341 we can reuse this copy. Do this early because remap_type may
342 need this decl for TYPE_STUB_DECL. */
343 insert_decl_map (id
, decl
, t
);
348 /* Remap types, if necessary. */
349 TREE_TYPE (t
) = remap_type (TREE_TYPE (t
), id
);
350 if (TREE_CODE (t
) == TYPE_DECL
)
351 DECL_ORIGINAL_TYPE (t
) = remap_type (DECL_ORIGINAL_TYPE (t
), id
);
353 /* Remap sizes as necessary. */
354 walk_tree (&DECL_SIZE (t
), copy_tree_body_r
, id
, NULL
);
355 walk_tree (&DECL_SIZE_UNIT (t
), copy_tree_body_r
, id
, NULL
);
357 /* If fields, do likewise for offset and qualifier. */
358 if (TREE_CODE (t
) == FIELD_DECL
)
360 walk_tree (&DECL_FIELD_OFFSET (t
), copy_tree_body_r
, id
, NULL
);
361 if (TREE_CODE (DECL_CONTEXT (t
)) == QUAL_UNION_TYPE
)
362 walk_tree (&DECL_QUALIFIER (t
), copy_tree_body_r
, id
, NULL
);
368 if (id
->do_not_unshare
)
371 return unshare_expr (*n
);
375 remap_type_1 (tree type
, copy_body_data
*id
)
379 /* We do need a copy. build and register it now. If this is a pointer or
380 reference type, remap the designated type and make a new pointer or
382 if (TREE_CODE (type
) == POINTER_TYPE
)
384 new_tree
= build_pointer_type_for_mode (remap_type (TREE_TYPE (type
), id
),
386 TYPE_REF_CAN_ALIAS_ALL (type
));
387 if (TYPE_ATTRIBUTES (type
) || TYPE_QUALS (type
))
388 new_tree
= build_type_attribute_qual_variant (new_tree
,
389 TYPE_ATTRIBUTES (type
),
391 insert_decl_map (id
, type
, new_tree
);
394 else if (TREE_CODE (type
) == REFERENCE_TYPE
)
396 new_tree
= build_reference_type_for_mode (remap_type (TREE_TYPE (type
), id
),
398 TYPE_REF_CAN_ALIAS_ALL (type
));
399 if (TYPE_ATTRIBUTES (type
) || TYPE_QUALS (type
))
400 new_tree
= build_type_attribute_qual_variant (new_tree
,
401 TYPE_ATTRIBUTES (type
),
403 insert_decl_map (id
, type
, new_tree
);
407 new_tree
= copy_node (type
);
409 insert_decl_map (id
, type
, new_tree
);
411 /* This is a new type, not a copy of an old type. Need to reassociate
412 variants. We can handle everything except the main variant lazily. */
413 t
= TYPE_MAIN_VARIANT (type
);
416 t
= remap_type (t
, id
);
417 TYPE_MAIN_VARIANT (new_tree
) = t
;
418 TYPE_NEXT_VARIANT (new_tree
) = TYPE_NEXT_VARIANT (t
);
419 TYPE_NEXT_VARIANT (t
) = new_tree
;
423 TYPE_MAIN_VARIANT (new_tree
) = new_tree
;
424 TYPE_NEXT_VARIANT (new_tree
) = NULL
;
427 if (TYPE_STUB_DECL (type
))
428 TYPE_STUB_DECL (new_tree
) = remap_decl (TYPE_STUB_DECL (type
), id
);
430 /* Lazily create pointer and reference types. */
431 TYPE_POINTER_TO (new_tree
) = NULL
;
432 TYPE_REFERENCE_TO (new_tree
) = NULL
;
434 switch (TREE_CODE (new_tree
))
438 case FIXED_POINT_TYPE
:
441 t
= TYPE_MIN_VALUE (new_tree
);
442 if (t
&& TREE_CODE (t
) != INTEGER_CST
)
443 walk_tree (&TYPE_MIN_VALUE (new_tree
), copy_tree_body_r
, id
, NULL
);
445 t
= TYPE_MAX_VALUE (new_tree
);
446 if (t
&& TREE_CODE (t
) != INTEGER_CST
)
447 walk_tree (&TYPE_MAX_VALUE (new_tree
), copy_tree_body_r
, id
, NULL
);
451 TREE_TYPE (new_tree
) = remap_type (TREE_TYPE (new_tree
), id
);
452 walk_tree (&TYPE_ARG_TYPES (new_tree
), copy_tree_body_r
, id
, NULL
);
456 TREE_TYPE (new_tree
) = remap_type (TREE_TYPE (new_tree
), id
);
457 TYPE_DOMAIN (new_tree
) = remap_type (TYPE_DOMAIN (new_tree
), id
);
462 case QUAL_UNION_TYPE
:
466 for (f
= TYPE_FIELDS (new_tree
); f
; f
= DECL_CHAIN (f
))
468 t
= remap_decl (f
, id
);
469 DECL_CONTEXT (t
) = new_tree
;
473 TYPE_FIELDS (new_tree
) = nreverse (nf
);
479 /* Shouldn't have been thought variable sized. */
483 walk_tree (&TYPE_SIZE (new_tree
), copy_tree_body_r
, id
, NULL
);
484 walk_tree (&TYPE_SIZE_UNIT (new_tree
), copy_tree_body_r
, id
, NULL
);
490 remap_type (tree type
, copy_body_data
*id
)
498 /* See if we have remapped this type. */
499 node
= (tree
*) pointer_map_contains (id
->decl_map
, type
);
503 /* The type only needs remapping if it's variably modified. */
504 if (! variably_modified_type_p (type
, id
->src_fn
))
506 insert_decl_map (id
, type
, type
);
510 id
->remapping_type_depth
++;
511 tmp
= remap_type_1 (type
, id
);
512 id
->remapping_type_depth
--;
517 /* Decide if DECL can be put into BLOCK_NONLOCAL_VARs. */
520 can_be_nonlocal (tree decl
, copy_body_data
*id
)
522 /* We can not duplicate function decls. */
523 if (TREE_CODE (decl
) == FUNCTION_DECL
)
526 /* Local static vars must be non-local or we get multiple declaration
528 if (TREE_CODE (decl
) == VAR_DECL
529 && !auto_var_in_fn_p (decl
, id
->src_fn
))
536 remap_decls (tree decls
, vec
<tree
, va_gc
> **nonlocalized_list
,
540 tree new_decls
= NULL_TREE
;
542 /* Remap its variables. */
543 for (old_var
= decls
; old_var
; old_var
= DECL_CHAIN (old_var
))
547 if (can_be_nonlocal (old_var
, id
))
549 /* We need to add this variable to the local decls as otherwise
550 nothing else will do so. */
551 if (TREE_CODE (old_var
) == VAR_DECL
552 && ! DECL_EXTERNAL (old_var
))
553 add_local_decl (cfun
, old_var
);
554 if ((!optimize
|| debug_info_level
> DINFO_LEVEL_TERSE
)
555 && !DECL_IGNORED_P (old_var
)
556 && nonlocalized_list
)
557 vec_safe_push (*nonlocalized_list
, old_var
);
561 /* Remap the variable. */
562 new_var
= remap_decl (old_var
, id
);
564 /* If we didn't remap this variable, we can't mess with its
565 TREE_CHAIN. If we remapped this variable to the return slot, it's
566 already declared somewhere else, so don't declare it here. */
568 if (new_var
== id
->retvar
)
572 if ((!optimize
|| debug_info_level
> DINFO_LEVEL_TERSE
)
573 && !DECL_IGNORED_P (old_var
)
574 && nonlocalized_list
)
575 vec_safe_push (*nonlocalized_list
, old_var
);
579 gcc_assert (DECL_P (new_var
));
580 DECL_CHAIN (new_var
) = new_decls
;
583 /* Also copy value-expressions. */
584 if (TREE_CODE (new_var
) == VAR_DECL
585 && DECL_HAS_VALUE_EXPR_P (new_var
))
587 tree tem
= DECL_VALUE_EXPR (new_var
);
588 bool old_regimplify
= id
->regimplify
;
589 id
->remapping_type_depth
++;
590 walk_tree (&tem
, copy_tree_body_r
, id
, NULL
);
591 id
->remapping_type_depth
--;
592 id
->regimplify
= old_regimplify
;
593 SET_DECL_VALUE_EXPR (new_var
, tem
);
598 return nreverse (new_decls
);
601 /* Copy the BLOCK to contain remapped versions of the variables
602 therein. And hook the new block into the block-tree. */
605 remap_block (tree
*block
, copy_body_data
*id
)
610 /* Make the new block. */
612 new_block
= make_node (BLOCK
);
613 TREE_USED (new_block
) = TREE_USED (old_block
);
614 BLOCK_ABSTRACT_ORIGIN (new_block
) = old_block
;
615 BLOCK_SOURCE_LOCATION (new_block
) = BLOCK_SOURCE_LOCATION (old_block
);
616 BLOCK_NONLOCALIZED_VARS (new_block
)
617 = vec_safe_copy (BLOCK_NONLOCALIZED_VARS (old_block
));
620 /* Remap its variables. */
621 BLOCK_VARS (new_block
) = remap_decls (BLOCK_VARS (old_block
),
622 &BLOCK_NONLOCALIZED_VARS (new_block
),
625 if (id
->transform_lang_insert_block
)
626 id
->transform_lang_insert_block (new_block
);
628 /* Remember the remapped block. */
629 insert_decl_map (id
, old_block
, new_block
);
632 /* Copy the whole block tree and root it in id->block. */
634 remap_blocks (tree block
, copy_body_data
*id
)
637 tree new_tree
= block
;
642 remap_block (&new_tree
, id
);
643 gcc_assert (new_tree
!= block
);
644 for (t
= BLOCK_SUBBLOCKS (block
); t
; t
= BLOCK_CHAIN (t
))
645 prepend_lexical_block (new_tree
, remap_blocks (t
, id
));
646 /* Blocks are in arbitrary order, but make things slightly prettier and do
647 not swap order when producing a copy. */
648 BLOCK_SUBBLOCKS (new_tree
) = blocks_nreverse (BLOCK_SUBBLOCKS (new_tree
));
652 /* Remap the block tree rooted at BLOCK to nothing. */
654 remap_blocks_to_null (tree block
, copy_body_data
*id
)
657 insert_decl_map (id
, block
, NULL_TREE
);
658 for (t
= BLOCK_SUBBLOCKS (block
); t
; t
= BLOCK_CHAIN (t
))
659 remap_blocks_to_null (t
, id
);
663 copy_statement_list (tree
*tp
)
665 tree_stmt_iterator oi
, ni
;
668 new_tree
= alloc_stmt_list ();
669 ni
= tsi_start (new_tree
);
670 oi
= tsi_start (*tp
);
671 TREE_TYPE (new_tree
) = TREE_TYPE (*tp
);
674 for (; !tsi_end_p (oi
); tsi_next (&oi
))
676 tree stmt
= tsi_stmt (oi
);
677 if (TREE_CODE (stmt
) == STATEMENT_LIST
)
678 /* This copy is not redundant; tsi_link_after will smash this
679 STATEMENT_LIST into the end of the one we're building, and we
680 don't want to do that with the original. */
681 copy_statement_list (&stmt
);
682 tsi_link_after (&ni
, stmt
, TSI_CONTINUE_LINKING
);
687 copy_bind_expr (tree
*tp
, int *walk_subtrees
, copy_body_data
*id
)
689 tree block
= BIND_EXPR_BLOCK (*tp
);
690 /* Copy (and replace) the statement. */
691 copy_tree_r (tp
, walk_subtrees
, NULL
);
694 remap_block (&block
, id
);
695 BIND_EXPR_BLOCK (*tp
) = block
;
698 if (BIND_EXPR_VARS (*tp
))
699 /* This will remap a lot of the same decls again, but this should be
701 BIND_EXPR_VARS (*tp
) = remap_decls (BIND_EXPR_VARS (*tp
), NULL
, id
);
705 /* Create a new gimple_seq by remapping all the statements in BODY
706 using the inlining information in ID. */
709 remap_gimple_seq (gimple_seq body
, copy_body_data
*id
)
711 gimple_stmt_iterator si
;
712 gimple_seq new_body
= NULL
;
714 for (si
= gsi_start (body
); !gsi_end_p (si
); gsi_next (&si
))
716 gimple new_stmt
= remap_gimple_stmt (gsi_stmt (si
), id
);
717 gimple_seq_add_stmt (&new_body
, new_stmt
);
724 /* Copy a GIMPLE_BIND statement STMT, remapping all the symbols in its
725 block using the mapping information in ID. */
728 copy_gimple_bind (gimple stmt
, copy_body_data
*id
)
731 tree new_block
, new_vars
;
732 gimple_seq body
, new_body
;
734 /* Copy the statement. Note that we purposely don't use copy_stmt
735 here because we need to remap statements as we copy. */
736 body
= gimple_bind_body (stmt
);
737 new_body
= remap_gimple_seq (body
, id
);
739 new_block
= gimple_bind_block (stmt
);
741 remap_block (&new_block
, id
);
743 /* This will remap a lot of the same decls again, but this should be
745 new_vars
= gimple_bind_vars (stmt
);
747 new_vars
= remap_decls (new_vars
, NULL
, id
);
749 new_bind
= gimple_build_bind (new_vars
, new_body
, new_block
);
754 /* Return true if DECL is a parameter or a SSA_NAME for a parameter. */
759 if (TREE_CODE (decl
) == SSA_NAME
)
761 decl
= SSA_NAME_VAR (decl
);
766 return (TREE_CODE (decl
) == PARM_DECL
);
769 /* Remap the GIMPLE operand pointed to by *TP. DATA is really a
770 'struct walk_stmt_info *'. DATA->INFO is a 'copy_body_data *'.
771 WALK_SUBTREES is used to indicate walk_gimple_op whether to keep
772 recursing into the children nodes of *TP. */
775 remap_gimple_op_r (tree
*tp
, int *walk_subtrees
, void *data
)
777 struct walk_stmt_info
*wi_p
= (struct walk_stmt_info
*) data
;
778 copy_body_data
*id
= (copy_body_data
*) wi_p
->info
;
779 tree fn
= id
->src_fn
;
781 if (TREE_CODE (*tp
) == SSA_NAME
)
783 *tp
= remap_ssa_name (*tp
, id
);
787 else if (auto_var_in_fn_p (*tp
, fn
))
789 /* Local variables and labels need to be replaced by equivalent
790 variables. We don't want to copy static variables; there's
791 only one of those, no matter how many times we inline the
792 containing function. Similarly for globals from an outer
796 /* Remap the declaration. */
797 new_decl
= remap_decl (*tp
, id
);
798 gcc_assert (new_decl
);
799 /* Replace this variable with the copy. */
800 STRIP_TYPE_NOPS (new_decl
);
801 /* ??? The C++ frontend uses void * pointer zero to initialize
802 any other type. This confuses the middle-end type verification.
803 As cloned bodies do not go through gimplification again the fixup
804 there doesn't trigger. */
805 if (TREE_CODE (new_decl
) == INTEGER_CST
806 && !useless_type_conversion_p (TREE_TYPE (*tp
), TREE_TYPE (new_decl
)))
807 new_decl
= fold_convert (TREE_TYPE (*tp
), new_decl
);
811 else if (TREE_CODE (*tp
) == STATEMENT_LIST
)
813 else if (TREE_CODE (*tp
) == SAVE_EXPR
)
815 else if (TREE_CODE (*tp
) == LABEL_DECL
816 && (!DECL_CONTEXT (*tp
)
817 || decl_function_context (*tp
) == id
->src_fn
))
818 /* These may need to be remapped for EH handling. */
819 *tp
= remap_decl (*tp
, id
);
820 else if (TREE_CODE (*tp
) == FIELD_DECL
)
822 /* If the enclosing record type is variably_modified_type_p, the field
823 has already been remapped. Otherwise, it need not be. */
824 tree
*n
= (tree
*) pointer_map_contains (id
->decl_map
, *tp
);
829 else if (TYPE_P (*tp
))
830 /* Types may need remapping as well. */
831 *tp
= remap_type (*tp
, id
);
832 else if (CONSTANT_CLASS_P (*tp
))
834 /* If this is a constant, we have to copy the node iff the type
835 will be remapped. copy_tree_r will not copy a constant. */
836 tree new_type
= remap_type (TREE_TYPE (*tp
), id
);
838 if (new_type
== TREE_TYPE (*tp
))
841 else if (TREE_CODE (*tp
) == INTEGER_CST
)
842 *tp
= wide_int_to_tree (new_type
, *tp
);
845 *tp
= copy_node (*tp
);
846 TREE_TYPE (*tp
) = new_type
;
851 /* Otherwise, just copy the node. Note that copy_tree_r already
852 knows not to copy VAR_DECLs, etc., so this is safe. */
854 if (TREE_CODE (*tp
) == MEM_REF
)
856 /* We need to re-canonicalize MEM_REFs from inline substitutions
857 that can happen when a pointer argument is an ADDR_EXPR.
858 Recurse here manually to allow that. */
859 tree ptr
= TREE_OPERAND (*tp
, 0);
860 tree type
= remap_type (TREE_TYPE (*tp
), id
);
862 walk_tree (&ptr
, remap_gimple_op_r
, data
, NULL
);
863 *tp
= fold_build2 (MEM_REF
, type
, ptr
, TREE_OPERAND (*tp
, 1));
864 TREE_THIS_VOLATILE (*tp
) = TREE_THIS_VOLATILE (old
);
865 TREE_SIDE_EFFECTS (*tp
) = TREE_SIDE_EFFECTS (old
);
866 TREE_NO_WARNING (*tp
) = TREE_NO_WARNING (old
);
867 /* We cannot propagate the TREE_THIS_NOTRAP flag if we have
868 remapped a parameter as the property might be valid only
869 for the parameter itself. */
870 if (TREE_THIS_NOTRAP (old
)
871 && (!is_parm (TREE_OPERAND (old
, 0))
872 || (!id
->transform_parameter
&& is_parm (ptr
))))
873 TREE_THIS_NOTRAP (*tp
) = 1;
878 /* Here is the "usual case". Copy this tree node, and then
879 tweak some special cases. */
880 copy_tree_r (tp
, walk_subtrees
, NULL
);
882 if (TREE_CODE (*tp
) != OMP_CLAUSE
)
883 TREE_TYPE (*tp
) = remap_type (TREE_TYPE (*tp
), id
);
885 if (TREE_CODE (*tp
) == TARGET_EXPR
&& TREE_OPERAND (*tp
, 3))
887 /* The copied TARGET_EXPR has never been expanded, even if the
888 original node was expanded already. */
889 TREE_OPERAND (*tp
, 1) = TREE_OPERAND (*tp
, 3);
890 TREE_OPERAND (*tp
, 3) = NULL_TREE
;
892 else if (TREE_CODE (*tp
) == ADDR_EXPR
)
894 /* Variable substitution need not be simple. In particular,
895 the MEM_REF substitution above. Make sure that
896 TREE_CONSTANT and friends are up-to-date. */
897 int invariant
= is_gimple_min_invariant (*tp
);
898 walk_tree (&TREE_OPERAND (*tp
, 0), remap_gimple_op_r
, data
, NULL
);
899 recompute_tree_invariant_for_addr_expr (*tp
);
901 /* If this used to be invariant, but is not any longer,
902 then regimplification is probably needed. */
903 if (invariant
&& !is_gimple_min_invariant (*tp
))
904 id
->regimplify
= true;
910 /* Update the TREE_BLOCK for the cloned expr. */
913 tree new_block
= id
->remapping_type_depth
== 0 ? id
->block
: NULL
;
914 tree old_block
= TREE_BLOCK (*tp
);
918 n
= (tree
*) pointer_map_contains (id
->decl_map
,
923 TREE_SET_BLOCK (*tp
, new_block
);
926 /* Keep iterating. */
931 /* Called from copy_body_id via walk_tree. DATA is really a
932 `copy_body_data *'. */
935 copy_tree_body_r (tree
*tp
, int *walk_subtrees
, void *data
)
937 copy_body_data
*id
= (copy_body_data
*) data
;
938 tree fn
= id
->src_fn
;
941 /* Begin by recognizing trees that we'll completely rewrite for the
942 inlining context. Our output for these trees is completely
943 different from out input (e.g. RETURN_EXPR is deleted, and morphs
944 into an edge). Further down, we'll handle trees that get
945 duplicated and/or tweaked. */
947 /* When requested, RETURN_EXPRs should be transformed to just the
948 contained MODIFY_EXPR. The branch semantics of the return will
949 be handled elsewhere by manipulating the CFG rather than a statement. */
950 if (TREE_CODE (*tp
) == RETURN_EXPR
&& id
->transform_return_to_modify
)
952 tree assignment
= TREE_OPERAND (*tp
, 0);
954 /* If we're returning something, just turn that into an
955 assignment into the equivalent of the original RESULT_DECL.
956 If the "assignment" is just the result decl, the result
957 decl has already been set (e.g. a recent "foo (&result_decl,
958 ...)"); just toss the entire RETURN_EXPR. */
959 if (assignment
&& TREE_CODE (assignment
) == MODIFY_EXPR
)
961 /* Replace the RETURN_EXPR with (a copy of) the
962 MODIFY_EXPR hanging underneath. */
963 *tp
= copy_node (assignment
);
965 else /* Else the RETURN_EXPR returns no value. */
968 return (tree
) (void *)1;
971 else if (TREE_CODE (*tp
) == SSA_NAME
)
973 *tp
= remap_ssa_name (*tp
, id
);
978 /* Local variables and labels need to be replaced by equivalent
979 variables. We don't want to copy static variables; there's only
980 one of those, no matter how many times we inline the containing
981 function. Similarly for globals from an outer function. */
982 else if (auto_var_in_fn_p (*tp
, fn
))
986 /* Remap the declaration. */
987 new_decl
= remap_decl (*tp
, id
);
988 gcc_assert (new_decl
);
989 /* Replace this variable with the copy. */
990 STRIP_TYPE_NOPS (new_decl
);
994 else if (TREE_CODE (*tp
) == STATEMENT_LIST
)
995 copy_statement_list (tp
);
996 else if (TREE_CODE (*tp
) == SAVE_EXPR
997 || TREE_CODE (*tp
) == TARGET_EXPR
)
998 remap_save_expr (tp
, id
->decl_map
, walk_subtrees
);
999 else if (TREE_CODE (*tp
) == LABEL_DECL
1000 && (! DECL_CONTEXT (*tp
)
1001 || decl_function_context (*tp
) == id
->src_fn
))
1002 /* These may need to be remapped for EH handling. */
1003 *tp
= remap_decl (*tp
, id
);
1004 else if (TREE_CODE (*tp
) == BIND_EXPR
)
1005 copy_bind_expr (tp
, walk_subtrees
, id
);
1006 /* Types may need remapping as well. */
1007 else if (TYPE_P (*tp
))
1008 *tp
= remap_type (*tp
, id
);
1010 /* If this is a constant, we have to copy the node iff the type will be
1011 remapped. copy_tree_r will not copy a constant. */
1012 else if (CONSTANT_CLASS_P (*tp
))
1014 tree new_type
= remap_type (TREE_TYPE (*tp
), id
);
1016 if (new_type
== TREE_TYPE (*tp
))
1019 else if (TREE_CODE (*tp
) == INTEGER_CST
)
1020 *tp
= wide_int_to_tree (new_type
, *tp
);
1023 *tp
= copy_node (*tp
);
1024 TREE_TYPE (*tp
) = new_type
;
1028 /* Otherwise, just copy the node. Note that copy_tree_r already
1029 knows not to copy VAR_DECLs, etc., so this is safe. */
1032 /* Here we handle trees that are not completely rewritten.
1033 First we detect some inlining-induced bogosities for
1035 if (TREE_CODE (*tp
) == MODIFY_EXPR
1036 && TREE_OPERAND (*tp
, 0) == TREE_OPERAND (*tp
, 1)
1037 && (auto_var_in_fn_p (TREE_OPERAND (*tp
, 0), fn
)))
1039 /* Some assignments VAR = VAR; don't generate any rtl code
1040 and thus don't count as variable modification. Avoid
1041 keeping bogosities like 0 = 0. */
1042 tree decl
= TREE_OPERAND (*tp
, 0), value
;
1045 n
= (tree
*) pointer_map_contains (id
->decl_map
, decl
);
1049 STRIP_TYPE_NOPS (value
);
1050 if (TREE_CONSTANT (value
) || TREE_READONLY (value
))
1052 *tp
= build_empty_stmt (EXPR_LOCATION (*tp
));
1053 return copy_tree_body_r (tp
, walk_subtrees
, data
);
1057 else if (TREE_CODE (*tp
) == INDIRECT_REF
)
1059 /* Get rid of *& from inline substitutions that can happen when a
1060 pointer argument is an ADDR_EXPR. */
1061 tree decl
= TREE_OPERAND (*tp
, 0);
1062 tree
*n
= (tree
*) pointer_map_contains (id
->decl_map
, decl
);
1065 /* If we happen to get an ADDR_EXPR in n->value, strip
1066 it manually here as we'll eventually get ADDR_EXPRs
1067 which lie about their types pointed to. In this case
1068 build_fold_indirect_ref wouldn't strip the INDIRECT_REF,
1069 but we absolutely rely on that. As fold_indirect_ref
1070 does other useful transformations, try that first, though. */
1071 tree type
= TREE_TYPE (*tp
);
1072 tree ptr
= id
->do_not_unshare
? *n
: unshare_expr (*n
);
1074 *tp
= gimple_fold_indirect_ref (ptr
);
1077 if (TREE_CODE (ptr
) == ADDR_EXPR
)
1080 = fold_indirect_ref_1 (EXPR_LOCATION (ptr
), type
, ptr
);
1081 /* ??? We should either assert here or build
1082 a VIEW_CONVERT_EXPR instead of blindly leaking
1083 incompatible types to our IL. */
1085 *tp
= TREE_OPERAND (ptr
, 0);
1089 *tp
= build1 (INDIRECT_REF
, type
, ptr
);
1090 TREE_THIS_VOLATILE (*tp
) = TREE_THIS_VOLATILE (old
);
1091 TREE_SIDE_EFFECTS (*tp
) = TREE_SIDE_EFFECTS (old
);
1092 TREE_READONLY (*tp
) = TREE_READONLY (old
);
1093 /* We cannot propagate the TREE_THIS_NOTRAP flag if we
1094 have remapped a parameter as the property might be
1095 valid only for the parameter itself. */
1096 if (TREE_THIS_NOTRAP (old
)
1097 && (!is_parm (TREE_OPERAND (old
, 0))
1098 || (!id
->transform_parameter
&& is_parm (ptr
))))
1099 TREE_THIS_NOTRAP (*tp
) = 1;
1106 else if (TREE_CODE (*tp
) == MEM_REF
)
1108 /* We need to re-canonicalize MEM_REFs from inline substitutions
1109 that can happen when a pointer argument is an ADDR_EXPR.
1110 Recurse here manually to allow that. */
1111 tree ptr
= TREE_OPERAND (*tp
, 0);
1112 tree type
= remap_type (TREE_TYPE (*tp
), id
);
1114 walk_tree (&ptr
, copy_tree_body_r
, data
, NULL
);
1115 *tp
= fold_build2 (MEM_REF
, type
, ptr
, TREE_OPERAND (*tp
, 1));
1116 TREE_THIS_VOLATILE (*tp
) = TREE_THIS_VOLATILE (old
);
1117 TREE_SIDE_EFFECTS (*tp
) = TREE_SIDE_EFFECTS (old
);
1118 TREE_NO_WARNING (*tp
) = TREE_NO_WARNING (old
);
1119 /* We cannot propagate the TREE_THIS_NOTRAP flag if we have
1120 remapped a parameter as the property might be valid only
1121 for the parameter itself. */
1122 if (TREE_THIS_NOTRAP (old
)
1123 && (!is_parm (TREE_OPERAND (old
, 0))
1124 || (!id
->transform_parameter
&& is_parm (ptr
))))
1125 TREE_THIS_NOTRAP (*tp
) = 1;
1130 /* Here is the "usual case". Copy this tree node, and then
1131 tweak some special cases. */
1132 copy_tree_r (tp
, walk_subtrees
, NULL
);
1134 /* If EXPR has block defined, map it to newly constructed block.
1135 When inlining we want EXPRs without block appear in the block
1136 of function call if we are not remapping a type. */
1139 new_block
= id
->remapping_type_depth
== 0 ? id
->block
: NULL
;
1140 if (TREE_BLOCK (*tp
))
1143 n
= (tree
*) pointer_map_contains (id
->decl_map
,
1148 TREE_SET_BLOCK (*tp
, new_block
);
1151 if (TREE_CODE (*tp
) != OMP_CLAUSE
)
1152 TREE_TYPE (*tp
) = remap_type (TREE_TYPE (*tp
), id
);
1154 /* The copied TARGET_EXPR has never been expanded, even if the
1155 original node was expanded already. */
1156 if (TREE_CODE (*tp
) == TARGET_EXPR
&& TREE_OPERAND (*tp
, 3))
1158 TREE_OPERAND (*tp
, 1) = TREE_OPERAND (*tp
, 3);
1159 TREE_OPERAND (*tp
, 3) = NULL_TREE
;
1162 /* Variable substitution need not be simple. In particular, the
1163 INDIRECT_REF substitution above. Make sure that TREE_CONSTANT
1164 and friends are up-to-date. */
1165 else if (TREE_CODE (*tp
) == ADDR_EXPR
)
1167 int invariant
= is_gimple_min_invariant (*tp
);
1168 walk_tree (&TREE_OPERAND (*tp
, 0), copy_tree_body_r
, id
, NULL
);
1170 /* Handle the case where we substituted an INDIRECT_REF
1171 into the operand of the ADDR_EXPR. */
1172 if (TREE_CODE (TREE_OPERAND (*tp
, 0)) == INDIRECT_REF
)
1173 *tp
= TREE_OPERAND (TREE_OPERAND (*tp
, 0), 0);
1175 recompute_tree_invariant_for_addr_expr (*tp
);
1177 /* If this used to be invariant, but is not any longer,
1178 then regimplification is probably needed. */
1179 if (invariant
&& !is_gimple_min_invariant (*tp
))
1180 id
->regimplify
= true;
1186 /* Keep iterating. */
1190 /* Helper for remap_gimple_stmt. Given an EH region number for the
1191 source function, map that to the duplicate EH region number in
1192 the destination function. */
1195 remap_eh_region_nr (int old_nr
, copy_body_data
*id
)
1197 eh_region old_r
, new_r
;
1200 old_r
= get_eh_region_from_number_fn (id
->src_cfun
, old_nr
);
1201 slot
= pointer_map_contains (id
->eh_map
, old_r
);
1202 new_r
= (eh_region
) *slot
;
1204 return new_r
->index
;
1207 /* Similar, but operate on INTEGER_CSTs. */
1210 remap_eh_region_tree_nr (tree old_t_nr
, copy_body_data
*id
)
1214 old_nr
= tree_to_shwi (old_t_nr
);
1215 new_nr
= remap_eh_region_nr (old_nr
, id
);
1217 return build_int_cst (integer_type_node
, new_nr
);
1220 /* Helper for copy_bb. Remap statement STMT using the inlining
1221 information in ID. Return the new statement copy. */
1224 remap_gimple_stmt (gimple stmt
, copy_body_data
*id
)
1227 struct walk_stmt_info wi
;
1228 bool skip_first
= false;
1230 /* Begin by recognizing trees that we'll completely rewrite for the
1231 inlining context. Our output for these trees is completely
1232 different from out input (e.g. RETURN_EXPR is deleted, and morphs
1233 into an edge). Further down, we'll handle trees that get
1234 duplicated and/or tweaked. */
1236 /* When requested, GIMPLE_RETURNs should be transformed to just the
1237 contained GIMPLE_ASSIGN. The branch semantics of the return will
1238 be handled elsewhere by manipulating the CFG rather than the
1240 if (gimple_code (stmt
) == GIMPLE_RETURN
&& id
->transform_return_to_modify
)
1242 tree retval
= gimple_return_retval (stmt
);
1244 /* If we're returning something, just turn that into an
1245 assignment into the equivalent of the original RESULT_DECL.
1246 If RETVAL is just the result decl, the result decl has
1247 already been set (e.g. a recent "foo (&result_decl, ...)");
1248 just toss the entire GIMPLE_RETURN. */
1250 && (TREE_CODE (retval
) != RESULT_DECL
1251 && (TREE_CODE (retval
) != SSA_NAME
1252 || ! SSA_NAME_VAR (retval
)
1253 || TREE_CODE (SSA_NAME_VAR (retval
)) != RESULT_DECL
)))
1255 copy
= gimple_build_assign (id
->retvar
, retval
);
1256 /* id->retvar is already substituted. Skip it on later remapping. */
1260 return gimple_build_nop ();
1262 else if (gimple_has_substatements (stmt
))
1266 /* When cloning bodies from the C++ front end, we will be handed bodies
1267 in High GIMPLE form. Handle here all the High GIMPLE statements that
1268 have embedded statements. */
1269 switch (gimple_code (stmt
))
1272 copy
= copy_gimple_bind (stmt
, id
);
1276 s1
= remap_gimple_seq (gimple_catch_handler (stmt
), id
);
1277 copy
= gimple_build_catch (gimple_catch_types (stmt
), s1
);
1280 case GIMPLE_EH_FILTER
:
1281 s1
= remap_gimple_seq (gimple_eh_filter_failure (stmt
), id
);
1282 copy
= gimple_build_eh_filter (gimple_eh_filter_types (stmt
), s1
);
1286 s1
= remap_gimple_seq (gimple_try_eval (stmt
), id
);
1287 s2
= remap_gimple_seq (gimple_try_cleanup (stmt
), id
);
1288 copy
= gimple_build_try (s1
, s2
, gimple_try_kind (stmt
));
1291 case GIMPLE_WITH_CLEANUP_EXPR
:
1292 s1
= remap_gimple_seq (gimple_wce_cleanup (stmt
), id
);
1293 copy
= gimple_build_wce (s1
);
1296 case GIMPLE_OMP_PARALLEL
:
1297 s1
= remap_gimple_seq (gimple_omp_body (stmt
), id
);
1298 copy
= gimple_build_omp_parallel
1300 gimple_omp_parallel_clauses (stmt
),
1301 gimple_omp_parallel_child_fn (stmt
),
1302 gimple_omp_parallel_data_arg (stmt
));
1305 case GIMPLE_OMP_TASK
:
1306 s1
= remap_gimple_seq (gimple_omp_body (stmt
), id
);
1307 copy
= gimple_build_omp_task
1309 gimple_omp_task_clauses (stmt
),
1310 gimple_omp_task_child_fn (stmt
),
1311 gimple_omp_task_data_arg (stmt
),
1312 gimple_omp_task_copy_fn (stmt
),
1313 gimple_omp_task_arg_size (stmt
),
1314 gimple_omp_task_arg_align (stmt
));
1317 case GIMPLE_OMP_FOR
:
1318 s1
= remap_gimple_seq (gimple_omp_body (stmt
), id
);
1319 s2
= remap_gimple_seq (gimple_omp_for_pre_body (stmt
), id
);
1320 copy
= gimple_build_omp_for (s1
, gimple_omp_for_kind (stmt
),
1321 gimple_omp_for_clauses (stmt
),
1322 gimple_omp_for_collapse (stmt
), s2
);
1325 for (i
= 0; i
< gimple_omp_for_collapse (stmt
); i
++)
1327 gimple_omp_for_set_index (copy
, i
,
1328 gimple_omp_for_index (stmt
, i
));
1329 gimple_omp_for_set_initial (copy
, i
,
1330 gimple_omp_for_initial (stmt
, i
));
1331 gimple_omp_for_set_final (copy
, i
,
1332 gimple_omp_for_final (stmt
, i
));
1333 gimple_omp_for_set_incr (copy
, i
,
1334 gimple_omp_for_incr (stmt
, i
));
1335 gimple_omp_for_set_cond (copy
, i
,
1336 gimple_omp_for_cond (stmt
, i
));
1341 case GIMPLE_OMP_MASTER
:
1342 s1
= remap_gimple_seq (gimple_omp_body (stmt
), id
);
1343 copy
= gimple_build_omp_master (s1
);
1346 case GIMPLE_OMP_TASKGROUP
:
1347 s1
= remap_gimple_seq (gimple_omp_body (stmt
), id
);
1348 copy
= gimple_build_omp_taskgroup (s1
);
1351 case GIMPLE_OMP_ORDERED
:
1352 s1
= remap_gimple_seq (gimple_omp_body (stmt
), id
);
1353 copy
= gimple_build_omp_ordered (s1
);
1356 case GIMPLE_OMP_SECTION
:
1357 s1
= remap_gimple_seq (gimple_omp_body (stmt
), id
);
1358 copy
= gimple_build_omp_section (s1
);
1361 case GIMPLE_OMP_SECTIONS
:
1362 s1
= remap_gimple_seq (gimple_omp_body (stmt
), id
);
1363 copy
= gimple_build_omp_sections
1364 (s1
, gimple_omp_sections_clauses (stmt
));
1367 case GIMPLE_OMP_SINGLE
:
1368 s1
= remap_gimple_seq (gimple_omp_body (stmt
), id
);
1369 copy
= gimple_build_omp_single
1370 (s1
, gimple_omp_single_clauses (stmt
));
1373 case GIMPLE_OMP_TARGET
:
1374 s1
= remap_gimple_seq (gimple_omp_body (stmt
), id
);
1375 copy
= gimple_build_omp_target
1376 (s1
, gimple_omp_target_kind (stmt
),
1377 gimple_omp_target_clauses (stmt
));
1380 case GIMPLE_OMP_TEAMS
:
1381 s1
= remap_gimple_seq (gimple_omp_body (stmt
), id
);
1382 copy
= gimple_build_omp_teams
1383 (s1
, gimple_omp_teams_clauses (stmt
));
1386 case GIMPLE_OMP_CRITICAL
:
1387 s1
= remap_gimple_seq (gimple_omp_body (stmt
), id
);
1389 = gimple_build_omp_critical (s1
, gimple_omp_critical_name (stmt
));
1392 case GIMPLE_TRANSACTION
:
1393 s1
= remap_gimple_seq (gimple_transaction_body (stmt
), id
);
1394 copy
= gimple_build_transaction (s1
, gimple_transaction_label (stmt
));
1395 gimple_transaction_set_subcode (copy
, gimple_transaction_subcode (stmt
));
1404 if (gimple_assign_copy_p (stmt
)
1405 && gimple_assign_lhs (stmt
) == gimple_assign_rhs1 (stmt
)
1406 && auto_var_in_fn_p (gimple_assign_lhs (stmt
), id
->src_fn
))
1408 /* Here we handle statements that are not completely rewritten.
1409 First we detect some inlining-induced bogosities for
1412 /* Some assignments VAR = VAR; don't generate any rtl code
1413 and thus don't count as variable modification. Avoid
1414 keeping bogosities like 0 = 0. */
1415 tree decl
= gimple_assign_lhs (stmt
), value
;
1418 n
= (tree
*) pointer_map_contains (id
->decl_map
, decl
);
1422 STRIP_TYPE_NOPS (value
);
1423 if (TREE_CONSTANT (value
) || TREE_READONLY (value
))
1424 return gimple_build_nop ();
1428 /* For *ptr_N ={v} {CLOBBER}, if ptr_N is SSA_NAME defined
1429 in a block that we aren't copying during tree_function_versioning,
1430 just drop the clobber stmt. */
1431 if (id
->blocks_to_copy
&& gimple_clobber_p (stmt
))
1433 tree lhs
= gimple_assign_lhs (stmt
);
1434 if (TREE_CODE (lhs
) == MEM_REF
1435 && TREE_CODE (TREE_OPERAND (lhs
, 0)) == SSA_NAME
)
1437 gimple def_stmt
= SSA_NAME_DEF_STMT (TREE_OPERAND (lhs
, 0));
1438 if (gimple_bb (def_stmt
)
1439 && !bitmap_bit_p (id
->blocks_to_copy
,
1440 gimple_bb (def_stmt
)->index
))
1441 return gimple_build_nop ();
1445 if (gimple_debug_bind_p (stmt
))
1447 copy
= gimple_build_debug_bind (gimple_debug_bind_get_var (stmt
),
1448 gimple_debug_bind_get_value (stmt
),
1450 id
->debug_stmts
.safe_push (copy
);
1453 if (gimple_debug_source_bind_p (stmt
))
1455 copy
= gimple_build_debug_source_bind
1456 (gimple_debug_source_bind_get_var (stmt
),
1457 gimple_debug_source_bind_get_value (stmt
), stmt
);
1458 id
->debug_stmts
.safe_push (copy
);
1462 /* Create a new deep copy of the statement. */
1463 copy
= gimple_copy (stmt
);
1465 /* Remap the region numbers for __builtin_eh_{pointer,filter},
1466 RESX and EH_DISPATCH. */
1468 switch (gimple_code (copy
))
1472 tree r
, fndecl
= gimple_call_fndecl (copy
);
1473 if (fndecl
&& DECL_BUILT_IN_CLASS (fndecl
) == BUILT_IN_NORMAL
)
1474 switch (DECL_FUNCTION_CODE (fndecl
))
1476 case BUILT_IN_EH_COPY_VALUES
:
1477 r
= gimple_call_arg (copy
, 1);
1478 r
= remap_eh_region_tree_nr (r
, id
);
1479 gimple_call_set_arg (copy
, 1, r
);
1482 case BUILT_IN_EH_POINTER
:
1483 case BUILT_IN_EH_FILTER
:
1484 r
= gimple_call_arg (copy
, 0);
1485 r
= remap_eh_region_tree_nr (r
, id
);
1486 gimple_call_set_arg (copy
, 0, r
);
1493 /* Reset alias info if we didn't apply measures to
1494 keep it valid over inlining by setting DECL_PT_UID. */
1495 if (!id
->src_cfun
->gimple_df
1496 || !id
->src_cfun
->gimple_df
->ipa_pta
)
1497 gimple_call_reset_alias_info (copy
);
1503 int r
= gimple_resx_region (copy
);
1504 r
= remap_eh_region_nr (r
, id
);
1505 gimple_resx_set_region (copy
, r
);
1509 case GIMPLE_EH_DISPATCH
:
1511 int r
= gimple_eh_dispatch_region (copy
);
1512 r
= remap_eh_region_nr (r
, id
);
1513 gimple_eh_dispatch_set_region (copy
, r
);
1522 /* If STMT has a block defined, map it to the newly constructed
1524 if (gimple_block (copy
))
1527 n
= (tree
*) pointer_map_contains (id
->decl_map
, gimple_block (copy
));
1529 gimple_set_block (copy
, *n
);
1532 if (gimple_debug_bind_p (copy
) || gimple_debug_source_bind_p (copy
))
1535 /* Remap all the operands in COPY. */
1536 memset (&wi
, 0, sizeof (wi
));
1539 walk_tree (gimple_op_ptr (copy
, 1), remap_gimple_op_r
, &wi
, NULL
);
1541 walk_gimple_op (copy
, remap_gimple_op_r
, &wi
);
1543 /* Clear the copied virtual operands. We are not remapping them here
1544 but are going to recreate them from scratch. */
1545 if (gimple_has_mem_ops (copy
))
1547 gimple_set_vdef (copy
, NULL_TREE
);
1548 gimple_set_vuse (copy
, NULL_TREE
);
1555 /* Copy basic block, scale profile accordingly. Edges will be taken care of
1559 copy_bb (copy_body_data
*id
, basic_block bb
, int frequency_scale
,
1560 gcov_type count_scale
)
1562 gimple_stmt_iterator gsi
, copy_gsi
, seq_gsi
;
1563 basic_block copy_basic_block
;
1568 /* Search for previous copied basic block. */
1571 prev
= prev
->prev_bb
;
1573 /* create_basic_block() will append every new block to
1574 basic_block_info automatically. */
1575 copy_basic_block
= create_basic_block (NULL
, (void *) 0,
1576 (basic_block
) prev
->aux
);
1577 copy_basic_block
->count
= apply_scale (bb
->count
, count_scale
);
1579 /* We are going to rebuild frequencies from scratch. These values
1580 have just small importance to drive canonicalize_loop_headers. */
1581 freq
= apply_scale ((gcov_type
)bb
->frequency
, frequency_scale
);
1583 /* We recompute frequencies after inlining, so this is quite safe. */
1584 if (freq
> BB_FREQ_MAX
)
1586 copy_basic_block
->frequency
= freq
;
1588 copy_gsi
= gsi_start_bb (copy_basic_block
);
1590 for (gsi
= gsi_start_bb (bb
); !gsi_end_p (gsi
); gsi_next (&gsi
))
1592 gimple stmt
= gsi_stmt (gsi
);
1593 gimple orig_stmt
= stmt
;
1595 id
->regimplify
= false;
1596 stmt
= remap_gimple_stmt (stmt
, id
);
1597 if (gimple_nop_p (stmt
))
1600 gimple_duplicate_stmt_histograms (cfun
, stmt
, id
->src_cfun
, orig_stmt
);
1603 /* With return slot optimization we can end up with
1604 non-gimple (foo *)&this->m, fix that here. */
1605 if (is_gimple_assign (stmt
)
1606 && gimple_assign_rhs_code (stmt
) == NOP_EXPR
1607 && !is_gimple_val (gimple_assign_rhs1 (stmt
)))
1610 new_rhs
= force_gimple_operand_gsi (&seq_gsi
,
1611 gimple_assign_rhs1 (stmt
),
1613 GSI_CONTINUE_LINKING
);
1614 gimple_assign_set_rhs1 (stmt
, new_rhs
);
1615 id
->regimplify
= false;
1618 gsi_insert_after (&seq_gsi
, stmt
, GSI_NEW_STMT
);
1621 gimple_regimplify_operands (stmt
, &seq_gsi
);
1623 /* If copy_basic_block has been empty at the start of this iteration,
1624 call gsi_start_bb again to get at the newly added statements. */
1625 if (gsi_end_p (copy_gsi
))
1626 copy_gsi
= gsi_start_bb (copy_basic_block
);
1628 gsi_next (©_gsi
);
1630 /* Process the new statement. The call to gimple_regimplify_operands
1631 possibly turned the statement into multiple statements, we
1632 need to process all of them. */
1637 stmt
= gsi_stmt (copy_gsi
);
1638 if (is_gimple_call (stmt
)
1639 && gimple_call_va_arg_pack_p (stmt
)
1642 /* __builtin_va_arg_pack () should be replaced by
1643 all arguments corresponding to ... in the caller. */
1647 size_t nargs
= gimple_call_num_args (id
->gimple_call
);
1650 for (p
= DECL_ARGUMENTS (id
->src_fn
); p
; p
= DECL_CHAIN (p
))
1653 /* Create the new array of arguments. */
1654 n
= nargs
+ gimple_call_num_args (stmt
);
1655 argarray
.create (n
);
1656 argarray
.safe_grow_cleared (n
);
1658 /* Copy all the arguments before '...' */
1659 memcpy (argarray
.address (),
1660 gimple_call_arg_ptr (stmt
, 0),
1661 gimple_call_num_args (stmt
) * sizeof (tree
));
1663 /* Append the arguments passed in '...' */
1664 memcpy (argarray
.address () + gimple_call_num_args (stmt
),
1665 gimple_call_arg_ptr (id
->gimple_call
, 0)
1666 + (gimple_call_num_args (id
->gimple_call
) - nargs
),
1667 nargs
* sizeof (tree
));
1669 new_call
= gimple_build_call_vec (gimple_call_fn (stmt
),
1672 argarray
.release ();
1674 /* Copy all GIMPLE_CALL flags, location and block, except
1675 GF_CALL_VA_ARG_PACK. */
1676 gimple_call_copy_flags (new_call
, stmt
);
1677 gimple_call_set_va_arg_pack (new_call
, false);
1678 gimple_set_location (new_call
, gimple_location (stmt
));
1679 gimple_set_block (new_call
, gimple_block (stmt
));
1680 gimple_call_set_lhs (new_call
, gimple_call_lhs (stmt
));
1682 gsi_replace (©_gsi
, new_call
, false);
1685 else if (is_gimple_call (stmt
)
1687 && (decl
= gimple_call_fndecl (stmt
))
1688 && DECL_BUILT_IN_CLASS (decl
) == BUILT_IN_NORMAL
1689 && DECL_FUNCTION_CODE (decl
) == BUILT_IN_VA_ARG_PACK_LEN
)
1691 /* __builtin_va_arg_pack_len () should be replaced by
1692 the number of anonymous arguments. */
1693 size_t nargs
= gimple_call_num_args (id
->gimple_call
);
1697 for (p
= DECL_ARGUMENTS (id
->src_fn
); p
; p
= DECL_CHAIN (p
))
1700 count
= build_int_cst (integer_type_node
, nargs
);
1701 new_stmt
= gimple_build_assign (gimple_call_lhs (stmt
), count
);
1702 gsi_replace (©_gsi
, new_stmt
, false);
1706 /* Statements produced by inlining can be unfolded, especially
1707 when we constant propagated some operands. We can't fold
1708 them right now for two reasons:
1709 1) folding require SSA_NAME_DEF_STMTs to be correct
1710 2) we can't change function calls to builtins.
1711 So we just mark statement for later folding. We mark
1712 all new statements, instead just statements that has changed
1713 by some nontrivial substitution so even statements made
1714 foldable indirectly are updated. If this turns out to be
1715 expensive, copy_body can be told to watch for nontrivial
1717 if (id
->statements_to_fold
)
1718 pointer_set_insert (id
->statements_to_fold
, stmt
);
1720 /* We're duplicating a CALL_EXPR. Find any corresponding
1721 callgraph edges and update or duplicate them. */
1722 if (is_gimple_call (stmt
))
1724 struct cgraph_edge
*edge
;
1727 switch (id
->transform_call_graph_edges
)
1729 case CB_CGE_DUPLICATE
:
1730 edge
= cgraph_edge (id
->src_node
, orig_stmt
);
1733 int edge_freq
= edge
->frequency
;
1735 struct cgraph_edge
*old_edge
= edge
;
1736 edge
= cgraph_clone_edge (edge
, id
->dst_node
, stmt
,
1738 REG_BR_PROB_BASE
, CGRAPH_FREQ_BASE
,
1740 /* We could also just rescale the frequency, but
1741 doing so would introduce roundoff errors and make
1742 verifier unhappy. */
1743 new_freq
= compute_call_stmt_bb_frequency (id
->dst_node
->symbol
.decl
,
1746 /* Speculative calls consist of two edges - direct and indirect.
1747 Duplicate the whole thing and distribute frequencies accordingly. */
1748 if (edge
->speculative
)
1750 struct cgraph_edge
*direct
, *indirect
;
1751 struct ipa_ref
*ref
;
1753 gcc_assert (!edge
->indirect_unknown_callee
);
1754 cgraph_speculative_call_info (old_edge
, direct
, indirect
, ref
);
1755 indirect
= cgraph_clone_edge (indirect
, id
->dst_node
, stmt
,
1757 REG_BR_PROB_BASE
, CGRAPH_FREQ_BASE
,
1759 if (old_edge
->frequency
+ indirect
->frequency
)
1761 edge
->frequency
= MIN (RDIV ((gcov_type
)new_freq
* old_edge
->frequency
,
1762 (old_edge
->frequency
+ indirect
->frequency
)),
1764 indirect
->frequency
= MIN (RDIV ((gcov_type
)new_freq
* indirect
->frequency
,
1765 (old_edge
->frequency
+ indirect
->frequency
)),
1768 ipa_clone_ref (ref
, (symtab_node
)id
->dst_node
, stmt
);
1772 edge
->frequency
= new_freq
;
1774 && profile_status_for_function (cfun
) != PROFILE_ABSENT
1775 && (edge_freq
> edge
->frequency
+ 10
1776 || edge_freq
< edge
->frequency
- 10))
1778 fprintf (dump_file
, "Edge frequency estimated by "
1779 "cgraph %i diverge from inliner's estimate %i\n",
1783 "Orig bb: %i, orig bb freq %i, new bb freq %i\n",
1786 copy_basic_block
->frequency
);
1792 case CB_CGE_MOVE_CLONES
:
1793 cgraph_set_call_stmt_including_clones (id
->dst_node
,
1795 edge
= cgraph_edge (id
->dst_node
, stmt
);
1799 edge
= cgraph_edge (id
->dst_node
, orig_stmt
);
1801 cgraph_set_call_stmt (edge
, stmt
);
1808 /* Constant propagation on argument done during inlining
1809 may create new direct call. Produce an edge for it. */
1811 || (edge
->indirect_inlining_edge
1812 && id
->transform_call_graph_edges
== CB_CGE_MOVE_CLONES
))
1813 && id
->dst_node
->symbol
.definition
1814 && (fn
= gimple_call_fndecl (stmt
)) != NULL
)
1816 struct cgraph_node
*dest
= cgraph_get_node (fn
);
1818 /* We have missing edge in the callgraph. This can happen
1819 when previous inlining turned an indirect call into a
1820 direct call by constant propagating arguments or we are
1821 producing dead clone (for further cloning). In all
1822 other cases we hit a bug (incorrect node sharing is the
1823 most common reason for missing edges). */
1824 gcc_assert (!dest
->symbol
.definition
1825 || dest
->symbol
.address_taken
1826 || !id
->src_node
->symbol
.definition
1827 || !id
->dst_node
->symbol
.definition
);
1828 if (id
->transform_call_graph_edges
== CB_CGE_MOVE_CLONES
)
1829 cgraph_create_edge_including_clones
1830 (id
->dst_node
, dest
, orig_stmt
, stmt
, bb
->count
,
1831 compute_call_stmt_bb_frequency (id
->dst_node
->symbol
.decl
,
1833 CIF_ORIGINALLY_INDIRECT_CALL
);
1835 cgraph_create_edge (id
->dst_node
, dest
, stmt
,
1837 compute_call_stmt_bb_frequency
1838 (id
->dst_node
->symbol
.decl
,
1839 copy_basic_block
))->inline_failed
1840 = CIF_ORIGINALLY_INDIRECT_CALL
;
1843 fprintf (dump_file
, "Created new direct edge to %s\n",
1844 cgraph_node_name (dest
));
1848 flags
= gimple_call_flags (stmt
);
1849 if (flags
& ECF_MAY_BE_ALLOCA
)
1850 cfun
->calls_alloca
= true;
1851 if (flags
& ECF_RETURNS_TWICE
)
1852 cfun
->calls_setjmp
= true;
1855 maybe_duplicate_eh_stmt_fn (cfun
, stmt
, id
->src_cfun
, orig_stmt
,
1856 id
->eh_map
, id
->eh_lp_nr
);
1858 if (gimple_in_ssa_p (cfun
) && !is_gimple_debug (stmt
))
1863 FOR_EACH_SSA_TREE_OPERAND (def
, stmt
, i
, SSA_OP_DEF
)
1864 if (TREE_CODE (def
) == SSA_NAME
)
1865 SSA_NAME_DEF_STMT (def
) = stmt
;
1868 gsi_next (©_gsi
);
1870 while (!gsi_end_p (copy_gsi
));
1872 copy_gsi
= gsi_last_bb (copy_basic_block
);
1875 return copy_basic_block
;
1878 /* Inserting Single Entry Multiple Exit region in SSA form into code in SSA
1879 form is quite easy, since dominator relationship for old basic blocks does
1882 There is however exception where inlining might change dominator relation
1883 across EH edges from basic block within inlined functions destinating
1884 to landing pads in function we inline into.
1886 The function fills in PHI_RESULTs of such PHI nodes if they refer
1887 to gimple regs. Otherwise, the function mark PHI_RESULT of such
1888 PHI nodes for renaming. For non-gimple regs, renaming is safe: the
1889 EH edges are abnormal and SSA_NAME_OCCURS_IN_ABNORMAL_PHI must be
1890 set, and this means that there will be no overlapping live ranges
1891 for the underlying symbol.
1893 This might change in future if we allow redirecting of EH edges and
1894 we might want to change way build CFG pre-inlining to include
1895 all the possible edges then. */
1897 update_ssa_across_abnormal_edges (basic_block bb
, basic_block ret_bb
,
1898 bool can_throw
, bool nonlocal_goto
)
1903 FOR_EACH_EDGE (e
, ei
, bb
->succs
)
1905 || ((basic_block
)e
->dest
->aux
)->index
== ENTRY_BLOCK
)
1908 gimple_stmt_iterator si
;
1911 gcc_assert (e
->flags
& EDGE_EH
);
1914 gcc_assert (!(e
->flags
& EDGE_EH
));
1916 for (si
= gsi_start_phis (e
->dest
); !gsi_end_p (si
); gsi_next (&si
))
1920 phi
= gsi_stmt (si
);
1922 /* For abnormal goto/call edges the receiver can be the
1923 ENTRY_BLOCK. Do not assert this cannot happen. */
1925 gcc_assert ((e
->flags
& EDGE_EH
)
1926 || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (PHI_RESULT (phi
)));
1928 re
= find_edge (ret_bb
, e
->dest
);
1929 gcc_checking_assert (re
);
1930 gcc_assert ((re
->flags
& (EDGE_EH
| EDGE_ABNORMAL
))
1931 == (e
->flags
& (EDGE_EH
| EDGE_ABNORMAL
)));
1933 SET_USE (PHI_ARG_DEF_PTR_FROM_EDGE (phi
, e
),
1934 USE_FROM_PTR (PHI_ARG_DEF_PTR_FROM_EDGE (phi
, re
)));
1940 /* Copy edges from BB into its copy constructed earlier, scale profile
1941 accordingly. Edges will be taken care of later. Assume aux
1942 pointers to point to the copies of each BB. Return true if any
1943 debug stmts are left after a statement that must end the basic block. */
1946 copy_edges_for_bb (basic_block bb
, gcov_type count_scale
, basic_block ret_bb
,
1947 bool can_make_abnormal_goto
)
1949 basic_block new_bb
= (basic_block
) bb
->aux
;
1952 gimple_stmt_iterator si
;
1954 bool need_debug_cleanup
= false;
1956 /* Use the indices from the original blocks to create edges for the
1958 FOR_EACH_EDGE (old_edge
, ei
, bb
->succs
)
1959 if (!(old_edge
->flags
& EDGE_EH
))
1963 flags
= old_edge
->flags
;
1965 /* Return edges do get a FALLTHRU flag when the get inlined. */
1966 if (old_edge
->dest
->index
== EXIT_BLOCK
&& !old_edge
->flags
1967 && old_edge
->dest
->aux
!= EXIT_BLOCK_PTR
)
1968 flags
|= EDGE_FALLTHRU
;
1969 new_edge
= make_edge (new_bb
, (basic_block
) old_edge
->dest
->aux
, flags
);
1970 new_edge
->count
= apply_scale (old_edge
->count
, count_scale
);
1971 new_edge
->probability
= old_edge
->probability
;
1974 if (bb
->index
== ENTRY_BLOCK
|| bb
->index
== EXIT_BLOCK
)
1977 for (si
= gsi_start_bb (new_bb
); !gsi_end_p (si
);)
1980 bool can_throw
, nonlocal_goto
;
1982 copy_stmt
= gsi_stmt (si
);
1983 if (!is_gimple_debug (copy_stmt
))
1984 update_stmt (copy_stmt
);
1986 /* Do this before the possible split_block. */
1989 /* If this tree could throw an exception, there are two
1990 cases where we need to add abnormal edge(s): the
1991 tree wasn't in a region and there is a "current
1992 region" in the caller; or the original tree had
1993 EH edges. In both cases split the block after the tree,
1994 and add abnormal edge(s) as needed; we need both
1995 those from the callee and the caller.
1996 We check whether the copy can throw, because the const
1997 propagation can change an INDIRECT_REF which throws
1998 into a COMPONENT_REF which doesn't. If the copy
1999 can throw, the original could also throw. */
2000 can_throw
= stmt_can_throw_internal (copy_stmt
);
2001 nonlocal_goto
= stmt_can_make_abnormal_goto (copy_stmt
);
2003 if (can_throw
|| nonlocal_goto
)
2005 if (!gsi_end_p (si
))
2007 while (!gsi_end_p (si
) && is_gimple_debug (gsi_stmt (si
)))
2010 need_debug_cleanup
= true;
2012 if (!gsi_end_p (si
))
2013 /* Note that bb's predecessor edges aren't necessarily
2014 right at this point; split_block doesn't care. */
2016 edge e
= split_block (new_bb
, copy_stmt
);
2019 new_bb
->aux
= e
->src
->aux
;
2020 si
= gsi_start_bb (new_bb
);
2024 if (gimple_code (copy_stmt
) == GIMPLE_EH_DISPATCH
)
2025 make_eh_dispatch_edges (copy_stmt
);
2027 make_eh_edges (copy_stmt
);
2029 /* If the call we inline cannot make abnormal goto do not add
2030 additional abnormal edges but only retain those already present
2031 in the original function body. */
2032 nonlocal_goto
&= can_make_abnormal_goto
;
2034 make_abnormal_goto_edges (gimple_bb (copy_stmt
), true);
2036 if ((can_throw
|| nonlocal_goto
)
2037 && gimple_in_ssa_p (cfun
))
2038 update_ssa_across_abnormal_edges (gimple_bb (copy_stmt
), ret_bb
,
2039 can_throw
, nonlocal_goto
);
2041 return need_debug_cleanup
;
2044 /* Copy the PHIs. All blocks and edges are copied, some blocks
2045 was possibly split and new outgoing EH edges inserted.
2046 BB points to the block of original function and AUX pointers links
2047 the original and newly copied blocks. */
2050 copy_phis_for_bb (basic_block bb
, copy_body_data
*id
)
2052 basic_block
const new_bb
= (basic_block
) bb
->aux
;
2055 gimple_stmt_iterator si
;
2057 bool inserted
= false;
2059 for (si
= gsi_start_phis (bb
); !gsi_end_p (si
); gsi_next (&si
))
2064 phi
= gsi_stmt (si
);
2065 res
= PHI_RESULT (phi
);
2067 if (!virtual_operand_p (res
))
2069 walk_tree (&new_res
, copy_tree_body_r
, id
, NULL
);
2070 new_phi
= create_phi_node (new_res
, new_bb
);
2071 FOR_EACH_EDGE (new_edge
, ei
, new_bb
->preds
)
2073 edge old_edge
= find_edge ((basic_block
) new_edge
->src
->aux
, bb
);
2079 /* When doing partial cloning, we allow PHIs on the entry block
2080 as long as all the arguments are the same. Find any input
2081 edge to see argument to copy. */
2083 FOR_EACH_EDGE (old_edge
, ei2
, bb
->preds
)
2084 if (!old_edge
->src
->aux
)
2087 arg
= PHI_ARG_DEF_FROM_EDGE (phi
, old_edge
);
2089 walk_tree (&new_arg
, copy_tree_body_r
, id
, NULL
);
2090 gcc_assert (new_arg
);
2091 /* With return slot optimization we can end up with
2092 non-gimple (foo *)&this->m, fix that here. */
2093 if (TREE_CODE (new_arg
) != SSA_NAME
2094 && TREE_CODE (new_arg
) != FUNCTION_DECL
2095 && !is_gimple_val (new_arg
))
2097 gimple_seq stmts
= NULL
;
2098 new_arg
= force_gimple_operand (new_arg
, &stmts
, true, NULL
);
2099 gsi_insert_seq_on_edge (new_edge
, stmts
);
2102 locus
= gimple_phi_arg_location_from_edge (phi
, old_edge
);
2103 if (LOCATION_BLOCK (locus
))
2106 n
= (tree
*) pointer_map_contains (id
->decl_map
,
2107 LOCATION_BLOCK (locus
));
2110 locus
= COMBINE_LOCATION_DATA (line_table
, locus
, *n
);
2112 locus
= LOCATION_LOCUS (locus
);
2115 locus
= LOCATION_LOCUS (locus
);
2117 add_phi_arg (new_phi
, new_arg
, new_edge
, locus
);
2122 /* Commit the delayed edge insertions. */
2124 FOR_EACH_EDGE (new_edge
, ei
, new_bb
->preds
)
2125 gsi_commit_one_edge_insert (new_edge
, NULL
);
2129 /* Wrapper for remap_decl so it can be used as a callback. */
2132 remap_decl_1 (tree decl
, void *data
)
2134 return remap_decl (decl
, (copy_body_data
*) data
);
2137 /* Build struct function and associated datastructures for the new clone
2138 NEW_FNDECL to be build. CALLEE_FNDECL is the original. Function changes
2139 the cfun to the function of new_fndecl (and current_function_decl too). */
2142 initialize_cfun (tree new_fndecl
, tree callee_fndecl
, gcov_type count
)
2144 struct function
*src_cfun
= DECL_STRUCT_FUNCTION (callee_fndecl
);
2145 gcov_type count_scale
;
2147 if (!DECL_ARGUMENTS (new_fndecl
))
2148 DECL_ARGUMENTS (new_fndecl
) = DECL_ARGUMENTS (callee_fndecl
);
2149 if (!DECL_RESULT (new_fndecl
))
2150 DECL_RESULT (new_fndecl
) = DECL_RESULT (callee_fndecl
);
2152 if (ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun
)->count
)
2154 = GCOV_COMPUTE_SCALE (count
,
2155 ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun
)->count
);
2157 count_scale
= REG_BR_PROB_BASE
;
2159 /* Register specific tree functions. */
2160 gimple_register_cfg_hooks ();
2162 /* Get clean struct function. */
2163 push_struct_function (new_fndecl
);
2165 /* We will rebuild these, so just sanity check that they are empty. */
2166 gcc_assert (VALUE_HISTOGRAMS (cfun
) == NULL
);
2167 gcc_assert (cfun
->local_decls
== NULL
);
2168 gcc_assert (cfun
->cfg
== NULL
);
2169 gcc_assert (cfun
->decl
== new_fndecl
);
2171 /* Copy items we preserve during cloning. */
2172 cfun
->static_chain_decl
= src_cfun
->static_chain_decl
;
2173 cfun
->nonlocal_goto_save_area
= src_cfun
->nonlocal_goto_save_area
;
2174 cfun
->function_end_locus
= src_cfun
->function_end_locus
;
2175 cfun
->curr_properties
= src_cfun
->curr_properties
;
2176 cfun
->last_verified
= src_cfun
->last_verified
;
2177 cfun
->va_list_gpr_size
= src_cfun
->va_list_gpr_size
;
2178 cfun
->va_list_fpr_size
= src_cfun
->va_list_fpr_size
;
2179 cfun
->has_nonlocal_label
= src_cfun
->has_nonlocal_label
;
2180 cfun
->stdarg
= src_cfun
->stdarg
;
2181 cfun
->after_inlining
= src_cfun
->after_inlining
;
2182 cfun
->can_throw_non_call_exceptions
2183 = src_cfun
->can_throw_non_call_exceptions
;
2184 cfun
->can_delete_dead_exceptions
= src_cfun
->can_delete_dead_exceptions
;
2185 cfun
->returns_struct
= src_cfun
->returns_struct
;
2186 cfun
->returns_pcc_struct
= src_cfun
->returns_pcc_struct
;
2188 init_empty_tree_cfg ();
2190 profile_status_for_function (cfun
) = profile_status_for_function (src_cfun
);
2191 ENTRY_BLOCK_PTR
->count
=
2192 (ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun
)->count
* count_scale
/
2194 ENTRY_BLOCK_PTR
->frequency
2195 = ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun
)->frequency
;
2196 EXIT_BLOCK_PTR
->count
=
2197 (EXIT_BLOCK_PTR_FOR_FUNCTION (src_cfun
)->count
* count_scale
/
2199 EXIT_BLOCK_PTR
->frequency
=
2200 EXIT_BLOCK_PTR_FOR_FUNCTION (src_cfun
)->frequency
;
2202 init_eh_for_function ();
2204 if (src_cfun
->gimple_df
)
2206 init_tree_ssa (cfun
);
2207 cfun
->gimple_df
->in_ssa_p
= true;
2208 init_ssa_operands (cfun
);
2212 /* Helper function for copy_cfg_body. Move debug stmts from the end
2213 of NEW_BB to the beginning of successor basic blocks when needed. If the
2214 successor has multiple predecessors, reset them, otherwise keep
2218 maybe_move_debug_stmts_to_successors (copy_body_data
*id
, basic_block new_bb
)
2222 gimple_stmt_iterator si
= gsi_last_nondebug_bb (new_bb
);
2225 || gsi_one_before_end_p (si
)
2226 || !(stmt_can_throw_internal (gsi_stmt (si
))
2227 || stmt_can_make_abnormal_goto (gsi_stmt (si
))))
2230 FOR_EACH_EDGE (e
, ei
, new_bb
->succs
)
2232 gimple_stmt_iterator ssi
= gsi_last_bb (new_bb
);
2233 gimple_stmt_iterator dsi
= gsi_after_labels (e
->dest
);
2234 while (is_gimple_debug (gsi_stmt (ssi
)))
2236 gimple stmt
= gsi_stmt (ssi
), new_stmt
;
2240 /* For the last edge move the debug stmts instead of copying
2242 if (ei_one_before_end_p (ei
))
2246 if (!single_pred_p (e
->dest
) && gimple_debug_bind_p (stmt
))
2247 gimple_debug_bind_reset_value (stmt
);
2248 gsi_remove (&si
, false);
2249 gsi_insert_before (&dsi
, stmt
, GSI_SAME_STMT
);
2253 if (gimple_debug_bind_p (stmt
))
2255 var
= gimple_debug_bind_get_var (stmt
);
2256 if (single_pred_p (e
->dest
))
2258 value
= gimple_debug_bind_get_value (stmt
);
2259 value
= unshare_expr (value
);
2263 new_stmt
= gimple_build_debug_bind (var
, value
, stmt
);
2265 else if (gimple_debug_source_bind_p (stmt
))
2267 var
= gimple_debug_source_bind_get_var (stmt
);
2268 value
= gimple_debug_source_bind_get_value (stmt
);
2269 new_stmt
= gimple_build_debug_source_bind (var
, value
, stmt
);
2273 gsi_insert_before (&dsi
, new_stmt
, GSI_SAME_STMT
);
2274 id
->debug_stmts
.safe_push (new_stmt
);
2280 /* Make a copy of the sub-loops of SRC_PARENT and place them
2281 as siblings of DEST_PARENT. */
2284 copy_loops (copy_body_data
*id
,
2285 struct loop
*dest_parent
, struct loop
*src_parent
)
2287 struct loop
*src_loop
= src_parent
->inner
;
2290 if (!id
->blocks_to_copy
2291 || bitmap_bit_p (id
->blocks_to_copy
, src_loop
->header
->index
))
2293 struct loop
*dest_loop
= alloc_loop ();
2295 /* Assign the new loop its header and latch and associate
2296 those with the new loop. */
2297 if (src_loop
->header
!= NULL
)
2299 dest_loop
->header
= (basic_block
)src_loop
->header
->aux
;
2300 dest_loop
->header
->loop_father
= dest_loop
;
2302 if (src_loop
->latch
!= NULL
)
2304 dest_loop
->latch
= (basic_block
)src_loop
->latch
->aux
;
2305 dest_loop
->latch
->loop_father
= dest_loop
;
2308 /* Copy loop meta-data. */
2309 copy_loop_info (src_loop
, dest_loop
);
2311 /* Finally place it into the loop array and the loop tree. */
2312 place_new_loop (cfun
, dest_loop
);
2313 flow_loop_tree_node_add (dest_parent
, dest_loop
);
2315 if (src_loop
->simduid
)
2317 dest_loop
->simduid
= remap_decl (src_loop
->simduid
, id
);
2318 cfun
->has_simduid_loops
= true;
2320 if (src_loop
->force_vect
)
2322 dest_loop
->force_vect
= true;
2323 cfun
->has_force_vect_loops
= true;
2327 copy_loops (id
, dest_loop
, src_loop
);
2329 src_loop
= src_loop
->next
;
2333 /* Call cgraph_redirect_edge_call_stmt_to_callee on all calls in BB */
2336 redirect_all_calls (copy_body_data
* id
, basic_block bb
)
2338 gimple_stmt_iterator si
;
2339 for (si
= gsi_start_bb (bb
); !gsi_end_p (si
); gsi_next (&si
))
2341 if (is_gimple_call (gsi_stmt (si
)))
2343 struct cgraph_edge
*edge
= cgraph_edge (id
->dst_node
, gsi_stmt (si
));
2345 cgraph_redirect_edge_call_stmt_to_callee (edge
);
2350 /* Make a copy of the body of FN so that it can be inserted inline in
2351 another function. Walks FN via CFG, returns new fndecl. */
2354 copy_cfg_body (copy_body_data
* id
, gcov_type count
, int frequency_scale
,
2355 basic_block entry_block_map
, basic_block exit_block_map
,
2356 basic_block new_entry
)
2358 tree callee_fndecl
= id
->src_fn
;
2359 /* Original cfun for the callee, doesn't change. */
2360 struct function
*src_cfun
= DECL_STRUCT_FUNCTION (callee_fndecl
);
2361 struct function
*cfun_to_copy
;
2363 tree new_fndecl
= NULL
;
2364 bool need_debug_cleanup
= false;
2365 gcov_type count_scale
;
2367 int incoming_frequency
= 0;
2368 gcov_type incoming_count
= 0;
2370 if (ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun
)->count
)
2372 = GCOV_COMPUTE_SCALE (count
,
2373 ENTRY_BLOCK_PTR_FOR_FUNCTION (src_cfun
)->count
);
2375 count_scale
= REG_BR_PROB_BASE
;
2377 /* Register specific tree functions. */
2378 gimple_register_cfg_hooks ();
2380 /* If we are inlining just region of the function, make sure to connect new entry
2381 to ENTRY_BLOCK_PTR. Since new entry can be part of loop, we must compute
2382 frequency and probability of ENTRY_BLOCK_PTR based on the frequencies and
2383 probabilities of edges incoming from nonduplicated region. */
2389 FOR_EACH_EDGE (e
, ei
, new_entry
->preds
)
2392 incoming_frequency
+= EDGE_FREQUENCY (e
);
2393 incoming_count
+= e
->count
;
2395 incoming_count
= apply_scale (incoming_count
, count_scale
);
2397 = apply_scale ((gcov_type
)incoming_frequency
, frequency_scale
);
2398 ENTRY_BLOCK_PTR
->count
= incoming_count
;
2399 ENTRY_BLOCK_PTR
->frequency
= incoming_frequency
;
2402 /* Must have a CFG here at this point. */
2403 gcc_assert (ENTRY_BLOCK_PTR_FOR_FUNCTION
2404 (DECL_STRUCT_FUNCTION (callee_fndecl
)));
2406 cfun_to_copy
= id
->src_cfun
= DECL_STRUCT_FUNCTION (callee_fndecl
);
2408 ENTRY_BLOCK_PTR_FOR_FUNCTION (cfun_to_copy
)->aux
= entry_block_map
;
2409 EXIT_BLOCK_PTR_FOR_FUNCTION (cfun_to_copy
)->aux
= exit_block_map
;
2410 entry_block_map
->aux
= ENTRY_BLOCK_PTR_FOR_FUNCTION (cfun_to_copy
);
2411 exit_block_map
->aux
= EXIT_BLOCK_PTR_FOR_FUNCTION (cfun_to_copy
);
2413 /* Duplicate any exception-handling regions. */
2415 id
->eh_map
= duplicate_eh_regions (cfun_to_copy
, NULL
, id
->eh_lp_nr
,
2418 /* Use aux pointers to map the original blocks to copy. */
2419 FOR_EACH_BB_FN (bb
, cfun_to_copy
)
2420 if (!id
->blocks_to_copy
|| bitmap_bit_p (id
->blocks_to_copy
, bb
->index
))
2422 basic_block new_bb
= copy_bb (id
, bb
, frequency_scale
, count_scale
);
2425 new_bb
->loop_father
= entry_block_map
->loop_father
;
2428 last
= last_basic_block
;
2430 /* Now that we've duplicated the blocks, duplicate their edges. */
2431 bool can_make_abormal_goto
2432 = id
->gimple_call
&& stmt_can_make_abnormal_goto (id
->gimple_call
);
2433 FOR_ALL_BB_FN (bb
, cfun_to_copy
)
2434 if (!id
->blocks_to_copy
2435 || (bb
->index
> 0 && bitmap_bit_p (id
->blocks_to_copy
, bb
->index
)))
2436 need_debug_cleanup
|= copy_edges_for_bb (bb
, count_scale
, exit_block_map
,
2437 can_make_abormal_goto
);
2441 edge e
= make_edge (entry_block_map
, (basic_block
)new_entry
->aux
, EDGE_FALLTHRU
);
2442 e
->probability
= REG_BR_PROB_BASE
;
2443 e
->count
= incoming_count
;
2446 /* Duplicate the loop tree, if available and wanted. */
2447 if (loops_for_fn (src_cfun
) != NULL
2448 && current_loops
!= NULL
)
2450 copy_loops (id
, entry_block_map
->loop_father
,
2451 get_loop (src_cfun
, 0));
2452 /* Defer to cfgcleanup to update loop-father fields of basic-blocks. */
2453 loops_state_set (LOOPS_NEED_FIXUP
);
2456 /* If the loop tree in the source function needed fixup, mark the
2457 destination loop tree for fixup, too. */
2458 if (loops_for_fn (src_cfun
)->state
& LOOPS_NEED_FIXUP
)
2459 loops_state_set (LOOPS_NEED_FIXUP
);
2461 if (gimple_in_ssa_p (cfun
))
2462 FOR_ALL_BB_FN (bb
, cfun_to_copy
)
2463 if (!id
->blocks_to_copy
2464 || (bb
->index
> 0 && bitmap_bit_p (id
->blocks_to_copy
, bb
->index
)))
2465 copy_phis_for_bb (bb
, id
);
2467 FOR_ALL_BB_FN (bb
, cfun_to_copy
)
2470 if (need_debug_cleanup
2471 && bb
->index
!= ENTRY_BLOCK
2472 && bb
->index
!= EXIT_BLOCK
)
2473 maybe_move_debug_stmts_to_successors (id
, (basic_block
) bb
->aux
);
2474 /* Update call edge destinations. This can not be done before loop
2475 info is updated, because we may split basic blocks. */
2476 if (id
->transform_call_graph_edges
== CB_CGE_DUPLICATE
)
2477 redirect_all_calls (id
, (basic_block
)bb
->aux
);
2478 ((basic_block
)bb
->aux
)->aux
= NULL
;
2482 /* Zero out AUX fields of newly created block during EH edge
2484 for (; last
< last_basic_block
; last
++)
2486 if (need_debug_cleanup
)
2487 maybe_move_debug_stmts_to_successors (id
, BASIC_BLOCK (last
));
2488 BASIC_BLOCK (last
)->aux
= NULL
;
2489 /* Update call edge destinations. This can not be done before loop
2490 info is updated, because we may split basic blocks. */
2491 if (id
->transform_call_graph_edges
== CB_CGE_DUPLICATE
)
2492 redirect_all_calls (id
, BASIC_BLOCK (last
));
2494 entry_block_map
->aux
= NULL
;
2495 exit_block_map
->aux
= NULL
;
2499 pointer_map_destroy (id
->eh_map
);
2506 /* Copy the debug STMT using ID. We deal with these statements in a
2507 special way: if any variable in their VALUE expression wasn't
2508 remapped yet, we won't remap it, because that would get decl uids
2509 out of sync, causing codegen differences between -g and -g0. If
2510 this arises, we drop the VALUE expression altogether. */
2513 copy_debug_stmt (gimple stmt
, copy_body_data
*id
)
2516 struct walk_stmt_info wi
;
2518 if (gimple_block (stmt
))
2520 n
= (tree
*) pointer_map_contains (id
->decl_map
, gimple_block (stmt
));
2521 gimple_set_block (stmt
, n
? *n
: id
->block
);
2524 /* Remap all the operands in COPY. */
2525 memset (&wi
, 0, sizeof (wi
));
2528 processing_debug_stmt
= 1;
2530 if (gimple_debug_source_bind_p (stmt
))
2531 t
= gimple_debug_source_bind_get_var (stmt
);
2533 t
= gimple_debug_bind_get_var (stmt
);
2535 if (TREE_CODE (t
) == PARM_DECL
&& id
->debug_map
2536 && (n
= (tree
*) pointer_map_contains (id
->debug_map
, t
)))
2538 gcc_assert (TREE_CODE (*n
) == VAR_DECL
);
2541 else if (TREE_CODE (t
) == VAR_DECL
2542 && !is_global_var (t
)
2543 && !pointer_map_contains (id
->decl_map
, t
))
2544 /* T is a non-localized variable. */;
2546 walk_tree (&t
, remap_gimple_op_r
, &wi
, NULL
);
2548 if (gimple_debug_bind_p (stmt
))
2550 gimple_debug_bind_set_var (stmt
, t
);
2552 if (gimple_debug_bind_has_value_p (stmt
))
2553 walk_tree (gimple_debug_bind_get_value_ptr (stmt
),
2554 remap_gimple_op_r
, &wi
, NULL
);
2556 /* Punt if any decl couldn't be remapped. */
2557 if (processing_debug_stmt
< 0)
2558 gimple_debug_bind_reset_value (stmt
);
2560 else if (gimple_debug_source_bind_p (stmt
))
2562 gimple_debug_source_bind_set_var (stmt
, t
);
2563 walk_tree (gimple_debug_source_bind_get_value_ptr (stmt
),
2564 remap_gimple_op_r
, &wi
, NULL
);
2565 /* When inlining and source bind refers to one of the optimized
2566 away parameters, change the source bind into normal debug bind
2567 referring to the corresponding DEBUG_EXPR_DECL that should have
2568 been bound before the call stmt. */
2569 t
= gimple_debug_source_bind_get_value (stmt
);
2571 && TREE_CODE (t
) == PARM_DECL
2574 vec
<tree
, va_gc
> **debug_args
= decl_debug_args_lookup (id
->src_fn
);
2576 if (debug_args
!= NULL
)
2578 for (i
= 0; i
< vec_safe_length (*debug_args
); i
+= 2)
2579 if ((**debug_args
)[i
] == DECL_ORIGIN (t
)
2580 && TREE_CODE ((**debug_args
)[i
+ 1]) == DEBUG_EXPR_DECL
)
2582 t
= (**debug_args
)[i
+ 1];
2583 stmt
->gsbase
.subcode
= GIMPLE_DEBUG_BIND
;
2584 gimple_debug_bind_set_value (stmt
, t
);
2591 processing_debug_stmt
= 0;
2596 /* Process deferred debug stmts. In order to give values better odds
2597 of being successfully remapped, we delay the processing of debug
2598 stmts until all other stmts that might require remapping are
2602 copy_debug_stmts (copy_body_data
*id
)
2607 if (!id
->debug_stmts
.exists ())
2610 FOR_EACH_VEC_ELT (id
->debug_stmts
, i
, stmt
)
2611 copy_debug_stmt (stmt
, id
);
2613 id
->debug_stmts
.release ();
2616 /* Make a copy of the body of SRC_FN so that it can be inserted inline in
2617 another function. */
2620 copy_tree_body (copy_body_data
*id
)
2622 tree fndecl
= id
->src_fn
;
2623 tree body
= DECL_SAVED_TREE (fndecl
);
2625 walk_tree (&body
, copy_tree_body_r
, id
, NULL
);
2630 /* Make a copy of the body of FN so that it can be inserted inline in
2631 another function. */
2634 copy_body (copy_body_data
*id
, gcov_type count
, int frequency_scale
,
2635 basic_block entry_block_map
, basic_block exit_block_map
,
2636 basic_block new_entry
)
2638 tree fndecl
= id
->src_fn
;
2641 /* If this body has a CFG, walk CFG and copy. */
2642 gcc_assert (ENTRY_BLOCK_PTR_FOR_FUNCTION (DECL_STRUCT_FUNCTION (fndecl
)));
2643 body
= copy_cfg_body (id
, count
, frequency_scale
, entry_block_map
, exit_block_map
,
2645 copy_debug_stmts (id
);
2650 /* Return true if VALUE is an ADDR_EXPR of an automatic variable
2651 defined in function FN, or of a data member thereof. */
2654 self_inlining_addr_expr (tree value
, tree fn
)
2658 if (TREE_CODE (value
) != ADDR_EXPR
)
2661 var
= get_base_address (TREE_OPERAND (value
, 0));
2663 return var
&& auto_var_in_fn_p (var
, fn
);
2666 /* Append to BB a debug annotation that binds VAR to VALUE, inheriting
2667 lexical block and line number information from base_stmt, if given,
2668 or from the last stmt of the block otherwise. */
2671 insert_init_debug_bind (copy_body_data
*id
,
2672 basic_block bb
, tree var
, tree value
,
2676 gimple_stmt_iterator gsi
;
2679 if (!gimple_in_ssa_p (id
->src_cfun
))
2682 if (!MAY_HAVE_DEBUG_STMTS
)
2685 tracked_var
= target_for_debug_bind (var
);
2691 gsi
= gsi_last_bb (bb
);
2692 if (!base_stmt
&& !gsi_end_p (gsi
))
2693 base_stmt
= gsi_stmt (gsi
);
2696 note
= gimple_build_debug_bind (tracked_var
, value
, base_stmt
);
2700 if (!gsi_end_p (gsi
))
2701 gsi_insert_after (&gsi
, note
, GSI_SAME_STMT
);
2703 gsi_insert_before (&gsi
, note
, GSI_SAME_STMT
);
2710 insert_init_stmt (copy_body_data
*id
, basic_block bb
, gimple init_stmt
)
2712 /* If VAR represents a zero-sized variable, it's possible that the
2713 assignment statement may result in no gimple statements. */
2716 gimple_stmt_iterator si
= gsi_last_bb (bb
);
2718 /* We can end up with init statements that store to a non-register
2719 from a rhs with a conversion. Handle that here by forcing the
2720 rhs into a temporary. gimple_regimplify_operands is not
2721 prepared to do this for us. */
2722 if (!is_gimple_debug (init_stmt
)
2723 && !is_gimple_reg (gimple_assign_lhs (init_stmt
))
2724 && is_gimple_reg_type (TREE_TYPE (gimple_assign_lhs (init_stmt
)))
2725 && gimple_assign_rhs_class (init_stmt
) == GIMPLE_UNARY_RHS
)
2727 tree rhs
= build1 (gimple_assign_rhs_code (init_stmt
),
2728 gimple_expr_type (init_stmt
),
2729 gimple_assign_rhs1 (init_stmt
));
2730 rhs
= force_gimple_operand_gsi (&si
, rhs
, true, NULL_TREE
, false,
2732 gimple_assign_set_rhs_code (init_stmt
, TREE_CODE (rhs
));
2733 gimple_assign_set_rhs1 (init_stmt
, rhs
);
2735 gsi_insert_after (&si
, init_stmt
, GSI_NEW_STMT
);
2736 gimple_regimplify_operands (init_stmt
, &si
);
2738 if (!is_gimple_debug (init_stmt
) && MAY_HAVE_DEBUG_STMTS
)
2740 tree def
= gimple_assign_lhs (init_stmt
);
2741 insert_init_debug_bind (id
, bb
, def
, def
, init_stmt
);
2746 /* Initialize parameter P with VALUE. If needed, produce init statement
2747 at the end of BB. When BB is NULL, we return init statement to be
2750 setup_one_parameter (copy_body_data
*id
, tree p
, tree value
, tree fn
,
2751 basic_block bb
, tree
*vars
)
2753 gimple init_stmt
= NULL
;
2756 tree def
= (gimple_in_ssa_p (cfun
)
2757 ? ssa_default_def (id
->src_cfun
, p
) : NULL
);
2760 && value
!= error_mark_node
2761 && !useless_type_conversion_p (TREE_TYPE (p
), TREE_TYPE (value
)))
2763 /* If we can match up types by promotion/demotion do so. */
2764 if (fold_convertible_p (TREE_TYPE (p
), value
))
2765 rhs
= fold_convert (TREE_TYPE (p
), value
);
2768 /* ??? For valid programs we should not end up here.
2769 Still if we end up with truly mismatched types here, fall back
2770 to using a VIEW_CONVERT_EXPR or a literal zero to not leak invalid
2771 GIMPLE to the following passes. */
2772 if (!is_gimple_reg_type (TREE_TYPE (value
))
2773 || TYPE_SIZE (TREE_TYPE (p
)) == TYPE_SIZE (TREE_TYPE (value
)))
2774 rhs
= fold_build1 (VIEW_CONVERT_EXPR
, TREE_TYPE (p
), value
);
2776 rhs
= build_zero_cst (TREE_TYPE (p
));
2780 /* Make an equivalent VAR_DECL. Note that we must NOT remap the type
2781 here since the type of this decl must be visible to the calling
2783 var
= copy_decl_to_var (p
, id
);
2785 /* Declare this new variable. */
2786 DECL_CHAIN (var
) = *vars
;
2789 /* Make gimplifier happy about this variable. */
2790 DECL_SEEN_IN_BIND_EXPR_P (var
) = 1;
2792 /* If the parameter is never assigned to, has no SSA_NAMEs created,
2793 we would not need to create a new variable here at all, if it
2794 weren't for debug info. Still, we can just use the argument
2796 if (TREE_READONLY (p
)
2797 && !TREE_ADDRESSABLE (p
)
2798 && value
&& !TREE_SIDE_EFFECTS (value
)
2801 /* We may produce non-gimple trees by adding NOPs or introduce
2802 invalid sharing when operand is not really constant.
2803 It is not big deal to prohibit constant propagation here as
2804 we will constant propagate in DOM1 pass anyway. */
2805 if (is_gimple_min_invariant (value
)
2806 && useless_type_conversion_p (TREE_TYPE (p
),
2808 /* We have to be very careful about ADDR_EXPR. Make sure
2809 the base variable isn't a local variable of the inlined
2810 function, e.g., when doing recursive inlining, direct or
2811 mutually-recursive or whatever, which is why we don't
2812 just test whether fn == current_function_decl. */
2813 && ! self_inlining_addr_expr (value
, fn
))
2815 insert_decl_map (id
, p
, value
);
2816 insert_debug_decl_map (id
, p
, var
);
2817 return insert_init_debug_bind (id
, bb
, var
, value
, NULL
);
2821 /* Register the VAR_DECL as the equivalent for the PARM_DECL;
2822 that way, when the PARM_DECL is encountered, it will be
2823 automatically replaced by the VAR_DECL. */
2824 insert_decl_map (id
, p
, var
);
2826 /* Even if P was TREE_READONLY, the new VAR should not be.
2827 In the original code, we would have constructed a
2828 temporary, and then the function body would have never
2829 changed the value of P. However, now, we will be
2830 constructing VAR directly. The constructor body may
2831 change its value multiple times as it is being
2832 constructed. Therefore, it must not be TREE_READONLY;
2833 the back-end assumes that TREE_READONLY variable is
2834 assigned to only once. */
2835 if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (p
)))
2836 TREE_READONLY (var
) = 0;
2838 /* If there is no setup required and we are in SSA, take the easy route
2839 replacing all SSA names representing the function parameter by the
2840 SSA name passed to function.
2842 We need to construct map for the variable anyway as it might be used
2843 in different SSA names when parameter is set in function.
2845 Do replacement at -O0 for const arguments replaced by constant.
2846 This is important for builtin_constant_p and other construct requiring
2847 constant argument to be visible in inlined function body. */
2848 if (gimple_in_ssa_p (cfun
) && rhs
&& def
&& is_gimple_reg (p
)
2850 || (TREE_READONLY (p
)
2851 && is_gimple_min_invariant (rhs
)))
2852 && (TREE_CODE (rhs
) == SSA_NAME
2853 || is_gimple_min_invariant (rhs
))
2854 && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (def
))
2856 insert_decl_map (id
, def
, rhs
);
2857 return insert_init_debug_bind (id
, bb
, var
, rhs
, NULL
);
2860 /* If the value of argument is never used, don't care about initializing
2862 if (optimize
&& gimple_in_ssa_p (cfun
) && !def
&& is_gimple_reg (p
))
2864 gcc_assert (!value
|| !TREE_SIDE_EFFECTS (value
));
2865 return insert_init_debug_bind (id
, bb
, var
, rhs
, NULL
);
2868 /* Initialize this VAR_DECL from the equivalent argument. Convert
2869 the argument to the proper type in case it was promoted. */
2872 if (rhs
== error_mark_node
)
2874 insert_decl_map (id
, p
, var
);
2875 return insert_init_debug_bind (id
, bb
, var
, rhs
, NULL
);
2878 STRIP_USELESS_TYPE_CONVERSION (rhs
);
2880 /* If we are in SSA form properly remap the default definition
2881 or assign to a dummy SSA name if the parameter is unused and
2882 we are not optimizing. */
2883 if (gimple_in_ssa_p (cfun
) && is_gimple_reg (p
))
2887 def
= remap_ssa_name (def
, id
);
2888 init_stmt
= gimple_build_assign (def
, rhs
);
2889 SSA_NAME_IS_DEFAULT_DEF (def
) = 0;
2890 set_ssa_default_def (cfun
, var
, NULL
);
2894 def
= make_ssa_name (var
, NULL
);
2895 init_stmt
= gimple_build_assign (def
, rhs
);
2899 init_stmt
= gimple_build_assign (var
, rhs
);
2901 if (bb
&& init_stmt
)
2902 insert_init_stmt (id
, bb
, init_stmt
);
2907 /* Generate code to initialize the parameters of the function at the
2908 top of the stack in ID from the GIMPLE_CALL STMT. */
2911 initialize_inlined_parameters (copy_body_data
*id
, gimple stmt
,
2912 tree fn
, basic_block bb
)
2917 tree vars
= NULL_TREE
;
2918 tree static_chain
= gimple_call_chain (stmt
);
2920 /* Figure out what the parameters are. */
2921 parms
= DECL_ARGUMENTS (fn
);
2923 /* Loop through the parameter declarations, replacing each with an
2924 equivalent VAR_DECL, appropriately initialized. */
2925 for (p
= parms
, i
= 0; p
; p
= DECL_CHAIN (p
), i
++)
2928 val
= i
< gimple_call_num_args (stmt
) ? gimple_call_arg (stmt
, i
) : NULL
;
2929 setup_one_parameter (id
, p
, val
, fn
, bb
, &vars
);
2931 /* After remapping parameters remap their types. This has to be done
2932 in a second loop over all parameters to appropriately remap
2933 variable sized arrays when the size is specified in a
2934 parameter following the array. */
2935 for (p
= parms
, i
= 0; p
; p
= DECL_CHAIN (p
), i
++)
2937 tree
*varp
= (tree
*) pointer_map_contains (id
->decl_map
, p
);
2939 && TREE_CODE (*varp
) == VAR_DECL
)
2941 tree def
= (gimple_in_ssa_p (cfun
) && is_gimple_reg (p
)
2942 ? ssa_default_def (id
->src_cfun
, p
) : NULL
);
2944 TREE_TYPE (var
) = remap_type (TREE_TYPE (var
), id
);
2945 /* Also remap the default definition if it was remapped
2946 to the default definition of the parameter replacement
2947 by the parameter setup. */
2950 tree
*defp
= (tree
*) pointer_map_contains (id
->decl_map
, def
);
2952 && TREE_CODE (*defp
) == SSA_NAME
2953 && SSA_NAME_VAR (*defp
) == var
)
2954 TREE_TYPE (*defp
) = TREE_TYPE (var
);
2959 /* Initialize the static chain. */
2960 p
= DECL_STRUCT_FUNCTION (fn
)->static_chain_decl
;
2961 gcc_assert (fn
!= current_function_decl
);
2964 /* No static chain? Seems like a bug in tree-nested.c. */
2965 gcc_assert (static_chain
);
2967 setup_one_parameter (id
, p
, static_chain
, fn
, bb
, &vars
);
2970 declare_inline_vars (id
->block
, vars
);
2974 /* Declare a return variable to replace the RESULT_DECL for the
2975 function we are calling. An appropriate DECL_STMT is returned.
2976 The USE_STMT is filled to contain a use of the declaration to
2977 indicate the return value of the function.
2979 RETURN_SLOT, if non-null is place where to store the result. It
2980 is set only for CALL_EXPR_RETURN_SLOT_OPT. MODIFY_DEST, if non-null,
2981 was the LHS of the MODIFY_EXPR to which this call is the RHS.
2983 The return value is a (possibly null) value that holds the result
2984 as seen by the caller. */
2987 declare_return_variable (copy_body_data
*id
, tree return_slot
, tree modify_dest
,
2988 basic_block entry_bb
)
2990 tree callee
= id
->src_fn
;
2991 tree result
= DECL_RESULT (callee
);
2992 tree callee_type
= TREE_TYPE (result
);
2996 /* Handle type-mismatches in the function declaration return type
2997 vs. the call expression. */
2999 caller_type
= TREE_TYPE (modify_dest
);
3001 caller_type
= TREE_TYPE (TREE_TYPE (callee
));
3003 /* We don't need to do anything for functions that don't return anything. */
3004 if (VOID_TYPE_P (callee_type
))
3007 /* If there was a return slot, then the return value is the
3008 dereferenced address of that object. */
3011 /* The front end shouldn't have used both return_slot and
3012 a modify expression. */
3013 gcc_assert (!modify_dest
);
3014 if (DECL_BY_REFERENCE (result
))
3016 tree return_slot_addr
= build_fold_addr_expr (return_slot
);
3017 STRIP_USELESS_TYPE_CONVERSION (return_slot_addr
);
3019 /* We are going to construct *&return_slot and we can't do that
3020 for variables believed to be not addressable.
3022 FIXME: This check possibly can match, because values returned
3023 via return slot optimization are not believed to have address
3024 taken by alias analysis. */
3025 gcc_assert (TREE_CODE (return_slot
) != SSA_NAME
);
3026 var
= return_slot_addr
;
3031 gcc_assert (TREE_CODE (var
) != SSA_NAME
);
3032 TREE_ADDRESSABLE (var
) |= TREE_ADDRESSABLE (result
);
3034 if ((TREE_CODE (TREE_TYPE (result
)) == COMPLEX_TYPE
3035 || TREE_CODE (TREE_TYPE (result
)) == VECTOR_TYPE
)
3036 && !DECL_GIMPLE_REG_P (result
)
3038 DECL_GIMPLE_REG_P (var
) = 0;
3043 /* All types requiring non-trivial constructors should have been handled. */
3044 gcc_assert (!TREE_ADDRESSABLE (callee_type
));
3046 /* Attempt to avoid creating a new temporary variable. */
3048 && TREE_CODE (modify_dest
) != SSA_NAME
)
3050 bool use_it
= false;
3052 /* We can't use MODIFY_DEST if there's type promotion involved. */
3053 if (!useless_type_conversion_p (callee_type
, caller_type
))
3056 /* ??? If we're assigning to a variable sized type, then we must
3057 reuse the destination variable, because we've no good way to
3058 create variable sized temporaries at this point. */
3059 else if (TREE_CODE (TYPE_SIZE_UNIT (caller_type
)) != INTEGER_CST
)
3062 /* If the callee cannot possibly modify MODIFY_DEST, then we can
3063 reuse it as the result of the call directly. Don't do this if
3064 it would promote MODIFY_DEST to addressable. */
3065 else if (TREE_ADDRESSABLE (result
))
3069 tree base_m
= get_base_address (modify_dest
);
3071 /* If the base isn't a decl, then it's a pointer, and we don't
3072 know where that's going to go. */
3073 if (!DECL_P (base_m
))
3075 else if (is_global_var (base_m
))
3077 else if ((TREE_CODE (TREE_TYPE (result
)) == COMPLEX_TYPE
3078 || TREE_CODE (TREE_TYPE (result
)) == VECTOR_TYPE
)
3079 && !DECL_GIMPLE_REG_P (result
)
3080 && DECL_GIMPLE_REG_P (base_m
))
3082 else if (!TREE_ADDRESSABLE (base_m
))
3094 gcc_assert (TREE_CODE (TYPE_SIZE_UNIT (callee_type
)) == INTEGER_CST
);
3096 var
= copy_result_decl_to_var (result
, id
);
3097 DECL_SEEN_IN_BIND_EXPR_P (var
) = 1;
3099 /* Do not have the rest of GCC warn about this variable as it should
3100 not be visible to the user. */
3101 TREE_NO_WARNING (var
) = 1;
3103 declare_inline_vars (id
->block
, var
);
3105 /* Build the use expr. If the return type of the function was
3106 promoted, convert it back to the expected type. */
3108 if (!useless_type_conversion_p (caller_type
, TREE_TYPE (var
)))
3110 /* If we can match up types by promotion/demotion do so. */
3111 if (fold_convertible_p (caller_type
, var
))
3112 use
= fold_convert (caller_type
, var
);
3115 /* ??? For valid programs we should not end up here.
3116 Still if we end up with truly mismatched types here, fall back
3117 to using a MEM_REF to not leak invalid GIMPLE to the following
3119 /* Prevent var from being written into SSA form. */
3120 if (TREE_CODE (TREE_TYPE (var
)) == VECTOR_TYPE
3121 || TREE_CODE (TREE_TYPE (var
)) == COMPLEX_TYPE
)
3122 DECL_GIMPLE_REG_P (var
) = false;
3123 else if (is_gimple_reg_type (TREE_TYPE (var
)))
3124 TREE_ADDRESSABLE (var
) = true;
3125 use
= fold_build2 (MEM_REF
, caller_type
,
3126 build_fold_addr_expr (var
),
3127 build_int_cst (ptr_type_node
, 0));
3131 STRIP_USELESS_TYPE_CONVERSION (use
);
3133 if (DECL_BY_REFERENCE (result
))
3135 TREE_ADDRESSABLE (var
) = 1;
3136 var
= build_fold_addr_expr (var
);
3140 /* Register the VAR_DECL as the equivalent for the RESULT_DECL; that
3141 way, when the RESULT_DECL is encountered, it will be
3142 automatically replaced by the VAR_DECL.
3144 When returning by reference, ensure that RESULT_DECL remaps to
3146 if (DECL_BY_REFERENCE (result
)
3147 && !is_gimple_val (var
))
3149 tree temp
= create_tmp_var (TREE_TYPE (result
), "retvalptr");
3150 insert_decl_map (id
, result
, temp
);
3151 /* When RESULT_DECL is in SSA form, we need to remap and initialize
3152 it's default_def SSA_NAME. */
3153 if (gimple_in_ssa_p (id
->src_cfun
)
3154 && is_gimple_reg (result
))
3156 temp
= make_ssa_name (temp
, NULL
);
3157 insert_decl_map (id
, ssa_default_def (id
->src_cfun
, result
), temp
);
3159 insert_init_stmt (id
, entry_bb
, gimple_build_assign (temp
, var
));
3162 insert_decl_map (id
, result
, var
);
3164 /* Remember this so we can ignore it in remap_decls. */
3170 /* Callback through walk_tree. Determine if a DECL_INITIAL makes reference
3171 to a local label. */
3174 has_label_address_in_static_1 (tree
*nodep
, int *walk_subtrees
, void *fnp
)
3177 tree fn
= (tree
) fnp
;
3179 if (TREE_CODE (node
) == LABEL_DECL
&& DECL_CONTEXT (node
) == fn
)
3188 /* Determine if the function can be copied. If so return NULL. If
3189 not return a string describng the reason for failure. */
3192 copy_forbidden (struct function
*fun
, tree fndecl
)
3194 const char *reason
= fun
->cannot_be_copied_reason
;
3198 /* Only examine the function once. */
3199 if (fun
->cannot_be_copied_set
)
3202 /* We cannot copy a function that receives a non-local goto
3203 because we cannot remap the destination label used in the
3204 function that is performing the non-local goto. */
3205 /* ??? Actually, this should be possible, if we work at it.
3206 No doubt there's just a handful of places that simply
3207 assume it doesn't happen and don't substitute properly. */
3208 if (fun
->has_nonlocal_label
)
3210 reason
= G_("function %q+F can never be copied "
3211 "because it receives a non-local goto");
3215 FOR_EACH_LOCAL_DECL (fun
, ix
, decl
)
3216 if (TREE_CODE (decl
) == VAR_DECL
3217 && TREE_STATIC (decl
)
3218 && !DECL_EXTERNAL (decl
)
3219 && DECL_INITIAL (decl
)
3220 && walk_tree_without_duplicates (&DECL_INITIAL (decl
),
3221 has_label_address_in_static_1
,
3224 reason
= G_("function %q+F can never be copied because it saves "
3225 "address of local label in a static variable");
3230 fun
->cannot_be_copied_reason
= reason
;
3231 fun
->cannot_be_copied_set
= true;
3236 static const char *inline_forbidden_reason
;
3238 /* A callback for walk_gimple_seq to handle statements. Returns non-null
3239 iff a function can not be inlined. Also sets the reason why. */
3242 inline_forbidden_p_stmt (gimple_stmt_iterator
*gsi
, bool *handled_ops_p
,
3243 struct walk_stmt_info
*wip
)
3245 tree fn
= (tree
) wip
->info
;
3247 gimple stmt
= gsi_stmt (*gsi
);
3249 switch (gimple_code (stmt
))
3252 /* Refuse to inline alloca call unless user explicitly forced so as
3253 this may change program's memory overhead drastically when the
3254 function using alloca is called in loop. In GCC present in
3255 SPEC2000 inlining into schedule_block cause it to require 2GB of
3256 RAM instead of 256MB. Don't do so for alloca calls emitted for
3257 VLA objects as those can't cause unbounded growth (they're always
3258 wrapped inside stack_save/stack_restore regions. */
3259 if (gimple_alloca_call_p (stmt
)
3260 && !gimple_call_alloca_for_var_p (stmt
)
3261 && !lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn
)))
3263 inline_forbidden_reason
3264 = G_("function %q+F can never be inlined because it uses "
3265 "alloca (override using the always_inline attribute)");
3266 *handled_ops_p
= true;
3270 t
= gimple_call_fndecl (stmt
);
3274 /* We cannot inline functions that call setjmp. */
3275 if (setjmp_call_p (t
))
3277 inline_forbidden_reason
3278 = G_("function %q+F can never be inlined because it uses setjmp");
3279 *handled_ops_p
= true;
3283 if (DECL_BUILT_IN_CLASS (t
) == BUILT_IN_NORMAL
)
3284 switch (DECL_FUNCTION_CODE (t
))
3286 /* We cannot inline functions that take a variable number of
3288 case BUILT_IN_VA_START
:
3289 case BUILT_IN_NEXT_ARG
:
3290 case BUILT_IN_VA_END
:
3291 inline_forbidden_reason
3292 = G_("function %q+F can never be inlined because it "
3293 "uses variable argument lists");
3294 *handled_ops_p
= true;
3297 case BUILT_IN_LONGJMP
:
3298 /* We can't inline functions that call __builtin_longjmp at
3299 all. The non-local goto machinery really requires the
3300 destination be in a different function. If we allow the
3301 function calling __builtin_longjmp to be inlined into the
3302 function calling __builtin_setjmp, Things will Go Awry. */
3303 inline_forbidden_reason
3304 = G_("function %q+F can never be inlined because "
3305 "it uses setjmp-longjmp exception handling");
3306 *handled_ops_p
= true;
3309 case BUILT_IN_NONLOCAL_GOTO
:
3311 inline_forbidden_reason
3312 = G_("function %q+F can never be inlined because "
3313 "it uses non-local goto");
3314 *handled_ops_p
= true;
3317 case BUILT_IN_RETURN
:
3318 case BUILT_IN_APPLY_ARGS
:
3319 /* If a __builtin_apply_args caller would be inlined,
3320 it would be saving arguments of the function it has
3321 been inlined into. Similarly __builtin_return would
3322 return from the function the inline has been inlined into. */
3323 inline_forbidden_reason
3324 = G_("function %q+F can never be inlined because "
3325 "it uses __builtin_return or __builtin_apply_args");
3326 *handled_ops_p
= true;
3335 t
= gimple_goto_dest (stmt
);
3337 /* We will not inline a function which uses computed goto. The
3338 addresses of its local labels, which may be tucked into
3339 global storage, are of course not constant across
3340 instantiations, which causes unexpected behavior. */
3341 if (TREE_CODE (t
) != LABEL_DECL
)
3343 inline_forbidden_reason
3344 = G_("function %q+F can never be inlined "
3345 "because it contains a computed goto");
3346 *handled_ops_p
= true;
3355 *handled_ops_p
= false;
3359 /* Return true if FNDECL is a function that cannot be inlined into
3363 inline_forbidden_p (tree fndecl
)
3365 struct function
*fun
= DECL_STRUCT_FUNCTION (fndecl
);
3366 struct walk_stmt_info wi
;
3367 struct pointer_set_t
*visited_nodes
;
3369 bool forbidden_p
= false;
3371 /* First check for shared reasons not to copy the code. */
3372 inline_forbidden_reason
= copy_forbidden (fun
, fndecl
);
3373 if (inline_forbidden_reason
!= NULL
)
3376 /* Next, walk the statements of the function looking for
3377 constraucts we can't handle, or are non-optimal for inlining. */
3378 visited_nodes
= pointer_set_create ();
3379 memset (&wi
, 0, sizeof (wi
));
3380 wi
.info
= (void *) fndecl
;
3381 wi
.pset
= visited_nodes
;
3383 FOR_EACH_BB_FN (bb
, fun
)
3386 gimple_seq seq
= bb_seq (bb
);
3387 ret
= walk_gimple_seq (seq
, inline_forbidden_p_stmt
, NULL
, &wi
);
3388 forbidden_p
= (ret
!= NULL
);
3393 pointer_set_destroy (visited_nodes
);
3397 /* Return false if the function FNDECL cannot be inlined on account of its
3398 attributes, true otherwise. */
3400 function_attribute_inlinable_p (const_tree fndecl
)
3402 if (targetm
.attribute_table
)
3406 for (a
= DECL_ATTRIBUTES (fndecl
); a
; a
= TREE_CHAIN (a
))
3408 const_tree name
= TREE_PURPOSE (a
);
3411 for (i
= 0; targetm
.attribute_table
[i
].name
!= NULL
; i
++)
3412 if (is_attribute_p (targetm
.attribute_table
[i
].name
, name
))
3413 return targetm
.function_attribute_inlinable_p (fndecl
);
3420 /* Returns nonzero if FN is a function that does not have any
3421 fundamental inline blocking properties. */
3424 tree_inlinable_function_p (tree fn
)
3426 bool inlinable
= true;
3430 /* If we've already decided this function shouldn't be inlined,
3431 there's no need to check again. */
3432 if (DECL_UNINLINABLE (fn
))
3435 /* We only warn for functions declared `inline' by the user. */
3436 do_warning
= (warn_inline
3437 && DECL_DECLARED_INLINE_P (fn
)
3438 && !DECL_NO_INLINE_WARNING_P (fn
)
3439 && !DECL_IN_SYSTEM_HEADER (fn
));
3441 always_inline
= lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn
));
3444 && always_inline
== NULL
)
3447 warning (OPT_Winline
, "function %q+F can never be inlined because it "
3448 "is suppressed using -fno-inline", fn
);
3452 else if (!function_attribute_inlinable_p (fn
))
3455 warning (OPT_Winline
, "function %q+F can never be inlined because it "
3456 "uses attributes conflicting with inlining", fn
);
3460 else if (inline_forbidden_p (fn
))
3462 /* See if we should warn about uninlinable functions. Previously,
3463 some of these warnings would be issued while trying to expand
3464 the function inline, but that would cause multiple warnings
3465 about functions that would for example call alloca. But since
3466 this a property of the function, just one warning is enough.
3467 As a bonus we can now give more details about the reason why a
3468 function is not inlinable. */
3470 error (inline_forbidden_reason
, fn
);
3471 else if (do_warning
)
3472 warning (OPT_Winline
, inline_forbidden_reason
, fn
);
3477 /* Squirrel away the result so that we don't have to check again. */
3478 DECL_UNINLINABLE (fn
) = !inlinable
;
3483 /* Estimate the cost of a memory move. Use machine dependent
3484 word size and take possible memcpy call into account. */
3487 estimate_move_cost (tree type
)
3491 gcc_assert (!VOID_TYPE_P (type
));
3493 if (TREE_CODE (type
) == VECTOR_TYPE
)
3495 enum machine_mode inner
= TYPE_MODE (TREE_TYPE (type
));
3496 enum machine_mode simd
3497 = targetm
.vectorize
.preferred_simd_mode (inner
);
3498 int simd_mode_size
= GET_MODE_SIZE (simd
);
3499 return ((GET_MODE_SIZE (TYPE_MODE (type
)) + simd_mode_size
- 1)
3503 size
= int_size_in_bytes (type
);
3505 if (size
< 0 || size
> MOVE_MAX_PIECES
* MOVE_RATIO (!optimize_size
))
3506 /* Cost of a memcpy call, 3 arguments and the call. */
3509 return ((size
+ MOVE_MAX_PIECES
- 1) / MOVE_MAX_PIECES
);
3512 /* Returns cost of operation CODE, according to WEIGHTS */
3515 estimate_operator_cost (enum tree_code code
, eni_weights
*weights
,
3516 tree op1 ATTRIBUTE_UNUSED
, tree op2
)
3520 /* These are "free" conversions, or their presumed cost
3521 is folded into other operations. */
3526 case VIEW_CONVERT_EXPR
:
3529 /* Assign cost of 1 to usual operations.
3530 ??? We may consider mapping RTL costs to this. */
3536 case POINTER_PLUS_EXPR
:
3539 case MULT_HIGHPART_EXPR
:
3542 case ADDR_SPACE_CONVERT_EXPR
:
3543 case FIXED_CONVERT_EXPR
:
3544 case FIX_TRUNC_EXPR
:
3556 case VEC_LSHIFT_EXPR
:
3557 case VEC_RSHIFT_EXPR
:
3564 case TRUTH_ANDIF_EXPR
:
3565 case TRUTH_ORIF_EXPR
:
3566 case TRUTH_AND_EXPR
:
3568 case TRUTH_XOR_EXPR
:
3569 case TRUTH_NOT_EXPR
:
3578 case UNORDERED_EXPR
:
3589 case PREDECREMENT_EXPR
:
3590 case PREINCREMENT_EXPR
:
3591 case POSTDECREMENT_EXPR
:
3592 case POSTINCREMENT_EXPR
:
3594 case REALIGN_LOAD_EXPR
:
3596 case REDUC_MAX_EXPR
:
3597 case REDUC_MIN_EXPR
:
3598 case REDUC_PLUS_EXPR
:
3599 case WIDEN_SUM_EXPR
:
3600 case WIDEN_MULT_EXPR
:
3602 case WIDEN_MULT_PLUS_EXPR
:
3603 case WIDEN_MULT_MINUS_EXPR
:
3604 case WIDEN_LSHIFT_EXPR
:
3606 case VEC_WIDEN_MULT_HI_EXPR
:
3607 case VEC_WIDEN_MULT_LO_EXPR
:
3608 case VEC_WIDEN_MULT_EVEN_EXPR
:
3609 case VEC_WIDEN_MULT_ODD_EXPR
:
3610 case VEC_UNPACK_HI_EXPR
:
3611 case VEC_UNPACK_LO_EXPR
:
3612 case VEC_UNPACK_FLOAT_HI_EXPR
:
3613 case VEC_UNPACK_FLOAT_LO_EXPR
:
3614 case VEC_PACK_TRUNC_EXPR
:
3615 case VEC_PACK_SAT_EXPR
:
3616 case VEC_PACK_FIX_TRUNC_EXPR
:
3617 case VEC_WIDEN_LSHIFT_HI_EXPR
:
3618 case VEC_WIDEN_LSHIFT_LO_EXPR
:
3622 /* Few special cases of expensive operations. This is useful
3623 to avoid inlining on functions having too many of these. */
3624 case TRUNC_DIV_EXPR
:
3626 case FLOOR_DIV_EXPR
:
3627 case ROUND_DIV_EXPR
:
3628 case EXACT_DIV_EXPR
:
3629 case TRUNC_MOD_EXPR
:
3631 case FLOOR_MOD_EXPR
:
3632 case ROUND_MOD_EXPR
:
3634 if (TREE_CODE (op2
) != INTEGER_CST
)
3635 return weights
->div_mod_cost
;
3639 /* We expect a copy assignment with no operator. */
3640 gcc_assert (get_gimple_rhs_class (code
) == GIMPLE_SINGLE_RHS
);
3646 /* Estimate number of instructions that will be created by expanding
3647 the statements in the statement sequence STMTS.
3648 WEIGHTS contains weights attributed to various constructs. */
3651 int estimate_num_insns_seq (gimple_seq stmts
, eni_weights
*weights
)
3654 gimple_stmt_iterator gsi
;
3657 for (gsi
= gsi_start (stmts
); !gsi_end_p (gsi
); gsi_next (&gsi
))
3658 cost
+= estimate_num_insns (gsi_stmt (gsi
), weights
);
3664 /* Estimate number of instructions that will be created by expanding STMT.
3665 WEIGHTS contains weights attributed to various constructs. */
3668 estimate_num_insns (gimple stmt
, eni_weights
*weights
)
3671 enum gimple_code code
= gimple_code (stmt
);
3678 /* Try to estimate the cost of assignments. We have three cases to
3680 1) Simple assignments to registers;
3681 2) Stores to things that must live in memory. This includes
3682 "normal" stores to scalars, but also assignments of large
3683 structures, or constructors of big arrays;
3685 Let us look at the first two cases, assuming we have "a = b + C":
3686 <GIMPLE_ASSIGN <var_decl "a">
3687 <plus_expr <var_decl "b"> <constant C>>
3688 If "a" is a GIMPLE register, the assignment to it is free on almost
3689 any target, because "a" usually ends up in a real register. Hence
3690 the only cost of this expression comes from the PLUS_EXPR, and we
3691 can ignore the GIMPLE_ASSIGN.
3692 If "a" is not a GIMPLE register, the assignment to "a" will most
3693 likely be a real store, so the cost of the GIMPLE_ASSIGN is the cost
3694 of moving something into "a", which we compute using the function
3695 estimate_move_cost. */
3696 if (gimple_clobber_p (stmt
))
3697 return 0; /* ={v} {CLOBBER} stmt expands to nothing. */
3699 lhs
= gimple_assign_lhs (stmt
);
3700 rhs
= gimple_assign_rhs1 (stmt
);
3704 /* Account for the cost of moving to / from memory. */
3705 if (gimple_store_p (stmt
))
3706 cost
+= estimate_move_cost (TREE_TYPE (lhs
));
3707 if (gimple_assign_load_p (stmt
))
3708 cost
+= estimate_move_cost (TREE_TYPE (rhs
));
3710 cost
+= estimate_operator_cost (gimple_assign_rhs_code (stmt
), weights
,
3711 gimple_assign_rhs1 (stmt
),
3712 get_gimple_rhs_class (gimple_assign_rhs_code (stmt
))
3713 == GIMPLE_BINARY_RHS
3714 ? gimple_assign_rhs2 (stmt
) : NULL
);
3718 cost
= 1 + estimate_operator_cost (gimple_cond_code (stmt
), weights
,
3719 gimple_op (stmt
, 0),
3720 gimple_op (stmt
, 1));
3724 /* Take into account cost of the switch + guess 2 conditional jumps for
3727 TODO: once the switch expansion logic is sufficiently separated, we can
3728 do better job on estimating cost of the switch. */
3729 if (weights
->time_based
)
3730 cost
= floor_log2 (gimple_switch_num_labels (stmt
)) * 2;
3732 cost
= gimple_switch_num_labels (stmt
) * 2;
3737 tree decl
= gimple_call_fndecl (stmt
);
3738 struct cgraph_node
*node
= NULL
;
3740 /* Do not special case builtins where we see the body.
3741 This just confuse inliner. */
3742 if (!decl
|| !(node
= cgraph_get_node (decl
)) || node
->symbol
.definition
)
3744 /* For buitins that are likely expanded to nothing or
3745 inlined do not account operand costs. */
3746 else if (is_simple_builtin (decl
))
3748 else if (is_inexpensive_builtin (decl
))
3749 return weights
->target_builtin_call_cost
;
3750 else if (DECL_BUILT_IN_CLASS (decl
) == BUILT_IN_NORMAL
)
3752 /* We canonicalize x * x to pow (x, 2.0) with -ffast-math, so
3753 specialize the cheap expansion we do here.
3754 ??? This asks for a more general solution. */
3755 switch (DECL_FUNCTION_CODE (decl
))
3760 if (TREE_CODE (gimple_call_arg (stmt
, 1)) == REAL_CST
3761 && REAL_VALUES_EQUAL
3762 (TREE_REAL_CST (gimple_call_arg (stmt
, 1)), dconst2
))
3763 return estimate_operator_cost (MULT_EXPR
, weights
,
3764 gimple_call_arg (stmt
, 0),
3765 gimple_call_arg (stmt
, 0));
3773 cost
= node
? weights
->call_cost
: weights
->indirect_call_cost
;
3774 if (gimple_call_lhs (stmt
))
3775 cost
+= estimate_move_cost (TREE_TYPE (gimple_call_lhs (stmt
)));
3776 for (i
= 0; i
< gimple_call_num_args (stmt
); i
++)
3778 tree arg
= gimple_call_arg (stmt
, i
);
3779 cost
+= estimate_move_cost (TREE_TYPE (arg
));
3785 return weights
->return_cost
;
3791 case GIMPLE_PREDICT
:
3797 int count
= asm_str_count (gimple_asm_string (stmt
));
3798 /* 1000 means infinity. This avoids overflows later
3799 with very long asm statements. */
3806 /* This is either going to be an external function call with one
3807 argument, or two register copy statements plus a goto. */
3810 case GIMPLE_EH_DISPATCH
:
3811 /* ??? This is going to turn into a switch statement. Ideally
3812 we'd have a look at the eh region and estimate the number of
3817 return estimate_num_insns_seq (gimple_bind_body (stmt
), weights
);
3819 case GIMPLE_EH_FILTER
:
3820 return estimate_num_insns_seq (gimple_eh_filter_failure (stmt
), weights
);
3823 return estimate_num_insns_seq (gimple_catch_handler (stmt
), weights
);
3826 return (estimate_num_insns_seq (gimple_try_eval (stmt
), weights
)
3827 + estimate_num_insns_seq (gimple_try_cleanup (stmt
), weights
));
3829 /* OpenMP directives are generally very expensive. */
3831 case GIMPLE_OMP_RETURN
:
3832 case GIMPLE_OMP_SECTIONS_SWITCH
:
3833 case GIMPLE_OMP_ATOMIC_STORE
:
3834 case GIMPLE_OMP_CONTINUE
:
3835 /* ...except these, which are cheap. */
3838 case GIMPLE_OMP_ATOMIC_LOAD
:
3839 return weights
->omp_cost
;
3841 case GIMPLE_OMP_FOR
:
3842 return (weights
->omp_cost
3843 + estimate_num_insns_seq (gimple_omp_body (stmt
), weights
)
3844 + estimate_num_insns_seq (gimple_omp_for_pre_body (stmt
), weights
));
3846 case GIMPLE_OMP_PARALLEL
:
3847 case GIMPLE_OMP_TASK
:
3848 case GIMPLE_OMP_CRITICAL
:
3849 case GIMPLE_OMP_MASTER
:
3850 case GIMPLE_OMP_TASKGROUP
:
3851 case GIMPLE_OMP_ORDERED
:
3852 case GIMPLE_OMP_SECTION
:
3853 case GIMPLE_OMP_SECTIONS
:
3854 case GIMPLE_OMP_SINGLE
:
3855 case GIMPLE_OMP_TARGET
:
3856 case GIMPLE_OMP_TEAMS
:
3857 return (weights
->omp_cost
3858 + estimate_num_insns_seq (gimple_omp_body (stmt
), weights
));
3860 case GIMPLE_TRANSACTION
:
3861 return (weights
->tm_cost
3862 + estimate_num_insns_seq (gimple_transaction_body (stmt
),
3872 /* Estimate number of instructions that will be created by expanding
3873 function FNDECL. WEIGHTS contains weights attributed to various
3877 estimate_num_insns_fn (tree fndecl
, eni_weights
*weights
)
3879 struct function
*my_function
= DECL_STRUCT_FUNCTION (fndecl
);
3880 gimple_stmt_iterator bsi
;
3884 gcc_assert (my_function
&& my_function
->cfg
);
3885 FOR_EACH_BB_FN (bb
, my_function
)
3887 for (bsi
= gsi_start_bb (bb
); !gsi_end_p (bsi
); gsi_next (&bsi
))
3888 n
+= estimate_num_insns (gsi_stmt (bsi
), weights
);
3895 /* Initializes weights used by estimate_num_insns. */
3898 init_inline_once (void)
3900 eni_size_weights
.call_cost
= 1;
3901 eni_size_weights
.indirect_call_cost
= 3;
3902 eni_size_weights
.target_builtin_call_cost
= 1;
3903 eni_size_weights
.div_mod_cost
= 1;
3904 eni_size_weights
.omp_cost
= 40;
3905 eni_size_weights
.tm_cost
= 10;
3906 eni_size_weights
.time_based
= false;
3907 eni_size_weights
.return_cost
= 1;
3909 /* Estimating time for call is difficult, since we have no idea what the
3910 called function does. In the current uses of eni_time_weights,
3911 underestimating the cost does less harm than overestimating it, so
3912 we choose a rather small value here. */
3913 eni_time_weights
.call_cost
= 10;
3914 eni_time_weights
.indirect_call_cost
= 15;
3915 eni_time_weights
.target_builtin_call_cost
= 1;
3916 eni_time_weights
.div_mod_cost
= 10;
3917 eni_time_weights
.omp_cost
= 40;
3918 eni_time_weights
.tm_cost
= 40;
3919 eni_time_weights
.time_based
= true;
3920 eni_time_weights
.return_cost
= 2;
3923 /* Estimate the number of instructions in a gimple_seq. */
3926 count_insns_seq (gimple_seq seq
, eni_weights
*weights
)
3928 gimple_stmt_iterator gsi
;
3930 for (gsi
= gsi_start (seq
); !gsi_end_p (gsi
); gsi_next (&gsi
))
3931 n
+= estimate_num_insns (gsi_stmt (gsi
), weights
);
3937 /* Install new lexical TREE_BLOCK underneath 'current_block'. */
3940 prepend_lexical_block (tree current_block
, tree new_block
)
3942 BLOCK_CHAIN (new_block
) = BLOCK_SUBBLOCKS (current_block
);
3943 BLOCK_SUBBLOCKS (current_block
) = new_block
;
3944 BLOCK_SUPERCONTEXT (new_block
) = current_block
;
3947 /* Add local variables from CALLEE to CALLER. */
3950 add_local_variables (struct function
*callee
, struct function
*caller
,
3956 FOR_EACH_LOCAL_DECL (callee
, ix
, var
)
3957 if (!can_be_nonlocal (var
, id
))
3959 tree new_var
= remap_decl (var
, id
);
3961 /* Remap debug-expressions. */
3962 if (TREE_CODE (new_var
) == VAR_DECL
3963 && DECL_HAS_DEBUG_EXPR_P (var
)
3966 tree tem
= DECL_DEBUG_EXPR (var
);
3967 bool old_regimplify
= id
->regimplify
;
3968 id
->remapping_type_depth
++;
3969 walk_tree (&tem
, copy_tree_body_r
, id
, NULL
);
3970 id
->remapping_type_depth
--;
3971 id
->regimplify
= old_regimplify
;
3972 SET_DECL_DEBUG_EXPR (new_var
, tem
);
3973 DECL_HAS_DEBUG_EXPR_P (new_var
) = 1;
3975 add_local_decl (caller
, new_var
);
3979 /* If STMT is a GIMPLE_CALL, replace it with its inline expansion. */
3982 expand_call_inline (basic_block bb
, gimple stmt
, copy_body_data
*id
)
3986 struct pointer_map_t
*st
, *dst
;
3989 location_t saved_location
;
3990 struct cgraph_edge
*cg_edge
;
3991 cgraph_inline_failed_t reason
;
3992 basic_block return_block
;
3994 gimple_stmt_iterator gsi
, stmt_gsi
;
3995 bool successfully_inlined
= FALSE
;
3996 bool purge_dead_abnormal_edges
;
3998 /* Set input_location here so we get the right instantiation context
3999 if we call instantiate_decl from inlinable_function_p. */
4000 /* FIXME: instantiate_decl isn't called by inlinable_function_p. */
4001 saved_location
= input_location
;
4002 input_location
= gimple_location (stmt
);
4004 /* From here on, we're only interested in CALL_EXPRs. */
4005 if (gimple_code (stmt
) != GIMPLE_CALL
)
4008 cg_edge
= cgraph_edge (id
->dst_node
, stmt
);
4009 gcc_checking_assert (cg_edge
);
4010 /* First, see if we can figure out what function is being called.
4011 If we cannot, then there is no hope of inlining the function. */
4012 if (cg_edge
->indirect_unknown_callee
)
4014 fn
= cg_edge
->callee
->symbol
.decl
;
4015 gcc_checking_assert (fn
);
4017 /* If FN is a declaration of a function in a nested scope that was
4018 globally declared inline, we don't set its DECL_INITIAL.
4019 However, we can't blindly follow DECL_ABSTRACT_ORIGIN because the
4020 C++ front-end uses it for cdtors to refer to their internal
4021 declarations, that are not real functions. Fortunately those
4022 don't have trees to be saved, so we can tell by checking their
4024 if (!DECL_INITIAL (fn
)
4025 && DECL_ABSTRACT_ORIGIN (fn
)
4026 && gimple_has_body_p (DECL_ABSTRACT_ORIGIN (fn
)))
4027 fn
= DECL_ABSTRACT_ORIGIN (fn
);
4029 /* Don't try to inline functions that are not well-suited to inlining. */
4030 if (cg_edge
->inline_failed
)
4032 reason
= cg_edge
->inline_failed
;
4033 /* If this call was originally indirect, we do not want to emit any
4034 inlining related warnings or sorry messages because there are no
4035 guarantees regarding those. */
4036 if (cg_edge
->indirect_inlining_edge
)
4039 if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn
))
4040 /* For extern inline functions that get redefined we always
4041 silently ignored always_inline flag. Better behaviour would
4042 be to be able to keep both bodies and use extern inline body
4043 for inlining, but we can't do that because frontends overwrite
4045 && !cg_edge
->callee
->local
.redefined_extern_inline
4046 /* During early inline pass, report only when optimization is
4048 && (cgraph_global_info_ready
4050 /* PR 20090218-1_0.c. Body can be provided by another module. */
4051 && (reason
!= CIF_BODY_NOT_AVAILABLE
|| !flag_generate_lto
))
4053 error ("inlining failed in call to always_inline %q+F: %s", fn
,
4054 cgraph_inline_failed_string (reason
));
4055 error ("called from here");
4057 else if (warn_inline
4058 && DECL_DECLARED_INLINE_P (fn
)
4059 && !DECL_NO_INLINE_WARNING_P (fn
)
4060 && !DECL_IN_SYSTEM_HEADER (fn
)
4061 && reason
!= CIF_UNSPECIFIED
4062 && !lookup_attribute ("noinline", DECL_ATTRIBUTES (fn
))
4063 /* Do not warn about not inlined recursive calls. */
4064 && !cgraph_edge_recursive_p (cg_edge
)
4065 /* Avoid warnings during early inline pass. */
4066 && cgraph_global_info_ready
)
4068 warning (OPT_Winline
, "inlining failed in call to %q+F: %s",
4069 fn
, _(cgraph_inline_failed_string (reason
)));
4070 warning (OPT_Winline
, "called from here");
4074 fn
= cg_edge
->callee
->symbol
.decl
;
4075 cgraph_get_body (cg_edge
->callee
);
4077 #ifdef ENABLE_CHECKING
4078 if (cg_edge
->callee
->symbol
.decl
!= id
->dst_node
->symbol
.decl
)
4079 verify_cgraph_node (cg_edge
->callee
);
4082 /* We will be inlining this callee. */
4083 id
->eh_lp_nr
= lookup_stmt_eh_lp (stmt
);
4085 /* Update the callers EH personality. */
4086 if (DECL_FUNCTION_PERSONALITY (cg_edge
->callee
->symbol
.decl
))
4087 DECL_FUNCTION_PERSONALITY (cg_edge
->caller
->symbol
.decl
)
4088 = DECL_FUNCTION_PERSONALITY (cg_edge
->callee
->symbol
.decl
);
4090 /* Split the block holding the GIMPLE_CALL. */
4091 e
= split_block (bb
, stmt
);
4093 return_block
= e
->dest
;
4096 /* split_block splits after the statement; work around this by
4097 moving the call into the second block manually. Not pretty,
4098 but seems easier than doing the CFG manipulation by hand
4099 when the GIMPLE_CALL is in the last statement of BB. */
4100 stmt_gsi
= gsi_last_bb (bb
);
4101 gsi_remove (&stmt_gsi
, false);
4103 /* If the GIMPLE_CALL was in the last statement of BB, it may have
4104 been the source of abnormal edges. In this case, schedule
4105 the removal of dead abnormal edges. */
4106 gsi
= gsi_start_bb (return_block
);
4107 if (gsi_end_p (gsi
))
4109 gsi_insert_after (&gsi
, stmt
, GSI_NEW_STMT
);
4110 purge_dead_abnormal_edges
= true;
4114 gsi_insert_before (&gsi
, stmt
, GSI_NEW_STMT
);
4115 purge_dead_abnormal_edges
= false;
4118 stmt_gsi
= gsi_start_bb (return_block
);
4120 /* Build a block containing code to initialize the arguments, the
4121 actual inline expansion of the body, and a label for the return
4122 statements within the function to jump to. The type of the
4123 statement expression is the return type of the function call.
4124 ??? If the call does not have an associated block then we will
4125 remap all callee blocks to NULL, effectively dropping most of
4126 its debug information. This should only happen for calls to
4127 artificial decls inserted by the compiler itself. We need to
4128 either link the inlined blocks into the caller block tree or
4129 not refer to them in any way to not break GC for locations. */
4130 if (gimple_block (stmt
))
4132 id
->block
= make_node (BLOCK
);
4133 BLOCK_ABSTRACT_ORIGIN (id
->block
) = fn
;
4134 BLOCK_SOURCE_LOCATION (id
->block
) = LOCATION_LOCUS (input_location
);
4135 prepend_lexical_block (gimple_block (stmt
), id
->block
);
4138 /* Local declarations will be replaced by their equivalents in this
4141 id
->decl_map
= pointer_map_create ();
4142 dst
= id
->debug_map
;
4143 id
->debug_map
= NULL
;
4145 /* Record the function we are about to inline. */
4147 id
->src_node
= cg_edge
->callee
;
4148 id
->src_cfun
= DECL_STRUCT_FUNCTION (fn
);
4149 id
->gimple_call
= stmt
;
4151 gcc_assert (!id
->src_cfun
->after_inlining
);
4154 if (lookup_attribute ("cold", DECL_ATTRIBUTES (fn
)))
4156 gimple_stmt_iterator si
= gsi_last_bb (bb
);
4157 gsi_insert_after (&si
, gimple_build_predict (PRED_COLD_FUNCTION
,
4161 initialize_inlined_parameters (id
, stmt
, fn
, bb
);
4163 if (DECL_INITIAL (fn
))
4165 if (gimple_block (stmt
))
4169 prepend_lexical_block (id
->block
,
4170 remap_blocks (DECL_INITIAL (fn
), id
));
4171 gcc_checking_assert (BLOCK_SUBBLOCKS (id
->block
)
4172 && (BLOCK_CHAIN (BLOCK_SUBBLOCKS (id
->block
))
4174 /* Move vars for PARM_DECLs from DECL_INITIAL block to id->block,
4175 otherwise for DWARF DW_TAG_formal_parameter will not be children of
4176 DW_TAG_inlined_subroutine, but of a DW_TAG_lexical_block
4177 under it. The parameters can be then evaluated in the debugger,
4178 but don't show in backtraces. */
4179 for (var
= &BLOCK_VARS (BLOCK_SUBBLOCKS (id
->block
)); *var
; )
4180 if (TREE_CODE (DECL_ORIGIN (*var
)) == PARM_DECL
)
4183 *var
= TREE_CHAIN (v
);
4184 TREE_CHAIN (v
) = BLOCK_VARS (id
->block
);
4185 BLOCK_VARS (id
->block
) = v
;
4188 var
= &TREE_CHAIN (*var
);
4191 remap_blocks_to_null (DECL_INITIAL (fn
), id
);
4194 /* Return statements in the function body will be replaced by jumps
4195 to the RET_LABEL. */
4196 gcc_assert (DECL_INITIAL (fn
));
4197 gcc_assert (TREE_CODE (DECL_INITIAL (fn
)) == BLOCK
);
4199 /* Find the LHS to which the result of this call is assigned. */
4201 if (gimple_call_lhs (stmt
))
4203 modify_dest
= gimple_call_lhs (stmt
);
4205 /* The function which we are inlining might not return a value,
4206 in which case we should issue a warning that the function
4207 does not return a value. In that case the optimizers will
4208 see that the variable to which the value is assigned was not
4209 initialized. We do not want to issue a warning about that
4210 uninitialized variable. */
4211 if (DECL_P (modify_dest
))
4212 TREE_NO_WARNING (modify_dest
) = 1;
4214 if (gimple_call_return_slot_opt_p (stmt
))
4216 return_slot
= modify_dest
;
4223 /* If we are inlining a call to the C++ operator new, we don't want
4224 to use type based alias analysis on the return value. Otherwise
4225 we may get confused if the compiler sees that the inlined new
4226 function returns a pointer which was just deleted. See bug
4228 if (DECL_IS_OPERATOR_NEW (fn
))
4234 /* Declare the return variable for the function. */
4235 use_retvar
= declare_return_variable (id
, return_slot
, modify_dest
, bb
);
4237 /* Add local vars in this inlined callee to caller. */
4238 add_local_variables (id
->src_cfun
, cfun
, id
);
4240 if (dump_file
&& (dump_flags
& TDF_DETAILS
))
4242 fprintf (dump_file
, "Inlining ");
4243 print_generic_expr (dump_file
, id
->src_fn
, 0);
4244 fprintf (dump_file
, " to ");
4245 print_generic_expr (dump_file
, id
->dst_fn
, 0);
4246 fprintf (dump_file
, " with frequency %i\n", cg_edge
->frequency
);
4249 /* This is it. Duplicate the callee body. Assume callee is
4250 pre-gimplified. Note that we must not alter the caller
4251 function in any way before this point, as this CALL_EXPR may be
4252 a self-referential call; if we're calling ourselves, we need to
4253 duplicate our body before altering anything. */
4254 copy_body (id
, bb
->count
,
4255 GCOV_COMPUTE_SCALE (cg_edge
->frequency
, CGRAPH_FREQ_BASE
),
4256 bb
, return_block
, NULL
);
4258 /* Reset the escaped solution. */
4259 if (cfun
->gimple_df
)
4260 pt_solution_reset (&cfun
->gimple_df
->escaped
);
4265 pointer_map_destroy (id
->debug_map
);
4266 id
->debug_map
= dst
;
4268 pointer_map_destroy (id
->decl_map
);
4271 /* Unlink the calls virtual operands before replacing it. */
4272 unlink_stmt_vdef (stmt
);
4274 /* If the inlined function returns a result that we care about,
4275 substitute the GIMPLE_CALL with an assignment of the return
4276 variable to the LHS of the call. That is, if STMT was
4277 'a = foo (...)', substitute the call with 'a = USE_RETVAR'. */
4278 if (use_retvar
&& gimple_call_lhs (stmt
))
4280 gimple old_stmt
= stmt
;
4281 stmt
= gimple_build_assign (gimple_call_lhs (stmt
), use_retvar
);
4282 gsi_replace (&stmt_gsi
, stmt
, false);
4283 maybe_clean_or_replace_eh_stmt (old_stmt
, stmt
);
4287 /* Handle the case of inlining a function with no return
4288 statement, which causes the return value to become undefined. */
4289 if (gimple_call_lhs (stmt
)
4290 && TREE_CODE (gimple_call_lhs (stmt
)) == SSA_NAME
)
4292 tree name
= gimple_call_lhs (stmt
);
4293 tree var
= SSA_NAME_VAR (name
);
4294 tree def
= ssa_default_def (cfun
, var
);
4298 /* If the variable is used undefined, make this name
4299 undefined via a move. */
4300 stmt
= gimple_build_assign (gimple_call_lhs (stmt
), def
);
4301 gsi_replace (&stmt_gsi
, stmt
, true);
4305 /* Otherwise make this variable undefined. */
4306 gsi_remove (&stmt_gsi
, true);
4307 set_ssa_default_def (cfun
, var
, name
);
4308 SSA_NAME_DEF_STMT (name
) = gimple_build_nop ();
4312 gsi_remove (&stmt_gsi
, true);
4315 if (purge_dead_abnormal_edges
)
4317 gimple_purge_dead_eh_edges (return_block
);
4318 gimple_purge_dead_abnormal_call_edges (return_block
);
4321 /* If the value of the new expression is ignored, that's OK. We
4322 don't warn about this for CALL_EXPRs, so we shouldn't warn about
4323 the equivalent inlined version either. */
4324 if (is_gimple_assign (stmt
))
4326 gcc_assert (gimple_assign_single_p (stmt
)
4327 || CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (stmt
)));
4328 TREE_USED (gimple_assign_rhs1 (stmt
)) = 1;
4331 /* Output the inlining info for this abstract function, since it has been
4332 inlined. If we don't do this now, we can lose the information about the
4333 variables in the function when the blocks get blown away as soon as we
4334 remove the cgraph node. */
4335 if (gimple_block (stmt
))
4336 (*debug_hooks
->outlining_inline_function
) (cg_edge
->callee
->symbol
.decl
);
4338 /* Update callgraph if needed. */
4339 cgraph_remove_node (cg_edge
->callee
);
4341 id
->block
= NULL_TREE
;
4342 successfully_inlined
= TRUE
;
4345 input_location
= saved_location
;
4346 return successfully_inlined
;
4349 /* Expand call statements reachable from STMT_P.
4350 We can only have CALL_EXPRs as the "toplevel" tree code or nested
4351 in a MODIFY_EXPR. */
4354 gimple_expand_calls_inline (basic_block bb
, copy_body_data
*id
)
4356 gimple_stmt_iterator gsi
;
4358 for (gsi
= gsi_start_bb (bb
); !gsi_end_p (gsi
); gsi_next (&gsi
))
4360 gimple stmt
= gsi_stmt (gsi
);
4362 if (is_gimple_call (stmt
)
4363 && expand_call_inline (bb
, stmt
, id
))
4371 /* Walk all basic blocks created after FIRST and try to fold every statement
4372 in the STATEMENTS pointer set. */
4375 fold_marked_statements (int first
, struct pointer_set_t
*statements
)
4377 for (; first
< n_basic_blocks
; first
++)
4378 if (BASIC_BLOCK (first
))
4380 gimple_stmt_iterator gsi
;
4382 for (gsi
= gsi_start_bb (BASIC_BLOCK (first
));
4385 if (pointer_set_contains (statements
, gsi_stmt (gsi
)))
4387 gimple old_stmt
= gsi_stmt (gsi
);
4388 tree old_decl
= is_gimple_call (old_stmt
) ? gimple_call_fndecl (old_stmt
) : 0;
4390 if (old_decl
&& DECL_BUILT_IN (old_decl
))
4392 /* Folding builtins can create multiple instructions,
4393 we need to look at all of them. */
4394 gimple_stmt_iterator i2
= gsi
;
4396 if (fold_stmt (&gsi
))
4399 /* If a builtin at the end of a bb folded into nothing,
4400 the following loop won't work. */
4401 if (gsi_end_p (gsi
))
4403 cgraph_update_edges_for_call_stmt (old_stmt
,
4408 i2
= gsi_start_bb (BASIC_BLOCK (first
));
4413 new_stmt
= gsi_stmt (i2
);
4414 update_stmt (new_stmt
);
4415 cgraph_update_edges_for_call_stmt (old_stmt
, old_decl
,
4418 if (new_stmt
== gsi_stmt (gsi
))
4420 /* It is okay to check only for the very last
4421 of these statements. If it is a throwing
4422 statement nothing will change. If it isn't
4423 this can remove EH edges. If that weren't
4424 correct then because some intermediate stmts
4425 throw, but not the last one. That would mean
4426 we'd have to split the block, which we can't
4427 here and we'd loose anyway. And as builtins
4428 probably never throw, this all
4430 if (maybe_clean_or_replace_eh_stmt (old_stmt
,
4432 gimple_purge_dead_eh_edges (BASIC_BLOCK (first
));
4439 else if (fold_stmt (&gsi
))
4441 /* Re-read the statement from GSI as fold_stmt() may
4443 gimple new_stmt
= gsi_stmt (gsi
);
4444 update_stmt (new_stmt
);
4446 if (is_gimple_call (old_stmt
)
4447 || is_gimple_call (new_stmt
))
4448 cgraph_update_edges_for_call_stmt (old_stmt
, old_decl
,
4451 if (maybe_clean_or_replace_eh_stmt (old_stmt
, new_stmt
))
4452 gimple_purge_dead_eh_edges (BASIC_BLOCK (first
));
4458 /* Return true if BB has at least one abnormal outgoing edge. */
4461 has_abnormal_outgoing_edge_p (basic_block bb
)
4466 FOR_EACH_EDGE (e
, ei
, bb
->succs
)
4467 if (e
->flags
& EDGE_ABNORMAL
)
4473 /* Expand calls to inline functions in the body of FN. */
4476 optimize_inline_calls (tree fn
)
4480 int last
= n_basic_blocks
;
4481 struct gimplify_ctx gctx
;
4482 bool inlined_p
= false;
4485 memset (&id
, 0, sizeof (id
));
4487 id
.src_node
= id
.dst_node
= cgraph_get_node (fn
);
4488 gcc_assert (id
.dst_node
->symbol
.definition
);
4490 /* Or any functions that aren't finished yet. */
4491 if (current_function_decl
)
4492 id
.dst_fn
= current_function_decl
;
4494 id
.copy_decl
= copy_decl_maybe_to_var
;
4495 id
.transform_call_graph_edges
= CB_CGE_DUPLICATE
;
4496 id
.transform_new_cfg
= false;
4497 id
.transform_return_to_modify
= true;
4498 id
.transform_parameter
= true;
4499 id
.transform_lang_insert_block
= NULL
;
4500 id
.statements_to_fold
= pointer_set_create ();
4502 push_gimplify_context (&gctx
);
4504 /* We make no attempts to keep dominance info up-to-date. */
4505 free_dominance_info (CDI_DOMINATORS
);
4506 free_dominance_info (CDI_POST_DOMINATORS
);
4508 /* Register specific gimple functions. */
4509 gimple_register_cfg_hooks ();
4511 /* Reach the trees by walking over the CFG, and note the
4512 enclosing basic-blocks in the call edges. */
4513 /* We walk the blocks going forward, because inlined function bodies
4514 will split id->current_basic_block, and the new blocks will
4515 follow it; we'll trudge through them, processing their CALL_EXPRs
4518 inlined_p
|= gimple_expand_calls_inline (bb
, &id
);
4520 pop_gimplify_context (NULL
);
4522 #ifdef ENABLE_CHECKING
4524 struct cgraph_edge
*e
;
4526 verify_cgraph_node (id
.dst_node
);
4528 /* Double check that we inlined everything we are supposed to inline. */
4529 for (e
= id
.dst_node
->callees
; e
; e
= e
->next_callee
)
4530 gcc_assert (e
->inline_failed
);
4534 /* Fold queued statements. */
4535 fold_marked_statements (last
, id
.statements_to_fold
);
4536 pointer_set_destroy (id
.statements_to_fold
);
4538 gcc_assert (!id
.debug_stmts
.exists ());
4540 /* If we didn't inline into the function there is nothing to do. */
4544 /* Renumber the lexical scoping (non-code) blocks consecutively. */
4547 delete_unreachable_blocks_update_callgraph (&id
);
4548 #ifdef ENABLE_CHECKING
4549 verify_cgraph_node (id
.dst_node
);
4552 /* It would be nice to check SSA/CFG/statement consistency here, but it is
4553 not possible yet - the IPA passes might make various functions to not
4554 throw and they don't care to proactively update local EH info. This is
4555 done later in fixup_cfg pass that also execute the verification. */
4556 return (TODO_update_ssa
4558 | (gimple_in_ssa_p (cfun
) ? TODO_remove_unused_locals
: 0)
4559 | (gimple_in_ssa_p (cfun
) ? TODO_update_address_taken
: 0)
4560 | (profile_status
!= PROFILE_ABSENT
? TODO_rebuild_frequencies
: 0));
4563 /* Passed to walk_tree. Copies the node pointed to, if appropriate. */
4566 copy_tree_r (tree
*tp
, int *walk_subtrees
, void *data ATTRIBUTE_UNUSED
)
4568 enum tree_code code
= TREE_CODE (*tp
);
4569 enum tree_code_class cl
= TREE_CODE_CLASS (code
);
4571 /* We make copies of most nodes. */
4572 if (IS_EXPR_CODE_CLASS (cl
)
4573 || code
== TREE_LIST
4575 || code
== TYPE_DECL
4576 || code
== OMP_CLAUSE
)
4578 /* Because the chain gets clobbered when we make a copy, we save it
4580 tree chain
= NULL_TREE
, new_tree
;
4582 if (CODE_CONTAINS_STRUCT (code
, TS_COMMON
))
4583 chain
= TREE_CHAIN (*tp
);
4585 /* Copy the node. */
4586 new_tree
= copy_node (*tp
);
4588 /* Propagate mudflap marked-ness. */
4589 if (flag_mudflap
&& mf_marked_p (*tp
))
4594 /* Now, restore the chain, if appropriate. That will cause
4595 walk_tree to walk into the chain as well. */
4596 if (code
== PARM_DECL
4597 || code
== TREE_LIST
4598 || code
== OMP_CLAUSE
)
4599 TREE_CHAIN (*tp
) = chain
;
4601 /* For now, we don't update BLOCKs when we make copies. So, we
4602 have to nullify all BIND_EXPRs. */
4603 if (TREE_CODE (*tp
) == BIND_EXPR
)
4604 BIND_EXPR_BLOCK (*tp
) = NULL_TREE
;
4606 else if (code
== CONSTRUCTOR
)
4608 /* CONSTRUCTOR nodes need special handling because
4609 we need to duplicate the vector of elements. */
4612 new_tree
= copy_node (*tp
);
4614 /* Propagate mudflap marked-ness. */
4615 if (flag_mudflap
&& mf_marked_p (*tp
))
4618 CONSTRUCTOR_ELTS (new_tree
) = vec_safe_copy (CONSTRUCTOR_ELTS (*tp
));
4621 else if (code
== STATEMENT_LIST
)
4622 /* We used to just abort on STATEMENT_LIST, but we can run into them
4623 with statement-expressions (c++/40975). */
4624 copy_statement_list (tp
);
4625 else if (TREE_CODE_CLASS (code
) == tcc_type
)
4627 else if (TREE_CODE_CLASS (code
) == tcc_declaration
)
4629 else if (TREE_CODE_CLASS (code
) == tcc_constant
)
4634 /* The SAVE_EXPR pointed to by TP is being copied. If ST contains
4635 information indicating to what new SAVE_EXPR this one should be mapped,
4636 use that one. Otherwise, create a new node and enter it in ST. FN is
4637 the function into which the copy will be placed. */
4640 remap_save_expr (tree
*tp
, void *st_
, int *walk_subtrees
)
4642 struct pointer_map_t
*st
= (struct pointer_map_t
*) st_
;
4646 /* See if we already encountered this SAVE_EXPR. */
4647 n
= (tree
*) pointer_map_contains (st
, *tp
);
4649 /* If we didn't already remap this SAVE_EXPR, do so now. */
4652 t
= copy_node (*tp
);
4654 /* Remember this SAVE_EXPR. */
4655 *pointer_map_insert (st
, *tp
) = t
;
4656 /* Make sure we don't remap an already-remapped SAVE_EXPR. */
4657 *pointer_map_insert (st
, t
) = t
;
4661 /* We've already walked into this SAVE_EXPR; don't do it again. */
4666 /* Replace this SAVE_EXPR with the copy. */
4670 /* Called via walk_gimple_seq. If *GSIP points to a GIMPLE_LABEL for a local
4671 label, copies the declaration and enters it in the splay_tree in DATA (which
4672 is really a 'copy_body_data *'. */
4675 mark_local_labels_stmt (gimple_stmt_iterator
*gsip
,
4676 bool *handled_ops_p ATTRIBUTE_UNUSED
,
4677 struct walk_stmt_info
*wi
)
4679 copy_body_data
*id
= (copy_body_data
*) wi
->info
;
4680 gimple stmt
= gsi_stmt (*gsip
);
4682 if (gimple_code (stmt
) == GIMPLE_LABEL
)
4684 tree decl
= gimple_label_label (stmt
);
4686 /* Copy the decl and remember the copy. */
4687 insert_decl_map (id
, decl
, id
->copy_decl (decl
, id
));
4694 /* Called via walk_gimple_seq by copy_gimple_seq_and_replace_local.
4695 Using the splay_tree pointed to by ST (which is really a `splay_tree'),
4696 remaps all local declarations to appropriate replacements in gimple
4700 replace_locals_op (tree
*tp
, int *walk_subtrees
, void *data
)
4702 struct walk_stmt_info
*wi
= (struct walk_stmt_info
*) data
;
4703 copy_body_data
*id
= (copy_body_data
*) wi
->info
;
4704 struct pointer_map_t
*st
= id
->decl_map
;
4708 /* Only a local declaration (variable or label). */
4709 if ((TREE_CODE (expr
) == VAR_DECL
4710 && !TREE_STATIC (expr
))
4711 || TREE_CODE (expr
) == LABEL_DECL
)
4713 /* Lookup the declaration. */
4714 n
= (tree
*) pointer_map_contains (st
, expr
);
4716 /* If it's there, remap it. */
4721 else if (TREE_CODE (expr
) == STATEMENT_LIST
4722 || TREE_CODE (expr
) == BIND_EXPR
4723 || TREE_CODE (expr
) == SAVE_EXPR
)
4725 else if (TREE_CODE (expr
) == TARGET_EXPR
)
4727 /* Don't mess with a TARGET_EXPR that hasn't been expanded.
4728 It's OK for this to happen if it was part of a subtree that
4729 isn't immediately expanded, such as operand 2 of another
4731 if (!TREE_OPERAND (expr
, 1))
4733 TREE_OPERAND (expr
, 1) = TREE_OPERAND (expr
, 3);
4734 TREE_OPERAND (expr
, 3) = NULL_TREE
;
4738 /* Keep iterating. */
4743 /* Called via walk_gimple_seq by copy_gimple_seq_and_replace_local.
4744 Using the splay_tree pointed to by ST (which is really a `splay_tree'),
4745 remaps all local declarations to appropriate replacements in gimple
4749 replace_locals_stmt (gimple_stmt_iterator
*gsip
,
4750 bool *handled_ops_p ATTRIBUTE_UNUSED
,
4751 struct walk_stmt_info
*wi
)
4753 copy_body_data
*id
= (copy_body_data
*) wi
->info
;
4754 gimple stmt
= gsi_stmt (*gsip
);
4756 if (gimple_code (stmt
) == GIMPLE_BIND
)
4758 tree block
= gimple_bind_block (stmt
);
4762 remap_block (&block
, id
);
4763 gimple_bind_set_block (stmt
, block
);
4766 /* This will remap a lot of the same decls again, but this should be
4768 if (gimple_bind_vars (stmt
))
4769 gimple_bind_set_vars (stmt
, remap_decls (gimple_bind_vars (stmt
),
4773 /* Keep iterating. */
4778 /* Copies everything in SEQ and replaces variables and labels local to
4779 current_function_decl. */
4782 copy_gimple_seq_and_replace_locals (gimple_seq seq
)
4785 struct walk_stmt_info wi
;
4786 struct pointer_set_t
*visited
;
4789 /* There's nothing to do for NULL_TREE. */
4794 memset (&id
, 0, sizeof (id
));
4795 id
.src_fn
= current_function_decl
;
4796 id
.dst_fn
= current_function_decl
;
4797 id
.decl_map
= pointer_map_create ();
4798 id
.debug_map
= NULL
;
4800 id
.copy_decl
= copy_decl_no_change
;
4801 id
.transform_call_graph_edges
= CB_CGE_DUPLICATE
;
4802 id
.transform_new_cfg
= false;
4803 id
.transform_return_to_modify
= false;
4804 id
.transform_parameter
= false;
4805 id
.transform_lang_insert_block
= NULL
;
4807 /* Walk the tree once to find local labels. */
4808 memset (&wi
, 0, sizeof (wi
));
4809 visited
= pointer_set_create ();
4812 walk_gimple_seq (seq
, mark_local_labels_stmt
, NULL
, &wi
);
4813 pointer_set_destroy (visited
);
4815 copy
= gimple_seq_copy (seq
);
4817 /* Walk the copy, remapping decls. */
4818 memset (&wi
, 0, sizeof (wi
));
4820 walk_gimple_seq (copy
, replace_locals_stmt
, replace_locals_op
, &wi
);
4823 pointer_map_destroy (id
.decl_map
);
4825 pointer_map_destroy (id
.debug_map
);
4831 /* Allow someone to determine if SEARCH is a child of TOP from gdb. */
4834 debug_find_tree_1 (tree
*tp
, int *walk_subtrees ATTRIBUTE_UNUSED
, void *data
)
4843 debug_find_tree (tree top
, tree search
)
4845 return walk_tree_without_duplicates (&top
, debug_find_tree_1
, search
) != 0;
4849 /* Declare the variables created by the inliner. Add all the variables in
4850 VARS to BIND_EXPR. */
4853 declare_inline_vars (tree block
, tree vars
)
4856 for (t
= vars
; t
; t
= DECL_CHAIN (t
))
4858 DECL_SEEN_IN_BIND_EXPR_P (t
) = 1;
4859 gcc_assert (!TREE_STATIC (t
) && !TREE_ASM_WRITTEN (t
));
4860 add_local_decl (cfun
, t
);
4864 BLOCK_VARS (block
) = chainon (BLOCK_VARS (block
), vars
);
4867 /* Copy NODE (which must be a DECL). The DECL originally was in the FROM_FN,
4868 but now it will be in the TO_FN. PARM_TO_VAR means enable PARM_DECL to
4869 VAR_DECL translation. */
4872 copy_decl_for_dup_finish (copy_body_data
*id
, tree decl
, tree copy
)
4874 /* Don't generate debug information for the copy if we wouldn't have
4875 generated it for the copy either. */
4876 DECL_ARTIFICIAL (copy
) = DECL_ARTIFICIAL (decl
);
4877 DECL_IGNORED_P (copy
) = DECL_IGNORED_P (decl
);
4879 /* Set the DECL_ABSTRACT_ORIGIN so the debugging routines know what
4880 declaration inspired this copy. */
4881 DECL_ABSTRACT_ORIGIN (copy
) = DECL_ORIGIN (decl
);
4883 /* The new variable/label has no RTL, yet. */
4884 if (CODE_CONTAINS_STRUCT (TREE_CODE (copy
), TS_DECL_WRTL
)
4885 && !TREE_STATIC (copy
) && !DECL_EXTERNAL (copy
))
4886 SET_DECL_RTL (copy
, 0);
4888 /* These args would always appear unused, if not for this. */
4889 TREE_USED (copy
) = 1;
4891 /* Set the context for the new declaration. */
4892 if (!DECL_CONTEXT (decl
))
4893 /* Globals stay global. */
4895 else if (DECL_CONTEXT (decl
) != id
->src_fn
)
4896 /* Things that weren't in the scope of the function we're inlining
4897 from aren't in the scope we're inlining to, either. */
4899 else if (TREE_STATIC (decl
))
4900 /* Function-scoped static variables should stay in the original
4904 /* Ordinary automatic local variables are now in the scope of the
4906 DECL_CONTEXT (copy
) = id
->dst_fn
;
4912 copy_decl_to_var (tree decl
, copy_body_data
*id
)
4916 gcc_assert (TREE_CODE (decl
) == PARM_DECL
4917 || TREE_CODE (decl
) == RESULT_DECL
);
4919 type
= TREE_TYPE (decl
);
4921 copy
= build_decl (DECL_SOURCE_LOCATION (id
->dst_fn
),
4922 VAR_DECL
, DECL_NAME (decl
), type
);
4923 if (DECL_PT_UID_SET_P (decl
))
4924 SET_DECL_PT_UID (copy
, DECL_PT_UID (decl
));
4925 TREE_ADDRESSABLE (copy
) = TREE_ADDRESSABLE (decl
);
4926 TREE_READONLY (copy
) = TREE_READONLY (decl
);
4927 TREE_THIS_VOLATILE (copy
) = TREE_THIS_VOLATILE (decl
);
4928 DECL_GIMPLE_REG_P (copy
) = DECL_GIMPLE_REG_P (decl
);
4930 return copy_decl_for_dup_finish (id
, decl
, copy
);
4933 /* Like copy_decl_to_var, but create a return slot object instead of a
4934 pointer variable for return by invisible reference. */
4937 copy_result_decl_to_var (tree decl
, copy_body_data
*id
)
4941 gcc_assert (TREE_CODE (decl
) == PARM_DECL
4942 || TREE_CODE (decl
) == RESULT_DECL
);
4944 type
= TREE_TYPE (decl
);
4945 if (DECL_BY_REFERENCE (decl
))
4946 type
= TREE_TYPE (type
);
4948 copy
= build_decl (DECL_SOURCE_LOCATION (id
->dst_fn
),
4949 VAR_DECL
, DECL_NAME (decl
), type
);
4950 if (DECL_PT_UID_SET_P (decl
))
4951 SET_DECL_PT_UID (copy
, DECL_PT_UID (decl
));
4952 TREE_READONLY (copy
) = TREE_READONLY (decl
);
4953 TREE_THIS_VOLATILE (copy
) = TREE_THIS_VOLATILE (decl
);
4954 if (!DECL_BY_REFERENCE (decl
))
4956 TREE_ADDRESSABLE (copy
) = TREE_ADDRESSABLE (decl
);
4957 DECL_GIMPLE_REG_P (copy
) = DECL_GIMPLE_REG_P (decl
);
4960 return copy_decl_for_dup_finish (id
, decl
, copy
);
4964 copy_decl_no_change (tree decl
, copy_body_data
*id
)
4968 copy
= copy_node (decl
);
4970 /* The COPY is not abstract; it will be generated in DST_FN. */
4971 DECL_ABSTRACT (copy
) = 0;
4972 lang_hooks
.dup_lang_specific_decl (copy
);
4974 /* TREE_ADDRESSABLE isn't used to indicate that a label's address has
4975 been taken; it's for internal bookkeeping in expand_goto_internal. */
4976 if (TREE_CODE (copy
) == LABEL_DECL
)
4978 TREE_ADDRESSABLE (copy
) = 0;
4979 LABEL_DECL_UID (copy
) = -1;
4982 return copy_decl_for_dup_finish (id
, decl
, copy
);
4986 copy_decl_maybe_to_var (tree decl
, copy_body_data
*id
)
4988 if (TREE_CODE (decl
) == PARM_DECL
|| TREE_CODE (decl
) == RESULT_DECL
)
4989 return copy_decl_to_var (decl
, id
);
4991 return copy_decl_no_change (decl
, id
);
4994 /* Return a copy of the function's argument tree. */
4996 copy_arguments_for_versioning (tree orig_parm
, copy_body_data
* id
,
4997 bitmap args_to_skip
, tree
*vars
)
5000 tree new_parm
= NULL
;
5005 for (arg
= orig_parm
; arg
; arg
= DECL_CHAIN (arg
), i
++)
5006 if (!args_to_skip
|| !bitmap_bit_p (args_to_skip
, i
))
5008 tree new_tree
= remap_decl (arg
, id
);
5009 if (TREE_CODE (new_tree
) != PARM_DECL
)
5010 new_tree
= id
->copy_decl (arg
, id
);
5011 lang_hooks
.dup_lang_specific_decl (new_tree
);
5013 parg
= &DECL_CHAIN (new_tree
);
5015 else if (!pointer_map_contains (id
->decl_map
, arg
))
5017 /* Make an equivalent VAR_DECL. If the argument was used
5018 as temporary variable later in function, the uses will be
5019 replaced by local variable. */
5020 tree var
= copy_decl_to_var (arg
, id
);
5021 insert_decl_map (id
, arg
, var
);
5022 /* Declare this new variable. */
5023 DECL_CHAIN (var
) = *vars
;
5029 /* Return a copy of the function's static chain. */
5031 copy_static_chain (tree static_chain
, copy_body_data
* id
)
5033 tree
*chain_copy
, *pvar
;
5035 chain_copy
= &static_chain
;
5036 for (pvar
= chain_copy
; *pvar
; pvar
= &DECL_CHAIN (*pvar
))
5038 tree new_tree
= remap_decl (*pvar
, id
);
5039 lang_hooks
.dup_lang_specific_decl (new_tree
);
5040 DECL_CHAIN (new_tree
) = DECL_CHAIN (*pvar
);
5043 return static_chain
;
5046 /* Return true if the function is allowed to be versioned.
5047 This is a guard for the versioning functionality. */
5050 tree_versionable_function_p (tree fndecl
)
5052 return (!lookup_attribute ("noclone", DECL_ATTRIBUTES (fndecl
))
5053 && copy_forbidden (DECL_STRUCT_FUNCTION (fndecl
), fndecl
) == NULL
);
5056 /* Delete all unreachable basic blocks and update callgraph.
5057 Doing so is somewhat nontrivial because we need to update all clones and
5058 remove inline function that become unreachable. */
5061 delete_unreachable_blocks_update_callgraph (copy_body_data
*id
)
5063 bool changed
= false;
5064 basic_block b
, next_bb
;
5066 find_unreachable_blocks ();
5068 /* Delete all unreachable basic blocks. */
5070 for (b
= ENTRY_BLOCK_PTR
->next_bb
; b
!= EXIT_BLOCK_PTR
; b
= next_bb
)
5072 next_bb
= b
->next_bb
;
5074 if (!(b
->flags
& BB_REACHABLE
))
5076 gimple_stmt_iterator bsi
;
5078 for (bsi
= gsi_start_bb (b
); !gsi_end_p (bsi
); gsi_next (&bsi
))
5080 struct cgraph_edge
*e
;
5081 struct cgraph_node
*node
;
5083 ipa_remove_stmt_references ((symtab_node
)id
->dst_node
, gsi_stmt (bsi
));
5085 if (gimple_code (gsi_stmt (bsi
)) == GIMPLE_CALL
5086 &&(e
= cgraph_edge (id
->dst_node
, gsi_stmt (bsi
))) != NULL
)
5088 if (!e
->inline_failed
)
5089 cgraph_remove_node_and_inline_clones (e
->callee
, id
->dst_node
);
5091 cgraph_remove_edge (e
);
5093 if (id
->transform_call_graph_edges
== CB_CGE_MOVE_CLONES
5094 && id
->dst_node
->clones
)
5095 for (node
= id
->dst_node
->clones
; node
!= id
->dst_node
;)
5097 ipa_remove_stmt_references ((symtab_node
)node
, gsi_stmt (bsi
));
5098 if (gimple_code (gsi_stmt (bsi
)) == GIMPLE_CALL
5099 && (e
= cgraph_edge (node
, gsi_stmt (bsi
))) != NULL
)
5101 if (!e
->inline_failed
)
5102 cgraph_remove_node_and_inline_clones (e
->callee
, id
->dst_node
);
5104 cgraph_remove_edge (e
);
5108 node
= node
->clones
;
5109 else if (node
->next_sibling_clone
)
5110 node
= node
->next_sibling_clone
;
5113 while (node
!= id
->dst_node
&& !node
->next_sibling_clone
)
5114 node
= node
->clone_of
;
5115 if (node
!= id
->dst_node
)
5116 node
= node
->next_sibling_clone
;
5120 delete_basic_block (b
);
5128 /* Update clone info after duplication. */
5131 update_clone_info (copy_body_data
* id
)
5133 struct cgraph_node
*node
;
5134 if (!id
->dst_node
->clones
)
5136 for (node
= id
->dst_node
->clones
; node
!= id
->dst_node
;)
5138 /* First update replace maps to match the new body. */
5139 if (node
->clone
.tree_map
)
5142 for (i
= 0; i
< vec_safe_length (node
->clone
.tree_map
); i
++)
5144 struct ipa_replace_map
*replace_info
;
5145 replace_info
= (*node
->clone
.tree_map
)[i
];
5146 walk_tree (&replace_info
->old_tree
, copy_tree_body_r
, id
, NULL
);
5147 walk_tree (&replace_info
->new_tree
, copy_tree_body_r
, id
, NULL
);
5151 node
= node
->clones
;
5152 else if (node
->next_sibling_clone
)
5153 node
= node
->next_sibling_clone
;
5156 while (node
!= id
->dst_node
&& !node
->next_sibling_clone
)
5157 node
= node
->clone_of
;
5158 if (node
!= id
->dst_node
)
5159 node
= node
->next_sibling_clone
;
5164 /* Create a copy of a function's tree.
5165 OLD_DECL and NEW_DECL are FUNCTION_DECL tree nodes
5166 of the original function and the new copied function
5167 respectively. In case we want to replace a DECL
5168 tree with another tree while duplicating the function's
5169 body, TREE_MAP represents the mapping between these
5170 trees. If UPDATE_CLONES is set, the call_stmt fields
5171 of edges of clones of the function will be updated.
5173 If non-NULL ARGS_TO_SKIP determine function parameters to remove
5175 If SKIP_RETURN is true, the new version will return void.
5176 If non-NULL BLOCK_TO_COPY determine what basic blocks to copy.
5177 If non_NULL NEW_ENTRY determine new entry BB of the clone.
5180 tree_function_versioning (tree old_decl
, tree new_decl
,
5181 vec
<ipa_replace_map_p
, va_gc
> *tree_map
,
5182 bool update_clones
, bitmap args_to_skip
,
5183 bool skip_return
, bitmap blocks_to_copy
,
5184 basic_block new_entry
)
5186 struct cgraph_node
*old_version_node
;
5187 struct cgraph_node
*new_version_node
;
5191 struct ipa_replace_map
*replace_info
;
5192 basic_block old_entry_block
, bb
;
5193 vec
<gimple
> init_stmts
;
5194 init_stmts
.create (10);
5195 tree vars
= NULL_TREE
;
5197 gcc_assert (TREE_CODE (old_decl
) == FUNCTION_DECL
5198 && TREE_CODE (new_decl
) == FUNCTION_DECL
);
5199 DECL_POSSIBLY_INLINED (old_decl
) = 1;
5201 old_version_node
= cgraph_get_node (old_decl
);
5202 gcc_checking_assert (old_version_node
);
5203 new_version_node
= cgraph_get_node (new_decl
);
5204 gcc_checking_assert (new_version_node
);
5206 /* Copy over debug args. */
5207 if (DECL_HAS_DEBUG_ARGS_P (old_decl
))
5209 vec
<tree
, va_gc
> **new_debug_args
, **old_debug_args
;
5210 gcc_checking_assert (decl_debug_args_lookup (new_decl
) == NULL
);
5211 DECL_HAS_DEBUG_ARGS_P (new_decl
) = 0;
5212 old_debug_args
= decl_debug_args_lookup (old_decl
);
5215 new_debug_args
= decl_debug_args_insert (new_decl
);
5216 *new_debug_args
= vec_safe_copy (*old_debug_args
);
5220 /* Output the inlining info for this abstract function, since it has been
5221 inlined. If we don't do this now, we can lose the information about the
5222 variables in the function when the blocks get blown away as soon as we
5223 remove the cgraph node. */
5224 (*debug_hooks
->outlining_inline_function
) (old_decl
);
5226 DECL_ARTIFICIAL (new_decl
) = 1;
5227 DECL_ABSTRACT_ORIGIN (new_decl
) = DECL_ORIGIN (old_decl
);
5228 if (DECL_ORIGIN (old_decl
) == old_decl
)
5229 old_version_node
->used_as_abstract_origin
= true;
5230 DECL_FUNCTION_PERSONALITY (new_decl
) = DECL_FUNCTION_PERSONALITY (old_decl
);
5232 /* Prepare the data structures for the tree copy. */
5233 memset (&id
, 0, sizeof (id
));
5235 /* Generate a new name for the new version. */
5236 id
.statements_to_fold
= pointer_set_create ();
5238 id
.decl_map
= pointer_map_create ();
5239 id
.debug_map
= NULL
;
5240 id
.src_fn
= old_decl
;
5241 id
.dst_fn
= new_decl
;
5242 id
.src_node
= old_version_node
;
5243 id
.dst_node
= new_version_node
;
5244 id
.src_cfun
= DECL_STRUCT_FUNCTION (old_decl
);
5245 id
.blocks_to_copy
= blocks_to_copy
;
5246 if (id
.src_node
->ipa_transforms_to_apply
.exists ())
5248 vec
<ipa_opt_pass
> old_transforms_to_apply
5249 = id
.dst_node
->ipa_transforms_to_apply
;
5252 id
.dst_node
->ipa_transforms_to_apply
5253 = id
.src_node
->ipa_transforms_to_apply
.copy ();
5254 for (i
= 0; i
< old_transforms_to_apply
.length (); i
++)
5255 id
.dst_node
->ipa_transforms_to_apply
.safe_push (old_transforms_to_apply
[i
]);
5256 old_transforms_to_apply
.release ();
5259 id
.copy_decl
= copy_decl_no_change
;
5260 id
.transform_call_graph_edges
5261 = update_clones
? CB_CGE_MOVE_CLONES
: CB_CGE_MOVE
;
5262 id
.transform_new_cfg
= true;
5263 id
.transform_return_to_modify
= false;
5264 id
.transform_parameter
= false;
5265 id
.transform_lang_insert_block
= NULL
;
5267 old_entry_block
= ENTRY_BLOCK_PTR_FOR_FUNCTION
5268 (DECL_STRUCT_FUNCTION (old_decl
));
5269 DECL_RESULT (new_decl
) = DECL_RESULT (old_decl
);
5270 DECL_ARGUMENTS (new_decl
) = DECL_ARGUMENTS (old_decl
);
5271 initialize_cfun (new_decl
, old_decl
,
5272 old_entry_block
->count
);
5273 DECL_STRUCT_FUNCTION (new_decl
)->gimple_df
->ipa_pta
5274 = id
.src_cfun
->gimple_df
->ipa_pta
;
5276 /* Copy the function's static chain. */
5277 p
= DECL_STRUCT_FUNCTION (old_decl
)->static_chain_decl
;
5279 DECL_STRUCT_FUNCTION (new_decl
)->static_chain_decl
=
5280 copy_static_chain (DECL_STRUCT_FUNCTION (old_decl
)->static_chain_decl
,
5283 /* If there's a tree_map, prepare for substitution. */
5285 for (i
= 0; i
< tree_map
->length (); i
++)
5288 replace_info
= (*tree_map
)[i
];
5289 if (replace_info
->replace_p
)
5291 if (!replace_info
->old_tree
)
5293 int i
= replace_info
->parm_num
;
5297 for (parm
= DECL_ARGUMENTS (old_decl
); i
; parm
= DECL_CHAIN (parm
))
5299 replace_info
->old_tree
= parm
;
5300 req_type
= TREE_TYPE (parm
);
5301 if (!useless_type_conversion_p (req_type
, TREE_TYPE (replace_info
->new_tree
)))
5303 if (fold_convertible_p (req_type
, replace_info
->new_tree
))
5304 replace_info
->new_tree
= fold_build1 (NOP_EXPR
, req_type
, replace_info
->new_tree
);
5305 else if (TYPE_SIZE (req_type
) == TYPE_SIZE (TREE_TYPE (replace_info
->new_tree
)))
5306 replace_info
->new_tree
= fold_build1 (VIEW_CONVERT_EXPR
, req_type
, replace_info
->new_tree
);
5311 fprintf (dump_file
, " const ");
5312 print_generic_expr (dump_file
, replace_info
->new_tree
, 0);
5313 fprintf (dump_file
, " can't be converted to param ");
5314 print_generic_expr (dump_file
, parm
, 0);
5315 fprintf (dump_file
, "\n");
5317 replace_info
->old_tree
= NULL
;
5322 gcc_assert (TREE_CODE (replace_info
->old_tree
) == PARM_DECL
);
5323 if (replace_info
->old_tree
)
5325 init
= setup_one_parameter (&id
, replace_info
->old_tree
,
5326 replace_info
->new_tree
, id
.src_fn
,
5330 init_stmts
.safe_push (init
);
5334 /* Copy the function's arguments. */
5335 if (DECL_ARGUMENTS (old_decl
) != NULL_TREE
)
5336 DECL_ARGUMENTS (new_decl
) =
5337 copy_arguments_for_versioning (DECL_ARGUMENTS (old_decl
), &id
,
5338 args_to_skip
, &vars
);
5340 DECL_INITIAL (new_decl
) = remap_blocks (DECL_INITIAL (id
.src_fn
), &id
);
5341 BLOCK_SUPERCONTEXT (DECL_INITIAL (new_decl
)) = new_decl
;
5343 declare_inline_vars (DECL_INITIAL (new_decl
), vars
);
5345 if (!vec_safe_is_empty (DECL_STRUCT_FUNCTION (old_decl
)->local_decls
))
5346 /* Add local vars. */
5347 add_local_variables (DECL_STRUCT_FUNCTION (old_decl
), cfun
, &id
);
5349 if (DECL_RESULT (old_decl
) == NULL_TREE
)
5351 else if (skip_return
&& !VOID_TYPE_P (TREE_TYPE (DECL_RESULT (old_decl
))))
5353 DECL_RESULT (new_decl
)
5354 = build_decl (DECL_SOURCE_LOCATION (DECL_RESULT (old_decl
)),
5355 RESULT_DECL
, NULL_TREE
, void_type_node
);
5356 DECL_CONTEXT (DECL_RESULT (new_decl
)) = new_decl
;
5357 cfun
->returns_struct
= 0;
5358 cfun
->returns_pcc_struct
= 0;
5363 DECL_RESULT (new_decl
) = remap_decl (DECL_RESULT (old_decl
), &id
);
5364 lang_hooks
.dup_lang_specific_decl (DECL_RESULT (new_decl
));
5365 if (gimple_in_ssa_p (id
.src_cfun
)
5366 && DECL_BY_REFERENCE (DECL_RESULT (old_decl
))
5367 && (old_name
= ssa_default_def (id
.src_cfun
, DECL_RESULT (old_decl
))))
5369 tree new_name
= make_ssa_name (DECL_RESULT (new_decl
), NULL
);
5370 insert_decl_map (&id
, old_name
, new_name
);
5371 SSA_NAME_DEF_STMT (new_name
) = gimple_build_nop ();
5372 set_ssa_default_def (cfun
, DECL_RESULT (new_decl
), new_name
);
5376 /* Set up the destination functions loop tree. */
5377 if (loops_for_fn (DECL_STRUCT_FUNCTION (old_decl
)) != NULL
)
5379 cfun
->curr_properties
&= ~PROP_loops
;
5380 loop_optimizer_init (AVOID_CFG_MODIFICATIONS
);
5381 cfun
->curr_properties
|= PROP_loops
;
5384 /* Copy the Function's body. */
5385 copy_body (&id
, old_entry_block
->count
, REG_BR_PROB_BASE
,
5386 ENTRY_BLOCK_PTR
, EXIT_BLOCK_PTR
, new_entry
);
5388 /* Renumber the lexical scoping (non-code) blocks consecutively. */
5389 number_blocks (new_decl
);
5391 /* We want to create the BB unconditionally, so that the addition of
5392 debug stmts doesn't affect BB count, which may in the end cause
5393 codegen differences. */
5394 bb
= split_edge (single_succ_edge (ENTRY_BLOCK_PTR
));
5395 while (init_stmts
.length ())
5396 insert_init_stmt (&id
, bb
, init_stmts
.pop ());
5397 update_clone_info (&id
);
5399 /* Remap the nonlocal_goto_save_area, if any. */
5400 if (cfun
->nonlocal_goto_save_area
)
5402 struct walk_stmt_info wi
;
5404 memset (&wi
, 0, sizeof (wi
));
5406 walk_tree (&cfun
->nonlocal_goto_save_area
, remap_gimple_op_r
, &wi
, NULL
);
5410 pointer_map_destroy (id
.decl_map
);
5412 pointer_map_destroy (id
.debug_map
);
5413 free_dominance_info (CDI_DOMINATORS
);
5414 free_dominance_info (CDI_POST_DOMINATORS
);
5416 fold_marked_statements (0, id
.statements_to_fold
);
5417 pointer_set_destroy (id
.statements_to_fold
);
5418 fold_cond_expr_cond ();
5419 delete_unreachable_blocks_update_callgraph (&id
);
5420 if (id
.dst_node
->symbol
.definition
)
5421 cgraph_rebuild_references ();
5422 update_ssa (TODO_update_ssa
);
5424 /* After partial cloning we need to rescale frequencies, so they are
5425 within proper range in the cloned function. */
5428 struct cgraph_edge
*e
;
5429 rebuild_frequencies ();
5431 new_version_node
->count
= ENTRY_BLOCK_PTR
->count
;
5432 for (e
= new_version_node
->callees
; e
; e
= e
->next_callee
)
5434 basic_block bb
= gimple_bb (e
->call_stmt
);
5435 e
->frequency
= compute_call_stmt_bb_frequency (current_function_decl
,
5437 e
->count
= bb
->count
;
5439 for (e
= new_version_node
->indirect_calls
; e
; e
= e
->next_callee
)
5441 basic_block bb
= gimple_bb (e
->call_stmt
);
5442 e
->frequency
= compute_call_stmt_bb_frequency (current_function_decl
,
5444 e
->count
= bb
->count
;
5448 free_dominance_info (CDI_DOMINATORS
);
5449 free_dominance_info (CDI_POST_DOMINATORS
);
5451 gcc_assert (!id
.debug_stmts
.exists ());
5452 init_stmts
.release ();
5457 /* EXP is CALL_EXPR present in a GENERIC expression tree. Try to integrate
5458 the callee and return the inlined body on success. */
5461 maybe_inline_call_in_expr (tree exp
)
5463 tree fn
= get_callee_fndecl (exp
);
5465 /* We can only try to inline "const" functions. */
5466 if (fn
&& TREE_READONLY (fn
) && DECL_SAVED_TREE (fn
))
5468 struct pointer_map_t
*decl_map
= pointer_map_create ();
5469 call_expr_arg_iterator iter
;
5473 /* Remap the parameters. */
5474 for (param
= DECL_ARGUMENTS (fn
), arg
= first_call_expr_arg (exp
, &iter
);
5476 param
= DECL_CHAIN (param
), arg
= next_call_expr_arg (&iter
))
5477 *pointer_map_insert (decl_map
, param
) = arg
;
5479 memset (&id
, 0, sizeof (id
));
5481 id
.dst_fn
= current_function_decl
;
5482 id
.src_cfun
= DECL_STRUCT_FUNCTION (fn
);
5483 id
.decl_map
= decl_map
;
5485 id
.copy_decl
= copy_decl_no_change
;
5486 id
.transform_call_graph_edges
= CB_CGE_DUPLICATE
;
5487 id
.transform_new_cfg
= false;
5488 id
.transform_return_to_modify
= true;
5489 id
.transform_parameter
= true;
5490 id
.transform_lang_insert_block
= NULL
;
5492 /* Make sure not to unshare trees behind the front-end's back
5493 since front-end specific mechanisms may rely on sharing. */
5494 id
.regimplify
= false;
5495 id
.do_not_unshare
= true;
5497 /* We're not inside any EH region. */
5500 t
= copy_tree_body (&id
);
5501 pointer_map_destroy (decl_map
);
5503 /* We can only return something suitable for use in a GENERIC
5505 if (TREE_CODE (t
) == MODIFY_EXPR
)
5506 return TREE_OPERAND (t
, 1);
5512 /* Duplicate a type, fields and all. */
5515 build_duplicate_type (tree type
)
5517 struct copy_body_data id
;
5519 memset (&id
, 0, sizeof (id
));
5520 id
.src_fn
= current_function_decl
;
5521 id
.dst_fn
= current_function_decl
;
5523 id
.decl_map
= pointer_map_create ();
5524 id
.debug_map
= NULL
;
5525 id
.copy_decl
= copy_decl_no_change
;
5527 type
= remap_type_1 (type
, &id
);
5529 pointer_map_destroy (id
.decl_map
);
5531 pointer_map_destroy (id
.debug_map
);
5533 TYPE_CANONICAL (type
) = type
;