diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-04-24 06:58:02 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-04-24 06:58:02 +0000 |
commit | 82d2c88b297bd16f8977455eae7476e52a6d11b0 (patch) | |
tree | b915c002276568ad8d30cd5e3340544d674fc103 /gcc/alias.c | |
parent | 670db79fdcc832568812cdc051810daa20aa1cd2 (diff) | |
download | gcc-82d2c88b297bd16f8977455eae7476e52a6d11b0.tar.gz |
PR rtl-optimization/39794
* alias.c (canon_true_dependence): Add x_addr argument.
* rtl.h (canon_true_dependence): Adjust prototype.
* cse.c (check_dependence): Adjust canon_true_dependence callers.
* cselib.c (cselib_invalidate_mem): Likewise.
* gcse.c (compute_transp): Likewise.
* dse.c (scan_reads_nospill): Likewise.
(record_store, check_mem_read_rtx): Likewise. For non-const-or-frame
addresses pass base->val_rtx as mem_addr, for const-or-frame addresses
canon_base_addr of the group, plus optional offset.
(struct group_info): Rename canon_base_mem to
canon_base_addr.
(get_group_info): Set canon_base_addr to canon_rtx of base, not
canon_rtx of base_mem.
* gcc.dg/pr39794.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146669 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/alias.c')
-rw-r--r-- | gcc/alias.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/gcc/alias.c b/gcc/alias.c index acfd934a7cf..8a20f467905 100644 --- a/gcc/alias.c +++ b/gcc/alias.c @@ -2287,14 +2287,13 @@ true_dependence (const_rtx mem, enum machine_mode mem_mode, const_rtx x, Variant of true_dependence which assumes MEM has already been canonicalized (hence we no longer do that here). The mem_addr argument has been added, since true_dependence computed - this value prior to canonicalizing. */ + this value prior to canonicalizing. + If x_addr is non-NULL, it is used in preference of XEXP (x, 0). */ int canon_true_dependence (const_rtx mem, enum machine_mode mem_mode, rtx mem_addr, - const_rtx x, bool (*varies) (const_rtx, bool)) + const_rtx x, rtx x_addr, bool (*varies) (const_rtx, bool)) { - rtx x_addr; - if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem)) return 1; @@ -2320,7 +2319,8 @@ canon_true_dependence (const_rtx mem, enum machine_mode mem_mode, rtx mem_addr, if (nonoverlapping_memrefs_p (x, mem)) return 0; - x_addr = get_addr (XEXP (x, 0)); + if (! x_addr) + x_addr = get_addr (XEXP (x, 0)); if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode)) return 0; |