* recog.c (verify_changes): Make it static.
* recog.h: Remove the corresponding prototype.
+ * cfgbuild.c (find_sub_basic_blocks): Remove.
+ * basic-block.h: Remove the corresponding prototype.
+ * cfgexpand.c, cfgrtl.c: Don't mention find_sub_basic_blocks
+ in comments.
+ * doc/cfg.texi: Don't mention find_sub_basic_blocks.
+
2005-03-07 David Billinghurst <David.Billinghurst@riotinto.com>
* config/i386/cygwin1.c(mingw_scan): Use xstrdup in calls to putenv.
extern bool forwarder_block_p (basic_block);
extern bool purge_all_dead_edges (int);
extern bool purge_dead_edges (basic_block);
-extern void find_sub_basic_blocks (basic_block);
extern void find_many_sub_basic_blocks (sbitmap);
extern void rtl_make_eh_edge (sbitmap *, basic_block, rtx);
extern bool can_fallthru (basic_block, basic_block);
Available functionality:
- CFG construction
- find_basic_blocks
- - Local CFG construction
- find_sub_basic_blocks */
+ find_basic_blocks */
\f
#include "config.h"
#include "system.h"
timevar_pop (TV_CFG);
}
\f
-/* State of basic block as seen by find_sub_basic_blocks. */
+/* State of basic block as seen by find_many_sub_basic_blocks. */
enum state {BLOCK_NEW = 0, BLOCK_ORIGINAL, BLOCK_TO_SPLIT};
#define STATE(BB) (enum state) ((size_t) (BB)->aux)
FOR_EACH_BB (bb)
SET_STATE (bb, 0);
}
-
-/* Like above but for single basic block only. */
-
-void
-find_sub_basic_blocks (basic_block bb)
-{
- basic_block min, max, b;
- basic_block next = bb->next_bb;
-
- min = bb;
- find_bb_boundaries (bb);
- max = next->prev_bb;
-
- /* Now re-scan and wire in all edges. This expect simple (conditional)
- jumps at the end of each new basic blocks. */
- make_edges (min, max, 1);
-
- /* Update branch probabilities. Expect only (un)conditional jumps
- to be created with only the forward edges. */
- FOR_BB_BETWEEN (b, min, max->next_bb, next_bb)
- {
- edge e;
- edge_iterator ei;
-
- if (b != min)
- {
- b->count = 0;
- b->frequency = 0;
- FOR_EACH_EDGE (e, ei, b->preds)
- {
- b->count += e->count;
- b->frequency += EDGE_FREQUENCY (e);
- }
- }
-
- compute_outgoing_frequencies (b);
- }
-}
/* This is somewhat ugly: the call_expr expander often emits instructions
after the sibcall (to perform the function return). These confuse the
- find_sub_basic_blocks code, so we need to get rid of these. */
+ find_many_sub_basic_blocks code, so we need to get rid of these. */
last = NEXT_INSN (last);
gcc_assert (BARRIER_P (last));
e->flags &= ~EDGE_EXECUTABLE;
/* At the moment not all abnormal edges match the RTL representation.
- It is safe to remove them here as find_sub_basic_blocks will
+ It is safe to remove them here as find_many_sub_basic_blocks will
rediscover them. In the future we should get this fixed properly. */
if (e->flags & EDGE_ABNORMAL)
remove_edge (e);
else
gcc_assert (!JUMP_P (last));
- /* Mark the basic block for find_sub_basic_blocks. */
+ /* Mark the basic block for find_many_sub_basic_blocks. */
bb->aux = &bb->aux;
}
chain only. The CFG hooks defined in @file{cfghooks.h} should provide
the complete API required for manipulating and maintaining the CFG@.
-@findex find_sub_basic_blocks, split_block
+@findex split_block
It is also possible that a pass has to insert control flow instruction
into the middle of a basic block, thus creating an entry point in the
middle of the basic block, which is impossible by definition: The
block must be split to make sure it only has one entry point, i.e.@: the
-head of the basic block. In the RTL representation, the
-@code{find_sub_basic_blocks} may be used to split existing basic block
-and add necessary edges. The CFG hook @code{split_block} may be used
+head of the basic block. The CFG hook @code{split_block} may be used
when an instruction in the middle of a basic block has to become the
target of a jump or branch instruction.