summaryrefslogtreecommitdiff
path: root/gcc/alias.c
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2002-04-04 22:48:16 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2002-04-04 22:48:16 +0000
commita57f4c4d4a19fac9f03f87e0febf5aafd620e991 (patch)
treec50a81e1530b951737c4b5d0f4c98d2ce62b0881 /gcc/alias.c
parentaff9e6561ee30f3802fe5993a64cdcd7a53146b4 (diff)
downloadgcc-a57f4c4d4a19fac9f03f87e0febf5aafd620e991.tar.gz
PR opt/6165
* alias.c (true_dependence): Force (mem:blk (scratch)) to conflict. (write_dependence_p): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@51882 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/alias.c')
-rw-r--r--gcc/alias.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/alias.c b/gcc/alias.c
index 42d8e18210d..29da8ffafb3 100644
--- a/gcc/alias.c
+++ b/gcc/alias.c
@@ -2039,6 +2039,13 @@ true_dependence (mem, mem_mode, x, varies)
if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
return 1;
+ /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
+ This is used in epilogue deallocation functions. */
+ if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
+ return 1;
+ if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
+ return 1;
+
if (DIFFERENT_ALIAS_SETS_P (x, mem))
return 0;
@@ -2173,6 +2180,13 @@ write_dependence_p (mem, x, writep)
if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
return 1;
+ /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
+ This is used in epilogue deallocation functions. */
+ if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
+ return 1;
+ if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
+ return 1;
+
if (DIFFERENT_ALIAS_SETS_P (x, mem))
return 0;