Ivan Butygin ace42cf063
[mlir][core] Move InitAll*** implementation into static library. (#150805)
`InitAll***` functions are used by `opt`-style tools to init all MLIR
dialects/passes/extensions. Currently they are implemeted as inline
functions and include essentially the entire MLIR header tree. Each file
which includes this header (~10 currently) takes 10+ sec and multiple GB
of ram to compile (tested with clang-19), which limits amount of
parallel compiler jobs which can be run. Also, flang just includes this
file into one of its headers.

Move the actual registration code to the static library, so it's
compiled only once.

Discourse thread
https://discourse.llvm.org/t/rfc-moving-initall-implementation-into-static-library/87559
2025-07-29 13:21:52 +03:00
..

Standalone Transform Dialect Interpreter

This is an example of using the Transform dialect interpreter functionality standalone, that is, outside of the regular pass pipeline. The example is a binary capable of processing MLIR source files similar to mlir-opt and other optimizer drivers, with the entire transformation process driven by a Transform dialect script. This script can be embedded into the source file or provided in a separate MLIR source file.

Either the input module or the transform module must contain a top-level symbol named __transform_main, which is used as the entry point to the transformation script.

mlir-transform-opt payload_with_embedded_transform.mlir
mlir-transform-opt payload.mlir -transform=transform.mlir

The name of the entry point can be overridden using command-line options.

mlir-transform-opt payload-mlir -transform-entry-point=another_entry_point

Transform scripts can reference symbols defined in other source files, called libraries, which can be supplied to the binary through command-line options. Libraries will be embedded into the main transformation module by the tool and the interpreter will process everything as a single module. A debug option is available to see the contents of the transform module before it goes into the interpreter.

mlir-transform-opt payload.mlir -transform=transform.mlir \
  -transform-library=external_definitions_1.mlir \
  -transform-library=external_definitions_2.mlir \
  -dump-library-module

Check out the Transform dialect tutorial as well as documentation to learn more about the dialect.