diff options
author | aldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-11-08 03:20:30 +0000 |
---|---|---|
committer | aldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-11-08 03:20:30 +0000 |
commit | 643df0593c630691fa6877cddeefdd4c3023d444 (patch) | |
tree | 1eb48ad31d05a9ce117bedc17115de96dffa2f0b /gcc/cprop.c | |
parent | 54f3f029d816c6d1626310649adfda740e203f7b (diff) | |
parent | d5d8f1ccc6d3972dc5cfc0949e85e0b1c9e24ee0 (diff) | |
download | gcc-transactional-memory.tar.gz |
* Merge from mainline rev 181122.transactional-memory
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/transactional-memory@181148 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cprop.c')
-rw-r--r-- | gcc/cprop.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/gcc/cprop.c b/gcc/cprop.c index 584ffd202ba..d90f769e546 100644 --- a/gcc/cprop.c +++ b/gcc/cprop.c @@ -712,8 +712,8 @@ find_used_regs (rtx *xptr, void *data ATTRIBUTE_UNUSED) } } -/* Try to replace all non-SET_DEST occurrences of FROM in INSN with TO. - Returns nonzero is successful. */ +/* Try to replace all uses of FROM in INSN with TO. + Return nonzero if successful. */ static int try_replace_reg (rtx from, rtx to, rtx insn) @@ -764,6 +764,18 @@ try_replace_reg (rtx from, rtx to, rtx insn) note = set_unique_reg_note (insn, REG_EQUAL, copy_rtx (src)); } + if (set && MEM_P (SET_DEST (set)) && reg_mentioned_p (from, SET_DEST (set))) + { + /* Registers can also appear as uses in SET_DEST if it is a MEM. + We could perhaps try this for multiple SETs, but it probably + won't buy us anything. */ + rtx dest = simplify_replace_rtx (SET_DEST (set), from, to); + + if (!rtx_equal_p (dest, SET_DEST (set)) + && validate_change (insn, &SET_DEST (set), dest, 0)) + success = 1; + } + /* REG_EQUAL may get simplified into register. We don't allow that. Remove that note. This code ought not to happen, because previous code ought to synthesize |