Commit c6a8f6de by Jakub Jelinek Committed by Jakub Jelinek

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
parent fe95fbf9
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> 2011-01-07 Jan Hubicka <jh@suse.cz>
PR lto/45375 PR lto/45375
......
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> 2011-01-07 Tobias Burnus <burnus@net-b.de>
PR fortran/41580 PR fortran/41580
......
/* 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;
}
/* Transformations based on profile information for values. /* 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. Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -1401,6 +1401,21 @@ gimple_stringop_fixed_value (gimple vcall_stmt, tree icall_size, int prob, ...@@ -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->probability = REG_BR_PROB_BASE;
e_vj->count = all - count; 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. */ /* 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 (vcall_stmt));
gcc_assert (!stmt_could_throw_p (icall_stmt)); gcc_assert (!stmt_could_throw_p (icall_stmt));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment