Store scheduling with DFA scheduler

Vladimir Makarov vmakarov@redhat.com
Tue Apr 26 15:13:00 GMT 2005


Jon Beniston wrote:

>Hi Vlad,
>
>  
>
>>There is not enough information to say what is wrong.  It 
>>would be better if you send gcc output when 
>>-fsched-verbose=10 is used.
>>    
>>
>
>Cheers,
>Jon
>
>
>;;      Ready list (t = 10):    32  28  24
>;;       10--> 24   [`y']=r43                          :x,m*2
>;;      Ready list (t = 10):    32  28
>;;              Ready list after queue_to_ready:    32  28
>;;              Ready list after ready_sort:    32  28
>;;      Ready list (t = 11):    32  28
>;;              Ready-->Q: insn 28: queued for 1 cycles.
>;;      Ready list (t = 11):    32
>;;              Ready-->Q: insn 32: queued for 1 cycles.
>;;      Ready list (t = 11):
>;;              Q-->Ready: insn 32: moving to ready without stalls
>;;              Q-->Ready: insn 28: moving to ready without stalls
>;;              Ready list after queue_to_ready:    28  32
>;;              Ready list after ready_sort:    32  28
>;;      Ready list (t = 12):    32  28
>;;       12--> 28   [`z']=r45                          :x,m*2
>;;      Ready list (t = 12):    32
>;;              Ready list after queue_to_ready:    32
>;;              Ready list after ready_sort:    32
>;;      Ready list (t = 13):    32
>;;              Ready-->Q: insn 32: queued for 1 cycles.
>;;      Ready list (t = 13):
>;;              Q-->Ready: insn 32: moving to ready without stalls
>;;              Ready list after queue_to_ready:    32
>;;              Ready list after ready_sort:    32
>;;      Ready list (t = 14):    32
>;;       14--> 32   [`w']=r47                          :x,m*2
>;;      Ready list (t = 14):
>;;      Ready list (final):
>;;   total time = 14
>;;   new head = 18
>;;   new tail = 32
>
>  
>
It looks like DFA pipeline hazard recognizer works well.  Even the data 
ready for stores, there is 2 cycle delay between stores because memory 
unit is reserved by previous store insn.

The problem is in heuristics used to sort ready insns.  The most high 
priority heuristic is critical path length.  Loads have the biggest 
value 6, than additions have value 4, and finaly stores have value 3.

So the heuristic does not work well for you.  But experience of many 
compiler developers shows that is the best heuristic for list insn 
scheduling.  It could be fixed by using other more sophistciated 
algorithms or optimal algorithms which as a rule can not be used in an 
industrial compiler because they are too slow.

Vlad




More information about the Gcc mailing list