High-level software pipelining pass

Hi all,

At the EuroLLVM conference last week, I presented my talk on 'A high-level implementation of software pipelining in LLVM'.

In this talk I presented a software-pipelining pass operation at the IR layer. This pass is in a highly experimental state and quite buggy but some of the initial results have convinced me that it can be beneficial for some of our target architectures. However, I haven't had much time to actually complete the code lately.

At the conference there were several people that expressed interest in my code and asked me to put it on GitHub, which I have now done. I have added a short wiki page describing some of the things that need to be fixed before this can actually be used in a compiler.

Next to these suggestions, I think that this code can also use some significant refactoring to improve its readability. Especially the part that generates the transformed loop should probably be split into smaller and easier to understand bits.

There are also a few more general changes that I made in the existing LLVM tree. The most useful one may be making the CostModelAnalysis pass into a pass that can be called from another pass. In it's current version it was mostly intended as a debug interface and re-implemented by other passes (such as the auto-vectorizer and now the loop pipelining pass).

I'll still try to find some time to finish this myself but can't give any guarantees as to when that might happen. But should still be able to give some support and/or supervision if there's anyone willing to work on this.

Cheers,
  Roel