From e4a58c6034ed9c5b7154f01cf8f4acba6a0578fc Mon Sep 17 00:00:00 2001 From: rsandifo Date: Thu, 28 Aug 2014 06:22:29 +0000 Subject: [PATCH] gcc/ * cse.c (check_dependence_data): Delete. (check_dependence): Change from being a for_each_rtx callback to being a function that examines all subrtxes itself. Don't handle null rtxes. (invalidate): Update call accordingly. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@214628 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 7 +++++++ gcc/cse.c | 34 +++++++++++++--------------------- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1d31809..3fe52d5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2014-08-28 Richard Sandiford + * cse.c (check_dependence_data): Delete. + (check_dependence): Change from being a for_each_rtx callback to being + a function that examines all subrtxes itself. Don't handle null rtxes. + (invalidate): Update call accordingly. + +2014-08-28 Richard Sandiford + * cse.c: Include rtl-iter.h. (approx_reg_cost_1): Delete. (approx_reg_cost): Use FOR_EACH_SUBRTX instead of for_each_rtx. diff --git a/gcc/cse.c b/gcc/cse.c index 4b9a961..3557894 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -600,7 +600,6 @@ static int check_for_label_ref (rtx *, void *); extern void dump_class (struct table_elt*); static void get_cse_reg_info_1 (unsigned int regno); static struct cse_reg_info * get_cse_reg_info (unsigned int regno); -static int check_dependence (rtx *, void *); static void flush_hash_table (void); static bool insn_live_p (rtx_insn *, int *); @@ -1816,22 +1815,20 @@ flush_hash_table (void) } } -/* Function called for each rtx to check whether an anti dependence exist. */ -struct check_dependence_data -{ - enum machine_mode mode; - rtx exp; - rtx addr; -}; +/* Check whether an anti dependence exists between X and EXP. MODE and + ADDR are as for canon_anti_dependence. */ -static int -check_dependence (rtx *x, void *data) +static bool +check_dependence (const_rtx x, rtx exp, enum machine_mode mode, rtx addr) { - struct check_dependence_data *d = (struct check_dependence_data *) data; - if (*x && MEM_P (*x)) - return canon_anti_dependence (*x, true, d->exp, d->mode, d->addr); - else - return 0; + subrtx_iterator::array_type array; + FOR_EACH_SUBRTX (iter, array, x, NONCONST) + { + const_rtx x = *iter; + if (MEM_P (x) && canon_anti_dependence (x, true, exp, mode, addr)) + return true; + } + return false; } /* Remove from the hash table, or mark as invalid, all expressions whose @@ -1952,18 +1949,13 @@ invalidate (rtx x, enum machine_mode full_mode) next = p->next_same_hash; if (p->in_memory) { - struct check_dependence_data d; - /* Just canonicalize the expression once; otherwise each time we call invalidate true_dependence will canonicalize the expression again. */ if (!p->canon_exp) p->canon_exp = canon_rtx (p->exp); - d.exp = x; - d.addr = addr; - d.mode = full_mode; - if (for_each_rtx (&p->canon_exp, check_dependence, &d)) + if (check_dependence (p->canon_exp, x, full_mode, addr)) remove_from_table (p, i); } } -- 2.7.4