mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-13 05:43:45 +08:00
gcse.c (compute_ld_motion_mems): For MEM destinations...
* gcse.c (compute_ld_motion_mems): For MEM destinations, only consider those to be movable where the source matches want_to_gcse_p. (update_ld_motion_stores): In comment, refer to compute_ld_motion_mems for validity of replacement. From-SVN: r65766
This commit is contained in:
parent
dc93be8dce
commit
4d3eb89ac4
@ -1,3 +1,11 @@
|
||||
2003-04-18 Hans-Peter Nilsson <hp@bitrange.com>
|
||||
|
||||
* gcse.c (compute_ld_motion_mems): For MEM destinations, only
|
||||
consider those to be movable where the source matches
|
||||
want_to_gcse_p.
|
||||
(update_ld_motion_stores): In comment, refer to
|
||||
compute_ld_motion_mems for validity of replacement.
|
||||
|
||||
Fri Apr 18 01:28:51 CEST 2003 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* gcov-dump.c (tag_summary): Remove max_sum
|
||||
|
25
gcc/gcse.c
25
gcc/gcse.c
@ -6771,11 +6771,13 @@ invalidate_any_buried_refs (x)
|
||||
}
|
||||
}
|
||||
|
||||
/* Find all the 'simple' MEMs which are used in LOADs and STORES. Simple
|
||||
being defined as MEM loads and stores to symbols, with no
|
||||
side effects and no registers in the expression. If there are any
|
||||
uses/defs which don't match this criteria, it is invalidated and
|
||||
trimmed out later. */
|
||||
/* Find all the 'simple' MEMs which are used in LOADs and STORES. Simple
|
||||
being defined as MEM loads and stores to symbols, with no side effects
|
||||
and no registers in the expression. For a MEM destination, we also
|
||||
check that the insn is still valid if we replace the destination with a
|
||||
REG, as is done in update_ld_motion_stores. If there are any uses/defs
|
||||
which don't match this criteria, they are invalidated and trimmed out
|
||||
later. */
|
||||
|
||||
static void
|
||||
compute_ld_motion_mems ()
|
||||
@ -6823,7 +6825,10 @@ compute_ld_motion_mems ()
|
||||
ptr = ldst_entry (dest);
|
||||
|
||||
if (GET_CODE (src) != MEM
|
||||
&& GET_CODE (src) != ASM_OPERANDS)
|
||||
&& GET_CODE (src) != ASM_OPERANDS
|
||||
/* Check for REG manually since want_to_gcse_p
|
||||
returns 0 for all REGs. */
|
||||
&& (REG_P (src) || want_to_gcse_p (src)))
|
||||
ptr->stores = alloc_INSN_LIST (insn, ptr->stores);
|
||||
else
|
||||
ptr->invalid = 1;
|
||||
@ -6918,10 +6923,10 @@ update_ld_motion_stores (expr)
|
||||
matter to set the reaching reg everywhere... some might be
|
||||
dead and should be eliminated later. */
|
||||
|
||||
/* We replace SET mem = expr with
|
||||
SET reg = expr
|
||||
SET mem = reg , where reg is the
|
||||
reaching reg used in the load. */
|
||||
/* We replace (set mem expr) with (set reg expr) (set mem reg)
|
||||
where reg is the reaching reg used in the load. We checked in
|
||||
compute_ld_motion_mems that we can replace (set mem expr) with
|
||||
(set reg expr) in that insn. */
|
||||
rtx list = mem_ptr->stores;
|
||||
|
||||
for ( ; list != NULL_RTX; list = XEXP (list, 1))
|
||||
|
Loading…
Reference in New Issue
Block a user