Use MEM_SIZE rather than GET_MODE_SIZE in dce.c
authorRichard Sandiford <richard.sandiford@arm.com>
Tue, 15 Nov 2016 18:18:08 +0000 (18:18 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Tue, 15 Nov 2016 18:18:08 +0000 (18:18 +0000)
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

gcc/ChangeLog
gcc/dce.c

index 5e3e8a1c1cd60b4585e21178e35e5b9311fa1be4..bd61f70413ec9c82d2c6a28b5bba36cb68ce358f 100644 (file)
@@ -1,3 +1,11 @@
+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.
+
 2016-11-15  Richard Sandiford  <richard.sandiford@arm.com>
            Alan Hayward  <alan.hayward@arm.com>
            David Sherwood  <david.sherwood@arm.com>
index 154469c2f0a263b639bc8f5a14457b2fd35769a6..16340b644995cc3670d9bbaad356da20e3cb493e 100644 (file)
--- a/gcc/dce.c
+++ b/gcc/dce.c
@@ -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
    bitmap if it is.  */
 
 static bool
-check_argument_store (rtx mem, HOST_WIDE_INT off, HOST_WIDE_INT min_sp_off,
-                     HOST_WIDE_INT max_sp_off, bitmap sp_bytes)
+check_argument_store (HOST_WIDE_INT size, HOST_WIDE_INT off,
+                     HOST_WIDE_INT min_sp_off, HOST_WIDE_INT max_sp_off,
+                     bitmap sp_bytes)
 {
   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
          || byte >= max_sp_off
@@ -468,8 +469,8 @@ find_call_stack_args (rtx_call_insn *call_insn, bool do_mark, bool fast,
            break;
        }
 
-      if (GET_MODE_SIZE (GET_MODE (mem)) == 0
-         || !check_argument_store (mem, off, min_sp_off,
+      if (!MEM_SIZE_KNOWN_P (mem)
+         || !check_argument_store (MEM_SIZE (mem), off, min_sp_off,
                                    max_sp_off, sp_bytes))
        break;