CC: gcc@gcc.gnu.org.

On 13/03/2012, at 1:48 PM, peng zhao wrote:

> Hi, Maxim,
> 
>    Thanks a lot for  the help.
>  
>     Why are they called BEGIN_DATA and BE_IN_DATA? I was trying to find out 
> what the names stand for but failed. what do "BE" and "IN" mean in BE_IN_DATA?

BE IN DATA speculation block.

>     My understanding is that BEGIN_DATA is for TRUE dependence that can be 
> speculated (or overcome)

Yes.

> and BE_IN_DATA is for the data dependence edge that connects the 
> recovery-load and the consumer of the load. Am I right?

Not exactly.  It is for data dependence edge the connects speculated load with 
its consumers that can be speculated (i.e., moved into a data speculation 
block) too.

> 
>    Can you also explain a little more about the concepts of  DEPS_LIST and 
> INSN_LIST? I don't quite understand the comments in sched-int.h: /* If set, 
> generate links between instruction as DEPS_LIST.
>      Otherwise, generate usual INSN_LIST links.  */
> 
>    I am assuming that the instruction means rtx, right? which field is used 
> to link these rtx into DEPS_LIST or INSN_LIST? what is the purpose to have 
> these 2 different scenarios?
> 

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).


> 2. Why only speculative scheduling needs DEP_STATUS?  It seems that all other 
> schedulers have DEP_STATUS field set to -1. But 

Selective scheduler needs the additional information fields that DEP_STATUS 
provides; other schedulers don't (ia64 speculation aside).

--
Maxim Kuvyrkov


> > Subject: Re: Join my network on LinkedIn
> > From: maxim.kuvyr...@gmail.com
> > Date: Mon, 12 Mar 2012 15:36:35 +1300
> > To: zhaop...@live.com
> > 
> > On 12/03/2012, at 3:18 PM, Peng Zhao via LinkedIn wrote:
> > 
> > > LinkedIn
> > > Peng Zhao has indicated you are a Friend
> > > Hello, Maxim, 
> > > Recently I started to work on GCC and I have some questions. I would 
> > > appreciate your input. 
> > > 1. what does BEGIN_DATA / BE_IN_DATA stand for? 
> > > 2. Why only speculative scheduling needs DEP_STATUS? 
> > 
> > Hi Zhao,
> > 
> > First of all, it is better to write such questions to gcc@gcc.gnu.org 
> > mailing list, so that other developers can contribute to the answer. Please 
> > CC: gcc@gcc.gnu.org on any follow ups.
> > 
> > BEGIN_DATA and BE_IN_DATA are flags that are set on dependencies, currently 
> > they can be set only for IA64 architecture, as it is the only one that 
> > supports data speculation instructions.
> > 
> > A dependency with a BEGIN_DATA flag can be broken by making the consuming 
> > instruction of the dependency start a data-speculation block. The producer 
> > in this case is always a memory store instruction and consumer is always a 
> > memory load instruction. By converting the memory load instruction to data 
> > speculative form, the dependency can be ignored. This provides greater 
> > scheduling freedom if memory store (producer) and memory load (consumer) 
> > turn out not to be aliased at run time.
> > 
> > BE_IN_DATA flags are set for consumers of the memory load that was 
> > data-speculated, i.e., it started a data-speculation block. All consumers 
> > of data-speculative memory load must be tracked for the case when 
> > speculation fails and recovery needs to be executed to preserve program 
> > correctness.
> > 
> > This is a very redacted description of the data speculation optimization, 
> > and you need to refer my original submissions to gcc-patches@ and to IA64 
> > architecture documentation.
> > 
> > --
> > Maxim Kuvyrkov
> > 

Reply via email to