Tutorials on IMOP

Past Tutorials
Venue: ACM/IEEE CGO 2023 (Montreal, Canada)
Date: February 25th, 2023
Venue: ACM/IEEE CGO 2022 (Online Event)
Date: April 03rd, 2022
Venue: ACM SIGPLAN PLDI 2021 (Online Event)
Date: June 21st, 2021
Venue: ACM/IEEE CGO 2021 (Online Event)
Date: February 27th, 2021
Slides of the tutorial are available here.
Video of the tutorial is available here.
Venue: ACM/IEEE CGO 2020 (San Diego, USA)
Date: February 22nd, 2020
Slides of the tutorial are available here.
Upcoming Tutorials
None scheduled yet.


OpenMP is an industry-standard API for writing portable shared-memory parallel programs in C/C++/Fortran. Almost every mainstream compiler of these languages now supports compilation of OpenMP programs. However, we are not aware of any compiler framework which was designed from the ground up taking OpenMP semantics into account. Consequently, not all components of such frameworks are generally applicable (or conforming) to the OpenMP parallel semantics. Further, analyzing/optimizing/transforming OpenMP programs using higher-level program abstractions is a popular choice. However, higher level program abstractions create multiple issues due to the presence of syntactic sugars and absence of normalized forms of various constructs.

We present IMOP (IIT Madras OpenMP compiler), a new open-source source-to-IR-to-source compiler framework, to address such challenges. The output of IMOP can be compiled using standard compilers like GCC/LLVM to generate machine code. IMOP has many unique features such as OpenMP-aware compilation, automatic generation of parallel variants of the serial iterative data-flow passes, self-stabilization of program abstractions in response to program modifications, integration with the Z3 SMT solver, and so on. IMOP can significantly simplify the task of writing tools for program analysis, profiling, and optimizations. It can be used by both researchers (for quick prototyping) and students (for completing their compiler-related assignments).

To learn more about IMOP, you are welcome to join upcoming tutorials on IMOP, listed above. In these hands-on tutorials, we will teach the fundamentals and certain advanced concepts of IMOP to the participants, which can help them in the faster development of their research prototypes.

Objectives of the tutorials

These tutorials are aimed towards compiler researchers, educators, and industrial practitioners alike. By the end of these tutorials, the participants will
  • - learn how to analyze, optimize, and profile their (OpenMP) C programs, using the existing passes of IMOP,
  • - be able to write custom optimization passes in IMOP for (OpenMP) C programs,
  • - understand how to efficiently implement any standard or custom iterative data-flow analysis by extending the generic data-flow passes of IMOP,
  • - gain an understanding of the guiding and design principles of IMOP, such that they can systematically extend it to serve their needs, and
  • - understand the benefits of working in a self-stabilizing framework, and achieve the same in IMOP.

Prerequisite knowledge

Must. A basic undergraduate-level knowledge of compilers and fundamental programming skills in Java/C#/C++.
Preferable. A basic understanding of OpenMP and parallel programming.