]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR rtl-optimization/64557 (get_addr in true_dependence_1 cannot handle...
authorWei Mi <wmi@google.com>
Fri, 23 Jan 2015 17:55:32 +0000 (17:55 +0000)
committerWei Mi <wmi@gcc.gnu.org>
Fri, 23 Jan 2015 17:55:32 +0000 (17:55 +0000)
        Backported from trunk.
        2015-01-22  Wei Mi  <wmi@google.com>

        PR rtl-optimization/64557
        * dse.c (record_store): Call get_addr for mem_addr.
        (check_mem_read_rtx): Likewise.

From-SVN: r220051

gcc/ChangeLog
gcc/dse.c

index f8b23bfc3e2978e8b8713ae4a9e177bb5aa44ae9..80a5090166ac2ab1c42834704e5e09babf32de53 100644 (file)
@@ -1,3 +1,12 @@
+2015-01-23  Wei Mi  <wmi@google.com>
+
+       Backported from trunk.
+       2015-01-22  Wei Mi  <wmi@google.com>
+
+       PR rtl-optimization/64557
+       * dse.c (record_store): Call get_addr for mem_addr.
+       (check_mem_read_rtx): Likewise.
+
 2015-01-22  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
        * config/s390/s390.md (atomic code attribute): Fix typo "ior" ->
index 09dc5df6e93e2eea0c5a9b4f285e23513baccbd0..878fedcec3bbddd9def6ae95410e177041030c18 100644 (file)
--- a/gcc/dse.c
+++ b/gcc/dse.c
@@ -1549,6 +1549,10 @@ record_store (rtx body, bb_info_t bb_info)
            = rtx_group_vec[group_id];
          mem_addr = group->canon_base_addr;
        }
+      /* get_addr can only handle VALUE but cannot handle expr like:
+        VALUE + OFFSET, so call get_addr to get original addr for
+        mem_addr before plus_constant.  */
+      mem_addr = get_addr (mem_addr);
       if (offset)
        mem_addr = plus_constant (get_address_mode (mem), mem_addr, offset);
     }
@@ -2166,6 +2170,10 @@ check_mem_read_rtx (rtx *loc, void *data)
            = rtx_group_vec[group_id];
          mem_addr = group->canon_base_addr;
        }
+      /* get_addr can only handle VALUE but cannot handle expr like:
+        VALUE + OFFSET, so call get_addr to get original addr for
+        mem_addr before plus_constant.  */
+      mem_addr = get_addr (mem_addr);
       if (offset)
        mem_addr = plus_constant (get_address_mode (mem), mem_addr, offset);
     }