Scheduling automaton question

Vladimir Makarov vmakarov@redhat.com
Fri Feb 11 20:19:00 GMT 2011


On 02/11/2011 07:33 AM, Bernd Schmidt wrote:
> Suppose I have two insns, one reserving (A|B|C), and the other reserving
> A. I'm observing that when the first one is scheduled in an otherwise
> empty state, it reserves the A unit and blocks the second one from being
> scheduled in the same cycle. This is a problem when there's an
> anti-dependence of cost 0 between the two instructions.
>

> Vlad - two questions. Is this behaviour what you would expect to happen,
> and how much work do you think would be involved to fix it (i.e. make
> the first one transition to a state where we can still reserve any two
> out of the three units)?
The scheduler can do what you want but if there is no dependence between 
the instructions.  The first cycle multi-pass insn scheduler will try 
different order of ready insns to choose the best one.  But if there is 
a dependence between the insns only one insn will be in the ready list.  
I think it is a lot of work to implement the same for dependent insns 
(and it probably will make the scheduler much slower).

Still there are other solution for your problem.  The first one proposed 
by Frederic RISS is to use NDFA (*nondeterministic* asutomata).  Itanium 
uses partially such automata for analogous problem.

Another solution (it might not work for some cases) is to use another 
order in alternatives (e.g. C|B|A instead of A|B|C).  In this case the 
generated automata permit to issue the first and then the 2nd insn 
because deterministic automata tries first alternative first.  So the 
state without reservation will go a state with reservation C for the 
first insn, the state with reservation C will go to a state with 
reservation B for the 1st insn etc.




More information about the Gcc mailing list