From 735daab62b792c51d6e10cfd0b5e06e440c1ae55 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Thu, 16 May 2002 17:00:56 +0000 Subject: [PATCH] * cfgrtl.c (purge_dead_edges): Correct handling of EDGE_EH. From-SVN: r53520 --- gcc/ChangeLog | 4 ++++ gcc/cfgrtl.c | 19 ++++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 58c163b4685b..266de27de673 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2002-05-16 Mark Mitchell + + * cfgrtl.c (purge_dead_edges): Correct handling of EDGE_EH. + 2002-05-09 David S. Miller * config/sparc/sol2.h (ASM_CPU_SPEC): Handle -mcpu=v9. diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index 5e8bde248383..e57c88a7b5bc 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -1954,17 +1954,26 @@ purge_dead_edges (bb) e->flags &= ~EDGE_ABNORMAL; - /* Check purposes we can have edge. */ - if ((e->flags & EDGE_FALLTHRU) - && any_condjump_p (insn)) + /* See if this edge is one we should keep. */ + if ((e->flags & EDGE_FALLTHRU) && any_condjump_p (insn)) + /* A conditional jump can fall through into the next + block, so we should keep the edge. */ continue; else if (e->dest != EXIT_BLOCK_PTR && e->dest->head == JUMP_LABEL (insn)) + /* If the destination block is the target of the jump, + keep the edge. */ + continue; + else if (e->dest == EXIT_BLOCK_PTR && returnjump_p (insn)) + /* If the destination block is the exit block, and this + instruction is a return, then keep the edge. */ continue; - else if (e->dest == EXIT_BLOCK_PTR - && returnjump_p (insn)) + else if ((e->flags & EDGE_EH) && can_throw_internal (insn)) + /* Keep the edges that correspond to exceptions thrown by + this instruction. */ continue; + /* We do not need this edge. */ purged = true; remove_edge (e); } -- 2.47.2