mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-21 10:20:29 +08:00
re PR ipa/60911 (wrong code with -O2 -flto -fipa-pta)
2014-04-25 Richard Biener <rguenther@suse.de> PR ipa/60911 * passes.c (apply_ipa_transforms): Inline into only caller ... (execute_one_pass): ... here. Properly bring in function bodies for nodes we want to apply IPA transforms to. * gcc.dg/lto/pr60911_0.c: New testcase. From-SVN: r209779
This commit is contained in:
parent
9490b8da72
commit
78422fb13c
gcc
@ -1,3 +1,10 @@
|
||||
2014-04-25 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR ipa/60911
|
||||
* passes.c (apply_ipa_transforms): Inline into only caller ...
|
||||
(execute_one_pass): ... here. Properly bring in function
|
||||
bodies for nodes we want to apply IPA transforms to.
|
||||
|
||||
2014-04-24 Cong Hou <congh@google.com>
|
||||
|
||||
PR tree-optimization/60896
|
||||
|
34
gcc/passes.c
34
gcc/passes.c
@ -2039,20 +2039,6 @@ execute_all_ipa_transforms (void)
|
||||
}
|
||||
}
|
||||
|
||||
/* Callback for do_per_function to apply all IPA transforms. */
|
||||
|
||||
static void
|
||||
apply_ipa_transforms (void *data)
|
||||
{
|
||||
struct cgraph_node *node = cgraph_get_node (current_function_decl);
|
||||
if (!node->global.inlined_to && node->ipa_transforms_to_apply.exists ())
|
||||
{
|
||||
*(bool *)data = true;
|
||||
execute_all_ipa_transforms ();
|
||||
rebuild_cgraph_edges ();
|
||||
}
|
||||
}
|
||||
|
||||
/* Check if PASS is explicitly disabled or enabled and return
|
||||
the gate status. FUNC is the function to be processed, and
|
||||
GATE_STATUS is the gate status determined by pass manager by
|
||||
@ -2124,8 +2110,26 @@ execute_one_pass (opt_pass *pass)
|
||||
Apply all trnasforms first. */
|
||||
if (pass->type == SIMPLE_IPA_PASS)
|
||||
{
|
||||
struct cgraph_node *node;
|
||||
bool applied = false;
|
||||
do_per_function (apply_ipa_transforms, (void *)&applied);
|
||||
FOR_EACH_DEFINED_FUNCTION (node)
|
||||
if (node->analyzed
|
||||
&& cgraph_function_with_gimple_body_p (node)
|
||||
&& (!node->clone_of || node->decl != node->clone_of->decl))
|
||||
{
|
||||
if (!node->global.inlined_to
|
||||
&& node->ipa_transforms_to_apply.exists ())
|
||||
{
|
||||
cgraph_get_body (node);
|
||||
push_cfun (DECL_STRUCT_FUNCTION (node->decl));
|
||||
execute_all_ipa_transforms ();
|
||||
rebuild_cgraph_edges ();
|
||||
free_dominance_info (CDI_DOMINATORS);
|
||||
free_dominance_info (CDI_POST_DOMINATORS);
|
||||
pop_cfun ();
|
||||
applied = true;
|
||||
}
|
||||
}
|
||||
if (applied)
|
||||
symtab_remove_unreachable_nodes (true, dump_file);
|
||||
/* Restore current_pass. */
|
||||
|
@ -1,3 +1,8 @@
|
||||
2014-04-25 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR ipa/60911
|
||||
* gcc.dg/lto/pr60911_0.c: New testcase.
|
||||
|
||||
2014-04-24 Cong Hou <congh@google.com>
|
||||
|
||||
PR tree-optimization/60896
|
||||
|
21
gcc/testsuite/gcc.dg/lto/pr60911_0.c
Normal file
21
gcc/testsuite/gcc.dg/lto/pr60911_0.c
Normal file
@ -0,0 +1,21 @@
|
||||
// { dg-lto-do run }
|
||||
// { dg-lto-options { { -O2 -flto -fipa-pta } } }
|
||||
|
||||
int __attribute__ ((__noinline__)) f (unsigned *p, int *x)
|
||||
{
|
||||
int y = *p++ & 0xfff;
|
||||
*x++ = y;
|
||||
*x = *p;
|
||||
return y;
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
unsigned u[2] = { 0x3aad, 0x5ad1 };
|
||||
int x[2] = { 17689, 23456 };
|
||||
|
||||
if (f (u, x) != 0xaad || x[0] != 0xaad || x[1] != 0x5ad1)
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user