diff options
author | Richard Biener <rguenther@suse.de> | 2013-04-26 08:01:19 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2013-04-26 08:01:19 +0000 |
commit | a9e0d843713b294d12c3a3faedbc0c817e581014 (patch) | |
tree | 6dc72b0a543f5b83d0d65dbb0cb065eb0cb323b5 /gcc/tree-cfg.c | |
parent | a2e836b2ac02b691a2085888d3a73d0296e93970 (diff) | |
download | gcc-a9e0d843713b294d12c3a3faedbc0c817e581014.zip gcc-a9e0d843713b294d12c3a3faedbc0c817e581014.tar.gz gcc-a9e0d843713b294d12c3a3faedbc0c817e581014.tar.bz2 |
tree-cfg.c (execute_build_cfg): Build the loop tree.
2013-03-26 Richard Biener <rguenther@suse.de>
* tree-cfg.c (execute_build_cfg): Build the loop tree.
(pass_build_cfg): Provide PROP_loops.
(move_sese_region_to_fn): Remove loops that are outlined into fn
for now.
* tree-inline.c: Include cfgloop.h.
(initialize_cfun): Do not drop PROP_loops.
(copy_loops): New function.
(copy_cfg_body): Copy loop structure.
(tree_function_versioning): Initialize destination loop tree.
* tree-ssa-loop.c (pass_tree_loop_init): Do not provide PROP_loops.
(pass_parallelize_loops): Do IL verification.
* loop-init.c (loop_optimizer_init): Fixup loops if required.
* tree-optimize.c (execute_fixup_cfg): If we need to cleanup
the CFG make sure we fixup loops as well.
* tree-ssa-tail-merge.c: Include cfgloop.h.
(replace_block_by): When merging loop latches mark loops for fixup.
* lto-streamer-out.c (output_struct_function_base): Drop
PROP_loops for now.
* tree-ssa-phiopt.c: Include tree-scalar-evolution.h.
(tree_ssa_cs_elim): Initialize the loop optimizer and SCEV.
* ipa-split.c: Include cfgloop.h.
(split_function): Add the new return block to the loop tree root.
* tree-cfgcleanup.c (remove_forwarder_block_with_phi): Return
whether we have removed the forwarder block.
(merge_phi_nodes): If we removed a forwarder mark loops for fixup.
* cfgloop.h (place_new_loop): Declare.
* cfgloopmanip.c (place_new_loop): Export.
* Makefile.in (asan.o): Add $(CFGLOOP_H) dependency.
(tree-switch-conversion.o): Likewise.
(tree-complex.o): Likewise.
(tree-inline.o): Likewise.
(tree-ssa-tailmerge.o): Likewise.
(ipa-split.o): Likewise.
(tree-ssa-phiopt.o): Add $(SCEV_H) dependency.
(tree-ssa-copy.o): Likewise.
* tree-switch-conversion.c: Include cfgloop.h
(process_switch): If we emit a bit-test cascade, schedule loops
for fixup.
* tree-complex.c: Include cfgloop.h.
(expand_complex_div_wide): Properly add new basic-blocks to loops.
* asan.c: Include cfgloop.h.
(create_cond_insert_point): Properly add new basic-blocks to
loops, schedule loop fixup.
* cfgloop.c (verify_loop_structure): Check that looks are not
marked for fixup.
* omp-low.c (expand_parallel_call): Properly add new basic-blocks
to loops.
(expand_omp_for_generic): Likewise.
(expand_omp_sections): Likewise.
(expand_omp_atomic_pipeline): Schedule loops for fixup.
* tree-ssa-copy.c: Include tree-scalar-evolution.h.
(fini_copy_prop): Disable DCE in substitute_and_fold if SCEV
is initialized, not when loops are present.
* tree-parloops.c (parallelize_loops): Remove checking here.
* passes.c (init_optimization_passes): Schedule a copy-propagation
pass before complete unrolling of inner loops.
* gcc.dg/tree-prof/update-loopch.c: Revert last change.
* gcc.dg/graphite/pr33766.c: Fix undefined behavior.
* gcc.dg/pr53265.c: Remove XFAILs.
* gcc.dg/tree-ssa/loop-38.c: Remove unreliable dump scanning.
* gcc.dg/tree-ssa/pr21559.c: Change back to two expected jump threads.
From-SVN: r198333
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r-- | gcc/tree-cfg.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index c5c25a7..cbbc5c7 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -247,6 +247,8 @@ execute_build_cfg (void) fprintf (dump_file, "Scope blocks:\n"); dump_scope_blocks (dump_file, dump_flags); } + cleanup_tree_cfg (); + loop_optimizer_init (AVOID_CFG_MODIFICATIONS); return 0; } @@ -263,10 +265,10 @@ struct gimple_opt_pass pass_build_cfg = 0, /* static_pass_number */ TV_TREE_CFG, /* tv_id */ PROP_gimple_leh, /* properties_required */ - PROP_cfg, /* properties_provided */ + PROP_cfg | PROP_loops, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - TODO_verify_stmts | TODO_cleanup_cfg /* todo_flags_finish */ + TODO_verify_stmts /* todo_flags_finish */ } }; @@ -6713,6 +6715,18 @@ move_sese_region_to_fn (struct function *dest_cfun, basic_block entry_bb, d.eh_map = eh_map; d.remap_decls_p = true; + /* Cancel all loops inside the SESE region. + ??? We rely on loop fixup because loop structure is not 100% + up-to-date when called from OMP lowering and thus cancel_loop_tree + will not work. + ??? Properly move loops to the outlined function. */ + FOR_EACH_VEC_ELT (bbs, i, bb) + if (bb->loop_father->header == bb) + { + bb->loop_father->header = NULL; + bb->loop_father->latch = NULL; + loops_state_set (LOOPS_NEED_FIXUP); + } FOR_EACH_VEC_ELT (bbs, i, bb) { /* No need to update edge counts on the last block. It has |