aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2001-04-20 09:56:50 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2001-04-20 09:56:50 +0200
commit43e720723ff64cdbed12173248b783938173ab0a (patch)
tree4120801b04df0c391df22ca45c74588def05e73a /gcc
parent5c8378a7a2662941f64ef85e359ee0465c49c712 (diff)
downloadgcc-43e720723ff64cdbed12173248b783938173ab0a.zip
gcc-43e720723ff64cdbed12173248b783938173ab0a.tar.gz
gcc-43e720723ff64cdbed12173248b783938173ab0a.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/cse.c16
-rw-r--r--gcc/function.c2
-rw-r--r--gcc/gcse.c13
-rw-r--r--gcc/testsuite/ChangeLog4
5 files changed, 31 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fdb66e0..6de127a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/cse.c b/gcc/cse.c
index 6913aef..652dbf046 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 565fcf0..8de57df 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 56117f9..dc531c5 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 c6d3012..78f191f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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>