From fbb34134d83a379bdc948b1ba4566ba311b304d0 Mon Sep 17 00:00:00 2001 From: rsandifo Date: Mon, 10 Nov 2014 19:51:57 +0000 Subject: gcc/ * config/frv/frv.c: Include rtl-iter.h. (frv_acc_group_1): Delete. (frv_acc_group): Use FOR_EACH_SUBRTX. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@217309 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/config/frv/frv.c | 40 ++++++++++++++++++---------------------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 67ff64ea439..505d8cf6c03 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-11-10 Richard Sandiford + + * config/frv/frv.c: Include rtl-iter.h. + (frv_acc_group_1): Delete. + (frv_acc_group): Use FOR_EACH_SUBRTX. + 2014-11-10 Richard Sandiford * config/frv/frv.c: Move include of rtl.h after hard-reg-set.h. diff --git a/gcc/config/frv/frv.c b/gcc/config/frv/frv.c index 64697081f0c..46ada4ce1b6 100644 --- a/gcc/config/frv/frv.c +++ b/gcc/config/frv/frv.c @@ -67,6 +67,7 @@ along with GCC; see the file COPYING3. If not see #include "dumpfile.h" #include "builtins.h" #include "ifcvt.h" +#include "rtl-iter.h" #ifndef FRV_INLINE #define FRV_INLINE inline @@ -338,7 +339,6 @@ static rtx frv_emit_comparison (enum rtx_code, rtx, rtx); static void frv_ifcvt_add_insn (rtx, rtx, int); static rtx frv_ifcvt_rewrite_mem (rtx, machine_mode, rtx); static rtx frv_ifcvt_load_value (rtx, rtx); -static int frv_acc_group_1 (rtx *, void *); static unsigned int frv_insn_unit (rtx_insn *); static bool frv_issues_to_branch_unit_p (rtx_insn *); static int frv_cond_flags (rtx); @@ -7013,33 +7013,29 @@ frv_issue_rate (void) } } -/* A for_each_rtx callback. If X refers to an accumulator, return - ACC_GROUP_ODD if the bit 2 of the register number is set and - ACC_GROUP_EVEN if it is clear. Return 0 (ACC_GROUP_NONE) - otherwise. */ - -static int -frv_acc_group_1 (rtx *x, void *data ATTRIBUTE_UNUSED) -{ - if (REG_P (*x)) - { - if (ACC_P (REGNO (*x))) - return (REGNO (*x) - ACC_FIRST) & 4 ? ACC_GROUP_ODD : ACC_GROUP_EVEN; - if (ACCG_P (REGNO (*x))) - return (REGNO (*x) - ACCG_FIRST) & 4 ? ACC_GROUP_ODD : ACC_GROUP_EVEN; - } - return 0; -} - /* Return the value of INSN's acc_group attribute. */ int frv_acc_group (rtx insn) { /* This distinction only applies to the FR550 packing constraints. */ - if (frv_cpu_type != FRV_CPU_FR550) - return ACC_GROUP_NONE; - return for_each_rtx (&PATTERN (insn), frv_acc_group_1, 0); + if (frv_cpu_type == FRV_CPU_FR550) + { + subrtx_iterator::array_type array; + FOR_EACH_SUBRTX (iter, array, PATTERN (insn), NONCONST) + if (REG_P (*iter)) + { + unsigned int regno = REGNO (*iter); + /* If REGNO refers to an accumulator, return ACC_GROUP_ODD if + the bit 2 of the register number is set and ACC_GROUP_EVEN if + it is clear. */ + if (ACC_P (regno)) + return (regno - ACC_FIRST) & 4 ? ACC_GROUP_ODD : ACC_GROUP_EVEN; + if (ACCG_P (regno)) + return (regno - ACCG_FIRST) & 4 ? ACC_GROUP_ODD : ACC_GROUP_EVEN; + } + } + return ACC_GROUP_NONE; } /* Return the index of the DFA unit in FRV_UNIT_NAMES[] that instruction -- cgit v1.2.1