mirror of git://gcc.gnu.org/git/gcc.git
rtl.h (rtx_function, [...]): Delete.
gcc/ * rtl.h (rtx_function, for_each_rtx, for_each_rtx_in_insn): Delete. * rtlanal.c (non_rtx_starting_operands, for_each_rtx_1, for_each_rtx): (for_each_rtx_in_insn): Delete. (init_rtlanal): Remove initialization of non_rtx_starting_operands. * df-core.c: Remove reference to for_each_rtx in comment. From-SVN: r217407
This commit is contained in:
parent
02c0ac4584
commit
e02101ff0a
|
|
@ -1,3 +1,11 @@
|
||||||
|
2014-11-12 Richard Sandiford <richard.sandiford@arm.com>
|
||||||
|
|
||||||
|
* rtl.h (rtx_function, for_each_rtx, for_each_rtx_in_insn): Delete.
|
||||||
|
* rtlanal.c (non_rtx_starting_operands, for_each_rtx_1, for_each_rtx):
|
||||||
|
(for_each_rtx_in_insn): Delete.
|
||||||
|
(init_rtlanal): Remove initialization of non_rtx_starting_operands.
|
||||||
|
* df-core.c: Remove reference to for_each_rtx in comment.
|
||||||
|
|
||||||
2014-11-12 Tejas Belagod <tejas.belagod@arm.com>
|
2014-11-12 Tejas Belagod <tejas.belagod@arm.com>
|
||||||
|
|
||||||
* Makefile.in (TEXI_GCC_FILES): Remove arm-acle-intrinsics.texi,
|
* Makefile.in (TEXI_GCC_FILES): Remove arm-acle-intrinsics.texi,
|
||||||
|
|
|
||||||
|
|
@ -181,7 +181,7 @@ There are four ways of doing the incremental scanning:
|
||||||
next call to df_analyze or df_process_deferred_rescans.
|
next call to df_analyze or df_process_deferred_rescans.
|
||||||
|
|
||||||
This mode is also used by a few passes that still rely on note_uses,
|
This mode is also used by a few passes that still rely on note_uses,
|
||||||
note_stores and for_each_rtx instead of using the DF data. This
|
note_stores and rtx iterators instead of using the DF data. This
|
||||||
can be said to fall under case 1c.
|
can be said to fall under case 1c.
|
||||||
|
|
||||||
To enable this mode, call df_set_flags (DF_DEFER_INSN_RESCAN).
|
To enable this mode, call df_set_flags (DF_DEFER_INSN_RESCAN).
|
||||||
|
|
|
||||||
|
|
@ -2885,10 +2885,6 @@ extern bool tablejump_p (const rtx_insn *, rtx *, rtx_jump_table_data **);
|
||||||
extern int computed_jump_p (const_rtx);
|
extern int computed_jump_p (const_rtx);
|
||||||
extern bool tls_referenced_p (const_rtx);
|
extern bool tls_referenced_p (const_rtx);
|
||||||
|
|
||||||
typedef int (*rtx_function) (rtx *, void *);
|
|
||||||
extern int for_each_rtx (rtx *, rtx_function, void *);
|
|
||||||
extern int for_each_rtx_in_insn (rtx_insn **, rtx_function, void *);
|
|
||||||
|
|
||||||
/* Callback for for_each_inc_dec, to process the autoinc operation OP
|
/* Callback for for_each_inc_dec, to process the autoinc operation OP
|
||||||
within MEM that sets DEST to SRC + SRCOFF, or SRC if SRCOFF is
|
within MEM that sets DEST to SRC + SRCOFF, or SRC if SRCOFF is
|
||||||
NULL. The callback is passed the same opaque ARG passed to
|
NULL. The callback is passed the same opaque ARG passed to
|
||||||
|
|
|
||||||
141
gcc/rtlanal.c
141
gcc/rtlanal.c
|
|
@ -65,10 +65,6 @@ static unsigned int cached_num_sign_bit_copies (const_rtx, machine_mode, const_r
|
||||||
static unsigned int num_sign_bit_copies1 (const_rtx, machine_mode, const_rtx,
|
static unsigned int num_sign_bit_copies1 (const_rtx, machine_mode, const_rtx,
|
||||||
machine_mode, unsigned int);
|
machine_mode, unsigned int);
|
||||||
|
|
||||||
/* Offset of the first 'e', 'E' or 'V' operand for each rtx code, or
|
|
||||||
-1 if a code has no such operand. */
|
|
||||||
static int non_rtx_starting_operands[NUM_RTX_CODE];
|
|
||||||
|
|
||||||
rtx_subrtx_bound_info rtx_all_subrtx_bounds[NUM_RTX_CODE];
|
rtx_subrtx_bound_info rtx_all_subrtx_bounds[NUM_RTX_CODE];
|
||||||
rtx_subrtx_bound_info rtx_nonconst_subrtx_bounds[NUM_RTX_CODE];
|
rtx_subrtx_bound_info rtx_nonconst_subrtx_bounds[NUM_RTX_CODE];
|
||||||
|
|
||||||
|
|
@ -3020,137 +3016,6 @@ computed_jump_p (const_rtx insn)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Optimized loop of for_each_rtx, trying to avoid useless recursive
|
|
||||||
calls. Processes the subexpressions of EXP and passes them to F. */
|
|
||||||
static int
|
|
||||||
for_each_rtx_1 (rtx exp, int n, rtx_function f, void *data)
|
|
||||||
{
|
|
||||||
int result, i, j;
|
|
||||||
const char *format = GET_RTX_FORMAT (GET_CODE (exp));
|
|
||||||
rtx *x;
|
|
||||||
|
|
||||||
for (; format[n] != '\0'; n++)
|
|
||||||
{
|
|
||||||
switch (format[n])
|
|
||||||
{
|
|
||||||
case 'e':
|
|
||||||
/* Call F on X. */
|
|
||||||
x = &XEXP (exp, n);
|
|
||||||
result = (*f) (x, data);
|
|
||||||
if (result == -1)
|
|
||||||
/* Do not traverse sub-expressions. */
|
|
||||||
continue;
|
|
||||||
else if (result != 0)
|
|
||||||
/* Stop the traversal. */
|
|
||||||
return result;
|
|
||||||
|
|
||||||
if (*x == NULL_RTX)
|
|
||||||
/* There are no sub-expressions. */
|
|
||||||
continue;
|
|
||||||
|
|
||||||
i = non_rtx_starting_operands[GET_CODE (*x)];
|
|
||||||
if (i >= 0)
|
|
||||||
{
|
|
||||||
result = for_each_rtx_1 (*x, i, f, data);
|
|
||||||
if (result != 0)
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'V':
|
|
||||||
case 'E':
|
|
||||||
if (XVEC (exp, n) == 0)
|
|
||||||
continue;
|
|
||||||
for (j = 0; j < XVECLEN (exp, n); ++j)
|
|
||||||
{
|
|
||||||
/* Call F on X. */
|
|
||||||
x = &XVECEXP (exp, n, j);
|
|
||||||
result = (*f) (x, data);
|
|
||||||
if (result == -1)
|
|
||||||
/* Do not traverse sub-expressions. */
|
|
||||||
continue;
|
|
||||||
else if (result != 0)
|
|
||||||
/* Stop the traversal. */
|
|
||||||
return result;
|
|
||||||
|
|
||||||
if (*x == NULL_RTX)
|
|
||||||
/* There are no sub-expressions. */
|
|
||||||
continue;
|
|
||||||
|
|
||||||
i = non_rtx_starting_operands[GET_CODE (*x)];
|
|
||||||
if (i >= 0)
|
|
||||||
{
|
|
||||||
result = for_each_rtx_1 (*x, i, f, data);
|
|
||||||
if (result != 0)
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
/* Nothing to do. */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Traverse X via depth-first search, calling F for each
|
|
||||||
sub-expression (including X itself). F is also passed the DATA.
|
|
||||||
If F returns -1, do not traverse sub-expressions, but continue
|
|
||||||
traversing the rest of the tree. If F ever returns any other
|
|
||||||
nonzero value, stop the traversal, and return the value returned
|
|
||||||
by F. Otherwise, return 0. This function does not traverse inside
|
|
||||||
tree structure that contains RTX_EXPRs, or into sub-expressions
|
|
||||||
whose format code is `0' since it is not known whether or not those
|
|
||||||
codes are actually RTL.
|
|
||||||
|
|
||||||
This routine is very general, and could (should?) be used to
|
|
||||||
implement many of the other routines in this file. */
|
|
||||||
|
|
||||||
int
|
|
||||||
for_each_rtx (rtx *x, rtx_function f, void *data)
|
|
||||||
{
|
|
||||||
int result;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/* Call F on X. */
|
|
||||||
result = (*f) (x, data);
|
|
||||||
if (result == -1)
|
|
||||||
/* Do not traverse sub-expressions. */
|
|
||||||
return 0;
|
|
||||||
else if (result != 0)
|
|
||||||
/* Stop the traversal. */
|
|
||||||
return result;
|
|
||||||
|
|
||||||
if (*x == NULL_RTX)
|
|
||||||
/* There are no sub-expressions. */
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
i = non_rtx_starting_operands[GET_CODE (*x)];
|
|
||||||
if (i < 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return for_each_rtx_1 (*x, i, f, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Like "for_each_rtx", but for calling on an rtx_insn **. */
|
|
||||||
|
|
||||||
int
|
|
||||||
for_each_rtx_in_insn (rtx_insn **insn, rtx_function f, void *data)
|
|
||||||
{
|
|
||||||
rtx insn_as_rtx = *insn;
|
|
||||||
int result;
|
|
||||||
|
|
||||||
result = for_each_rtx (&insn_as_rtx, f, data);
|
|
||||||
|
|
||||||
if (insn_as_rtx != *insn)
|
|
||||||
*insn = safe_as_a <rtx_insn *> (insn_as_rtx);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* MEM has a PRE/POST-INC/DEC/MODIFY address X. Extract the operands of
|
/* MEM has a PRE/POST-INC/DEC/MODIFY address X. Extract the operands of
|
||||||
|
|
@ -5496,17 +5361,13 @@ setup_reg_subrtx_bounds (unsigned int code)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize non_rtx_starting_operands, which is used to speed up
|
/* Initialize rtx_all_subrtx_bounds. */
|
||||||
for_each_rtx, and rtx_all_subrtx_bounds. */
|
|
||||||
void
|
void
|
||||||
init_rtlanal (void)
|
init_rtlanal (void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < NUM_RTX_CODE; i++)
|
for (i = 0; i < NUM_RTX_CODE; i++)
|
||||||
{
|
{
|
||||||
const char *format = GET_RTX_FORMAT (i);
|
|
||||||
const char *first = strpbrk (format, "eEV");
|
|
||||||
non_rtx_starting_operands[i] = first ? first - format : -1;
|
|
||||||
if (!setup_reg_subrtx_bounds (i))
|
if (!setup_reg_subrtx_bounds (i))
|
||||||
rtx_all_subrtx_bounds[i].count = UCHAR_MAX;
|
rtx_all_subrtx_bounds[i].count = UCHAR_MAX;
|
||||||
if (GET_RTX_CLASS (i) != RTX_CONST_OBJ)
|
if (GET_RTX_CLASS (i) != RTX_CONST_OBJ)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue