On 11/22/2013, 8:08 AM, dxq wrote:
hi,
I'm doing a work to make unroll, doloop, and sms pass work together as
following way:
* before the first unroll pass, duplicate all global information such as
insn chain and CFG as backup.
* unroll with factor = 1, go on to finish sms, and record the result of
swp, ii, loop count etc
* go back unroll pass, discard the all global information, using the
backup rerun again to sms with unroll factor = 2, and record the result of
swp.
* repeat above steps with unroll factor = 4.
* ok, it's time to decide which factor is the best one, and rerun with it,
done.
we have implemented it, and it works well. but, if the compiled file is too
big,
gcc would carsh down with ICE. we find out that copying consumes lots of
memories so that GGC purge the backup.
I think the right solution would be SMS fixing. Right now SMS has too
many constraints. It can move insns only though one iteration. I'd say
the current SMS implementation is just a start. A lot functionality is
missed. It is much bigger job (it might need also further dfa pipeline
hazard recognizer development).
But the biggest problem is that the original SMS author does not work on
GCC for a long time (> 5 years).