re PR middle-end/79499 (ICE in rtl_verify_bb_insns, at cfgrtl.c:2661)
PR middle-end/79499 * function.c (thread_prologue_and_epilogue_insns): Determine blocks for find_many_sub_basic_blocks bitmap by looking up BLOCK_FOR_INSN of first NONDEBUG_INSN_P in each of the split_prologue_seq and prologue_seq sequences - if any. * gcc.dg/pr79499.c: New test. From-SVN: r250815
This commit is contained in:
parent
31aa0bad3e
commit
b396c65489
|
@ -1,3 +1,11 @@
|
|||
2017-08-02 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/79499
|
||||
* function.c (thread_prologue_and_epilogue_insns): Determine blocks
|
||||
for find_many_sub_basic_blocks bitmap by looking up BLOCK_FOR_INSN
|
||||
of first NONDEBUG_INSN_P in each of the split_prologue_seq and
|
||||
prologue_seq sequences - if any.
|
||||
|
||||
2017-08-01 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/81641
|
||||
|
|
|
@ -6057,20 +6057,42 @@ thread_prologue_and_epilogue_insns (void)
|
|||
|
||||
if (split_prologue_seq || prologue_seq)
|
||||
{
|
||||
rtx_insn *split_prologue_insn = split_prologue_seq;
|
||||
if (split_prologue_seq)
|
||||
insert_insn_on_edge (split_prologue_seq, orig_entry_edge);
|
||||
{
|
||||
while (split_prologue_insn && !NONDEBUG_INSN_P (split_prologue_insn))
|
||||
split_prologue_insn = NEXT_INSN (split_prologue_insn);
|
||||
insert_insn_on_edge (split_prologue_seq, orig_entry_edge);
|
||||
}
|
||||
|
||||
rtx_insn *prologue_insn = prologue_seq;
|
||||
if (prologue_seq)
|
||||
insert_insn_on_edge (prologue_seq, entry_edge);
|
||||
{
|
||||
while (prologue_insn && !NONDEBUG_INSN_P (prologue_insn))
|
||||
prologue_insn = NEXT_INSN (prologue_insn);
|
||||
insert_insn_on_edge (prologue_seq, entry_edge);
|
||||
}
|
||||
|
||||
commit_edge_insertions ();
|
||||
|
||||
/* Look for basic blocks within the prologue insns. */
|
||||
auto_sbitmap blocks (last_basic_block_for_fn (cfun));
|
||||
bitmap_clear (blocks);
|
||||
bitmap_set_bit (blocks, entry_edge->dest->index);
|
||||
bitmap_set_bit (blocks, orig_entry_edge->dest->index);
|
||||
find_many_sub_basic_blocks (blocks);
|
||||
if (split_prologue_insn
|
||||
&& BLOCK_FOR_INSN (split_prologue_insn) == NULL)
|
||||
split_prologue_insn = NULL;
|
||||
if (prologue_insn
|
||||
&& BLOCK_FOR_INSN (prologue_insn) == NULL)
|
||||
prologue_insn = NULL;
|
||||
if (split_prologue_insn || prologue_insn)
|
||||
{
|
||||
auto_sbitmap blocks (last_basic_block_for_fn (cfun));
|
||||
bitmap_clear (blocks);
|
||||
if (split_prologue_insn)
|
||||
bitmap_set_bit (blocks,
|
||||
BLOCK_FOR_INSN (split_prologue_insn)->index);
|
||||
if (prologue_insn)
|
||||
bitmap_set_bit (blocks, BLOCK_FOR_INSN (prologue_insn)->index);
|
||||
find_many_sub_basic_blocks (blocks);
|
||||
}
|
||||
}
|
||||
|
||||
default_rtl_profile ();
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2017-08-02 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/79499
|
||||
* gcc.dg/pr79499.c: New test.
|
||||
|
||||
2017-08-01 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/81641
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
/* PR middle-end/79499 */
|
||||
/* { dg-do compile { target split_stack } } */
|
||||
/* { dg-options "-O2 -fsplit-stack -fno-omit-frame-pointer" } */
|
||||
|
||||
struct S { struct S *a, *b; };
|
||||
|
||||
void
|
||||
foo (struct S *x)
|
||||
{
|
||||
do
|
||||
x->b = x->a;
|
||||
while (x = x->a);
|
||||
}
|
Loading…
Reference in New Issue