Commit 349721b7 by Jakub Jelinek Committed by Jakub Jelinek

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: r250814
parent 04199738
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-02 Richard Biener <rguenther@suse.de>
* tree-vect-stmts.c (vectorizable_store): Perform vector extracts
......
......@@ -6048,20 +6048,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 ();
......
2017-08-02 Jakub Jelinek <jakub@redhat.com>
PR middle-end/79499
* gcc.dg/pr79499.c: New test.
2017-08-02 Richard Biener <rguenther@suse.de>
PR tree-optimization/81633
......
/* 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);
}
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