re PR bootstrap/51648 (Profiledbootstrap failure on x86_64-linux)

PR bootstrap/51648
	* tree-cfg.c (need_fake_edge_p): Return true also for noreturn
	calls that have any non-fake successor edges.

From-SVN: r182902
This commit is contained in:
Jakub Jelinek 2012-01-05 10:32:52 +01:00 committed by Jakub Jelinek
parent 9696698a51
commit bfeb0869d6
2 changed files with 23 additions and 7 deletions

View file

@ -1,5 +1,9 @@
2012-01-05 Jakub Jelinek <jakub@redhat.com>
PR bootstrap/51648
* tree-cfg.c (need_fake_edge_p): Return true also for noreturn
calls that have any non-fake successor edges.
PR debug/51746
* var-tracking.c (add_stores): For COND_EXEC allow oval to be NULL.

View file

@ -1,6 +1,6 @@
/* Control flow functions for trees.
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
2010, 2011 Free Software Foundation, Inc.
2010, 2011, 2012 Free Software Foundation, Inc.
Contributed by Diego Novillo <dnovillo@redhat.com>
This file is part of GCC.
@ -6882,9 +6882,20 @@ need_fake_edge_p (gimple t)
&& DECL_FUNCTION_CODE (fndecl) == BUILT_IN_FORK))
return false;
if (is_gimple_call (t)
&& !(call_flags & ECF_NORETURN))
return true;
if (is_gimple_call (t))
{
edge_iterator ei;
edge e;
basic_block bb;
if (!(call_flags & ECF_NORETURN))
return true;
bb = gimple_bb (t);
FOR_EACH_EDGE (e, ei, bb->succs)
if ((e->flags & EDGE_FAKE) == 0)
return true;
}
if (gimple_code (t) == GIMPLE_ASM
&& (gimple_asm_volatile_p (t) || gimple_asm_input_p (t)))
@ -6895,9 +6906,10 @@ need_fake_edge_p (gimple t)
/* Add fake edges to the function exit for any non constant and non
noreturn calls, volatile inline assembly in the bitmap of blocks
specified by BLOCKS or to the whole CFG if BLOCKS is zero. Return
the number of blocks that were split.
noreturn calls (or noreturn calls with EH/abnormal edges),
volatile inline assembly in the bitmap of blocks specified by BLOCKS
or to the whole CFG if BLOCKS is zero. Return the number of blocks
that were split.
The goal is to expose cases in which entering a basic block does
not imply that all subsequent instructions must be executed. */