This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [CFG] Loop represenation & new loop optimizer works
> Hello.
>
> Here is the patch with changes you wanted.
>
> Zdenek Dvorak
>
> Changelog:
>
> * Makefile.in (OBJS): Add loop-new.o.
> (function.o, reg-stack.o, bb-reorder.o, tracer.o):
> Add dependency on basic-block.h.
> (loop-new.o): New.
> * basic-block.h (basic_block, struct loop, struct loops):
> Change loop representation.
> (flow_loop_outside_edge_p):
> Changed declaration.
> (flow_loop_tree_node_add): Declare.
> (LOOP_EXITS_DOMS): Removed (not used anywhere and hard to maintain
> just now).
> (flow_loop_outside_edge_p, flow_bb_inside_loop_p,
> get_loop_body, dfs_enumerate_from, add_bb_to_loop,
> remove_bb_from_loops, find_common_loop, create_preheader):
> Declare.
> (nearest_common_dominator, set_immediate_dominator,
> get_immediate_dominator, dominated_by_p,
> get_dominated_by, verify_dominators):
> Declare.
> * bb-reorder.c (reorder_basic_blocks): Modified.
> * cfg.c (entry_exit_blocks): Initialize new fields.
> (dump_flow_info): Modified.
> * cfganal.c (dfs_enumerate_from): New.
> * cfgbuild.c (find_basic_blocks): Zero liveness info;
> should be done cleaner way later.
> * cfglayout.c (cleanup_unconditional_jumps,
> cfg_layout_duplicate_bb, cfg_layout_initialize):
> Update loop structure.
> * cfglayout.h (reorder_block_def): Support for loop copying.
> (cfg_layout_initialize): Declaration modified.
> * cfgloop.c (flow_loop_nested_p, flow_loop_entry_edges_find,
> flow_loop_exit_edges_find, flow_loop_pre_header_scan,
> flow_loops_cfg_dump, flow_loops_free,
> flow_loop_pre_header_find, flow_loop_scan):
> Adapted for new loop represenation.
> (flow_loop_nodes_find, flow_loop_tree_node_add,
> flow_loops_tree_build, flow_loop_level_compute):
> Reworked to create new loop representation.
> (make_forwarder_block, canonicalize_loop_headers): New static
> functions.
> * cfgloopanal.c (for_each_insn_in_loop,
> not_invariant_rtx, test_invariants):
> Adapted for new loop represenation.
> (create_preheader): New.
> * loop.h (loop_optimizer_init, loop_optimizer_finalize):
> New loop optimizer interface declaration.
> * predict.c (estimate_loops_at_level, propagate_freq,
> estimate_probability, estimate_bb_frequencies):
> Adapted for new loop representation.
> * toplev.c (rest_of_compilation): Prepare for
> new loop optimizer.
> * tracer.c (tracer): Modified.
> * loop-new.c: New file.
> (get_immediate_dominator, set_immediate_dominator,
> get_dominated_by, nearest_common_dominator,
> dominated_by_p, verify_dominators, recount_dominator):
> Stupid dominator handling. Should be replaced soon.
> (loop_optimizer_init, loop_optimizer_finalize):
> New loop optimizer interface.
Looks OK now except the memory leak in make_forwarder_block in allocating aux
field I will fix during applying the patch.
Honza