Thu Apr 8 19:20:18 1999 Jeffrey A Law (law@cygnus.com)
+ * flow.c (delete_unreachable_blocks): Do not require an edge to
+ be marked with EDGE_FALLTHRU when tidying an edge which connects
+ consecutive basic blocks.
+
+ * flow.c (can_delete_label_p): Do not convert a label into a
+ deleted label here.
+
* cse.c (flush_hash_table): New function.
(cse_insn): Flush the hash table when we encounter a volatile asm.
(cse_basic_block): Use flush_hash_table instead of doing it
basic_block c = BASIC_BLOCK (i);
edge s;
- /* We only need care for simple unconditional jumps, which implies
- a single successor. */
+ /* We care about simple conditional or unconditional jumps with
+ a single successor.
+
+ If we had a conditional branch to the next instruction when
+ find_basic_blocks was called, then there will only be one
+ out edge for the block which ended with the conditional
+ branch (since we do not create duplicate edges).
+
+ Furthermore, because we create the edge for the jump to the
+ label before the fallthrough edge, we will only see the
+ jump edge. So we do not want to check that the edge is a
+ FALLTHRU edge. */
if ((s = b->succ) != NULL
&& s->succ_next == NULL
- && s->dest == c
- && ! (s->flags & EDGE_FALLTHRU))
+ && s->dest == c)
tidy_fallthru_edge (s, b, c);
}
if (label == XEXP (x, 0))
return 0;
- /* User declared labels must be preserved, but we can
- convert them into a NOTE instead. */
+ /* User declared labels must be preserved. */
if (LABEL_NAME (label) != 0)
- {
- PUT_CODE (label, NOTE);
- NOTE_LINE_NUMBER (label) = NOTE_INSN_DELETED_LABEL;
- NOTE_SOURCE_FILE (label) = 0;
- return 0;
- }
+ return 0;
return 1;
}