Hi, I’m using LLVM as part of my thesis project and wanted to let the community know about it. (And get your feedback
The project is called LENS. It’s a file format and a framework for storing generic information about a program based on the control structure of the program, and quickly building tools to interact with that data. It might be best to think of the format as an external representation of the program that lets you attach data to the program’s modules, procedures, loops and blocks. Tools request information using queries that specify the parts of the program they refer to using a naming system that is based on XPath.
One goal of the project is to allow users and other tools more detailed access to information about the compiler’s actions, in the case of optimization passes, what decisions it made and why, and if a transformation failed, what the reasons were. In order to control the data overload that’s implied by the level of detail we’re suggesting, this information is only made available as responses to queries that can be very specific, even targeting individual basic blocks. The queries and code structure are saved in the file with version information to allow for historical comparisons.
We used LLVM as the compiler framework to prototype support for reporting of optimization successes and failures, including some information on loop transformations and register allocation.
Let me know if you have any questions about how we’re using LLVM, or anything else.
I’ll be putting up a LENS web page soon - I’ll post a link to that when it’s ready so you can add it to the LLVM projects list if you want.