re PR tree-optimization/54200 (copyrename generates wrong debuginfo)
2012-08-13 Richard Guenther <rguenther@suse.de> PR tree-optimization/54200 * tree-ssa-copyrename.c (rename_ssa_copies): Do not add PHI results to another partition if not all PHI arguments have the same partition. * gcc.dg/guality/pr54200.c: New testcase. * gcc.dg/tree-ssa/slsr-8.c: Adjust. From-SVN: r190339
This commit is contained in:
parent
f27c186710
commit
61f7b9ae93
@ -1,3 +1,10 @@
|
||||
2012-08-13 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/54200
|
||||
* tree-ssa-copyrename.c (rename_ssa_copies): Do not add
|
||||
PHI results to another partition if not all PHI arguments
|
||||
have the same partition.
|
||||
|
||||
2012-08-12 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* tree-pass.h (write_summary, write_optimization_summary): Remove
|
||||
|
@ -1,3 +1,9 @@
|
||||
2012-08-13 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/54200
|
||||
* gcc.dg/guality/pr54200.c: New testcase.
|
||||
* gcc.dg/tree-ssa/slsr-8.c: Adjust.
|
||||
|
||||
2012-08-12 Oleg Endo <olegendo@gcc.gnu.org>
|
||||
|
||||
* gcc.target/sh/prefetch.c: Add -m3* to inclusion list.
|
||||
|
28
gcc/testsuite/gcc.dg/guality/pr54200.c
Normal file
28
gcc/testsuite/gcc.dg/guality/pr54200.c
Normal file
@ -0,0 +1,28 @@
|
||||
/* PR tree-optimization/54200 */
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-g -fno-var-tracking-assignments" } */
|
||||
|
||||
int o __attribute__((used));
|
||||
|
||||
void bar (void) { o = 2; }
|
||||
|
||||
int __attribute__((noinline,noclone))
|
||||
foo (int z, int x, int b)
|
||||
{
|
||||
if (x == 1)
|
||||
{
|
||||
bar ();
|
||||
return z;
|
||||
}
|
||||
else
|
||||
{
|
||||
int a = (x + z) + b;
|
||||
return a; /* { dg-final { gdb-test 20 "z" "3" } } */
|
||||
}
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
foo (3, 2, 1);
|
||||
return 0;
|
||||
}
|
@ -17,7 +17,7 @@ f (int s, int *c)
|
||||
return x1 ? x2 : x3;
|
||||
}
|
||||
|
||||
/* There are 2 ' * ' instances in the decls (since "int * x3;" is
|
||||
optimized out), 1 parm, 2 in the code. */
|
||||
/* { dg-final { scan-tree-dump-times " \\* " 5 "optimized" } } */
|
||||
/* There are 4 ' * ' instances in the decls (since "int * iftmp.0;" is
|
||||
added), 1 parm, 2 in the code. */
|
||||
/* { dg-final { scan-tree-dump-times " \\* " 7 "optimized" } } */
|
||||
/* { dg-final { cleanup-tree-dump "optimized" } } */
|
||||
|
@ -348,15 +348,53 @@ rename_ssa_copies (void)
|
||||
res = gimple_phi_result (phi);
|
||||
|
||||
/* Do not process virtual SSA_NAMES. */
|
||||
if (!is_gimple_reg (res))
|
||||
if (virtual_operand_p (res))
|
||||
continue;
|
||||
|
||||
for (i = 0; i < gimple_phi_num_args (phi); i++)
|
||||
{
|
||||
tree arg = gimple_phi_arg (phi, i)->def;
|
||||
if (TREE_CODE (arg) == SSA_NAME)
|
||||
updated |= copy_rename_partition_coalesce (map, res, arg, debug);
|
||||
}
|
||||
/* Make sure to only use the same partition for an argument
|
||||
as the result but never the other way around. */
|
||||
if (SSA_NAME_VAR (res)
|
||||
&& !DECL_IGNORED_P (SSA_NAME_VAR (res)))
|
||||
for (i = 0; i < gimple_phi_num_args (phi); i++)
|
||||
{
|
||||
tree arg = PHI_ARG_DEF (phi, i);
|
||||
if (TREE_CODE (arg) == SSA_NAME)
|
||||
updated |= copy_rename_partition_coalesce (map, res, arg,
|
||||
debug);
|
||||
}
|
||||
/* Else if all arguments are in the same partition try to merge
|
||||
it with the result. */
|
||||
else
|
||||
{
|
||||
int all_p_same = -1;
|
||||
int p = -1;
|
||||
for (i = 0; i < gimple_phi_num_args (phi); i++)
|
||||
{
|
||||
tree arg = PHI_ARG_DEF (phi, i);
|
||||
if (TREE_CODE (arg) != SSA_NAME)
|
||||
{
|
||||
all_p_same = 0;
|
||||
break;
|
||||
}
|
||||
else if (all_p_same == -1)
|
||||
{
|
||||
p = partition_find (map->var_partition,
|
||||
SSA_NAME_VERSION (arg));
|
||||
all_p_same = 1;
|
||||
}
|
||||
else if (all_p_same == 1
|
||||
&& p != partition_find (map->var_partition,
|
||||
SSA_NAME_VERSION (arg)))
|
||||
{
|
||||
all_p_same = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (all_p_same == 1)
|
||||
updated |= copy_rename_partition_coalesce (map, res,
|
||||
PHI_ARG_DEF (phi, 0),
|
||||
debug);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user