On 09/27/2011 08:36 AM, Bernd Schmidt wrote:
Ping:
http://gcc.gnu.org/ml/gcc-patches/2011-09/msg00811.html
Bernd, sorry for the delay.
I thought for long time about this approach because we already have
selective scheduler which with some modifications could be used for
this. Selective scheduler was implemented for Itanium, designed to work
after RA (although it can work before too) and it implements a general
software pipelining (not modulo scheduling) which could be used for
loops with conditionals and with varying II (if we speak in terms of
modulo scheduling). Selective scheduling is more complicated than haifa
scheduler (although haifa scheduler with so many changes for its
existence is approaching to the complexity of selective scheduler), it
might be hard to modify for your purposes, it has also a tendency to
generate a big code which is probably not good for C6X which is oriented
to embedded applications.
On the other hand, your changes to haifa-scheduler are small, so I
concluded it might be ok (I hope the coming changes with register
renaming which selective scheduler already does will be not big too).
Now we have more complex selective scheduler with general software
pipelining and simpler haifa scheduler with modulo scheduling. So I
think we could look at selective scheduler for servers with VLIW and
in-order pipelined processors where code expansion is not so important
and haifa-scheduler with modulo scheduler for embedded VLIW processors.
Still I think that selective scheduler has more potential to generate
a faster code than what you are trying to implement.
As for the patch itself (only scheduler parts in 1/4 and 2/4), it is
ok to me to commit this. I did not find anything which should be changed.