aboutsummaryrefslogtreecommitdiff
path: root/gcc/cse.c
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2014-08-28 06:22:29 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2014-08-28 06:22:29 +0000
commitc992c06661b428aef78366d4ecd58ec06f839a64 (patch)
treea5eda02eb7a1e186849c90dac61e2f309d417107 /gcc/cse.c
parente89b312ed39af831f4e88534326ca723e8eed271 (diff)
downloadgcc-c992c06661b428aef78366d4ecd58ec06f839a64.zip
gcc-c992c06661b428aef78366d4ecd58ec06f839a64.tar.gz
gcc-c992c06661b428aef78366d4ecd58ec06f839a64.tar.bz2
cse.c (check_dependence_data): Delete.
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. From-SVN: r214628
Diffstat (limited to 'gcc/cse.c')
-rw-r--r--gcc/cse.c34
1 files changed, 13 insertions, 21 deletions
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);
}
}