Commit bb07060a by John Wehle Committed by John Wehle

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
parent d21445e7
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> 2000-09-12 Tom Tromey <tromey@cygnus.com>
* configure, config.in: Rebuilt. * configure, config.in: Rebuilt.
......
...@@ -1132,7 +1132,7 @@ find_base_term (x) ...@@ -1132,7 +1132,7 @@ find_base_term (x)
return x; return x;
case ADDRESSOF: case ADDRESSOF:
return REG_BASE_VALUE (stack_pointer_rtx); return REG_BASE_VALUE (frame_pointer_rtx);
default: default:
return 0; return 0;
......
...@@ -2352,6 +2352,28 @@ canon_hash (x, mode) ...@@ -2352,6 +2352,28 @@ canon_hash (x, mode)
x = XEXP (x, 0); x = XEXP (x, 0);
goto repeat; 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_DEC:
case PRE_INC: case PRE_INC:
case POST_DEC: case POST_DEC:
...@@ -5760,9 +5782,15 @@ cse_insn (insn, libcall_insn) ...@@ -5760,9 +5782,15 @@ cse_insn (insn, libcall_insn)
else if (do_not_record) else if (do_not_record)
{ {
if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG)
|| GET_CODE (dest) == MEM)
invalidate (dest, VOIDmode); 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 else if (GET_CODE (dest) == STRICT_LOW_PART
|| GET_CODE (dest) == ZERO_EXTRACT) || GET_CODE (dest) == ZERO_EXTRACT)
invalidate (XEXP (dest, 0), GET_MODE (dest)); invalidate (XEXP (dest, 0), GET_MODE (dest));
...@@ -5919,9 +5947,15 @@ cse_insn (insn, libcall_insn) ...@@ -5919,9 +5947,15 @@ cse_insn (insn, libcall_insn)
previous quantity's chain. previous quantity's chain.
Needed for memory if this is a nonvarying address, unless Needed for memory if this is a nonvarying address, unless
we have just done an invalidate_memory that covers even those. */ we have just done an invalidate_memory that covers even those. */
if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG if (GET_CODE (dest) == REG || GET_CODE (dest) == SUBREG)
|| GET_CODE (dest) == MEM)
invalidate (dest, VOIDmode); 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 else if (GET_CODE (dest) == STRICT_LOW_PART
|| GET_CODE (dest) == ZERO_EXTRACT) || GET_CODE (dest) == ZERO_EXTRACT)
invalidate (XEXP (dest, 0), GET_MODE (dest)); invalidate (XEXP (dest, 0), GET_MODE (dest));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment