sunggg opened a new issue, #14287:
URL: https://github.com/apache/tvm/issues/14287
### Issue
Currently, StructInfo can use a local variable to express shape information.
However, this causes a visibility problem when we output with such StructInfo
to the outer scope of the current block.
### Reproducible Example
`Reshape` is the representative example.
```
# from tvm.script import ir as I
# from tvm.script import relax as R
@I.ir_module
class Mod:
@R.function
def main(x: R.Tensor((16, 16), "float32")):
with R.dataflow():
lv = relax.Var("s", R.Shape((4, 4, 4, 4)))
gv = relax.op.reshape(x, lv)
R.output(gv)
return gv
assert relax.analysis.well_formed(Mod)
```
When we conduct StructInfo deduction with normalizer, we get the following:
```
# from tvm.script import ir as I
# from tvm.script import relax as R
@I.ir_module
class Module:
@R.function
def main(
x: R.Tensor((16, 16), dtype="float32")
) -> R.Tensor(dtype="float32", ndim=4):
s: R.Shape([4, 4, 4, 4])
with R.dataflow():
lv: R.Shape([4, 4, 4, 4]) = s
gv: R.Tensor(lv, dtype="float32") = R.reshape(x, lv)
R.output(gv)
return gv
```
This fails `well_formed` checker because when we outputs `gv`, we escalate
its StructInfo together. Since `lv` is not visible to the outer scope of
dataflow block, we get the following errors:
```
[11:36:43] /home/spark/tvm/src/relax/analysis/well_formed.cc:116: Warning:
This IR is not well formed: Var s is not defined.
[11:36:43] /home/spark/tvm/src/relax/analysis/well_formed.cc:116: Warning:
This IR is not well formed: DataflowVar lv is used outside DataflowBlock.
[11:36:43] /home/spark/tvm/src/relax/analysis/well_formed.cc:116: Warning:
This IR is not well formed: DataflowVar lv is not defined.
```
### Ideas
In our internal discussion with @psrivas2 @slyubomirsky @yongwww, we could
come up with three options:
O1: insert `R.output` implicitly for those local variables
O2: require explicit `R.output` annotation
O3: remove lv from tensor struct info (e.g., folding, match_cast)
We would like to hear more thoughts from the community on this matter.
Thank you in advance!
--
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]