MLIR

Multi-Level IR Compiler Framework

Open Projects

Below is a list of projects that can be suitable for Google Summer of Code (GSOC) or just for someone to get started with contributing to MLIR. See also the “beginner” issues on the bugtracker. If you’re interested in one of these projects, feel free to discuss it on the MLIR section of the LLVM forums or on the MLIR channel of the LLVM discord server. The mentors are indicative and suggestion of first point of contact for starting on these projects.

  • bugpoint/llvm-reduce and llvm-canon kind of tools for MLIR (mentor: Mehdi Amini, Jacques Pienaar)

  • Rework the MLIR python bindings, add a C APIs for core concepts (mentor: Nicolas Vasilache, Alex Zinenko)

  • Automatic formatter for TableGen (similar to clang-format for C/C++)

  • LLVM IR declaratively defined. (mentor: Alex Zinenko)

  • MLIR Binary serialization / bitcode format (Mehdi Amini)

  • SPIR-V module combiner (mentor: Lei Zhang)

    • Basic: merging modules and remove identical functions
    • Advanced: comparing logic and use features like spec constant to reduce similar but not identical functions
  • GLSL to SPIR-V dialect frontend (mentor: Lei Zhang)

    • Requires: building up graphics side of the SPIR-V dialect
    • Purpose: give MLIR more frontends :) improve graphics tooling
    • Potential real-world usage: providing a migration solution from WebGL (shaders represented as GLSL) to WebGPU (shaders represented as SPIR-V-like language, WGSL )
  • TableGen “front-end dialect” (mentor: Jacques Pienaar)

  • Making MLIR interact with existing polyhedral tools: isl, pluto (mentor: Alex Zinenko)

  • MLIR visualization (mentor: Jacques Pienaar)

    MLIR allows for representing multiple levels of abstraction all together in the same IR/function. Visualizing MLIR modules therefore requires going beyond visualizing a graph of nodes all at the same level (which is not trivial in and of itself!), nor is it specific to Machine Learning. Beyond visualizing a MLIR module, there is also visualizing MLIR itself that is of interest. In particular, visualizing the rewrite rules, visualizing the matching process (including the failure to match, sort of like https://www.debuggex.com/ but for declarative rewrites), considering effects of rewrites over time, etc.

    The visualizations should all be built with open source components but whether standalone (e.g., combining with, say, GraphViz to generate offline images) or dynamic tools (e.g., displayed in browser) is open for discussion. It should be usable completely offline in either case.

    We will be working with interested students to refine the exact project based on interests given the wide scope of potential approaches. And open to proposals within this general area.

  • Rewrite patterns expressed in MLIR (mentor: Jacques Pienaar)