Lunderberg opened a new pull request, #16184:
URL: https://github.com/apache/tvm/pull/16184

   The functionality to express a call from one `PrimFunc` to another was 
introduced in https://github.com/apache/tvm/pull/14889.  While this was 
initially planned to be supported at codegen for all targets (see 
https://github.com/apache/tvm/pull/15835), this resulted in breakage on some 
backends (see https://github.com/apache/tvm/pull/16033). After discussion, the 
plan was changed to support TIR inlining, which would enable the same 
high-level functionality in TIR without requiring immediate low-level support 
across all codegens.
   
   
   This commit implements and tests a new IRModule transform 
`InlinePrivateFunctions`, which can be used as part of lowering in a follow-up 
commit.
   
   Because this is initially implemented for use quite late in the lowering 
flow, many constructs are not currently supported.  The current implementation 
has the following restrictions.
   
   * `tir::Block` nodes may not occur in the inlined function.  Because a 
subroutine may be called multiple times, inlining of a subroutine that contains 
`tir::Block` would result in non-unique names. Support of subroutines with 
`tir::Block` instances will require de-duplication of block names.
   
   * The subroutine's callsite must occur within a `tir::Evaluate` block. 
Because inlining a subroutine inserts the `tir::Stmt` body at the point of use, 
replacement must occur in a context where a `tir::Stmt` can be returned.  
Support of subroutines that are called within an expression (e.g. Replacing 
`func` in `Buf[0] = func(1) + func(2)`) would require hoisting preprocessing 
done in the subroutine to the parent `tir::Stmt`.
   
   * The subroutine may only accept primitive arguments, and must have an empty 
`buffer_map`.  Support of subroutines that are called with `tir::Buffer` or 
`tir::BufferRegion` arguments would require a way to represent these arguments 
at the callsite, and substitution of the buffer into the callee.
   
   If these unsupported constructs are used, then the inlining of those 
functions is skipped.  This commit includes unit tests for these unsupported 
constructs, to validate that `InlinePrivateFunctions` produces well-formed 
output even when they are present.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to