Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/gpl3/gcc/dist initial import of GCC 4.8.5 sources. ...



details:   https://anonhg.NetBSD.org/src/rev/15c50bc0b7bd
branches:  trunk
changeset: 339060:15c50bc0b7bd
user:      mrg <mrg%NetBSD.org@localhost>
date:      Wed Jun 24 14:02:39 2015 +0000

description:
initial import of GCC 4.8.5 sources.  these GCC PRs (at least) are
fixed in this release:

64882 46102 58123 65409 59626 61058 65680 64487 65721 65727
52306 64768 56273 57653 59990 60656 61634 63844 64199 64493
64495 65549 57059 57569 57748 58369 62642 63608 64037 65550
65693 65220 45187 64409 61977 64513 64634 65368 66233 66470
65072 65327 65543 65279 63593 65063 65518 66123 66140 59016
64479 64557 64979 66215 66275 66481 39423 64766 63733 52714
60898 61138 63744 57023 39722 45402 52579 52664 60718 62044
59513 35330 37440 43701

see:
  https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.5
for more details.

diffstat:

 external/gpl3/gcc/dist/ChangeLog                                 |    9 +
 external/gpl3/gcc/dist/config/ChangeLog                          |    4 +
 external/gpl3/gcc/dist/contrib/ChangeLog                         |    4 +
 external/gpl3/gcc/dist/contrib/reghunt/ChangeLog                 |    4 +
 external/gpl3/gcc/dist/contrib/regression/ChangeLog              |    4 +
 external/gpl3/gcc/dist/fixincludes/ChangeLog                     |    4 +
 external/gpl3/gcc/dist/gcc/BASE-VER                              |    2 +-
 external/gpl3/gcc/dist/gcc/DATESTAMP                             |    2 +-
 external/gpl3/gcc/dist/gcc/alias.c                               |  210 +++----
 external/gpl3/gcc/dist/gcc/c-family/ChangeLog                    |   21 +
 external/gpl3/gcc/dist/gcc/c-family/c-common.c                   |    3 +-
 external/gpl3/gcc/dist/gcc/c/ChangeLog                           |   13 +
 external/gpl3/gcc/dist/gcc/c/c-typeck.c                          |    3 +-
 external/gpl3/gcc/dist/gcc/combine.c                             |    4 +-
 external/gpl3/gcc/dist/gcc/config/aarch64/aarch64.md             |   12 +-
 external/gpl3/gcc/dist/gcc/config/aarch64/atomics.md             |   12 +-
 external/gpl3/gcc/dist/gcc/config/aarch64/iterators.md           |    3 +
 external/gpl3/gcc/dist/gcc/config/alpha/alpha.c                  |    7 +-
 external/gpl3/gcc/dist/gcc/config/alpha/alpha.md                 |   99 ++-
 external/gpl3/gcc/dist/gcc/config/arm/arm.c                      |   16 +-
 external/gpl3/gcc/dist/gcc/config/avr/avr.c                      |    3 +-
 external/gpl3/gcc/dist/gcc/config/avr/avr.md                     |   50 +-
 external/gpl3/gcc/dist/gcc/config/i386/avx2intrin.h              |   18 +
 external/gpl3/gcc/dist/gcc/config/i386/emmintrin.h               |   16 +
 external/gpl3/gcc/dist/gcc/config/i386/i386.md                   |   52 +-
 external/gpl3/gcc/dist/gcc/config/i386/predicates.md             |    9 +-
 external/gpl3/gcc/dist/gcc/config/i386/sse.md                    |   12 +-
 external/gpl3/gcc/dist/gcc/config/microblaze/linux.h             |    3 +
 external/gpl3/gcc/dist/gcc/config/pa/pa-linux.h                  |    2 +-
 external/gpl3/gcc/dist/gcc/config/rs6000/altivec.md              |    4 +-
 external/gpl3/gcc/dist/gcc/config/rs6000/crypto.md               |   13 +-
 external/gpl3/gcc/dist/gcc/config/rs6000/default64.h             |   10 +-
 external/gpl3/gcc/dist/gcc/config/rs6000/driver-rs6000.c         |    8 +-
 external/gpl3/gcc/dist/gcc/config/rs6000/htm.md                  |  289 +--------
 external/gpl3/gcc/dist/gcc/config/rs6000/htmxlintrin.h           |    3 +-
 external/gpl3/gcc/dist/gcc/config/rs6000/linux64.h               |    8 +-
 external/gpl3/gcc/dist/gcc/config/rs6000/rs6000-builtin.def      |  105 ++-
 external/gpl3/gcc/dist/gcc/config/rs6000/rs6000-cpus.def         |    4 +-
 external/gpl3/gcc/dist/gcc/config/rs6000/rs6000-tables.opt       |    5 +-
 external/gpl3/gcc/dist/gcc/config/rs6000/rs6000.h                |    8 +-
 external/gpl3/gcc/dist/gcc/config/rs6000/rs6000.md               |   12 +-
 external/gpl3/gcc/dist/gcc/config/rs6000/rs6000.opt              |   28 +-
 external/gpl3/gcc/dist/gcc/config/rs6000/t-fprules               |    6 -
 external/gpl3/gcc/dist/gcc/config/rs6000/t-linux                 |   14 +-
 external/gpl3/gcc/dist/gcc/config/rs6000/vsx.md                  |   17 +-
 external/gpl3/gcc/dist/gcc/config/s390/2827.md                   |    8 +-
 external/gpl3/gcc/dist/gcc/config/s390/s390.c                    |  288 +++++----
 external/gpl3/gcc/dist/gcc/config/s390/s390.md                   |   25 +
 external/gpl3/gcc/dist/gcc/config/s390/s390.opt                  |   12 +-
 external/gpl3/gcc/dist/gcc/config/sh/sh.md                       |   32 +-
 external/gpl3/gcc/dist/gcc/cp/ChangeLog                          |   27 +
 external/gpl3/gcc/dist/gcc/cp/decl2.c                            |    2 +-
 external/gpl3/gcc/dist/gcc/cp/name-lookup.c                      |    2 +-
 external/gpl3/gcc/dist/gcc/cp/parser.c                           |    7 +-
 external/gpl3/gcc/dist/gcc/cp/semantics.c                        |   13 +-
 external/gpl3/gcc/dist/gcc/cp/typeck.c                           |    6 +
 external/gpl3/gcc/dist/gcc/df.h                                  |   28 +-
 external/gpl3/gcc/dist/gcc/doc/cppinternals.texi                 |    4 +-
 external/gpl3/gcc/dist/gcc/doc/extend.texi                       |   34 +-
 external/gpl3/gcc/dist/gcc/doc/gcc.texi                          |    2 +-
 external/gpl3/gcc/dist/gcc/doc/gccint.texi                       |    2 +-
 external/gpl3/gcc/dist/gcc/doc/install.texi                      |    2 +-
 external/gpl3/gcc/dist/gcc/doc/md.texi                           |   21 +
 external/gpl3/gcc/dist/gcc/expr.h                                |   11 +-
 external/gpl3/gcc/dist/gcc/fold-const.c                          |   34 +-
 external/gpl3/gcc/dist/gcc/gcov-dump.c                           |    2 +-
 external/gpl3/gcc/dist/gcc/gcov.c                                |    2 +-
 external/gpl3/gcc/dist/gcc/ipa-inline-analysis.c                 |   16 +-
 external/gpl3/gcc/dist/gcc/ipa.c                                 |   12 +-
 external/gpl3/gcc/dist/gcc/ira.c                                 |   13 +-
 external/gpl3/gcc/dist/gcc/jump.c                                |   25 +-
 external/gpl3/gcc/dist/gcc/lra.c                                 |   18 +-
 external/gpl3/gcc/dist/gcc/lto-streamer-out.c                    |    3 +
 external/gpl3/gcc/dist/gcc/lto/ChangeLog                         |    4 +
 external/gpl3/gcc/dist/gcc/objc/ChangeLog                        |    4 +
 external/gpl3/gcc/dist/gcc/objcp/ChangeLog                       |    4 +
 external/gpl3/gcc/dist/gcc/omp-low.c                             |   46 +-
 external/gpl3/gcc/dist/gcc/tree-data-ref.c                       |    7 +-
 external/gpl3/gcc/dist/gcc/tree-data-ref.h                       |    5 +
 external/gpl3/gcc/dist/gcc/tree-eh.c                             |   16 +-
 external/gpl3/gcc/dist/gcc/tree-predcom.c                        |   34 +-
 external/gpl3/gcc/dist/gcc/tree-ssa-dom.c                        |    3 +
 external/gpl3/gcc/dist/gcc/tree-ssa-forwprop.c                   |   12 +-
 external/gpl3/gcc/dist/gcc/tree-ssa-tail-merge.c                 |    2 +-
 external/gpl3/gcc/dist/gcc/tree-stdarg.c                         |   47 +-
 external/gpl3/gcc/dist/gcc/tree-vect-loop.c                      |    5 +-
 external/gpl3/gcc/dist/gcc/tree-vect-slp.c                       |  141 +++-
 external/gpl3/gcc/dist/gcc/tree-vect-stmts.c                     |   32 +-
 external/gpl3/gcc/dist/gcc/tree-vrp.c                            |    4 +-
 external/gpl3/gcc/dist/gcc/var-tracking.c                        |  101 +--
 external/gpl3/gcc/dist/gcc/varasm.c                              |   25 +-
 external/gpl3/gcc/dist/gcc/web.c                                 |   65 +-
 external/gpl3/gcc/dist/gnattools/ChangeLog                       |    4 +
 external/gpl3/gcc/dist/include/ChangeLog                         |    4 +
 external/gpl3/gcc/dist/intl/ChangeLog                            |    4 +
 external/gpl3/gcc/dist/libbacktrace/ChangeLog                    |    9 +
 external/gpl3/gcc/dist/libbacktrace/configure.ac                 |    5 +-
 external/gpl3/gcc/dist/libcpp/ChangeLog                          |   13 +
 external/gpl3/gcc/dist/libdecnumber/ChangeLog                    |    4 +
 external/gpl3/gcc/dist/libgcc/ChangeLog                          |   16 +
 external/gpl3/gcc/dist/libgcc/config/arm/bpabi-v6m.S             |    8 +-
 external/gpl3/gcc/dist/libgcc/config/arm/bpabi.S                 |   36 +-
 external/gpl3/gcc/dist/libgcc/config/libbid/ChangeLog            |    4 +
 external/gpl3/gcc/dist/libgomp/ChangeLog                         |   12 +
 external/gpl3/gcc/dist/libiberty/ChangeLog                       |    4 +
 external/gpl3/gcc/dist/libitm/ChangeLog                          |    4 +
 external/gpl3/gcc/dist/libitm/libitm.info                        |  Bin 
 external/gpl3/gcc/dist/libmudflap/ChangeLog                      |    4 +
 external/gpl3/gcc/dist/libobjc/ChangeLog                         |    4 +
 external/gpl3/gcc/dist/libsanitizer/ChangeLog                    |    9 +
 external/gpl3/gcc/dist/libsanitizer/configure.ac                 |    3 +-
 external/gpl3/gcc/dist/libssp/ChangeLog                          |    4 +
 external/gpl3/gcc/dist/libstdc++-v3/ChangeLog                    |   45 +
 external/gpl3/gcc/dist/libstdc++-v3/include/std/future           |    3 +-
 external/gpl3/gcc/dist/libstdc++-v3/include/std/istream          |    5 +-
 external/gpl3/gcc/dist/libstdc++-v3/include/std/ostream          |    5 +-
 external/gpl3/gcc/dist/libstdc++-v3/include/std/scoped_allocator |   10 +
 external/gpl3/gcc/dist/lto-plugin/ChangeLog                      |    4 +
 external/gpl3/gcc/dist/maintainer-scripts/ChangeLog              |    4 +
 119 files changed, 1559 insertions(+), 1011 deletions(-)

diffs (truncated from 4762 to 300 lines):

diff -r 666cc3659251 -r 15c50bc0b7bd external/gpl3/gcc/dist/ChangeLog
--- a/external/gpl3/gcc/dist/ChangeLog  Wed Jun 24 13:58:29 2015 +0000
+++ b/external/gpl3/gcc/dist/ChangeLog  Wed Jun 24 14:02:39 2015 +0000
@@ -1,3 +1,12 @@
+2015-06-23  Release Manager
+
+       * GCC 4.8.5 released.
+
+2015-05-03  Matthias Klose  <doko%ubuntu.com@localhost>
+
+       * configure.ac: Match $host configured with triplets.
+       * configure: Regenerate.
+
 2014-12-19  Release Manager
 
        * GCC 4.8.4 released.
diff -r 666cc3659251 -r 15c50bc0b7bd external/gpl3/gcc/dist/config/ChangeLog
--- a/external/gpl3/gcc/dist/config/ChangeLog   Wed Jun 24 13:58:29 2015 +0000
+++ b/external/gpl3/gcc/dist/config/ChangeLog   Wed Jun 24 14:02:39 2015 +0000
@@ -1,3 +1,7 @@
+2015-06-23  Release Manager
+
+       * GCC 4.8.5 released.
+
 2014-12-19  Release Manager
 
        * GCC 4.8.4 released.
diff -r 666cc3659251 -r 15c50bc0b7bd external/gpl3/gcc/dist/contrib/ChangeLog
--- a/external/gpl3/gcc/dist/contrib/ChangeLog  Wed Jun 24 13:58:29 2015 +0000
+++ b/external/gpl3/gcc/dist/contrib/ChangeLog  Wed Jun 24 14:02:39 2015 +0000
@@ -1,3 +1,7 @@
+2015-06-23  Release Manager
+
+       * GCC 4.8.5 released.
+
 2014-12-19  Release Manager
 
        * GCC 4.8.4 released.
diff -r 666cc3659251 -r 15c50bc0b7bd external/gpl3/gcc/dist/contrib/reghunt/ChangeLog
--- a/external/gpl3/gcc/dist/contrib/reghunt/ChangeLog  Wed Jun 24 13:58:29 2015 +0000
+++ b/external/gpl3/gcc/dist/contrib/reghunt/ChangeLog  Wed Jun 24 14:02:39 2015 +0000
@@ -1,3 +1,7 @@
+2015-06-23  Release Manager
+
+       * GCC 4.8.5 released.
+
 2014-12-19  Release Manager
 
        * GCC 4.8.4 released.
diff -r 666cc3659251 -r 15c50bc0b7bd external/gpl3/gcc/dist/contrib/regression/ChangeLog
--- a/external/gpl3/gcc/dist/contrib/regression/ChangeLog       Wed Jun 24 13:58:29 2015 +0000
+++ b/external/gpl3/gcc/dist/contrib/regression/ChangeLog       Wed Jun 24 14:02:39 2015 +0000
@@ -1,3 +1,7 @@
+2015-06-23  Release Manager
+
+       * GCC 4.8.5 released.
+
 2014-12-19  Release Manager
 
        * GCC 4.8.4 released.
diff -r 666cc3659251 -r 15c50bc0b7bd external/gpl3/gcc/dist/fixincludes/ChangeLog
--- a/external/gpl3/gcc/dist/fixincludes/ChangeLog      Wed Jun 24 13:58:29 2015 +0000
+++ b/external/gpl3/gcc/dist/fixincludes/ChangeLog      Wed Jun 24 14:02:39 2015 +0000
@@ -1,3 +1,7 @@
+2015-06-23  Release Manager
+
+       * GCC 4.8.5 released.
+
 2014-12-19  Release Manager
 
        * GCC 4.8.4 released.
diff -r 666cc3659251 -r 15c50bc0b7bd external/gpl3/gcc/dist/gcc/BASE-VER
--- a/external/gpl3/gcc/dist/gcc/BASE-VER       Wed Jun 24 13:58:29 2015 +0000
+++ b/external/gpl3/gcc/dist/gcc/BASE-VER       Wed Jun 24 14:02:39 2015 +0000
@@ -1,1 +1,1 @@
-4.8.4
+4.8.5
diff -r 666cc3659251 -r 15c50bc0b7bd external/gpl3/gcc/dist/gcc/DATESTAMP
--- a/external/gpl3/gcc/dist/gcc/DATESTAMP      Wed Jun 24 13:58:29 2015 +0000
+++ b/external/gpl3/gcc/dist/gcc/DATESTAMP      Wed Jun 24 14:02:39 2015 +0000
@@ -1,1 +1,1 @@
-20141219
+20150623
diff -r 666cc3659251 -r 15c50bc0b7bd external/gpl3/gcc/dist/gcc/alias.c
--- a/external/gpl3/gcc/dist/gcc/alias.c        Wed Jun 24 13:58:29 2015 +0000
+++ b/external/gpl3/gcc/dist/gcc/alias.c        Wed Jun 24 14:02:39 2015 +0000
@@ -148,7 +148,7 @@
 static int rtx_equal_for_memref_p (const_rtx, const_rtx);
 static int memrefs_conflict_p (int, rtx, int, rtx, HOST_WIDE_INT);
 static void record_set (rtx, const_rtx, void *);
-static int base_alias_check (rtx, rtx, enum machine_mode,
+static int base_alias_check (rtx, rtx, rtx, rtx, enum machine_mode,
                             enum machine_mode);
 static rtx find_base_value (rtx);
 static int mems_in_disjoint_alias_sets_p (const_rtx, const_rtx);
@@ -380,17 +380,9 @@
 static inline int
 mems_in_disjoint_alias_sets_p (const_rtx mem1, const_rtx mem2)
 {
-/* Perform a basic sanity check.  Namely, that there are no alias sets
-   if we're not using strict aliasing.  This helps to catch bugs
-   whereby someone uses PUT_CODE, but doesn't clear MEM_ALIAS_SET, or
-   where a MEM is allocated in some way other than by the use of
-   gen_rtx_MEM, and the MEM_ALIAS_SET is not cleared.  If we begin to
-   use alias sets to indicate that spilled registers cannot alias each
-   other, we might need to remove this check.  */
-  gcc_assert (flag_strict_aliasing
-             || (!MEM_ALIAS_SET (mem1) && !MEM_ALIAS_SET (mem2)));
-
-  return ! alias_sets_conflict_p (MEM_ALIAS_SET (mem1), MEM_ALIAS_SET (mem2));
+  return (flag_strict_aliasing
+         && ! alias_sets_conflict_p (MEM_ALIAS_SET (mem1),
+                                     MEM_ALIAS_SET (mem2)));
 }
 
 /* Insert the NODE into the splay tree given by DATA.  Used by
@@ -1674,34 +1666,30 @@
        if (tmp1 == pic_offset_table_rtx && CONSTANT_P (tmp2))
          return find_base_term (tmp2);
 
-       /* If either operand is known to be a pointer, then use it
+       /* If either operand is known to be a pointer, then prefer it
           to determine the base term.  */
        if (REG_P (tmp1) && REG_POINTER (tmp1))
-         {
-           rtx base = find_base_term (tmp1);
-           if (base)
-             return base;
-         }
-
-       if (REG_P (tmp2) && REG_POINTER (tmp2))
+         ;
+       else if (REG_P (tmp2) && REG_POINTER (tmp2))
          {
-           rtx base = find_base_term (tmp2);
-           if (base)
-             return base;
+           rtx tem = tmp1;
+           tmp1 = tmp2;
+           tmp2 = tem;
          }
 
-       /* Neither operand was known to be a pointer.  Go ahead and find the
-          base term for both operands.  */
-       tmp1 = find_base_term (tmp1);
-       tmp2 = find_base_term (tmp2);
-
-       /* If either base term is named object or a special address
+       /* Go ahead and find the base term for both operands.  If either base
+          term is from a pointer or is a named object or a special address
           (like an argument or stack reference), then use it for the
           base term.  */
-       if (tmp1 != 0 && known_base_value_p (tmp1))
+       tmp1 = find_base_term (tmp1);
+       if (tmp1 != NULL_RTX
+           && ((REG_P (tmp1) && REG_POINTER (tmp1))
+                || known_base_value_p (tmp1)))
          return tmp1;
-
-       if (tmp2 != 0 && known_base_value_p (tmp2))
+       tmp2 = find_base_term (tmp2);
+       if (tmp2 != NULL_RTX
+           && ((REG_P (tmp2) && REG_POINTER (tmp2))
+                || known_base_value_p (tmp2)))
          return tmp2;
 
        /* We could not determine which of the two operands was the
@@ -1738,12 +1726,9 @@
    objects, 1 if they might be pointers to the same object.  */
 
 static int
-base_alias_check (rtx x, rtx y, enum machine_mode x_mode,
-                 enum machine_mode y_mode)
+base_alias_check (rtx x, rtx x_base, rtx y, rtx y_base,
+                 enum machine_mode x_mode, enum machine_mode y_mode)
 {
-  rtx x_base = find_base_term (x);
-  rtx y_base = find_base_term (y);
-
   /* If the address itself has no known base see if a known equivalent
      value has one.  If either address still has no known base, nothing
      is known about aliasing.  */
@@ -2453,6 +2438,7 @@
 true_dependence_1 (const_rtx mem, enum machine_mode mem_mode, rtx mem_addr,
                   const_rtx x, rtx x_addr, bool mem_canonicalized)
 {
+  rtx true_mem_addr;
   rtx base;
   int ret;
 
@@ -2472,17 +2458,9 @@
       || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
     return 1;
 
-  /* Read-only memory is by definition never modified, and therefore can't
-     conflict with anything.  We don't expect to find read-only set on MEM,
-     but stupid user tricks can produce them, so don't die.  */
-  if (MEM_READONLY_P (x))
-    return 0;
-
-  /* If we have MEMs referring to different address spaces (which can
-     potentially overlap), we cannot easily tell from the addresses
-     whether the references overlap.  */
-  if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
-    return 1;
+  if (! x_addr)
+    x_addr = XEXP (x, 0);
+  x_addr = get_addr (x_addr);
 
   if (! mem_addr)
     {
@@ -2490,22 +2468,23 @@
       if (mem_mode == VOIDmode)
        mem_mode = GET_MODE (mem);
     }
-
-  if (! x_addr)
-    {
-      x_addr = XEXP (x, 0);
-      if (!((GET_CODE (x_addr) == VALUE
-            && GET_CODE (mem_addr) != VALUE
-            && reg_mentioned_p (x_addr, mem_addr))
-           || (GET_CODE (x_addr) != VALUE
-               && GET_CODE (mem_addr) == VALUE
-               && reg_mentioned_p (mem_addr, x_addr))))
-       {
-         x_addr = get_addr (x_addr);
-         if (! mem_canonicalized)
-           mem_addr = get_addr (mem_addr);
-       }
-    }
+  true_mem_addr = get_addr (mem_addr);
+
+  /* Read-only memory is by definition never modified, and therefore can't
+     conflict with anything.  However, don't assume anything when AND
+     addresses are involved and leave to the code below to determine
+     dependence.  We don't expect to find read-only set on MEM, but
+     stupid user tricks can produce them, so don't die.  */
+  if (MEM_READONLY_P (x)
+      && GET_CODE (x_addr) != AND
+      && GET_CODE (true_mem_addr) != AND)
+    return 0;
+
+  /* If we have MEMs referring to different address spaces (which can
+     potentially overlap), we cannot easily tell from the addresses
+     whether the references overlap.  */
+  if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
+    return 1;
 
   base = find_base_term (x_addr);
   if (base && (GET_CODE (base) == LABEL_REF
@@ -2513,12 +2492,14 @@
                   && CONSTANT_POOL_ADDRESS_P (base))))
     return 0;
 
-  if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
+  rtx mem_base = find_base_term (true_mem_addr);
+  if (! base_alias_check (x_addr, base, true_mem_addr, mem_base,
+                         GET_MODE (x), mem_mode))
     return 0;
 
   x_addr = canon_rtx (x_addr);
   if (!mem_canonicalized)
-    mem_addr = canon_rtx (mem_addr);
+    mem_addr = canon_rtx (true_mem_addr);
 
   if ((ret = memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
                                 SIZE_FOR_MODE (x), x_addr, 0)) != -1)
@@ -2571,6 +2552,7 @@
                                                 bool mem_canonicalized, bool x_canonicalized, bool writep)
 {
   rtx mem_addr;
+  rtx true_mem_addr, true_x_addr;
   rtx base;
   int ret;
 
@@ -2591,8 +2573,20 @@
       || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
     return 1;
 
-  /* A read from read-only memory can't conflict with read-write memory.  */
-  if (!writep && MEM_READONLY_P (mem))
+  if (!x_addr)
+    x_addr = XEXP (x, 0);
+  true_x_addr = get_addr (x_addr);
+
+  mem_addr = XEXP (mem, 0);
+  true_mem_addr = get_addr (mem_addr);
+
+  /* A read from read-only memory can't conflict with read-write memory.
+     Don't assume anything when AND addresses are involved and leave to
+     the code below to determine dependence.  */
+  if (!writep
+      && MEM_READONLY_P (mem)
+      && GET_CODE (true_x_addr) != AND
+      && GET_CODE (true_mem_addr) != AND)
     return 0;
 
   /* If we have MEMs referring to different address spaces (which can
@@ -2601,43 +2595,26 @@



Home | Main Index | Thread Index | Old Index