summaryrefslogtreecommitdiff
path: root/gcc/df-problems.c
diff options
context:
space:
mode:
authorhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>2012-07-13 08:53:24 +0000
committerhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>2012-07-13 08:53:24 +0000
commitcd734582c151824710104daceb0cd266ea3d2944 (patch)
tree8b7582506377af4314c53d0965ff8ca5db4ec85f /gcc/df-problems.c
parentca675b2e5e8560c243e88fe54c7d2e5fa3c288d6 (diff)
downloadgcc-cd734582c151824710104daceb0cd266ea3d2944.tar.gz
PR rtl-optimization/53908
* df-problems.c (can_move_insns_across): When doing memory-reference book-keeping, handle call insns. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@189454 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/df-problems.c')
-rw-r--r--gcc/df-problems.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/df-problems.c b/gcc/df-problems.c
index 7afbed98283..d650d0ba415 100644
--- a/gcc/df-problems.c
+++ b/gcc/df-problems.c
@@ -4068,6 +4068,19 @@ can_move_insns_across (rtx from, rtx to, rtx across_from, rtx across_to,
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))
{
memrefs_in_across |= for_each_rtx (&PATTERN (insn), find_memory,