Commit b1435931 by Richard Sandiford Committed by Hans-Peter Nilsson

re PR rtl-optimization/53908 (csa removes needed memory load)

	PR rtl-optimization/53908
	* df-problems.c (can_move_insns_across): When doing
	memory-reference book-keeping, handle call insns.

Co-Authored-By: Bernd Schmidt <bernds@codesourcery.com>
Co-Authored-By: Steven Bosscher <steven@gcc.gnu.org>

From-SVN: r189454
parent a2faea4b
2012-07-13 Richard Sandiford <rdsandiford@googlemail.com>
Steven Bosscher <steven@gcc.gnu.org>
Bernd Schmidt <bernds@codesourcery.com>
PR rtl-optimization/53908
* df-problems.c (can_move_insns_across): When doing
memory-reference book-keeping, handle call insns.
2012-07-13 Richard Guenther <rguenther@suse.de> 2012-07-13 Richard Guenther <rguenther@suse.de>
* gimple.c (gimple_types_compatible_p_1): Remove redundant * gimple.c (gimple_types_compatible_p_1): Remove redundant
......
...@@ -4068,6 +4068,19 @@ can_move_insns_across (rtx from, rtx to, rtx across_from, rtx across_to, ...@@ -4068,6 +4068,19 @@ can_move_insns_across (rtx from, rtx to, rtx across_from, rtx across_to,
for (insn = across_to; ; insn = next) for (insn = across_to; ; insn = next)
{ {
if (CALL_P (insn))
{
if (RTL_CONST_OR_PURE_CALL_P (insn))
/* Pure functions can read from memory. Const functions can
read from arguments that the ABI has forced onto the stack.
Neither sort of read can be volatile. */
memrefs_in_across |= MEMREF_NORMAL;
else
{
memrefs_in_across |= MEMREF_VOLATILE;
mem_sets_in_across |= MEMREF_VOLATILE;
}
}
if (NONDEBUG_INSN_P (insn)) if (NONDEBUG_INSN_P (insn))
{ {
memrefs_in_across |= for_each_rtx (&PATTERN (insn), find_memory, memrefs_in_across |= for_each_rtx (&PATTERN (insn), find_memory,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment