* gcse.c (gcse_main): Fix comment typo.
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 20 Apr 2001 07:56:50 +0000 (07:56 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 20 Apr 2001 07:56:50 +0000 (07:56 +0000)
(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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@41444 138bc75d-0d04-0410-961f-82ee72b054a4

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

index fdb66e0..6de127a 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 6913aef..652dbf0 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 565fcf0..8de57df 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 56117f9..dc531c5 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 c6d3012..78f191f 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>