This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: A question about sched_analyze_insn in sched-deps.c


>AFAIK SMS will not do speculative memory access.

Right, SMS does no speculative memory access. Though that might not be
a bad idea...
Ayal.


2011/8/11 Revital Eres <revital.eres@linaro.org>
>
> Hello,
>
> >> I appriciate explanation regarding the following piece of code in
> >> sched_analyze_insn function (sched-deps.c): When handling jump instruction
> >> dependence edges are created between the jump instruction and memory
> >> writes and volatile reads and I'm not quite sure the reason why.
> >
> > Jump instructions can be conditional. ?Note the check for whether the
> > next instruction is a barrier.
>
> Thanks for the answer. I'm asking that in the context of SMS --- I'm
> not sure if this dependence is needed when SMS is applied. AFAIK SMS
> will not do speculative memory access. ?If that's indeed the case I'll
> submit the following patch.
>
> Thanks,
> Revital
>
> Index: sched-deps.c
> ===================================================================
> --- sched-deps.c ? ? ? ?(revision 177556)
> +++ sched-deps.c ? ? ? ?(working copy)
> @@ -2777,32 +2777,36 @@ sched_analyze_insn (struct deps_desc *de
> ? ? ? ? ? ? }
>
> ? ? ? ? ?/* All memory writes and volatile reads must happen before the
> - ? ? ? ? ? ?jump. ?Non-volatile reads must happen before the jump iff
> - ? ? ? ? ? ?the result is needed by the above register used mask. ?*/
> + ? ? ? ? ? ?jump unless the analysis is done for the SMS pass.
> + ? ? ? ? ? ?Non-volatile reads must happen before the jump iff the
> + ? ? ? ? ? ?result is needed by the above register used mask. ?*/
>
> - ? ? ? ? pending = deps->pending_write_insns;
> - ? ? ? ? pending_mem = deps->pending_write_mems;
> - ? ? ? ? while (pending)
> + ? ? ? ? if (common_sched_info->sched_pass_id != SCHED_SMS_PASS)
> ? ? ? ? ? ?{
> - ? ? ? ? ? ? if (! sched_insns_conditions_mutex_p (insn, XEXP (pending, 0)))
> - ? ? ? ? ? ? ? add_dependence (insn, XEXP (pending, 0), REG_DEP_OUTPUT);
> - ? ? ? ? ? ? pending = XEXP (pending, 1);
> - ? ? ? ? ? ? pending_mem = XEXP (pending_mem, 1);
> - ? ? ? ? ? }
> -
> - ? ? ? ? pending = deps->pending_read_insns;
> - ? ? ? ? pending_mem = deps->pending_read_mems;
> - ? ? ? ? while (pending)
> - ? ? ? ? ? {
> - ? ? ? ? ? ? if (MEM_VOLATILE_P (XEXP (pending_mem, 0))
> - ? ? ? ? ? ? ? ? && ! sched_insns_conditions_mutex_p (insn, XEXP (pending, 0)))
> - ? ? ? ? ? ? ? add_dependence (insn, XEXP (pending, 0), REG_DEP_OUTPUT);
> - ? ? ? ? ? ? pending = XEXP (pending, 1);
> - ? ? ? ? ? ? pending_mem = XEXP (pending_mem, 1);
> + ? ? ? ? ? ? pending = deps->pending_write_insns;
> + ? ? ? ? ? ? pending_mem = deps->pending_write_mems;
> + ? ? ? ? ? ? while (pending)
> + ? ? ? ? ? ? ? {
> + ? ? ? ? ? ? ? ? if (! sched_insns_conditions_mutex_p (insn, XEXP (pending, 0)))
> + ? ? ? ? ? ? ? ? ? add_dependence (insn, XEXP (pending, 0), REG_DEP_OUTPUT);
> + ? ? ? ? ? ? ? ? pending = XEXP (pending, 1);
> + ? ? ? ? ? ? ? ? pending_mem = XEXP (pending_mem, 1);
> + ? ? ? ? ? ? ? }
> +
> + ? ? ? ? ? ? pending = deps->pending_read_insns;
> + ? ? ? ? ? ? pending_mem = deps->pending_read_mems;
> + ? ? ? ? ? ? while (pending)
> + ? ? ? ? ? ? ? {
> + ? ? ? ? ? ? ? ? if (MEM_VOLATILE_P (XEXP (pending_mem, 0))
> + ? ? ? ? ? ? ? ? ? ? && ! sched_insns_conditions_mutex_p (insn, XEXP (pending, 0)))
> + ? ? ? ? ? ? ? ? ? add_dependence (insn, XEXP (pending, 0), REG_DEP_OUTPUT);
> + ? ? ? ? ? ? ? ? pending = XEXP (pending, 1);
> + ? ? ? ? ? ? ? ? pending_mem = XEXP (pending_mem, 1);
> + ? ? ? ? ? ? ? }
> +
> + ? ? ? ? ? ? add_dependence_list (insn, deps->last_pending_memory_flush, 1,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?REG_DEP_ANTI);
> ? ? ? ? ? ?}
> -
> - ? ? ? ? add_dependence_list (insn, deps->last_pending_memory_flush, 1,
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?REG_DEP_ANTI);
> ? ? ? ?}
> ? ? }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]