Adding dynamic parameter scope and key with !util.buffer operands. (#23426)

Changes parameter operations across the dialect stack from StringAttr
compile-time constant scope and key to !util.buffer SSA value operands,
enabling dynamic parameter loading where scope and key are computed at
runtime rather than known at compile time. Previously all parameter
operations required static string literals for scope (optional
namespace) and key (parameter name), preventing use cases like
frank-models where the scope depends on model metadata (architecture,
variant, quantization) determined during model initialization and
parameter keys may be constructed from loop indices or other runtime
values.

Flow dialect adds flow.parameter.load and flow.parameter.write
operations with !util.buffer operands for scope (optional) and key. The
load op allocates a new tensor and populates it from a parameter archive
at the specified byte offset. The write op stores tensor data to a
parameter archive and returns the source tensor unchanged to maintain
data flow dependencies. Stream dialect adds stream.tensor.parameter.load
and stream.tensor.parameter.write as tensor-phase equivalents retaining
encoding metadata for size calculation, and updates existing
stream.async.parameter.{load,read,write} operations to accept
!util.buffer operands instead of StringAttr attributes. The change from
attributes to operands requires adding AttrSizedOperandSegments trait to
handle optional scope operands. IO parameters module updates
io_parameters.{load,gather,scatter} operations to accept !util.buffer
operands for scope and variadic buffer keys.

Conversion patterns updated across the stack. FlowToStream converts
flow.parameter.load to stream.tensor.parameter.load forwarding scope and
key operands unchanged. StreamToParams lowers stream parameter
operations to io_parameters operations, passing !util.buffer operands
through. ParamsToVM converts io_parameters operations to vm.call
invoking the parameter module, with !util.buffer operands type-converted
to vm.ref<!vm.buffer> through the standard type converter. Stream
transform passes updated to handle parameters uniformly regardless of
whether scope and key are compile-time hoisted resources or
runtime-computed buffers. ElideTimepoints treats parameter load await
results as passthrough when timepoint is ready, PropagateTimepoints
inserts awaits for unresolved timepoints in parameter loads tracking
producer-consumer dependencies, EncodeTensors handles tensor variants
inserting encoding metadata queries and validation around loads,
PackConstants skips hoisting for parameters with non-constant scope or
key preserving runtime construction, ScheduleAllocation treats parameter
reads as device-local External lifetime allocations, and
SplitParameterEncoder detects when scope/key buffers will be hoisted to
module resources during encoding.

This enables frank-models and similar use cases where parameter
organization depends on model configuration determined at runtime,
allowing a single compiled module to serve multiple model variants by
selecting parameters based on metadata rather than requiring separate
compilation per variant.

Co-authored-by: Claude <noreply@anthropic.com>
49 files changed
tree: 78b1fc95f147551b514f79e086286a1f9f273c54
  1. .github/
  2. build_tools/
  3. compiler/
  4. docs/
  5. experimental/
  6. integrations/
  7. lib/
  8. llvm-external-projects/
  9. runtime/
  10. samples/
  11. tests/
  12. third_party/
  13. tools/
  14. .bazel_to_cmake.cfg.py
  15. .bazelignore
  16. .bazelrc
  17. .bazelversion
  18. .clang-format
  19. .git-blame-ignore-revs
  20. .gitattributes
  21. .gitignore
  22. .gitmodules
  23. .pre-commit-config.yaml
  24. .yamllint.yml
  25. AUTHORS
  26. BUILD.bazel
  27. CITATION.cff
  28. CMakeLists.txt
  29. configure_bazel.py
  30. CONTRIBUTING.md
  31. LICENSE
  32. MAINTAINERS.md
  33. MODULE.bazel
  34. README.md
  35. RELEASING.md
README.md

IREE: Intermediate Representation Execution Environment

IREE (Intermediate Representation Execution Environment, pronounced as “eerie”) is an MLIR-based end-to-end compiler and runtime that lowers Machine Learning (ML) models to a unified IR that scales up to meet the needs of the datacenter and down to satisfy the constraints and special considerations of mobile and edge deployments.

See our website for project details, user guides, and instructions on building from source.

IREE Discord Status pre-commit OpenSSF Best Practices

Project news

Project status

Release status

Releases notes are published on GitHub releases.

PackageRelease status
GitHub release (stable)GitHub Release
GitHub release (nightly)GitHub Release
iree-base-compilerPyPI version
iree-base-runtimePyPI version

For more details on the release process, see https://iree.dev/developers/general/release-management/.

Build status

CI PkgCI

Nightly build status

Operating systemBuild status
LinuxCI - Linux arm64 clang
macOSCI - macOS x64 clang
macOSCI - macOS arm64 clang

For the full list of workflows see https://iree.dev/developers/general/github-actions/.

Communication channels

Related project channels

  • MLIR topic within LLVM Discourse: IREE is enabled by and heavily relies on MLIR. IREE sometimes is referred to in certain MLIR discussions. Useful if you are also interested in MLIR evolution.

Architecture overview

IREE Architecture IREE Architecture

See our website for more information.

Presentations and talks

Community meeting recordings: IREE YouTube channel

DateTitleRecordingSlides
2025-06-10Data-Tiling in IREE: Achieving High Performance Through Compiler Design (AsiaLLVM)recordingslides
2025-05-17Introduction to GPU architecture and IREE's GPU CodeGen Pipelinerecordingslides
2025-02-12The Long Tail of AI: SPIR-V in IREE and MLIR (Vulkanised)recordingslides
2024-10-01Unveiling the Inner Workings of IREE: An MLIR-Based Compiler for Diverse Hardwarerecording
2021-06-09IREE Runtime Design Tech Talkrecordingslides
2020-08-20IREE CodeGen (MLIR Open Design Meeting)recordingslides
2020-03-18Interactive HAL IR Walkthroughrecording
2020-01-31End-to-end MLIR Workflow in IREE (MLIR Open Design Meeting)recordingslides

License

IREE is licensed under the terms of the Apache 2.0 License with LLVM Exceptions. See LICENSE for more information.