Commit 63e1159c by Jakub Jelinek Committed by Jakub Jelinek

re PR rtl-optimization/80747 (gcc.dg/tree-ssa/tailrecursion-4.c fails with ICE…

re PR rtl-optimization/80747 (gcc.dg/tree-ssa/tailrecursion-4.c fails with ICE when compiled with options "-fprofile-use -freorder-blocks-and-partition")

	PR rtl-optimization/80747
	PR rtl-optimization/83512
	* cfgrtl.c (force_nonfallthru_and_redirect): When splitting
	succ edge from ENTRY, copy partition from e->dest to the newly
	created bb.
	* bb-reorder.c (reorder_basic_blocks_simple): If last_tail is
	ENTRY, use BB_PARTITION of its successor block as current_partition.
	Don't copy partition when splitting succ edge from ENTRY.

	* gcc.dg/pr80747.c: New test.
	* gcc.dg/pr83512.c: New test.

From-SVN: r255954
parent 9b8e85a5
2017-12-21 Jakub Jelinek <jakub@redhat.com> 2017-12-21 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/80747
PR rtl-optimization/83512
* cfgrtl.c (force_nonfallthru_and_redirect): When splitting
succ edge from ENTRY, copy partition from e->dest to the newly
created bb.
* bb-reorder.c (reorder_basic_blocks_simple): If last_tail is
ENTRY, use BB_PARTITION of its successor block as current_partition.
Don't copy partition when splitting succ edge from ENTRY.
PR tree-optimization/83523 PR tree-optimization/83523
* tree-ssa-math-opts.c (is_widening_mult_p): Return false if * tree-ssa-math-opts.c (is_widening_mult_p): Return false if
for INTEGER_TYPE TYPE_OVERFLOW_TRAPS. for INTEGER_TYPE TYPE_OVERFLOW_TRAPS.
...@@ -2405,7 +2405,10 @@ reorder_basic_blocks_simple (void) ...@@ -2405,7 +2405,10 @@ reorder_basic_blocks_simple (void)
basic_block last_tail = (basic_block) ENTRY_BLOCK_PTR_FOR_FN (cfun)->aux; basic_block last_tail = (basic_block) ENTRY_BLOCK_PTR_FOR_FN (cfun)->aux;
int current_partition = BB_PARTITION (last_tail); int current_partition
= BB_PARTITION (last_tail == ENTRY_BLOCK_PTR_FOR_FN (cfun)
? EDGE_SUCC (ENTRY_BLOCK_PTR_FOR_FN (cfun), 0)->dest
: last_tail);
bool need_another_pass = true; bool need_another_pass = true;
for (int pass = 0; pass < 2 && need_another_pass; pass++) for (int pass = 0; pass < 2 && need_another_pass; pass++)
...@@ -2446,7 +2449,6 @@ reorder_basic_blocks_simple (void) ...@@ -2446,7 +2449,6 @@ reorder_basic_blocks_simple (void)
{ {
force_nonfallthru (e); force_nonfallthru (e);
e->src->aux = ENTRY_BLOCK_PTR_FOR_FN (cfun)->aux; e->src->aux = ENTRY_BLOCK_PTR_FOR_FN (cfun)->aux;
BB_COPY_PARTITION (e->src, e->dest);
} }
} }
......
...@@ -1534,6 +1534,9 @@ force_nonfallthru_and_redirect (edge e, basic_block target, rtx jump_label) ...@@ -1534,6 +1534,9 @@ force_nonfallthru_and_redirect (edge e, basic_block target, rtx jump_label)
ENTRY_BLOCK_PTR_FOR_FN (cfun)); ENTRY_BLOCK_PTR_FOR_FN (cfun));
bb->count = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count; bb->count = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count;
/* Make sure new block ends up in correct hot/cold section. */
BB_COPY_PARTITION (bb, e->dest);
/* Change the existing edge's source to be the new block, and add /* Change the existing edge's source to be the new block, and add
a new edge from the entry block to the new block. */ a new edge from the entry block to the new block. */
e->src = bb; e->src = bb;
......
2017-12-21 Jakub Jelinek <jakub@redhat.com> 2017-12-21 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/80747
PR rtl-optimization/83512
* gcc.dg/pr80747.c: New test.
* gcc.dg/pr83512.c: New test.
PR tree-optimization/83523 PR tree-optimization/83523
* g++.dg/tree-ssa/pr83523.C: New test. * g++.dg/tree-ssa/pr83523.C: New test.
......
/* PR rtl-optimization/80747 */
/* { dg-do compile } */
/* { dg-options "-fprofile-use -freorder-blocks-and-partition -O1 -foptimize-sibling-calls" } */
int
foo (int a)
{
int r;
if (a & 1)
r = foo (a - 1);
else if (a)
r = foo (a - 2);
else
return 0;
if (r)
r = r;
return r;
}
/* PR rtl-optimization/83512 */
/* { dg-do compile } */
/* { dg-options "-O2 -freorder-blocks-algorithm=simple" } */
int a;
void
foo (int *x)
{
for (;;)
{
for (*x = 0; *x < 1; *x++)
;
++a;
}
}
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