Skip to content

[RFC] Build and Evolve Low-level IR (HalideIR) Internally #3474

@tqchen

Description

@tqchen

TVM uses HalideIR as its low-level IR structure, which has served us well. One of the main gains we get is the integer simplification infrastructure provided by HalideIR. As the project moves forward, we start to introduce our own integer simplification infra to tackle new problems. As of now, we start to rely on the new integer analysis infra in TVM.

We also see increasing needs to evolve our own version of low-level IRs.

Brief summary of needs:

  • Introducing new IR nodes to enhance the analysis required by TVM (Reduce, ConstraintHints)
  • Different dialect and intrinsics support, mainly in the case of pragma, and region annotations, both of which will make the IR more coupled with the project.
    • Examples include dma_copy regions, thread bindings, and bound hints.
  • Unification of the object protocol with the rest of the project, in particular, runtime::Object, Node, and NDArray.
  • General refactoring concerns to reduce duplicated objects(Var, Range)
  • Unified text format that allows roundtripping
  • Long term: unification of IR infra, in particular between low-level IR and high-level IRs(relay).

These technical needs will require us to evolve the IR more frequently, and it starts to make sense to build and evolve our own version of low-level IR.

Action Items

  • Create include/tvm/node to introduce the node infra
    • As we start to unify node with objects, we might consider moving certain things to runtime.
  • Create include/tvm/ir.h to add support for the IR nodes.
    • Add clear acknowledgment to the original design (Halide).
  • Start to evolve new IRs, refactoring and remove duplicated objects and further changes as mentioned above.

Please share your thoughts and suggestions about the proposal

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions