Commit 7eb87420 by Richard Sandiford Committed by Richard Sandiford

Use MEM_SIZE rather than GET_MODE_SIZE in dce.c

Using MEM_SIZE is more general, since it copes with cases where
targets are forced to use BLKmode references for whatever reason.

gcc/
2016-11-15  Richard Sandiford  <richard.sandiford@arm.com>
	    Alan Hayward  <alan.hayward@arm.com>
	    David Sherwood  <david.sherwood@arm.com>

	* dce.c (check_argument_store): Pass the size instead of
	the memory reference.
	(find_call_stack_args): Pass MEM_SIZE to check_argument_store.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>

From-SVN: r242446
parent 231314e3
...@@ -2,6 +2,14 @@ ...@@ -2,6 +2,14 @@
Alan Hayward <alan.hayward@arm.com> Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com> David Sherwood <david.sherwood@arm.com>
* dce.c (check_argument_store): Pass the size instead of
the memory reference.
(find_call_stack_args): Pass MEM_SIZE to check_argument_store.
2016-11-15 Richard Sandiford <richard.sandiford@arm.com>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
* alias.c (canon_rtx): Use simplify_gen_binary. * alias.c (canon_rtx): Use simplify_gen_binary.
2016-11-15 Richard Sandiford <richard.sandiford@arm.com> 2016-11-15 Richard Sandiford <richard.sandiford@arm.com>
...@@ -234,16 +234,17 @@ mark_nonreg_stores (rtx body, rtx_insn *insn, bool fast) ...@@ -234,16 +234,17 @@ mark_nonreg_stores (rtx body, rtx_insn *insn, bool fast)
} }
/* Return true if store to MEM, starting OFF bytes from stack pointer, /* Return true if a store to SIZE bytes, starting OFF bytes from stack pointer,
is a call argument store, and clear corresponding bits from SP_BYTES is a call argument store, and clear corresponding bits from SP_BYTES
bitmap if it is. */ bitmap if it is. */
static bool static bool
check_argument_store (rtx mem, HOST_WIDE_INT off, HOST_WIDE_INT min_sp_off, check_argument_store (HOST_WIDE_INT size, HOST_WIDE_INT off,
HOST_WIDE_INT max_sp_off, bitmap sp_bytes) HOST_WIDE_INT min_sp_off, HOST_WIDE_INT max_sp_off,
bitmap sp_bytes)
{ {
HOST_WIDE_INT byte; HOST_WIDE_INT byte;
for (byte = off; byte < off + GET_MODE_SIZE (GET_MODE (mem)); byte++) for (byte = off; byte < off + size; byte++)
{ {
if (byte < min_sp_off if (byte < min_sp_off
|| byte >= max_sp_off || byte >= max_sp_off
...@@ -468,8 +469,8 @@ find_call_stack_args (rtx_call_insn *call_insn, bool do_mark, bool fast, ...@@ -468,8 +469,8 @@ find_call_stack_args (rtx_call_insn *call_insn, bool do_mark, bool fast,
break; break;
} }
if (GET_MODE_SIZE (GET_MODE (mem)) == 0 if (!MEM_SIZE_KNOWN_P (mem)
|| !check_argument_store (mem, off, min_sp_off, || !check_argument_store (MEM_SIZE (mem), off, min_sp_off,
max_sp_off, sp_bytes)) max_sp_off, sp_bytes))
break; break;
......
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