Commit 82cfcdb6 by Richard Sandiford Committed by Richard Sandiford

varasm.c (compute_reloc_for_rtx_1): Take a const_rtx.

gcc/
	* varasm.c (compute_reloc_for_rtx_1): Take a const_rtx.  Remove the
	pointer to the cumulative reloc value and return the value for
	this reloc instead.
	(compute_reloc_for_rtx): Take a const_rtx.  Call
	compute_reloc_for_rtx_1 directly for SYMBOL_REF and LABEL_REF,
	avoiding any recursion.  Use FOR_EACH_SUBRTX rather than
	for_each_rtx for the CONST case.

From-SVN: r214667
parent 750b270a
2014-08-28 Richard Sandiford <rdsandiford@googlemail.com>
* varasm.c (compute_reloc_for_rtx_1): Take a const_rtx. Remove the
pointer to the cumulative reloc value and return the value for
this reloc instead.
(compute_reloc_for_rtx): Take a const_rtx. Call
compute_reloc_for_rtx_1 directly for SYMBOL_REF and LABEL_REF,
avoiding any recursion. Use FOR_EACH_SUBRTX rather than
for_each_rtx for the CONST case.
2014-08-28 Richard Sandiford <rdsandiford@googlemail.com>
* varasm.c (mark_constant): Replace this for_each_rtx callback with...
(mark_constants_in_pattern): ...this new function to iterate over
all the subrtxes.
......@@ -6487,44 +6487,43 @@ default_unique_section (tree decl, int reloc)
set_decl_section_name (decl, string);
}
/* Like compute_reloc_for_constant, except for an RTX. The return value
is a mask for which bit 1 indicates a global relocation, and bit 0
indicates a local relocation. */
/* Subroutine of compute_reloc_for_rtx for leaf rtxes. */
static int
compute_reloc_for_rtx_1 (rtx *xp, void *data)
compute_reloc_for_rtx_1 (const_rtx x)
{
int *preloc = (int *) data;
rtx x = *xp;
switch (GET_CODE (x))
{
case SYMBOL_REF:
*preloc |= SYMBOL_REF_LOCAL_P (x) ? 1 : 2;
break;
return SYMBOL_REF_LOCAL_P (x) ? 1 : 2;
case LABEL_REF:
*preloc |= 1;
break;
return 1;
default:
break;
return 0;
}
return 0;
}
/* Like compute_reloc_for_constant, except for an RTX. The return value
is a mask for which bit 1 indicates a global relocation, and bit 0
indicates a local relocation. */
static int
compute_reloc_for_rtx (rtx x)
compute_reloc_for_rtx (const_rtx x)
{
int reloc;
switch (GET_CODE (x))
{
case CONST:
case SYMBOL_REF:
case LABEL_REF:
reloc = 0;
for_each_rtx (&x, compute_reloc_for_rtx_1, &reloc);
return reloc;
return compute_reloc_for_rtx_1 (x);
case CONST:
{
int reloc = 0;
subrtx_iterator::array_type array;
FOR_EACH_SUBRTX (iter, array, x, ALL)
reloc |= compute_reloc_for_rtx_1 (*iter);
return reloc;
}
default:
return 0;
......
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