re PR bootstrap/47187 (profiledbootstrap failure on i386)

PR bootstrap/47187
	* value-prof.c (gimple_stringop_fixed_value): Handle
	lhs of the call properly.

	* gcc.dg/tree-prof/pr47187.c: New test.

From-SVN: r168581
This commit is contained in:
Jakub Jelinek 2011-01-07 19:39:11 +01:00 committed by Jakub Jelinek
parent fe95fbf907
commit c6a8f6de08
4 changed files with 50 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2011-01-07 Jakub Jelinek <jakub@redhat.com>
PR bootstrap/47187
* value-prof.c (gimple_stringop_fixed_value): Handle
lhs of the call properly.
2011-01-07 Jan Hubicka <jh@suse.cz>
PR lto/45375

View File

@ -1,3 +1,8 @@
2011-01-07 Jakub Jelinek <jakub@redhat.com>
PR bootstrap/47187
* gcc.dg/tree-prof/pr47187.c: New test.
2011-01-07 Tobias Burnus <burnus@net-b.de>
PR fortran/41580

View File

@ -0,0 +1,23 @@
/* PR bootstrap/47187 */
/* { dg-options "-O2" } */
char buf[64];
char buf2[64];
void *
foo (char *p, long size)
{
return __builtin_memcpy (buf, p, size);
}
int
main (void)
{
long i;
for (i = 0; i < 65536; i++)
if (foo ("abcdefghijkl", 12) != buf)
__builtin_abort ();
if (foo (buf2, 64) != buf)
__builtin_abort ();
return 0;
}

View File

@ -1,5 +1,5 @@
/* Transformations based on profile information for values.
Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
This file is part of GCC.
@ -1401,6 +1401,21 @@ gimple_stringop_fixed_value (gimple vcall_stmt, tree icall_size, int prob,
e_vj->probability = REG_BR_PROB_BASE;
e_vj->count = all - count;
/* Insert PHI node for the call result if necessary. */
if (gimple_call_lhs (vcall_stmt)
&& TREE_CODE (gimple_call_lhs (vcall_stmt)) == SSA_NAME)
{
tree result = gimple_call_lhs (vcall_stmt);
gimple phi = create_phi_node (result, join_bb);
SSA_NAME_DEF_STMT (result) = phi;
gimple_call_set_lhs (vcall_stmt,
make_ssa_name (SSA_NAME_VAR (result), vcall_stmt));
add_phi_arg (phi, gimple_call_lhs (vcall_stmt), e_vj, UNKNOWN_LOCATION);
gimple_call_set_lhs (icall_stmt,
make_ssa_name (SSA_NAME_VAR (result), icall_stmt));
add_phi_arg (phi, gimple_call_lhs (icall_stmt), e_ij, UNKNOWN_LOCATION);
}
/* Because these are all string op builtins, they're all nothrow. */
gcc_assert (!stmt_could_throw_p (vcall_stmt));
gcc_assert (!stmt_could_throw_p (icall_stmt));