mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-12 21:33:54 +08:00
Fix simdclones
gcc/ChangeLog: PR ipa/97576 * cgraphclones.c (cgraph_node::materialize_clone): Clear stmt references. * cgraphunit.c (mark_functions_to_output): Do not clear them here. * ipa-inline-transform.c (inline_transform): Clear stmt references. * symtab.c (symtab_node::clear_stmts_in_references): Make recursive for clones. * tree-ssa-structalias.c (ipa_pta_execute): Do not clear references. gcc/testsuite/ChangeLog: PR ipa/97576 * gcc.c-torture/compile/pr97576.c: New test.
This commit is contained in:
parent
2d5aad691f
commit
783dc02d89
@ -1115,6 +1115,7 @@ cgraph_node::materialize_clone ()
|
||||
if (clone.param_adjustments)
|
||||
clone.param_adjustments->dump (symtab->dump_file);
|
||||
}
|
||||
clear_stmts_in_references ();
|
||||
/* Copy the OLD_VERSION_NODE function tree to the new version. */
|
||||
tree_function_versioning (clone_of->decl, decl,
|
||||
clone.tree_map, clone.param_adjustments,
|
||||
|
@ -1600,7 +1600,6 @@ mark_functions_to_output (void)
|
||||
FOR_EACH_FUNCTION (node)
|
||||
{
|
||||
tree decl = node->decl;
|
||||
node->clear_stmts_in_references ();
|
||||
|
||||
gcc_assert (!node->process || node->same_comdat_group);
|
||||
if (node->process)
|
||||
|
@ -716,6 +716,7 @@ inline_transform (struct cgraph_node *node)
|
||||
if (n->decl != node->decl)
|
||||
n->materialize_clone ();
|
||||
}
|
||||
node->clear_stmts_in_references ();
|
||||
|
||||
/* We might need the body of this function so that we can expand
|
||||
it inline somewhere else. */
|
||||
|
10
gcc/symtab.c
10
gcc/symtab.c
@ -752,7 +752,8 @@ symtab_node::remove_stmt_references (gimple *stmt)
|
||||
i++;
|
||||
}
|
||||
|
||||
/* Remove all stmt references in non-speculative references.
|
||||
/* Remove all stmt references in non-speculative references in THIS
|
||||
and all clones.
|
||||
Those are not maintained during inlining & cloning.
|
||||
The exception are speculative references that are updated along
|
||||
with callgraph edges associated with them. */
|
||||
@ -770,6 +771,13 @@ symtab_node::clear_stmts_in_references (void)
|
||||
r->lto_stmt_uid = 0;
|
||||
r->speculative_id = 0;
|
||||
}
|
||||
cgraph_node *cnode = dyn_cast <cgraph_node *> (this);
|
||||
if (cnode)
|
||||
{
|
||||
if (cnode->clones)
|
||||
for (cnode = cnode->clones; cnode; cnode = cnode->next_sibling_clone)
|
||||
cnode->clear_stmts_in_references ();
|
||||
}
|
||||
}
|
||||
|
||||
/* Remove all references in ref list. */
|
||||
|
18
gcc/testsuite/gcc.c-torture/compile/pr97576.c
Normal file
18
gcc/testsuite/gcc.c-torture/compile/pr97576.c
Normal file
@ -0,0 +1,18 @@
|
||||
void
|
||||
pc (void);
|
||||
|
||||
void __attribute__ ((simd))
|
||||
ty (void);
|
||||
|
||||
void __attribute__ ((simd))
|
||||
gf ()
|
||||
{
|
||||
ty ();
|
||||
}
|
||||
|
||||
void __attribute__ ((simd))
|
||||
ty (void)
|
||||
{
|
||||
gf (pc);
|
||||
gf (gf);
|
||||
}
|
@ -8138,10 +8138,6 @@ ipa_pta_execute (void)
|
||||
from = constraints.length ();
|
||||
}
|
||||
|
||||
/* FIXME: Clone materialization is not preserving stmt references. */
|
||||
FOR_EACH_DEFINED_FUNCTION (node)
|
||||
node->clear_stmts_in_references ();
|
||||
|
||||
/* Build the constraints. */
|
||||
FOR_EACH_DEFINED_FUNCTION (node)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user