]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR rtl-optimization/61672 (Less redundant instructions deleted by pre_delete after...
authorRichard Biener <rguenther@suse.de>
Tue, 5 Aug 2014 13:05:06 +0000 (13:05 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 5 Aug 2014 13:05:06 +0000 (13:05 +0000)
2014-08-05  Richard Biener  <rguenther@suse.de>

PR rtl-optimization/61672
* emit-rtl.h (mem_attrs_eq_p): Declare.
* emit-rtl.c (mem_attrs_eq_p): Export.  Handle NULL mem-attrs.
* cse.c (exp_equiv_p): Use mem_attrs_eq_p.
* cfgcleanup.c (merge_memattrs): Likewise.
Include emit-rtl.h.

From-SVN: r213638

gcc/ChangeLog
gcc/cfgcleanup.c
gcc/cse.c
gcc/emit-rtl.c
gcc/emit-rtl.h

index 560f6e43ecdcfdf5b71b2b987b0e82050d15f2fc..f199fed57aa6704f82286944b1f5aaf2d7a1d24f 100644 (file)
@@ -1,3 +1,12 @@
+2014-08-05  Richard Biener  <rguenther@suse.de>
+
+       PR rtl-optimization/61672
+       * emit-rtl.h (mem_attrs_eq_p): Declare.
+       * emit-rtl.c (mem_attrs_eq_p): Export.  Handle NULL mem-attrs.
+       * cse.c (exp_equiv_p): Use mem_attrs_eq_p.
+       * cfgcleanup.c (merge_memattrs): Likewise.
+       Include emit-rtl.h.
+
 2014-08-05  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * config/aarch64/arm_neon.h (vqdmlals_lane_s32): Use scalar types
index 01fd9ff72aedc84574a90642e0e3e58e92fe87af..0fbfd551502b8ff22ea7a45feef64f5e178955ea 100644 (file)
@@ -53,6 +53,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "df.h"
 #include "dce.h"
 #include "dbgcnt.h"
+#include "emit-rtl.h"
 
 #define FORWARDER_BLOCK_P(BB) ((BB)->flags & BB_FORWARDER_BLOCK)
 
@@ -883,7 +884,7 @@ merge_memattrs (rtx x, rtx y)
   if (GET_MODE (x) != GET_MODE (y))
     return;
 
-  if (code == MEM && MEM_ATTRS (x) != MEM_ATTRS (y))
+  if (code == MEM && !mem_attrs_eq_p (MEM_ATTRS (x), MEM_ATTRS (y)))
     {
       if (! MEM_ATTRS (x))
        MEM_ATTRS (y) = 0;
index dd9a076fcfa42fba23f6444dd315fa05bda6292b..16d2fc1c753745bd58cd73ea827cb33c1c8d96d4 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -2685,7 +2685,7 @@ exp_equiv_p (const_rtx x, const_rtx y, int validate, bool for_gcse)
             But because really all MEM attributes should be the same for
             equivalent MEMs, we just use the invariant that MEMs that have
             the same attributes share the same mem_attrs data structure.  */
-         if (MEM_ATTRS (x) != MEM_ATTRS (y))
+         if (!mem_attrs_eq_p (MEM_ATTRS (x), MEM_ATTRS (y)))
            return 0;
 
          /* If we are handling exceptions, we cannot consider two expressions
index 80e5b2c1cc68968c0e5982b92b98b12fb62b5ddc..94f327534919daa2d260345604517a524da92814 100644 (file)
@@ -290,9 +290,13 @@ const_fixed_htab_eq (const void *x, const void *y)
 
 /* Return true if the given memory attributes are equal.  */
 
-static bool
+bool
 mem_attrs_eq_p (const struct mem_attrs *p, const struct mem_attrs *q)
 {
+  if (p == q)
+    return true;
+  if (!p || !q)
+    return false;
   return (p->alias == q->alias
          && p->offset_known_p == q->offset_known_p
          && (!p->offset_known_p || p->offset == q->offset)
index c72c24f4d88f66fce4fe13b89fb2c51c81a88d70..8439750416b7b41702c7d45c5898b776755dcb4c 100644 (file)
@@ -20,6 +20,9 @@ along with GCC; see the file COPYING3.  If not see
 #ifndef GCC_EMIT_RTL_H
 #define GCC_EMIT_RTL_H
 
+/* Return whether two MEM_ATTRs are equal.  */
+bool mem_attrs_eq_p (const struct mem_attrs *, const struct mem_attrs *);
+
 /* Set the alias set of MEM to SET.  */
 extern void set_mem_alias_set (rtx, alias_set_type);