lightzhan-intellif opened a new pull request, #13629:
URL: https://github.com/apache/tvm/pull/13629
This PR tries to fix the crash of parser when the old value of a var is an
array but the new value is not. For example:
```python
from tvm.script import tir as T
def func_wrapper(shape, dtype):
@T.prim_func
def test_case():
a = T.alloc_buffer(shape, dtype=dtype)
return test_case
if __name__ == "__main__":
a = np.zeros((10, 10), dtype="int8")
print(func_wrapper((256, 256), dtype="int8").script())
```
In the above code, there are two assignment to var 'a'. In the global scope,
its value is a numpy array. But it is a Buffer in the prim function. There is a
table named 'name2value' to track the value of vars like 'a' here.
When the parser want to update its value, it will compare the value between
the new and the old assignment. Here the problem comes. When we use '==' to
compare an array with a value, the result is an array too, which can not be
used as a condition of a if stmt directly. So, the code above will emit an
error:
```shell
error: The truth value of an array with more than one element is ambiguous.
Use a.any() or a.all()
--> /workspace/code_newest/tvm/private_test/test_meta_programming.py:16:9
|
16 | a = T.alloc_buffer(shape, dtype=dtype)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
```
This PR fixes this by change "==" to "is".
--
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]