alias.c (true_dependence): Allow non-unchanging read to conflict with unchanging...
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>
Sun, 17 Sep 2000 15:33:30 +0000 (15:33 +0000)
committerRichard Kenner <kenner@gcc.gnu.org>
Sun, 17 Sep 2000 15:33:30 +0000 (11:33 -0400)
* alias.c (true_dependence): Allow non-unchanging read to conflict
with unchanging write.

From-SVN: r36476

gcc/ChangeLog
gcc/alias.c

index 8c48b71bc32831ca064dde24fd66a899cc90b3e2..cf7604279e76f3d3f6081349ec207851ababedb9 100644 (file)
@@ -13,6 +13,9 @@ Sun Sep 17 18:48:32 2000  Denis Chertykov  <denisc@overta.ru>
 
 Sun Sep 17 10:46:17 2000  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
+       * alias.c (true_dependence): Allow non-unchanging read to conflict
+       with unchanging write.
+
        * expr.c (store_constructor_field): Accept ALIAS_SET arg.
        (store_constructor): Pass alias_set to it.
 
index be46281dcfcf16f7bed0834cef933198fd4da8d5..65b053f649b7d713e47b8622e70528fe3da489b7 100644 (file)
@@ -1600,10 +1600,13 @@ true_dependence (mem, mem_mode, x, varies)
      A non-unchanging read can conflict with a non-unchanging write.
      An unchanging read can conflict with an unchanging write since
      there may be a single store to this address to initialize it.
+     Note that an unchanging store can conflict with a non-unchanging read
+     since we have to make conservative assumptions when we have a
+     record with readonly fields and we are copying the whole thing.
      Just fall through to the code below to resolve potential conflicts.
      This won't handle all cases optimally, but the possible performance
      loss should be negligible.  */
-  if (RTX_UNCHANGING_P (x) != RTX_UNCHANGING_P (mem))
+  if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
     return 0;
 
   if (mem_mode == VOIDmode)