tvm_tirx.tirx.transform.LowerTVMBuiltin

tvm_tirx.tirx.transform.LowerTVMBuiltin#

tvm_tirx.tirx.transform.LowerTVMBuiltin()#

Lower runtime builtins to explicit stack storage and ABI operations.

For example, packed calls gain argument/result slots. Requires the function target attribute for target-dependent lowering.

Returns:

fpass (tvm_tirx.ir.transform.Pass) – The result pass

Examples

import tvm_tirx as tvm
from tvm_tirx.script import ir as I, tirx as T
from tvm_tirx.tirx import transform as tr

@I.ir_module
class Before:
    @T.function(private=True)
    def main():
        T.func_attr({"target": T.target("llvm")})
        T.call_packed("callback", 1)

@I.ir_module
class Expected:
    @T.function(private=True)
    def main():
        T.func_attr({"target": T.target("llvm")})
        stack_ffi_any: T.let[T.Ptr(T.void)] = T.stack_alloca("tvm_ffi_any", 2)
        T.abi_field_set(stack_ffi_any, 0, 13, 1)
        T.abi_field_set(stack_ffi_any, 0, 14, 0)
        T.abi_field_set(stack_ffi_any, 0, 15, T.Cast("int64", 1))
        T.abi_field_set(stack_ffi_any, 1, 13, 0)
        T.abi_field_set(stack_ffi_any, 1, 14, 0)
        T.abi_field_set(stack_ffi_any, 1, 15, T.int64(0))
        T.call_packed_lowered("callback", stack_ffi_any, 0, 1)

def run_pass():
    return tr.LowerTVMBuiltin()(Before)

tvm.ir.assert_structural_equal(run_pass(), Expected)