This is part of a series to remove uses of for_each_rtx from the ports.
Tested by making sure there were no code changes for gcc.dg, gcc.c-torture
and g++.dg for alpha-linux-gnu. OK to install?
Thanks,
Richard
gcc/
* config/alpha/alpha-protos.h (some_small_symbolic_operand_int):
Take an rtx and return a bool.
* config/alpha/alpha.c (some_small_symbolic_operand_int): Likewise.
Use FOR_EACH_SUBRTX_VAR.
* config/alpha/predicates.md (some_small_symbolic_operand): Update
accordingly.
Index: gcc/config/alpha/alpha-protos.h
===================================================================
--- gcc/config/alpha/alpha-protos.h 2014-10-25 09:51:29.781922193 +0100
+++ gcc/config/alpha/alpha-protos.h 2014-10-25 09:51:30.191925847 +0100
@@ -112,6 +112,6 @@ extern HOST_WIDE_INT alpha_vms_initial_e
extern rtx unicosmk_add_call_info_word (rtx);
-extern int some_small_symbolic_operand_int (rtx *, void *);
+extern bool some_small_symbolic_operand_int (rtx);
extern int tls_symbolic_operand_1 (rtx, int, int);
extern rtx resolve_reload_operand (rtx);
Index: gcc/config/alpha/alpha.c
===================================================================
--- gcc/config/alpha/alpha.c 2014-10-25 09:51:29.783922210 +0100
+++ gcc/config/alpha/alpha.c 2014-10-25 09:51:30.192925856 +0100
@@ -1225,16 +1225,20 @@ alpha_function_ok_for_sibcall (tree decl
return decl_has_samegp (decl);
}
-int
-some_small_symbolic_operand_int (rtx *px, void *data ATTRIBUTE_UNUSED)
+bool
+some_small_symbolic_operand_int (rtx x)
{
- rtx x = *px;
-
- /* Don't re-split. */
- if (GET_CODE (x) == LO_SUM)
- return -1;
-
- return small_symbolic_operand (x, Pmode) != 0;
+ subrtx_var_iterator::array_type array;
+ FOR_EACH_SUBRTX_VAR (iter, array, x, ALL)
+ {
+ rtx x = *iter;
+ /* Don't re-split. */
+ if (GET_CODE (x) == LO_SUM)
+ iter.skip_subrtxes ();
+ else if (small_symbolic_operand (x, Pmode))
+ return true;
+ }
+ return false;
}
rtx
Index: gcc/config/alpha/predicates.md
===================================================================
--- gcc/config/alpha/predicates.md 2014-10-25 09:40:37.750514758 +0100
+++ gcc/config/alpha/predicates.md 2014-10-25 09:51:30.193925865 +0100
@@ -638,7 +638,7 @@ (define_predicate "some_small_symbolic_o
/* Avoid search unless necessary. */
if (!TARGET_EXPLICIT_RELOCS || !reload_completed)
return false;
- return for_each_rtx (&op, some_small_symbolic_operand_int, NULL);
+ return some_small_symbolic_operand_int (op);
})
;; Accept a register, or a memory if BWX is enabled.