From: Jakub Jelinek Date: Fri, 20 Apr 2001 07:56:50 +0000 (+0200) Subject: gcse.c (gcse_main): Fix comment typo. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=43e720723ff64cdbed12173248b783938173ab0a;p=gcc.git gcse.c (gcse_main): Fix comment typo. * gcse.c (gcse_main): Fix comment typo. (delete_null_pointer_check): Likewise. (hash_scan_set): Don't consider sets with REG_EQUIV MEM notes. * cse.c (cse_insn): Likewise. * function.c (fixup_var_refs_insns_with_hash): The sequence is toplevel. * gcc.c-torture/execute/20010403-1.c: New test. From-SVN: r41444 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fdb66e07ebc..6de127a3dcc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2001-04-20 Jakub Jelinek + + * gcse.c (gcse_main): Fix comment typo. + (delete_null_pointer_check): Likewise. + (hash_scan_set): Don't consider sets with REG_EQUIV MEM notes. + * cse.c (cse_insn): Likewise. + * function.c (fixup_var_refs_insns_with_hash): The sequence is + toplevel. + 2001-04-19 Zack Weinberg * toplev.c: Excise all code for the undocumented -dm option. diff --git a/gcc/cse.c b/gcc/cse.c index 6913aef32b5..652dbf0460b 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -5067,18 +5067,16 @@ cse_insn (insn, libcall_insn) sets[i].src_in_memory = hash_arg_in_memory; /* If SRC is a MEM, there is a REG_EQUIV note for SRC, and DEST is - a pseudo that is set more than once, do not record SRC. Using - SRC as a replacement for anything else will be incorrect in that - situation. Note that this usually occurs only for stack slots, - in which case all the RTL would be referring to SRC, so we don't - lose any optimization opportunities by not having SRC in the - hash table. */ + a pseudo, do not record SRC. Using SRC as a replacement for + anything else will be incorrect in that situation. Note that + this usually occurs only for stack slots, in which case all the + RTL would be referring to SRC, so we don't lose any optimization + opportunities by not having SRC in the hash table. */ if (GET_CODE (src) == MEM - && find_reg_note (insn, REG_EQUIV, src) != 0 + && find_reg_note (insn, REG_EQUIV, NULL_RTX) != 0 && GET_CODE (dest) == REG - && REGNO (dest) >= FIRST_PSEUDO_REGISTER - && REG_N_SETS (REGNO (dest)) != 1) + && REGNO (dest) >= FIRST_PSEUDO_REGISTER) sets[i].src_volatile = 1; #if 0 diff --git a/gcc/function.c b/gcc/function.c index 565fcf0ccb4..8de57df0ddb 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -1682,7 +1682,7 @@ fixup_var_refs_insns_with_hash (ht, var, promoted_mode, unsignedp) rtx insn = XEXP (insn_list, 0); if (INSN_P (insn)) - fixup_var_refs_insn (insn, var, promoted_mode, unsignedp, 0); + fixup_var_refs_insn (insn, var, promoted_mode, unsignedp, 1); insn_list = XEXP (insn_list, 1); } diff --git a/gcc/gcse.c b/gcc/gcse.c index 56117f9a170..dc531c56c7f 100644 --- a/gcc/gcse.c +++ b/gcc/gcse.c @@ -756,7 +756,7 @@ gcse_main (f, file) a high connectivity will take a long time and is unlikely to be particularly useful. - In normal circumstances a cfg should have about twice has many edges + In normal circumstances a cfg should have about twice as many edges as blocks. But we do not want to punish small functions which have a couple switch statements. So we require a relatively large number of basic blocks and the ratio of edges to blocks to be high. */ @@ -2208,7 +2208,14 @@ hash_scan_set (pat, insn, set_p) /* Is SET_SRC something we want to gcse? */ && want_to_gcse_p (src) /* Don't CSE a nop. */ - && ! set_noop_p (pat)) + && ! set_noop_p (pat) + /* Don't GCSE if it has attached REG_EQUIV note. + At this point this only function parameters should have + REG_EQUIV notes and if the argument slot is used somewhere + explicitely, it means address of parameter has been taken, + so we should not extend the lifetime of the pseudo. */ + && ((note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) == 0 + || GET_CODE (XEXP (note, 0)) != MEM)) { /* An expression is not anticipatable if its operands are modified before this insn or if this is not the only SET in @@ -5541,7 +5548,7 @@ delete_null_pointer_checks (f) a high connectivity will take a long time and is unlikely to be particularly useful. - In normal circumstances a cfg should have about twice has many edges + In normal circumstances a cfg should have about twice as many edges as blocks. But we do not want to punish small functions which have a couple switch statements. So we require a relatively large number of basic blocks and the ratio of edges to blocks to be high. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c6d3012358f..78f191ff074 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2001-04-20 Jakub Jelinek + + * gcc.c-torture/execute/20010403-1.c: New test. + 2001-04-19 David Billinghurst Mark Mitchell