From a19af9c4e401e168f46180adab9210a6fdb1757e Mon Sep 17 00:00:00 2001 From: Bernd Schmidt Date: Wed, 13 Jul 2011 10:18:32 +0000 Subject: sched-int.h (struct _dep): Add member cost. * sched-int.h (struct _dep): Add member cost. (DEP_COST, UNKNOWN_DEP_COST): New macros. * sched-deps.c (init_dep_1): Initialize DEP_COST. * haifa-sched.c (dep_cost_1): Use and set DEP_COST. (sched_change_pattern): Reset it for dependent insns. From-SVN: r176226 --- gcc/haifa-sched.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'gcc/haifa-sched.c') diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index f4caecd..bc36d07 100644 --- a/gcc/haifa-sched.c +++ b/gcc/haifa-sched.c @@ -854,6 +854,9 @@ dep_cost_1 (dep_t link, dw_t dw) rtx used = DEP_CON (link); int cost; + if (DEP_COST (link) != UNKNOWN_DEP_COST) + return DEP_COST (link); + /* A USE insn should never require the value used to be computed. This allows the computation of a function's result and parameter values to overlap the return and call. We don't care about the @@ -911,6 +914,7 @@ dep_cost_1 (dep_t link, dw_t dw) cost = 0; } + DEP_COST (link) = cost; return cost; } @@ -4865,11 +4869,21 @@ fix_recovery_deps (basic_block rec) void sched_change_pattern (rtx insn, rtx new_pat) { + sd_iterator_def sd_it; + dep_t dep; int t; t = validate_change (insn, &PATTERN (insn), new_pat, 0); gcc_assert (t); dfa_clear_single_insn_cache (insn); + + for (sd_it = sd_iterator_start (insn, (SD_LIST_FORW | SD_LIST_BACK + | SD_LIST_RES_BACK)); + sd_iterator_cond (&sd_it, &dep);) + { + DEP_COST (dep) = UNKNOWN_DEP_COST; + sd_iterator_next (&sd_it); + } } /* Change pattern of INSN to NEW_PAT. Invalidate cached haifa -- cgit v1.1