On Jul 9, 2014, at 8:21 AM, David Malcolm <[email protected]> wrote:
> [CCing nickc, who wrote the mn10300 hook in question]
>
> I'm experimenting with separating out instructions from expressions in
> RTL; see [1] for more info on that.
>
> I noticed that mn10300 has this implementation of a target hook:
> #define TARGET_SCHED_ADJUST_COST mn10300_adjust_sched_cost
>
> Within mn10300_adjust_sched_cost (where "insn" and "dep" are the first
> and third parameters respectively), there's this code:
>
> if (GET_CODE (insn) == PARALLEL)
> insn = XVECEXP (insn, 0, 0);
>
> if (GET_CODE (dep) == PARALLEL)
> dep = XVECEXP (dep, 0, 0);
>
> However, I believe that these params of this hook ("insn") always
> satisfy INSN_CHAIN_CODE_P, and so can't have code PARALLEL. [Nick: did
> those conditionals ever get triggered, or was this defensive coding?]
>From what I can tell these are remnants from the early days of haifa-sched
>(10+ years ago). I would be very surprised if scheduler didn't ICE on a
>PARALLEL of INSNs (not to be confused with a PARALLEL as INSN_PATTERN).
>
> Specifically, the hook is called from haifa-sched.c:dep_cost_1 on the
> DEP_CON and DEP_PRO of a dep_t.
>
> It's my belief that DEP_CON and DEP_PRO always satisfy INSN_CHAIN_CODE_P
> - and on every other config so far that seems to be the case.
>
> Is my belief about DEP_CON/DEP_PRO correct? (or, at least, consistent
> with other gcc developers' views on the matter :)) My patch kit [2] has
> this expressed in the type system as of [3], so if I'm incorrect about
> this I'd prefer to know ASAP.
Yes, it is correct.
>
> Similarly, do the first and third params of TARGET_SCHED_ADJUST_COST
> also satisfy INSN_CHAIN_CODE_P?
>
Yes, since they are always derived from DEP_CON / DEP_PRO.
--
Maxim Kuvyrkov
www.linaro.org