TVMScript also provide `doc.NodeVisitor` and `doc.NodeTransformer` for AST 
level mutations. In our private fork we collect all lhs variables with multiple 
`Assign` or `AugAssign` bindings. They are implicitly transformed to scalar 
buffer load & store during parsing to structure same as @spectrometerHBH's 
answer.

```python
from tvm.script import tir as T

@T.prim_func
def function(X: T.Buffer([16], "int32")):
    v = 0
    X[0] = v
    for i in range(10):
        v = i
        X[i + 1] = v
    
print(function)

# default tir parser output
# different assignment to `v` treat as new let bindings
@T.prim_func
def function(X: T.Buffer((16,), "int32")):
    v: T.int32 = 0
    X[0] = v
    for i in range(10):
        v_1: T.int32 = i
        X[i + 1] = v_1

# scalar transformed output
@T.prim_func
def function(X: T.Buffer((16,), "int32")):
    # with T.block("root"):
    v = T.alloc_buffer((1,), "int32")
    v[0] = 0
    X[0] = v[0]
    for i in range(10):
        v[0] = i
        X[i + 1] = v[0]
```

In llvm-based backends, we could also introduce new storage scope or someother 
annotations to ensure the scalar buffer allocation map to alloca and finally 
transform to SSA value via `mem2reg`.

One important note is though this behavior is more "pythonic", it break the 
concise scoping behaviour for default IR parsing. And it may be hard to keep 
round trip property. So from my understanding it could be useful when we use 
TVMScript as a programming language, but may not  be proper or default 
behaviour for TVMScript's origin serving purpose.





---
[Visit 
Topic](https://discuss.tvm.apache.org/t/how-to-design-a-local-variable/18490/3) 
to respond.

You are receiving this because you enabled mailing list mode.

To unsubscribe from these emails, [click 
here](https://discuss.tvm.apache.org/email/unsubscribe/45c1cfcbc90a272d36cfca1a92438166918a16175a51f99e467659abbda7d9aa).

Reply via email to