From dbb838b7408ba394688c700f2aa360fe299dd89a Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Mon, 27 Oct 2014 18:41:17 +0000 Subject: [PATCH] alpha-protos.h (some_small_symbolic_operand_int): Take an rtx and return a bool. 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. From-SVN: r216757 --- gcc/ChangeLog | 9 +++++++++ gcc/config/alpha/alpha-protos.h | 2 +- gcc/config/alpha/alpha.c | 22 +++++++++++++--------- gcc/config/alpha/predicates.md | 2 +- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 972ed0a817e..cc6c8ced1f6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2014-10-27 Richard Sandiford + + * 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. + 2014-10-27 Richard Sandiford * config/alpha/alpha-protos.h (alpha_find_lo_sum_using_gp): Return diff --git a/gcc/config/alpha/alpha-protos.h b/gcc/config/alpha/alpha-protos.h index 22c082d756a..304a668bc04 100644 --- a/gcc/config/alpha/alpha-protos.h +++ b/gcc/config/alpha/alpha-protos.h @@ -112,6 +112,6 @@ extern HOST_WIDE_INT alpha_vms_initial_elimination_offset (unsigned int, 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); diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index 966999c26a9..ba8b249b9bd 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -1233,16 +1233,20 @@ alpha_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED) 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 diff --git a/gcc/config/alpha/predicates.md b/gcc/config/alpha/predicates.md index c68e83a7013..9cf7452dc9d 100644 --- a/gcc/config/alpha/predicates.md +++ b/gcc/config/alpha/predicates.md @@ -638,7 +638,7 @@ /* 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. -- 2.30.2