mirror of
https://github.com/LIV2/bebbo-gcc.git
synced 2025-12-06 00:23:32 +00:00
Backported from mainline
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. * gcc.dg/pr80747.c: New test. * gcc.dg/pr83512.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-6-branch@262049 138bc75d-0d04-0410-961f-82ee72b054a4
This commit is contained in:
parent
3a806dc308
commit
070cfc4091
@ -3,6 +3,15 @@
|
||||
Backported from mainline
|
||||
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
|
||||
* tree-ssa-math-opts.c (is_widening_mult_p): Return false if
|
||||
for INTEGER_TYPE TYPE_OVERFLOW_TRAPS.
|
||||
|
||||
@ -2402,7 +2402,10 @@ reorder_basic_blocks_simple (void)
|
||||
|
||||
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;
|
||||
|
||||
for (int pass = 0; pass < 2 && need_another_pass; pass++)
|
||||
@ -2443,7 +2446,6 @@ reorder_basic_blocks_simple (void)
|
||||
{
|
||||
force_nonfallthru (e);
|
||||
e->src->aux = ENTRY_BLOCK_PTR_FOR_FN (cfun)->aux;
|
||||
BB_COPY_PARTITION (e->src, e->dest);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1541,6 +1541,9 @@ force_nonfallthru_and_redirect (edge e, basic_block target, rtx jump_label)
|
||||
basic_block bb = create_basic_block (BB_HEAD (e->dest), NULL,
|
||||
ENTRY_BLOCK_PTR_FOR_FN (cfun));
|
||||
|
||||
/* 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
|
||||
a new edge from the entry block to the new block. */
|
||||
e->src = bb;
|
||||
|
||||
@ -3,6 +3,11 @@
|
||||
Backported from mainline
|
||||
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
|
||||
* g++.dg/tree-ssa/pr83523.C: New test.
|
||||
|
||||
|
||||
18
gcc/testsuite/gcc.dg/pr80747.c
Normal file
18
gcc/testsuite/gcc.dg/pr80747.c
Normal file
@ -0,0 +1,18 @@
|
||||
/* 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;
|
||||
}
|
||||
16
gcc/testsuite/gcc.dg/pr83512.c
Normal file
16
gcc/testsuite/gcc.dg/pr83512.c
Normal file
@ -0,0 +1,16 @@
|
||||
/* 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;
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user