diff options
author | Jan Hubicka <hubicka@freesoft.cz> | 1999-12-09 11:51:44 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 1999-12-09 10:51:44 +0000 |
commit | 5dd56a932b3e62d8302a7a57f526bebe7c66eb85 (patch) | |
tree | 6c6130018fdd982a23677a34b38a91d6e26c8d44 | |
parent | e73ccf83b659d36880b3e6bd0ab9d935d4d8eacb (diff) | |
download | gcc-5dd56a932b3e62d8302a7a57f526bebe7c66eb85.zip gcc-5dd56a932b3e62d8302a7a57f526bebe7c66eb85.tar.gz gcc-5dd56a932b3e62d8302a7a57f526bebe7c66eb85.tar.bz2 |
* flow.c (recompute_reg_usage): Use basic block info to get loop_depth.
From-SVN: r30843
-rw-r--r-- | gcc/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/flow.c | 84 |
2 files changed, 41 insertions, 45 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index aa3dd01..4834010 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,7 @@ Thu Dec 9 11:36:24 MET 1999 Jan Hubicka <hubicka@freesoft.cz> + * flow.c (recompute_reg_usage): Use basic block info to get loop_depth. + * combine.c (try_combine, distribute_notes): Remove REG_N_REFS updating code. @@ -5578,6 +5578,7 @@ recompute_reg_usage (f, loop_step) { rtx insn; int i, max_reg; + int index; /* Clear out the old data. */ max_reg = max_reg_num (); @@ -5590,58 +5591,51 @@ recompute_reg_usage (f, loop_step) /* Scan each insn in the chain and count how many times each register is set/used. */ loop_depth = 1; - for (insn = f; insn; insn = NEXT_INSN (insn)) + for (index = 0; index < n_basic_blocks; index++) { - /* Keep track of loop depth. */ - if (GET_CODE (insn) == NOTE) - { - /* Look for loop boundaries. */ - if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END) - loop_depth -= loop_step; - else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG) - loop_depth += loop_step; - - /* If we have LOOP_DEPTH == 0, there has been a bookkeeping error. - Abort now rather than setting register status incorrectly. */ - if (loop_depth == 0) - abort (); - } - else if (GET_RTX_CLASS (GET_CODE (insn)) == 'i') - { - rtx links; + basic_block bb = BASIC_BLOCK (index); + loop_depth = bb->loop_depth; + for (insn = bb->head; insn; insn = NEXT_INSN (insn)) + { + if (GET_RTX_CLASS (GET_CODE (insn)) == 'i') + { + rtx links; - /* This call will increment REG_N_SETS for each SET or CLOBBER - of a register in INSN. It will also increment REG_N_REFS - by the loop depth for each set of a register in INSN. */ - count_reg_sets (PATTERN (insn)); + /* This call will increment REG_N_SETS for each SET or CLOBBER + of a register in INSN. It will also increment REG_N_REFS + by the loop depth for each set of a register in INSN. */ + count_reg_sets (PATTERN (insn)); - /* count_reg_sets does not detect autoincrement address modes, so - detect them here by looking at the notes attached to INSN. */ - for (links = REG_NOTES (insn); links; links = XEXP (links, 1)) - { - if (REG_NOTE_KIND (links) == REG_INC) - /* Count (weighted) references, stores, etc. This counts a - register twice if it is modified, but that is correct. */ - REG_N_SETS (REGNO (XEXP (links, 0)))++; - } + /* count_reg_sets does not detect autoincrement address modes, so + detect them here by looking at the notes attached to INSN. */ + for (links = REG_NOTES (insn); links; links = XEXP (links, 1)) + { + if (REG_NOTE_KIND (links) == REG_INC) + /* Count (weighted) references, stores, etc. This counts a + register twice if it is modified, but that is correct. */ + REG_N_SETS (REGNO (XEXP (links, 0)))++; + } - /* This call will increment REG_N_REFS by the current loop depth for - each reference to a register in INSN. */ - count_reg_references (PATTERN (insn)); + /* This call will increment REG_N_REFS by the current loop depth for + each reference to a register in INSN. */ + count_reg_references (PATTERN (insn)); - /* count_reg_references will not include counts for arguments to - function calls, so detect them here by examining the - CALL_INSN_FUNCTION_USAGE data. */ - if (GET_CODE (insn) == CALL_INSN) - { - rtx note; + /* count_reg_references will not include counts for arguments to + function calls, so detect them here by examining the + CALL_INSN_FUNCTION_USAGE data. */ + if (GET_CODE (insn) == CALL_INSN) + { + rtx note; - for (note = CALL_INSN_FUNCTION_USAGE (insn); - note; - note = XEXP (note, 1)) - if (GET_CODE (XEXP (note, 0)) == USE) - count_reg_references (XEXP (XEXP (note, 0), 0)); + for (note = CALL_INSN_FUNCTION_USAGE (insn); + note; + note = XEXP (note, 1)) + if (GET_CODE (XEXP (note, 0)) == USE) + count_reg_references (XEXP (XEXP (note, 0), 0)); + } } + if (insn == bb->end) + break; } } } |