diff options
author | John Wehle <john@feith.com> | 2000-09-13 06:27:16 +0000 |
---|---|---|
committer | John Wehle <wehle@gcc.gnu.org> | 2000-09-13 06:27:16 +0000 |
commit | bb07060a6aa5000a59e7d4f2a7d37b929980ec2d (patch) | |
tree | 6d053274503c8c34e42c3c2a121565419548e2ae | |
parent | d21445e714fbef35a64b1ae05f8625c395e73890 (diff) | |
download | gcc-bb07060a6aa5000a59e7d4f2a7d37b929980ec2d.zip gcc-bb07060a6aa5000a59e7d4f2a7d37b929980ec2d.tar.gz gcc-bb07060a6aa5000a59e7d4f2a7d37b929980ec2d.tar.bz2 |
alias.c (find_base_term): Use frame_pointer_rtx when handling an ADDRESSOF.
* alias.c (find_base_term): Use frame_pointer_rtx
when handling an ADDRESSOF.
* cse.c (canon_hash): Handle USE of BLKmode memory.
(cse_insn): Outgoing arguments for a libcall don't
affect any recorded expressions.
From-SVN: r36384
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/alias.c | 2 | ||||
-rw-r--r-- | gcc/cse.c | 42 |
3 files changed, 48 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 55ee613..15f235d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +Wed Sep 13 02:31:23 EDT 2000 John Wehle (john@feith.com) + + * alias.c (find_base_term): Use frame_pointer_rtx + when handling an ADDRESSOF. + + * cse.c (canon_hash): Handle USE of BLKmode memory. + (cse_insn): Outgoing arguments for a libcall don't + affect any recorded expressions. + 2000-09-12 Tom Tromey <tromey@cygnus.com> * configure, config.in: Rebuilt. diff --git a/gcc/alias.c b/gcc/alias.c index 61a1bd6..32d63b2 100644 --- a/gcc/alias.c +++ b/gcc/alias.c @@ -1132,7 +1132,7 @@ find_base_term (x) return x; case ADDRESSOF: - return REG_BASE_VALUE (stack_pointer_rtx); + return REG_BASE_VALUE (frame_pointer_rtx); default: return 0; @@ -2352,6 +2352,28 @@ canon_hash (x, mode) x = XEXP (x, 0); goto repeat; + case USE: + /* A USE that mentions non-volatile memory needs special + handling since the MEM may be BLKmode which normally + prevents an entry from being made. Pure calls are + marked by a USE which mentions BLKmode memory. */ + if (GET_CODE (XEXP (x, 0)) == MEM + && ! MEM_VOLATILE_P (XEXP (x, 0))) + { + hash += (unsigned)USE; + x = XEXP (x, 0); + + if (! RTX_UNCHANGING_P (x) || FIXED_BASE_PLUS_P (XEXP (x, 0))) + hash_arg_in_memory = 1; + + /* Now that we have already found this special case, + might as well speed it up as much as possible. */ + hash += (unsigned) MEM; + x = XEXP (x, 0); + goto repeat; + } + break; + case PRE_DEC: case PRE_INC: case POST_DEC: @@ -5760,9 +5782,15 @@ cse_insn (insn, libcall_insn) else if (do_not_record) { - if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG - || GET_CODE (dest) == MEM) + if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG) invalidate (dest, VOIDmode); + else if (GET_CODE (dest) == MEM) + { + /* Outgoing arguments for a libcall don't + affect any recorded expressions. */ + if (! libcall_insn || insn == libcall_insn) + invalidate (dest, VOIDmode); + } else if (GET_CODE (dest) == STRICT_LOW_PART || GET_CODE (dest) == ZERO_EXTRACT) invalidate (XEXP (dest, 0), GET_MODE (dest)); @@ -5919,9 +5947,15 @@ cse_insn (insn, libcall_insn) previous quantity's chain. Needed for memory if this is a nonvarying address, unless we have just done an invalidate_memory that covers even those. */ - if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG - || GET_CODE (dest) == MEM) + if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG) invalidate (dest, VOIDmode); + else if (GET_CODE (dest) == MEM) + { + /* Outgoing arguments for a libcall don't + affect any recorded expressions. */ + if (! libcall_insn || insn == libcall_insn) + invalidate (dest, VOIDmode); + } else if (GET_CODE (dest) == STRICT_LOW_PART || GET_CODE (dest) == ZERO_EXTRACT) invalidate (XEXP (dest, 0), GET_MODE (dest)); |