aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2000-09-17 15:33:30 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2000-09-17 15:33:30 +0000
commit805acfa00d4a30260a62a0abb84beafe875a8261 (patch)
treea088015564b8aca06f881097758706390ad3463f
parent1179a68b45599f468c9e4a8cd7536293d5031234 (diff)
* alias.c (true_dependence): Allow non-unchanging read to conflict
with unchanging write. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@36476 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/alias.c5
2 files changed, 7 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8c48b71bc32..cf7604279e7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/alias.c b/gcc/alias.c
index be46281dcfc..65b053f649b 100644
--- a/gcc/alias.c
+++ b/gcc/alias.c
@@ -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)