Frequently Asked Questions

(Under construction.)
  1. What is the expected release date of IMOP?
    IMOP has been released on 22-Feb-2020. You may find the public beta release of IMOP at this GitHub repository.

  2. Why (or when) should I use IMOP if I already have other frameworks like ROSE, LLVM, Cetus, GCC, etc.?

    First and foremost, we do not claim that one framework can serve all your needs efficiently. Many times the choice of a good framework is based on the nature of the analysis/transformation that you want to implement. The related section in the documentation should provide the detailed answer to this question, since many differences are easier to explain with the help of some code examples.
    However, we enlist some of the fundamental differences (and similarities) between IMOP and other frameworks here:
    • Self-stabilization. Invariably, compilers perform more than one optimization on the input program. Each optimization may comprise of one or more rounds of analyses and transformations. Once the program has been transformed, the analyses data becomes unreliable, thereby preventing correct application of downstream transformations (both within and across optimizations), unless the analyses data have been stabilized. Unlike other compiler frameworks, IMOP is a self-stabilizing compiler that automates this process, without requiring any extra code from the compiler writers.
    • LLVM and GCC do not work at the source code level. If a certain analysis/transformation is defined (or should be defined) at the source code level, IMOP, ROSE and Cetus are better candidates to pick from.
    • GCC, ROSE, and LLVM are written in C/C++. IMOP and Cetus are written in Java, which makes them portable and easier to use. Debugging and programmability are some of the various known advantages of Java over C/C++. Although programs written in C/C++ can be more efficient than Java (which isn't the case always), yet the latter serves our purpose well, since our priority is to enable easier and faster development of the compiler optimization tools.
    • Cetus is written in Java. However, there are various fundamental design differences between IMOP and Cetus. In the documentation, we explain in detail why, as compared to Cetus, IMOP has better:
      • handling of OpenMP constructs and directives,
      • approach to the creation of AST nodes,
      • representation of the CFG nodes,
      • design for AST/CFG traversals,
      • paradigm for implementing iterative transformations of the input programs,
      etc.
    • ROSE is written in C/C++; IMOP is written in Java. ROSE supports OpenMP 3.0 specification; IMOP supports OpenMP 4.0. In IMOP, CFG nodes are more closely coupled with their AST counterparts. This coupling eases the AST transformations which are generally based on the output of the CFG analyses. (As an example, unlike ROSE, IMOP never needs comma operators to add new instructions to the CFG nodes.)
      With the help of JTB, IMOP encodes the AST traversals in a more modular way than ROSE.
    • Along with the utilities provided by the other frameworks, IMOP also provides elementary analyses and transformations that are specific to OpenMP C programs.
    Please note that detailed comparisons of IMOP with these frameworks (and with others, such as SUIF, Open64, PGI C, Pluto, etc.), will be present in the documentation report.