re PR regression/58165 (internal compiler error: verify_flow_info)
PR tree-optimization/58165 * tree-call-cdce.c (shrink_wrap_one_built_in_call): If bi_call must be the last stmt in a bb, don't split_block, instead use fallthru edge from it and give up if there is none. Release conds vector when returning early. * g++.dg/opt/pr58165.C: New test. From-SVN: r201780
This commit is contained in:
parent
a23d240db0
commit
7a46059462
|
@ -1,3 +1,11 @@
|
||||||
|
2013-08-16 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR tree-optimization/58165
|
||||||
|
* tree-call-cdce.c (shrink_wrap_one_built_in_call): If
|
||||||
|
bi_call must be the last stmt in a bb, don't split_block, instead
|
||||||
|
use fallthru edge from it and give up if there is none.
|
||||||
|
Release conds vector when returning early.
|
||||||
|
|
||||||
2013-08-14 Xinliang David Li <davidxl@google.com>
|
2013-08-14 Xinliang David Li <davidxl@google.com>
|
||||||
|
|
||||||
* config/i386/i386.c (ix86_option_override_internal):
|
* config/i386/i386.c (ix86_option_override_internal):
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2013-08-16 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR tree-optimization/58165
|
||||||
|
* g++.dg/opt/pr58165.C: New test.
|
||||||
|
|
||||||
2013-08-14 Paolo Carlini <paolo.carlini@oracle.com>
|
2013-08-14 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
PR c++/51912
|
PR c++/51912
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
// PR tree-optimization/58165
|
||||||
|
// { dg-do compile }
|
||||||
|
// { dg-options "-O2" }
|
||||||
|
|
||||||
|
extern "C" float sqrtf (float);
|
||||||
|
|
||||||
|
struct A { A (); ~A (); };
|
||||||
|
|
||||||
|
void
|
||||||
|
foo (double d)
|
||||||
|
{
|
||||||
|
A a;
|
||||||
|
sqrtf (d);
|
||||||
|
}
|
|
@ -726,15 +726,28 @@ shrink_wrap_one_built_in_call (gimple bi_call)
|
||||||
return false and do not do any transformation for
|
return false and do not do any transformation for
|
||||||
the call. */
|
the call. */
|
||||||
if (nconds == 0)
|
if (nconds == 0)
|
||||||
return false;
|
{
|
||||||
|
conds.release ();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bi_call_bb = gimple_bb (bi_call);
|
bi_call_bb = gimple_bb (bi_call);
|
||||||
|
|
||||||
/* Now find the join target bb -- split
|
/* Now find the join target bb -- split bi_call_bb if needed. */
|
||||||
bi_call_bb if needed. */
|
if (stmt_ends_bb_p (bi_call))
|
||||||
bi_call_bsi = gsi_for_stmt (bi_call);
|
{
|
||||||
|
/* If the call must be the last in the bb, don't split the block,
|
||||||
|
it could e.g. have EH edges. */
|
||||||
|
join_tgt_in_edge_from_call = find_fallthru_edge (bi_call_bb->succs);
|
||||||
|
if (join_tgt_in_edge_from_call == NULL)
|
||||||
|
{
|
||||||
|
conds.release ();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
join_tgt_in_edge_from_call = split_block (bi_call_bb, bi_call);
|
||||||
|
|
||||||
join_tgt_in_edge_from_call = split_block (bi_call_bb, bi_call);
|
|
||||||
bi_call_bsi = gsi_for_stmt (bi_call);
|
bi_call_bsi = gsi_for_stmt (bi_call);
|
||||||
|
|
||||||
join_tgt_bb = join_tgt_in_edge_from_call->dest;
|
join_tgt_bb = join_tgt_in_edge_from_call->dest;
|
||||||
|
|
Loading…
Reference in New Issue