diff options
author | rakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-11-11 13:38:07 +0000 |
---|---|---|
committer | rakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-11-11 13:38:07 +0000 |
commit | c52ba957b5235c6e85a958f2d20d3c12f96fc5a5 (patch) | |
tree | 264b1d4b309fb3dd1c6c9dfa913eb3a2c785120e /gcc/local-alloc.c | |
parent | c2d0cf412ed2005010f51de2d5dc76ec2c8fd786 (diff) | |
download | gcc-c52ba957b5235c6e85a958f2d20d3c12f96fc5a5.tar.gz |
PR rtl-optimization/22509
* local-alloc.c (memref_used_between_p): Check whether a function call
could not reference the memref.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@106783 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/local-alloc.c')
-rw-r--r-- | gcc/local-alloc.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/gcc/local-alloc.c b/gcc/local-alloc.c index 4ee4991d0cd..0380ff974e7 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; } |