This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Natural loop detection


Jeffrey A Law writes:
 > You could use a bitmap for each loop where each bit corresponds
 > to a particular edge.  I'd suggest using bitmaps instead of sbitmaps given
 > that this information is likely to be very sparse or you could build chains
 > with an EXPR_LIST or something like that.

I ended up opting for an array of edges.  I would have liked a linked
list of edges but this didn't seem to be worth the memory allocation
overhead.  Using EXPR_LIST for non-rtx data seemed grubby.

I have also rth-ified the code to use basic blocks pointers rather
than indexes.  It doesn't really save any indirection during the loop
hunting phase but may be more useful when using the gathered loop
data.

Here's the modified patch, incorporating your suggestions.

1999-11-30  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>

	* flow.c (flow_nodes_print, flow_loops_cfg_dump, flow_loop_nested_p,
		flow_loops_dump, flow_loops_free, flow_loop_exits_find, 
		flow_loop_nodes_find, flow_depth_first_order_compute, 
		flow_loop_pre_header_find, flow_loop_tree_node_add,
		flow_loops_tree_build, flow_loop_level_compute, 
		flow_loops_level_compute, flow_loops_find,
		flow_loop_outside_edge_p): New functions to find natural
		loops in the CFG and to build loop heirachy tree.
	* basic-block.h (flow_loops_find, flow_loops_free, flow_loop_dump):
	Added protoypes.
	(struct loops, struct loop): Define.
	* sbitmap.c (sbitmap_a_subset_b_p): New function.
	* sbitmap.h (sbitmap_a_subset_b_p): Added prototype.
	* bitmap.h


begin 644 natural-loop2.patch.gz
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
=X%<@:'R7!X#17K\#6&BYG80";_\O>216<IYE````
`
end

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]