Software pipelining implementation

I put up the code on phabricator for a software pipelining implementation - I gave lightening talk on this implementation of software pipelining based upon Swing Modulo Scheduling at the 2015 LLVM Developers Conference. Since then several folks have asked about the code. The patch that I created works for Hexagon only at this point.

I’d like to try and get the code reviewed and eventually accepted into the LLVM code. I do realize it is a lot of code to bring in and I’m not sure how interested other folks are in having software pipelining. I’m also not sure about the best way to divide it up so that folks can review it more easily. I’m open to working with others to change the code to make it better. It works well for Hexagon, and we have enabled the optimization by default in our compiler. Of course, there is lots of room for improvement too. Suggestions are welcome.