MasterJH5574 commented on PR #16732:
URL: https://github.com/apache/tvm/pull/16732#issuecomment-2029063222

   Hi @Lunderberg, it seems that this PR introduces new regression. The 
original issue came from CI in MLC-LLM 
https://ci.mlc.ai/blue/organizations/jenkins/mlc-llm/detail/PR-2068/1/pipeline/.
 And I spent some time adapting your test 
`test_backtrack_if_rewriter_returns_no_op` and reducing it to the minimal I can 
get.
   
   Running the test below
   ```python
   def test_backtrack_if_rewriter_returns_no_op():
       pat_match_no_rewrite = is_op("relax.add")(wildcard(), wildcard())
   
       pat_arg = wildcard()
       pat_zeros = is_op("relax.zeros")(wildcard())
       pat_add = is_op("relax.add")(pat_arg, pat_zeros)
   
       pat = pat_match_no_rewrite | pat_add
   
       def rewriter(expr, matches):
           print(f"matching {pat} to {matches[pat]}")
           assert isinstance(matches[pat], rx.Call)
           if pat_match_no_rewrite in matches:
               return expr   ## <<== return the expr
           elif pat_add in matches:
               return expr   ## <<== also return the expr
           else:
               raise RuntimeError("Pattern matched, but neither branch matched")
   
       @R.function(private=True)
       def before():
           with R.dataflow():
               A = R.ones([64, 128], "int32")
               B = R.zeros([64, 128], "int32")
               C = R.add(A, B)
   
               R.output(C)
           return C
   
       after = rewrite_call(pat, rewriter, before)
   ```
   will yield the following output:
   ```
   matching OrPattern(Op(relax.add)(*, *) | Op(relax.add)(*, 
Op(relax.zeros)(*))) to R.add(A, B)
   matching OrPattern(Op(relax.add)(*, *) | Op(relax.add)(*, 
Op(relax.zeros)(*))) to R.add(A, B)
   matching OrPattern(Op(relax.add)(*, *) | Op(relax.add)(*, 
Op(relax.zeros)(*))) to C
   [22:36:29] /home/ruihang/Workspace/tvm/src/relax/ir/block_builder.cc:65: 
Warning: BlockBuilder destroyed with remaining blocks!
   Traceback (most recent call last):
     File 
"/home/ruihang/Workspace/tvm/tests/python/relax/test_dataflow_pattern.py", line 
1949, in <module>
       test_backtrack_if_rewriter_returns_no_op()
     File 
"/home/ruihang/Workspace/tvm/tests/python/relax/test_dataflow_pattern.py", line 
1945, in test_backtrack_if_rewriter_returns_no_op
       after = rewrite_call(pat, rewriter, before)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File "/home/ruihang/Workspace/tvm/python/tvm/relax/dpl/rewrite.py", line 
59, in rewrite_call
       return ffi.rewrite_call(pattern, rewriter, func)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File "tvm/_ffi/_cython/./packed_func.pxi", line 332, in 
tvm._ffi._cy3.core.PackedFuncBase.__call__
     File "tvm/_ffi/_cython/./packed_func.pxi", line 263, in 
tvm._ffi._cy3.core.FuncCall
     File "tvm/_ffi/_cython/./packed_func.pxi", line 252, in 
tvm._ffi._cy3.core.FuncCall3
     File "tvm/_ffi/_cython/./base.pxi", line 182, in 
tvm._ffi._cy3.core.CHECK_CALL
     File "/home/ruihang/Workspace/tvm/python/tvm/_ffi/base.py", line 481, in 
raise_last_ffi_error
       raise py_err
     File "tvm/_ffi/_cython/./packed_func.pxi", line 56, in 
tvm._ffi._cy3.core.tvm_callback
     File 
"/home/ruihang/Workspace/tvm/tests/python/relax/test_dataflow_pattern.py", line 
1921, in rewriter
       assert isinstance(matches[pat], rx.Call)
   AssertionError
   ```
   
   As you can see in the error message, with this PR, the pattern matcher 
mapped an `add` to a single Var. This breaks our assumption that what matched 
is always an `add`. Would you mind helping dig and fix this issue? Thanks in 
ahead.


-- 
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: commits-unsubscr...@tvm.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to