diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-01-28 22:22:50 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-01-28 22:22:50 +0000 |
commit | 777e249ae8010727efffb45959cbdf7a2eed5c1b (patch) | |
tree | 838b5c749cb462341ad1b64dc6cc0bd1daa6820f /gcc/toplev.c | |
parent | 271f3c2e97c4ffb6dcf82ba570f6be2244bf963d (diff) | |
download | gcc-777e249ae8010727efffb45959cbdf7a2eed5c1b.tar.gz |
* flow.c (find_basic_blocks): Remove do_cleanup argument.
Break out that code ...
(cleanup_cfg): ... here.
(commit_one_edge_insertion): Detect a return instruction being
emitted to an edge. Emit a barrier following; clear fallthru.
(commit_edge_insertions): Verify CFG consistency.
* function.c (expand_function_start): Kill unused variable.
(expand_function_end): Likewise.
(thread_prologue_and_epilogue_insns): Use insert_insn_on_edge
to insert the epilogue.
* gcse.c (gcse_main): Adjust for find_basic_blocks change.
(delete_null_pointer_checks): Likewise.
* output.h: Likewise.
* reg-stack.c (reg_to_stack): Likewise.
* toplev.c (rest_of_compilation): Likewise. Run
thread_prologue_and_epilogue_insns after rebuilding the CFG.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31676 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/toplev.c')
-rw-r--r-- | gcc/toplev.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/gcc/toplev.c b/gcc/toplev.c index 189c3e71353..136d9666270 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -3216,7 +3216,8 @@ rest_of_compilation (decl) TIMEVAR (flow_time, { - find_basic_blocks (insns, max_reg_num (), rtl_dump_file, 1); + find_basic_blocks (insns, max_reg_num (), rtl_dump_file); + cleanup_cfg (insns); if (optimize) calculate_loop_depth (rtl_dump_file); life_analysis (insns, max_reg_num (), rtl_dump_file, 1); @@ -3384,13 +3385,6 @@ rest_of_compilation (decl) if (rebuild_label_notes_after_reload) TIMEVAR (jump_time, rebuild_jump_labels (insns)); - /* On some machines, the prologue and epilogue code, or parts thereof, - can be represented as RTL. Doing so lets us schedule insns between - it and the rest of the code and also allows delayed branch - scheduling to operate in the epilogue. */ - - thread_prologue_and_epilogue_insns (insns); - /* If optimizing and we are performing instruction scheduling after reload, then go ahead and split insns now since we are about to recompute flow information anyway. @@ -3412,12 +3406,23 @@ rest_of_compilation (decl) if (flow2_dump) open_dump_file (".14.flow2", decl_printable_name (decl, 2)); + TIMEVAR (flow2_time, + { + find_basic_blocks (insns, max_reg_num (), rtl_dump_file); + }); + + /* On some machines, the prologue and epilogue code, or parts thereof, + can be represented as RTL. Doing so lets us schedule insns between + it and the rest of the code and also allows delayed branch + scheduling to operate in the epilogue. */ + thread_prologue_and_epilogue_insns (insns); + if (optimize) { TIMEVAR (flow2_time, { - find_basic_blocks (insns, max_reg_num (), rtl_dump_file, 1); + cleanup_cfg (insns); life_analysis (insns, max_reg_num (), rtl_dump_file, 1); }); |