From: Georg-Johann Lay Date: Sat, 5 Nov 2011 13:08:54 +0000 (+0000) Subject: re PR rtl-optimization/50448 (Missed optimization accessing struct component with... X-Git-Tag: releases/gcc-4.7.0~2459 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8eee318f0af514cb4b508af91ec5a3825e1960b3;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 528843890758..e92bd1804c9d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-11-05 Georg-Johann Lay + + 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 , Sebastian Huber diff --git a/gcc/cprop.c b/gcc/cprop.c index 584ffd202bac..d90f769e546e 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