diff options
author | Jan Hubicka <jh@suse.cz> | 2001-11-14 20:36:17 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2001-11-14 19:36:17 +0000 |
commit | 497786446ba35ea6814862bcd76851e1379653ab (patch) | |
tree | 8373fb038b6e57cf4216b741d08ffb702752c650 /gcc | |
parent | 852d3dad0dc7b0ed7144b1409393997830eab8d2 (diff) | |
download | gcc-497786446ba35ea6814862bcd76851e1379653ab.zip gcc-497786446ba35ea6814862bcd76851e1379653ab.tar.gz gcc-497786446ba35ea6814862bcd76851e1379653ab.tar.bz2 |
cfglayout.c (fixup_fallthru_exit_predecesor): New static function.
* cfglayout.c (fixup_fallthru_exit_predecesor): New static function.
(cfg_layout_finalize): Use it.
* bb-reorder.c (HAVE_epilogue): Remove.
(make_reorder_chain): Do not care special placement of
last basic block.
* predict.c (expected_value_to_br_prob): Delete the note
once transformed.
* c-decl.c (c_expand_body): Fix TV_EXPAND nesting problem;
measure integration time separately.
From-SVN: r47019
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 14 | ||||
-rw-r--r-- | gcc/bb-reorder.c | 23 | ||||
-rw-r--r-- | gcc/c-decl.c | 7 | ||||
-rw-r--r-- | gcc/cfglayout.c | 26 | ||||
-rw-r--r-- | gcc/predict.c | 1 |
5 files changed, 46 insertions, 25 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7607c84..44c5409 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,17 @@ +Wed Nov 14 19:46:08 CET 2001 Jan Hubicka <jh@suse.cz> + + * cfglayout.c (fixup_fallthru_exit_predecesor): New static function. + (cfg_layout_finalize): Use it. + * bb-reorder.c (HAVE_epilogue): Remove. + (make_reorder_chain): Do not care special placement of + last basic block. + + * predict.c (expected_value_to_br_prob): Delete the note + once transformed. + + * c-decl.c (c_expand_body): Fix TV_EXPAND nesting problem; + measure integration time separately. + Wed Nov 14 12:30:57 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * function.c (struct temp_slot): ALIGN now unsigned. diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c index 72cf90c..97ad142 100644 --- a/gcc/bb-reorder.c +++ b/gcc/bb-reorder.c @@ -90,10 +90,6 @@ #include "output.h" #include "cfglayout.h" -#ifndef HAVE_epilogue -#define HAVE_epilogue 0 -#endif - /* Local function prototypes. */ static void make_reorder_chain PARAMS ((void)); static basic_block make_reorder_chain_1 PARAMS ((basic_block, basic_block)); @@ -104,22 +100,10 @@ static basic_block make_reorder_chain_1 PARAMS ((basic_block, basic_block)); static void make_reorder_chain () { - basic_block last_block = NULL; basic_block prev = NULL; int nbb_m1 = n_basic_blocks - 1; basic_block next; - /* If we've not got epilogue in RTL, we must fallthru to the exit. - Force the last block to be at the end. */ - /* ??? Some ABIs (e.g. MIPS) require the return insn to be at the - end of the function for stack unwinding purposes. */ - if (! HAVE_epilogue) - { - last_block = BASIC_BLOCK (nbb_m1); - RBI (last_block)->visited = 1; - nbb_m1 -= 1; - } - /* Loop until we've placed every block. */ do { @@ -144,13 +128,6 @@ make_reorder_chain () prev = make_reorder_chain_1 (next, prev); } while (next); - - /* Terminate the chain. */ - if (! HAVE_epilogue) - { - RBI (prev)->next = last_block; - prev = last_block; - } RBI (prev)->next = NULL; } diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 0e4cf0c..f2289fe 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -6783,13 +6783,12 @@ c_expand_body (fndecl, nested_p, can_defer_p) if (flag_syntax_only) return; - timevar_push (TV_EXPAND); - if (flag_inline_trees) { /* First, cache whether the current function is inlinable. Some predicates depend on cfun and current_function_decl to function completely. */ + timevar_push (TV_INTEGRATION); uninlinable = ! tree_inlinable_function_p (fndecl); if (! uninlinable && can_defer_p @@ -6800,13 +6799,17 @@ c_expand_body (fndecl, nested_p, can_defer_p) { /* Let the back-end know that this funtion exists. */ (*debug_hooks->deferred_inline_function) (fndecl); + timevar_pop (TV_INTEGRATION); return; } /* Then, inline any functions called in it. */ optimize_inline_calls (fndecl); + timevar_pop (TV_INTEGRATION); } + timevar_push (TV_EXPAND); + if (nested_p) { /* Make sure that we will evaluate variable-sized types involved diff --git a/gcc/cfglayout.c b/gcc/cfglayout.c index 5c2ee08..d93d44f 100644 --- a/gcc/cfglayout.c +++ b/gcc/cfglayout.c @@ -110,6 +110,7 @@ static rtx get_next_bb_note PARAMS ((rtx)); static rtx get_prev_bb_note PARAMS ((rtx)); void verify_insn_chain PARAMS ((void)); +static basic_block fixup_fallthru_exit_predecesor PARAMS ((void)); /* Skip over inter-block insns occurring after BB which are typically associated with BB (e.g., barriers). If there are any such insns, @@ -1041,6 +1042,30 @@ verify_insn_chain () abort (); } } + +/* The block falling trought to exit must be last in the reordered + chain. Make it happen so. */ +static basic_block +fixup_fallthru_exit_predecesor () +{ + edge e; + basic_block bb = NULL; + + for (e = EXIT_BLOCK_PTR->pred; e; e = e->pred_next) + if (e->flags & EDGE_FALLTHRU) + bb = e->src; + if (bb && RBI (bb)->next) + { + basic_block c = BASIC_BLOCK (0); + while (RBI (c)->next != bb) + c = RBI (c)->next; + RBI (c)->next = RBI (bb)->next; + while (RBI (c)->next) + c = RBI (c)->next; + RBI (c)->next = bb; + RBI (bb)->next = NULL; + } +} /* Main entry point to this module - initialize the datastructures for CFG layout changes. */ @@ -1062,6 +1087,7 @@ cfg_layout_initialize () void cfg_layout_finalize () { + fixup_fallthru_exit_predecesor (); fixup_reorder_chain (); #ifdef ENABLE_CHECKING verify_insn_chain (); diff --git a/gcc/predict.c b/gcc/predict.c index 3bfa204..c5cc0a4 100644 --- a/gcc/predict.c +++ b/gcc/predict.c @@ -540,6 +540,7 @@ expected_value_to_br_prob () { ev = NOTE_EXPECTED_VALUE (insn); ev_reg = XEXP (ev, 0); + delete_insn (insn); } continue; |