mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-22 15:00:55 +08:00
gcse.c (hash_scan_set): Do not pick up a REG_EQUAL value if SRC is a REG.
2008-05-25 Steven Bosscher <stevenb.gcc@gmail.com> * gcse.c (hash_scan_set): Do not pick up a REG_EQUAL value if SRC is a REG. From-SVN: r135860
This commit is contained in:
parent
dd25a747c9
commit
294707717f
@ -1,3 +1,8 @@
|
||||
2008-05-25 Steven Bosscher <stevenb.gcc@gmail.com>
|
||||
|
||||
* gcse.c (hash_scan_set): Do not pick up a REG_EQUAL value if
|
||||
SRC is a REG.
|
||||
|
||||
2008-05-25 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* c-common.c (strip_array_types): Move function to..
|
||||
|
17
gcc/gcse.c
17
gcc/gcse.c
@ -1692,12 +1692,25 @@ hash_scan_set (rtx pat, rtx insn, struct hash_table *table)
|
||||
unsigned int regno = REGNO (dest);
|
||||
rtx tmp;
|
||||
|
||||
/* See if a REG_NOTE shows this equivalent to a simpler expression.
|
||||
/* See if a REG_EQUAL note shows this equivalent to a simpler expression.
|
||||
|
||||
This allows us to do a single GCSE pass and still eliminate
|
||||
redundant constants, addresses or other expressions that are
|
||||
constructed with multiple instructions. */
|
||||
constructed with multiple instructions.
|
||||
|
||||
However, keep the original SRC if INSN is a simple reg-reg move. In
|
||||
In this case, there will almost always be a REG_EQUAL note on the
|
||||
insn that sets SRC. By recording the REG_EQUAL value here as SRC
|
||||
for INSN, we miss copy propagation opportunities and we perform the
|
||||
same PRE GCSE operation repeatedly on the same REG_EQUAL value if we
|
||||
do more than one PRE GCSE pass.
|
||||
|
||||
Note that this does not impede profitale constant propagations. We
|
||||
"look through" reg-reg sets in lookup_avail_set. */
|
||||
note = find_reg_equal_equiv_note (insn);
|
||||
if (note != 0
|
||||
&& REG_NOTE_KIND (note) == REG_EQUAL
|
||||
&& !REG_P (src)
|
||||
&& (table->set_p
|
||||
? gcse_constant_p (XEXP (note, 0))
|
||||
: want_to_gcse_p (XEXP (note, 0))))
|
||||
|
Loading…
x
Reference in New Issue
Block a user