gcse.c (gcse_main): Fix comment typo.
authorJakub Jelinek <jakub@redhat.com>
Fri, 20 Apr 2001 07:56:50 +0000 (09:56 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 20 Apr 2001 07:56:50 +0000 (09:56 +0200)
* 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

gcc/ChangeLog
gcc/cse.c
gcc/function.c
gcc/gcse.c
gcc/testsuite/ChangeLog

index fdb66e07ebc3c5ec9a26d459cf6c59272cc60900..6de127a3dccd996a5191e1f9adebd0743fb07380 100644 (file)
@@ -1,3 +1,12 @@
+2001-04-20  Jakub Jelinek  <jakub@redhat.com>
+
+       * 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  <zackw@stanford.edu>
 
        * toplev.c: Excise all code for the undocumented -dm option.
index 6913aef32b514be478147000bad96f82baaa1ef6..652dbf0460b51ee19052c7ee12dbab154e93dc34 100644 (file)
--- 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
index 565fcf0ccb41ba5e502edf12a1a079481fa622a4..8de57df0ddb5ac548204e3575feefa4d30e8007a 100644 (file)
@@ -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);
     }
index 56117f9a170eb56dad493367045d048cdb6ba0c5..dc531c56c7fdf26a8b9e4aba63ba09f2b7a9383d 100644 (file)
@@ -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.  */
index c6d3012358f83e42282af1ce45fb7e1632f56f0f..78f191ff07424414509631d832d392c01b7ca105 100644 (file)
@@ -1,3 +1,7 @@
+2001-04-20  Jakub Jelinek  <jakub@redhat.com>
+
+       * gcc.c-torture/execute/20010403-1.c: New test.
+
 2001-04-19  David Billinghurst <David.Billinghurst@riotinto.com>
            Mark Mitchell  <mark@codesourcery.com>