NOELLE Offers Empowering LLVM ExtensionsNOELLE provides abstractions to help build advanced code analyses and transformations.
NOELLE in a Nutshell
The goal of NOELLE is to provide abstractions that enable a simple implementation of complex code analyses and transformations (we call them custom tools) that target wide program scopes. Custom tools built upon NOELLE include LLVM passes that work at the IR level to perform their code analyses and transformations. Allowing these custom tools to be easily implementable and maintainable requires simple and domain-independent abstractions powered by either accurate low-level code analyses or complex low-level code transformations. NOELLE provides such abstractions with a modular design allowing its users to pay only the cost of creating the abstractions requested.
NOELLE's abstractions are powered by code analyses, some of which are provided by third parties. For example, the PDG abstraction NOELLE provides is computed by running several alias analyses implemented by external codebases (SCAF and SVF . Moreover, NOELLE's modular design makes it easy to extend the list of external code analyses that power NOELLE's abstractions. NOELLE also provides tools for faster user-specific compilation flows. Finally, NOELLE provides a testing infrastructure to facilitate automatic testing of NOELLE itself as well as custom tools built upon it.
Building Upon NOELLE Reduces Source Code
NOELLE simplifies the implementation of code analyses and transformations. The table compares the implementations of 10 transformations when built upon NOELLE and when implemented only using LLVM abstractions. The reduction in LoC is significant, reducing the maintainability cost of these custom tools.
Parallelizing Transformations Upon NOELLEBoth gcc and icc did not obtain additional performance benefits from their parallelization techniques. NOELLE-based parallelizing tools, instead, generate additional benefits compared to their baseline, clang.
Get Started with NOELLE
- Source Code: GitHub