Decoupled software pipelining (DSWP) in LLVM

Hi! I’m writing my own project in LLVM and I came across a document describing Decoupled software pipelining algorithm written in LLVM by The Liberty Research Group for their VELOCITY C++ compiler:
http://liberty.princeton.edu/Research/DSWP/
http://liberty.princeton.edu/Publications/micro38_dswp.pdf

and some of spectacular results:
http://liberty.princeton.edu/videos/gimp.php
http://liberty.princeton.edu/videos/h263.php

I found out, that there was a project to implement this technique as LLVM pass:
http://code.google.com/p/15745-project-dswp/source/browse/

http://www.cs.cmu.edu/~fuyaoz/courses/15745/report.pdf

but this project seems to be not continued anymore, and as we can read in its report - it is not complete and authors dont know if it is working under all conditions.

The question is - is there any implementation of DSWP in LLVM passes?
I would love to use it in my project and because I’m new to LLVM it would be very hard and time consuming process to write it by myself.

Or maybe there are some passes in LLVM, that automatically generate multithreaded execution code out of LLVM IR code?

I would be very thankfull for any response in this topic!
Thank you :slight_smile:

The question is - is there any implementation of DSWP in LLVM passes?
I would love to use it in my project and because I'm new to LLVM it would be
very hard and time consuming process to write it by myself.

Or maybe there are some passes in LLVM, that automatically generate
multithreaded execution code out of LLVM IR code?

  AFAIK, there is no such pass in LLVM trunk. I might be wrong, but you
may need to implement DSWP yourself.

Regards,
chenwj