Avoid extraneous remapping in copy_gimple_seq_and_replace_locals

2016-01-15  Martin Jambor  <mjambor@suse.cz>

	* tree-inline.c (remap_decl): Use existing dclarations if
	remapping a type and prevent_decl_creation_for_types.
	(replace_locals_stmt): Do an initial remapping of non-VLA typed
	decls first.  Do real remapping with
	prevent_decl_creation_for_types set.
	* tree-inline.h (copy_body_data): New field
	prevent_decl_creation_for_types, moved remap_var_for_cilk to avoid
	padding.

From-SVN: r232419
This commit is contained in:
Martin Jambor 2016-01-15 13:43:49 +01:00 committed by Martin Jambor
parent aa189aee2e
commit 8f634fb4f1
3 changed files with 42 additions and 8 deletions

View File

@ -1,3 +1,14 @@
2016-01-15 Martin Jambor <mjambor@suse.cz>
* tree-inline.c (remap_decl): Use existing dclarations if
remapping a type and prevent_decl_creation_for_types.
(replace_locals_stmt): Do an initial remapping of non-VLA typed
decls first. Do real remapping with
prevent_decl_creation_for_types set.
* tree-inline.h (copy_body_data): New field
prevent_decl_creation_for_types, moved remap_var_for_cilk to avoid
padding.
2016-01-15 Dominik Vogt <vogt@linux.vnet.ibm.com>
* config/s390/s390.opt (mmvcle): More verbose help text.

View File

@ -340,8 +340,17 @@ remap_decl (tree decl, copy_body_data *id)
return decl;
}
/* If we didn't already have an equivalent for this declaration,
create one now. */
/* When remapping a type within copy_gimple_seq_and_replace_locals, all
necessary DECLs have already been remapped and we do not want to duplicate
a decl coming from outside of the sequence we are copying. */
if (!n
&& id->prevent_decl_creation_for_types
&& id->remapping_type_depth > 0
&& (VAR_P (decl) || TREE_CODE (decl) == PARM_DECL))
return decl;
/* If we didn't already have an equivalent for this declaration, create one
now. */
if (!n)
{
/* Make a copy of the variable or label. */
@ -5225,8 +5234,19 @@ replace_locals_stmt (gimple_stmt_iterator *gsip,
/* This will remap a lot of the same decls again, but this should be
harmless. */
if (gimple_bind_vars (stmt))
gimple_bind_set_vars (stmt, remap_decls (gimple_bind_vars (stmt),
NULL, id));
{
tree old_var, decls = gimple_bind_vars (stmt);
for (old_var = decls; old_var; old_var = DECL_CHAIN (old_var))
if (!can_be_nonlocal (old_var, id)
&& ! variably_modified_type_p (TREE_TYPE (old_var), id->src_fn))
remap_decl (old_var, id);
gcc_checking_assert (!id->prevent_decl_creation_for_types);
id->prevent_decl_creation_for_types = true;
gimple_bind_set_vars (stmt, remap_decls (decls, NULL, id));
id->prevent_decl_creation_for_types = false;
}
}
/* Keep iterating. */

View File

@ -140,14 +140,17 @@ struct copy_body_data
the originals have been mapped to a value rather than to a
variable. */
hash_map<tree, tree> *debug_map;
/* Cilk keywords currently need to replace some variables that
ordinary nested functions do not. */
bool remap_var_for_cilk;
/* A map from the inlined functions dependence info cliques to
equivalents in the function into which it is being inlined. */
hash_map<dependence_hash, unsigned short> *dependence_map;
/* Cilk keywords currently need to replace some variables that
ordinary nested functions do not. */
bool remap_var_for_cilk;
/* Do not create new declarations when within type remapping. */
bool prevent_decl_creation_for_types;
};
/* Weights of constructions for estimate_num_insns. */