Commit 9989ddc8 by Richard Sandiford Committed by Richard Sandiford

mips.c (r10k_needs_protection_p_1): Take an rtx rather than an rtx pointer.

gcc/
	* config/mips/mips.c (r10k_needs_protection_p_1): Take an rtx
	rather than an rtx pointer.  Change type of insn from "void *"
	to its real type.  Return bool rather than int.  Iterate over
	all subrtxes here.
	(r10k_needs_protection_p_store): Update accordingly.
	(r10k_needs_protection_p): Likewise.

From-SVN: r216711
parent 9b3dd001
2014-10-26 Richard Sandiford <richard.sandiford@arm.com>
* config/mips/mips.c (r10k_needs_protection_p_1): Take an rtx
rather than an rtx pointer. Change type of insn from "void *"
to its real type. Return bool rather than int. Iterate over
all subrtxes here.
(r10k_needs_protection_p_store): Update accordingly.
(r10k_needs_protection_p): Likewise.
2014-10-26 Richard Sandiford <richard.sandiford@arm.com>
* config/mips/mips.c (mips16_rewrite_pool_refs_info): Delete.
(mips16_rewrite_pool_refs): Take the insn and constant pool as
parameters. Iterate over the instruction's pattern and return void.
......@@ -15063,28 +15063,28 @@ r10k_safe_mem_expr_p (tree expr, unsigned HOST_WIDE_INT offset)
return offset < tree_to_uhwi (DECL_SIZE_UNIT (inner));
}
/* A for_each_rtx callback for which DATA points to the instruction
containing *X. Stop the search if we find a MEM that is not safe
from R10K speculation. */
/* Return true if X contains a MEM that is not safe from R10K speculation.
INSN is the instruction that contains X. */
static int
r10k_needs_protection_p_1 (rtx *loc, void *data)
static bool
r10k_needs_protection_p_1 (rtx x, rtx_insn *insn)
{
rtx mem;
mem = *loc;
if (!MEM_P (mem))
return 0;
if (MEM_EXPR (mem)
subrtx_var_iterator::array_type array;
FOR_EACH_SUBRTX_VAR (iter, array, x, NONCONST)
{
rtx mem = *iter;
if (MEM_P (mem))
{
if ((MEM_EXPR (mem)
&& MEM_OFFSET_KNOWN_P (mem)
&& r10k_safe_mem_expr_p (MEM_EXPR (mem), MEM_OFFSET (mem)))
return -1;
if (r10k_safe_address_p (XEXP (mem, 0), (rtx_insn *) data))
return -1;
return 1;
|| r10k_safe_address_p (XEXP (mem, 0), insn))
iter.skip_subrtxes ();
else
return true;
}
}
return false;
}
/* A note_stores callback for which DATA points to an instruction pointer.
......@@ -15098,7 +15098,7 @@ r10k_needs_protection_p_store (rtx x, const_rtx pat ATTRIBUTE_UNUSED,
rtx_insn **insn_ptr;
insn_ptr = (rtx_insn **) data;
if (*insn_ptr && for_each_rtx (&x, r10k_needs_protection_p_1, *insn_ptr))
if (*insn_ptr && r10k_needs_protection_p_1 (x, *insn_ptr))
*insn_ptr = NULL;
}
......@@ -15136,7 +15136,7 @@ r10k_needs_protection_p (rtx_insn *insn)
return insn == NULL_RTX;
}
return for_each_rtx (&PATTERN (insn), r10k_needs_protection_p_1, insn);
return r10k_needs_protection_p_1 (PATTERN (insn), insn);
}
/* Return true if BB is only reached by blocks in PROTECTED_BBS and if every
......
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