Hello,
I am confused by following piece of code in sched-deps.c. My understanding
is the last_pending_memory_flush only holds jumps, calls and memory write. So I
think the two invocations of add_dependence should build true dependence, not
anti.
for (u = deps->last_pending_memory_flush; u; u = XEXP (u, 1))
{
if (! NON_FLUSH_JUMP_P (u))
add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI);
<-----------------------
else if (deps_may_trap_p (x))
{
if ((sched_deps_info->generate_spec_deps)
&& sel_sched_p () && (spec_info->mask & BEGIN_CONTROL))
{
ds_t ds = set_dep_weak (DEP_ANTI, BEGIN_CONTROL,
MAX_DEP_WEAK);
note_dep (XEXP (u, 0), ds);
}
else
add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI);
<---------------------------
}
}
also, can you explain following comments in sched-deps.c. I don't quite
understand what is means and what NON_FLUSH_JUMP_KIND is for.
/* In deps->last_pending_memory_flush marks JUMP_INSNs that weren't
added to the list because of flush_pending_lists, stands just
for itself and not for any other pending memory reads/writes. */
I also need more dicussion about DEPS_LIST and INSN_LIST. Maxim once kindly
explained to me,
"DEPS_LIST is a super-set of INSN_LIST. I kept INSN_LIST-style dependencies to
avoid overhead on targets that don't need additional features of DEPS_LIST. Now
that I look back at it, I should have removed INSN_LIST-style dependencies; I
still hope to find time and clean that up (remove support for INSN_LIST-style
dependencies).". But it is still over my head. my question is what is
INSN_list-style dependencies? what is the extra feature of DEPS_LIST as a
super-set of INSN_list?
thanks