Fix IPA CP where it forgot to add a reference in cgraph (PR ipa/71190).
2017-01-20 Martin Liska <mliska@suse.cz> PR ipa/71190 * cgraph.h (maybe_create_reference): Remove argument and update comment. * cgraphclones.c (cgraph_node::create_virtual_clone): Remove one argument. * ipa-cp.c (create_specialized_node): Likewise. * symtab.c (symtab_node::maybe_create_reference): Handle VAR_DECLs and ADDR_EXPRs and select ipa_ref_use type. From-SVN: r244687
This commit is contained in:
parent
a809d56440
commit
2d8d3ae293
5 changed files with 31 additions and 15 deletions
|
@ -1,3 +1,14 @@
|
|||
2017-01-20 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR ipa/71190
|
||||
* cgraph.h (maybe_create_reference): Remove argument and
|
||||
update comment.
|
||||
* cgraphclones.c (cgraph_node::create_virtual_clone): Remove one
|
||||
argument.
|
||||
* ipa-cp.c (create_specialized_node): Likewise.
|
||||
* symtab.c (symtab_node::maybe_create_reference): Handle
|
||||
VAR_DECLs and ADDR_EXPRs and select ipa_ref_use type.
|
||||
|
||||
2017-01-20 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* read-rtl-function.c (function_reader::create_function): Use
|
||||
|
|
|
@ -131,11 +131,9 @@ public:
|
|||
enum ipa_ref_use use_type, gimple *stmt);
|
||||
|
||||
/* If VAL is a reference to a function or a variable, add a reference from
|
||||
this symtab_node to the corresponding symbol table node. USE_TYPE specify
|
||||
type of the use and STMT the statement (if it exists). Return the new
|
||||
this symtab_node to the corresponding symbol table node. Return the new
|
||||
reference or NULL if none was created. */
|
||||
ipa_ref *maybe_create_reference (tree val, enum ipa_ref_use use_type,
|
||||
gimple *stmt);
|
||||
ipa_ref *maybe_create_reference (tree val, gimple *stmt);
|
||||
|
||||
/* Clone all references from symtab NODE to this symtab_node. */
|
||||
void clone_references (symtab_node *node);
|
||||
|
|
|
@ -624,7 +624,7 @@ cgraph_node::create_virtual_clone (vec<cgraph_edge *> redirect_callers,
|
|||
|| in_lto_p)
|
||||
new_node->unique_name = true;
|
||||
FOR_EACH_VEC_SAFE_ELT (tree_map, i, map)
|
||||
new_node->maybe_create_reference (map->new_tree, IPA_REF_ADDR, NULL);
|
||||
new_node->maybe_create_reference (map->new_tree, NULL);
|
||||
|
||||
if (ipa_transforms_to_apply.exists ())
|
||||
new_node->ipa_transforms_to_apply
|
||||
|
|
|
@ -3786,7 +3786,7 @@ create_specialized_node (struct cgraph_node *node,
|
|||
args_to_skip, "constprop");
|
||||
ipa_set_node_agg_value_chain (new_node, aggvals);
|
||||
for (av = aggvals; av; av = av->next)
|
||||
new_node->maybe_create_reference (av->value, IPA_REF_ADDR, NULL);
|
||||
new_node->maybe_create_reference (av->value, NULL);
|
||||
|
||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||
{
|
||||
|
|
25
gcc/symtab.c
25
gcc/symtab.c
|
@ -588,18 +588,25 @@ symtab_node::create_reference (symtab_node *referred_node,
|
|||
return ref;
|
||||
}
|
||||
|
||||
/* If VAL is a reference to a function or a variable, add a reference from
|
||||
this symtab_node to the corresponding symbol table node. USE_TYPE specify
|
||||
type of the use and STMT the statement (if it exists). Return the new
|
||||
reference or NULL if none was created. */
|
||||
|
||||
ipa_ref *
|
||||
symtab_node::maybe_create_reference (tree val, enum ipa_ref_use use_type,
|
||||
gimple *stmt)
|
||||
symtab_node::maybe_create_reference (tree val, gimple *stmt)
|
||||
{
|
||||
STRIP_NOPS (val);
|
||||
if (TREE_CODE (val) != ADDR_EXPR)
|
||||
return NULL;
|
||||
ipa_ref_use use_type;
|
||||
|
||||
switch (TREE_CODE (val))
|
||||
{
|
||||
case VAR_DECL:
|
||||
use_type = IPA_REF_LOAD;
|
||||
break;
|
||||
case ADDR_EXPR:
|
||||
use_type = IPA_REF_ADDR;
|
||||
break;
|
||||
default:
|
||||
gcc_assert (!handled_component_p (val));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
val = get_base_var (val);
|
||||
if (val && VAR_OR_FUNCTION_DECL_P (val))
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue