Commit bfeb0869 by Jakub Jelinek Committed by Jakub Jelinek

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
parent 9696698a
2012-01-05 Jakub Jelinek <jakub@redhat.com> 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 PR debug/51746
* var-tracking.c (add_stores): For COND_EXEC allow oval to be NULL. * var-tracking.c (add_stores): For COND_EXEC allow oval to be NULL.
/* Control flow functions for trees. /* Control flow functions for trees.
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 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> Contributed by Diego Novillo <dnovillo@redhat.com>
This file is part of GCC. This file is part of GCC.
...@@ -6882,9 +6882,20 @@ need_fake_edge_p (gimple t) ...@@ -6882,9 +6882,20 @@ need_fake_edge_p (gimple t)
&& DECL_FUNCTION_CODE (fndecl) == BUILT_IN_FORK)) && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_FORK))
return false; return false;
if (is_gimple_call (t) if (is_gimple_call (t))
&& !(call_flags & ECF_NORETURN)) {
return true; 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 if (gimple_code (t) == GIMPLE_ASM
&& (gimple_asm_volatile_p (t) || gimple_asm_input_p (t))) && (gimple_asm_volatile_p (t) || gimple_asm_input_p (t)))
...@@ -6895,9 +6906,10 @@ need_fake_edge_p (gimple t) ...@@ -6895,9 +6906,10 @@ need_fake_edge_p (gimple t)
/* Add fake edges to the function exit for any non constant and non /* Add fake edges to the function exit for any non constant and non
noreturn calls, volatile inline assembly in the bitmap of blocks noreturn calls (or noreturn calls with EH/abnormal edges),
specified by BLOCKS or to the whole CFG if BLOCKS is zero. Return volatile inline assembly in the bitmap of blocks specified by BLOCKS
the number of blocks that were split. 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 The goal is to expose cases in which entering a basic block does
not imply that all subsequent instructions must be executed. */ not imply that all subsequent instructions must be executed. */
......
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