aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Dvorak <dvorakz@suse.cz>2005-11-11 14:38:07 +0100
committerZdenek Dvorak <rakdver@gcc.gnu.org>2005-11-11 13:38:07 +0000
commit301a8f9577f730dcb680760b84e258e62cafd01f (patch)
tree264b1d4b309fb3dd1c6c9dfa913eb3a2c785120e
parent8a4c09c8336cb51f5ab9712da5eaf49d3f25ecc6 (diff)
downloadgcc-301a8f9577f730dcb680760b84e258e62cafd01f.zip
gcc-301a8f9577f730dcb680760b84e258e62cafd01f.tar.gz
gcc-301a8f9577f730dcb680760b84e258e62cafd01f.tar.bz2
re PR rtl-optimization/22509 (elemental.f90 testsuite failure (-fweb))
PR rtl-optimization/22509 * local-alloc.c (memref_used_between_p): Check whether a function call could not reference the memref. From-SVN: r106783
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/local-alloc.c15
2 files changed, 19 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0337eb2..c9f0917 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2005-11-11 Zdenek Dvorak <dvorakz@suse.cz>
+
+ PR rtl-optimization/22509
+ * local-alloc.c (memref_used_between_p): Check whether a function call
+ could not reference the memref.
+
2005-11-11 Ulrich Weigand <uweigand@de.ibm.com>
* postreload.c (reload_cse_simplify_operands): Fix bug in sorting
diff --git a/gcc/local-alloc.c b/gcc/local-alloc.c
index 4ee4991..0380ff9 100644
--- a/gcc/local-alloc.c
+++ b/gcc/local-alloc.c
@@ -762,8 +762,19 @@ memref_used_between_p (rtx memref, rtx start, rtx end)
for (insn = NEXT_INSN (start); insn != NEXT_INSN (end);
insn = NEXT_INSN (insn))
- if (INSN_P (insn) && memref_referenced_p (memref, PATTERN (insn)))
- return 1;
+ {
+ if (!INSN_P (insn))
+ continue;
+
+ if (memref_referenced_p (memref, PATTERN (insn)))
+ return 1;
+
+ /* Nonconst functions may access memory. */
+ if (CALL_P (insn)
+ && (! CONST_OR_PURE_CALL_P (insn)
+ || pure_call_p (insn)))
+ return 1;
+ }
return 0;
}