Commit 6c6aa8e6 by Richard Biener Committed by Richard Biener

re PR tree-optimization/60979 (ICE: in gimple_redirect_edge_and_branch_force, at…

re PR tree-optimization/60979 (ICE: in gimple_redirect_edge_and_branch_force, at tree-cfg.c:5544, w/ -O -ftree-loop-linear or -fgraphite-identity)

2014-04-28  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/60979
	* graphite-scop-detection.c (scopdet_basic_block_info): Reject
	SCOPs that end in a block with a successor with abnormal
	predecessors.

	* gcc.dg/graphite/pr60979.c: New testcase.

From-SVN: r209859
parent 9540b3c3
2014-04-28 Richard Biener <rguenther@suse.de> 2014-04-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/60979
* graphite-scop-detection.c (scopdet_basic_block_info): Reject
SCOPs that end in a block with a successor with abnormal
predecessors.
2014-04-28 Richard Biener <rguenther@suse.de>
* tree-pass.h (execute_pass_list): Adjust prototype. * tree-pass.h (execute_pass_list): Adjust prototype.
* passes.c (pass_manager::execute_early_local_passes): * passes.c (pass_manager::execute_early_local_passes):
Adjust. Adjust.
......
...@@ -474,8 +474,10 @@ scopdet_basic_block_info (basic_block bb, loop_p outermost_loop, ...@@ -474,8 +474,10 @@ scopdet_basic_block_info (basic_block bb, loop_p outermost_loop,
result.exits = false; result.exits = false;
/* Mark bbs terminating a SESE region difficult, if they start /* Mark bbs terminating a SESE region difficult, if they start
a condition. */ a condition or if the block it exits to cannot be split
if (!single_succ_p (bb)) with make_forwarder_block. */
if (!single_succ_p (bb)
|| bb_has_abnormal_pred (single_succ (bb)))
result.difficult = true; result.difficult = true;
else else
result.exit = single_succ (bb); result.exit = single_succ (bb);
......
2014-04-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/60979
* gcc.dg/graphite/pr60979.c: New testcase.
2014-04-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com> 2014-04-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR c/60983 PR c/60983
......
/* { dg-options "-O -fgraphite-identity" } */
#include <setjmp.h>
struct x;
typedef struct x **(*a)(struct x *);
struct x {
union {
struct {
union {
a *i;
} l;
int s;
} y;
} e;
};
jmp_buf c;
void
b(struct x *r)
{
int f;
static int w = 0;
volatile jmp_buf m;
f = (*(((struct x *)r)->e.y.l.i[2]((struct x *)r)))->e.y.s;
if (w++ != 0)
__builtin_memcpy((char *)m, (const char *)c, sizeof(jmp_buf));
if (setjmp (c) == 0) {
int z;
for (z = 0; z < 0; ++z)
;
}
d((const char *)m);
}
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