My EECS 583 team's final project was an implementation of an algorithm to move intervening code between two loops so that the loops can be fused using the existing loop fusion pass in LLVM. Details of the problem and our solution can be found in our team's report.
Links: