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

   This PR will fix https://github.com/apache/tvm/issues/19577.
   
   In this issue, the IRModule before applying any pass looks like:
   
   ```
     %x: Tensor[(4,), float32]  // function param
     with R.dataflow():
       %lv  = expand_dims(%x, axis=1)     // (4, 1)
       %lv1 = expand_dims(%x, axis=1)     // (4, 1) second call, new Var
       %lv2 = multiply(%lv, %lv1)         // (4, 1)
       %lv3 = concat(%lv2, %lv1, axis=1)  // (4, 2)
       ...
   ```
   
   When the users manually apply the `DataflowUseInplaceCalls` pass, the pass 
will rewrite the statement `%lv2 = multiply(%lv, %lv1)` to be like `%lv = 
multiply(%lv, %lv1); %lv3 = concat(%lv, %lv1, axis=1)`, which reuses the %lv 
buffer to avoid storage waste.
   
   But this rewrite will chang the buffer context of %lv, and also in LLVM 
generated code, %lv1 shared the same storage with %lv, so when executing `%lv = 
concat(%lv, %lv1, axis=1)`, the %lv1 context has also been changed to 
`multiply(%lv, %lv1)`. So the failure is due to the shared storage of different 
views of the same tensor %x.
   
   During the execution, %lv1 holds `x^2` instead of `x` after `multiply`. 
`concat` reads %lv1 for the right column and its result is 
[[1,1],[4,4],[9,9],[16,16]] instead of [[1,1],[4,2],[9,3],[16,4]] (the correct 
result should be : left col `x^2`, right col should stay `x`).
   
   Change: View-like ops (expand_dims, squeeze, reshape, permute_dims, 
memory.view, ensure_zero_offset) take the input's alias set in alias analysis 
instead of a new id: %lv and %lv1 share alias with %x. Then the pass rejects 
in-place of `multiply(%lv, %lv1)`: %lv and %lv1 are different vars but alias 
ids intersect, so no operand may be reused in-place.


-- 
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]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to