Idempotent Code Generation in LLVM

As part of PhD research I integrated support for code generation of idempotent (re-executable) code regions into LLVM, along with a supporting IR-level analysis to identify and demarcate large “semantically” idempotent regions [1]. Some have expressed interest the code, so here is a link that contains some documentation and pointers to the source hosted on GitHub:

http://research.cs.wisc.edu/vertical/iCompiler

I hope the code may be useful to others. I apologize for not releasing this code sooner – it has been ready for some time – but I am only just now finding the right moment to do this.

There are no bugs that I’m aware of, though there are unaddressed optimization opportunities with respect to, among other things, (a) better register-pressure awareness, (b) employing transformations (particularly loop transformations) to increase the “degree” of idempotence and/or improve code generator performance, and (c) better alias analysis… if anyone is interested; I personally am moving on to other things for now…

Lastly, thank you to all of the LLVM community for effectively enabling this research.

Marc

[1] M. de Kruijf, K. Sankaralingam, and S. Jha. Static Analysis and Compiler Design for Idempotent Processing. PLDI '12: Programming Language Design and Implementation, 2012.