Research Domains

Our broad research is in Programming Languages and Compilers. More specifically, following are the research areas we are currently working on.

Static analysis and Program Optimizations

  • Compile time program analysis is indispensable for both program optimization as well as program verification.
  • Detecting bugs at compile time reduces the risk of runtime failures, which can be fatal for safety critical systems.
  • Program optimization can reduce the execution time of the program, thereby enhancing the performance and increasing user experience.
LLOV is a fast, static, data-race checker for OpenMP programs. It is language-agnostic and can detect races in C/C++ and FORTRAN programs.
LLProf LLProf GitHub LLVM Dev
LLProf is a LLVM based loop profiler, helps to generate run-time information for loops (loopnest/ inner most loops). This tool helps to analyze impact of (set of) optimizations on the performance of loops.

Machine Learning for Compilers

A well defined sequence of compiler optimizations will have a strong impact on performance of the program. Optimization decisions for achieving optimal performance are complex and are computationally hard. Hence machine learning techniques can help in making making better optimization decisions.

IR2Vec IR2Vec GitHub IR2Vec_Video
IR2Vec is the framework based on LLVM IR to represent programs as distributed vectors. Such vectors, representing the programs can be used by ML models to solve optimization and software engineering tasks.

Compilers for Deep Learning

With the emergence of various deep learning models and hardware architectures, it is infeasible to write optimized code for every architecture. There are various techniques to optimize the code but the search space is huge. Hence deep learning techniques helps to design good heuristics to select optimized code.

PolyDL PolyDL GitHub PolyDL Video
End to end tool to find the Optimized Code for the hardware.

Polyhedral Compilation

A class of programs called affine programs can be represented as integer polyhedra to perform high level transformations such as loop-fusion, loop-distribution, tiling, skewing, loop-rotaion, etc. to optimize for runtime. Polyhedral compilation can perform complex transformations to generate architecture dependent optimized code.

BullsEye BullsEye GitHub
BullsEye is a analytical cache model based on Least recently used fully associative caches.
Loop Nest Optimization (LNO) is an optimization framework based on Polyhedral compilation techniques to perform loop distribution, statement reordering and auto-vectorization.

Code Compilance and Security

Safety of critical systems is of utmost importance as the failure or malfunction of one can lead to significant increase in the safety risk for the people or environment involved. Code Compliance checkers are hence designed to verify the various coding standards developed to ensure the safety of critical systems namely MISRA, CERT, ISO26262.

A code compliance checker that can verify programs according to the MISRA standards for C.