re PR rtl-optimization/50448 (Missed optimization accessing struct component with integer address)
PR rtl-optimization/50448 * cprop.c (try_replace_reg): Also try to replace uses of FROM that appear in SET_DEST. From-SVN: r181011
This commit is contained in:
parent
69e596afa4
commit
8eee318f0a
|
@ -1,3 +1,9 @@
|
|||
2011-11-05 Georg-Johann Lay <avr@gjlay.de>
|
||||
|
||||
PR rtl-optimization/50448
|
||||
* cprop.c (try_replace_reg): Also try to replace uses of FROM that
|
||||
appear in SET_DEST.
|
||||
|
||||
2011-11-05 Peter Dufault <dufault@hda.com>,
|
||||
Sebastian Huber <sebastian.huber@embedded-brains.de>
|
||||
|
||||
|
|
16
gcc/cprop.c
16
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
|
||||
|
|
Loading…
Reference in New Issue