From 24c545ff924c8a6a24f5b85f6352cac27bd18247 Mon Sep 17 00:00:00 2001 From: Bernd Schmidt Date: Mon, 4 Feb 2002 19:19:04 +0000 Subject: [PATCH] cfgrtl.c (force_nonfallthru_and_redirect): Don't try to redirect the entry block. * cfgrtl.c (force_nonfallthru_and_redirect): Don't try to redirect the entry block. From-SVN: r49488 --- gcc/ChangeLog | 5 +++++ gcc/cfgrtl.c | 23 ++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e55ca94e7e8..f80d9e8e3e2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-02-04 Bernd Schmidt + + * cfgrtl.c (force_nonfallthru_and_redirect): Don't try to redirect + the entry block. + 2002-02-04 Richard Henderson * combine.c (force_to_mode): Remove STACK_BIAS code. diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index 9e8269b8479..42358b2ccf0 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -918,7 +918,28 @@ force_nonfallthru_and_redirect (e, target) abort (); else if (!(e->flags & EDGE_FALLTHRU)) abort (); - else if (e->src->succ->succ_next) + else if (e->src == ENTRY_BLOCK_PTR) + { + /* We can't redirect the entry block. Create an empty block at the + start of the function which we use to add the new jump. */ + edge *pe1; + basic_block bb = create_basic_block (0, e->dest->head, NULL); + + /* 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; + for (pe1 = &ENTRY_BLOCK_PTR->succ; *pe1; pe1 = &(*pe1)->succ_next) + if (*pe1 == e) + { + *pe1 = e->succ_next; + break; + } + e->succ_next = 0; + bb->succ = e; + make_single_succ_edge (ENTRY_BLOCK_PTR, bb, EDGE_FALLTHRU); + } + + if (e->src->succ->succ_next) { /* Create the new structures. */ note = last_loop_beg_note (e->src->end);