diff options
author | Richard Henderson <rth@redhat.com> | 2002-04-04 14:48:16 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2002-04-04 14:48:16 -0800 |
commit | c4484b8fe055db414048860502d480c63e7ee6b1 (patch) | |
tree | c50a81e1530b951737c4b5d0f4c98d2ce62b0881 /gcc/alias.c | |
parent | 78ef5b895f933cc8a82486aec27d6e7ac7a5acae (diff) | |
download | gcc-c4484b8fe055db414048860502d480c63e7ee6b1.tar.gz |
re PR rtl-optimization/6165 ([i686] stack frame freed too early)
PR opt/6165
* alias.c (true_dependence): Force (mem:blk (scratch)) to conflict.
(write_dependence_p): Likewise.
From-SVN: r51882
Diffstat (limited to 'gcc/alias.c')
-rw-r--r-- | gcc/alias.c | 14 |
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; |